@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
package/dist/cli/utils/viewer.js
DELETED
|
@@ -1,96 +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 chalk from "chalk";
|
|
7
|
-
import { AnalyticsService } from "../../features/analytics/core/analytics-service.js";
|
|
8
|
-
async function displayAnalyticsDashboard(projectPath) {
|
|
9
|
-
const service = new AnalyticsService(projectPath || process.cwd());
|
|
10
|
-
try {
|
|
11
|
-
await service.syncFromTaskStore();
|
|
12
|
-
const state = await service.getDashboardState();
|
|
13
|
-
const { metrics, recentTasks, teamMetrics } = state;
|
|
14
|
-
console.clear();
|
|
15
|
-
console.log(chalk.bold.cyan("\nStackMemory Analytics Dashboard\n"));
|
|
16
|
-
console.log(chalk.gray("\u2500".repeat(50)));
|
|
17
|
-
console.log(chalk.bold.white("\nKey Metrics\n"));
|
|
18
|
-
const metricsDisplay = [
|
|
19
|
-
["Total Tasks", metrics.totalTasks],
|
|
20
|
-
["Completed", chalk.green(metrics.completedTasks)],
|
|
21
|
-
["In Progress", chalk.yellow(metrics.inProgressTasks)],
|
|
22
|
-
["Blocked", chalk.red(metrics.blockedTasks)],
|
|
23
|
-
["Completion Rate", `${metrics.completionRate.toFixed(1)}%`],
|
|
24
|
-
["Avg Time to Complete", formatDuration(metrics.averageTimeToComplete)],
|
|
25
|
-
["Effort Accuracy", `${metrics.effortAccuracy.toFixed(0)}%`],
|
|
26
|
-
["Blocking Issues", metrics.blockingIssuesCount]
|
|
27
|
-
];
|
|
28
|
-
metricsDisplay.forEach(([label, value]) => {
|
|
29
|
-
console.log(` ${chalk.gray(String(label).padEnd(20))} ${value}`);
|
|
30
|
-
});
|
|
31
|
-
if (metrics.velocityTrend.length > 0) {
|
|
32
|
-
console.log(chalk.bold.white("\n\u{1F4C9} Velocity Trend (last 7 days)\n"));
|
|
33
|
-
const maxVelocity = Math.max(...metrics.velocityTrend);
|
|
34
|
-
const scale = maxVelocity > 0 ? 10 / maxVelocity : 1;
|
|
35
|
-
metrics.velocityTrend.slice(-7).forEach((velocity, i) => {
|
|
36
|
-
const bar = "\u2588".repeat(Math.round(velocity * scale));
|
|
37
|
-
const day = /* @__PURE__ */ new Date();
|
|
38
|
-
day.setDate(day.getDate() - (6 - i));
|
|
39
|
-
console.log(
|
|
40
|
-
` ${day.toLocaleDateString("en", { weekday: "short" }).padEnd(4)} ${bar} ${velocity}`
|
|
41
|
-
);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
if (recentTasks.length > 0) {
|
|
45
|
-
console.log(chalk.bold.white("\nRecent Tasks\n"));
|
|
46
|
-
recentTasks.slice(0, 5).forEach((task) => {
|
|
47
|
-
const statePrefix = {
|
|
48
|
-
completed: "[DONE]",
|
|
49
|
-
in_progress: "[PROG]",
|
|
50
|
-
blocked: "[BLCK]",
|
|
51
|
-
todo: "[TODO]"
|
|
52
|
-
}[task.state];
|
|
53
|
-
const priorityColor = {
|
|
54
|
-
urgent: chalk.red,
|
|
55
|
-
high: chalk.yellow,
|
|
56
|
-
medium: chalk.blue,
|
|
57
|
-
low: chalk.gray
|
|
58
|
-
}[task.priority];
|
|
59
|
-
console.log(
|
|
60
|
-
` ${statePrefix} ${priorityColor(`[${task.priority.toUpperCase()}]`)} ${task.title.slice(0, 50)}`
|
|
61
|
-
);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
if (teamMetrics.length > 0) {
|
|
65
|
-
console.log(chalk.bold.white("\n\u{1F465} Team Performance\n"));
|
|
66
|
-
teamMetrics.slice(0, 3).forEach((member) => {
|
|
67
|
-
const bar = "\u2593".repeat(Math.round(member.contributionPercentage / 10));
|
|
68
|
-
console.log(
|
|
69
|
-
` ${member.userName.padEnd(15)} ${bar} ${member.contributionPercentage.toFixed(0)}% (${member.individualMetrics.completedTasks} tasks)`
|
|
70
|
-
);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
console.log(chalk.gray("\n" + "\u2500".repeat(50)));
|
|
74
|
-
console.log(
|
|
75
|
-
chalk.gray(`Last updated: ${state.lastUpdated.toLocaleString()}`)
|
|
76
|
-
);
|
|
77
|
-
console.log();
|
|
78
|
-
} finally {
|
|
79
|
-
service.close();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function formatDuration(ms) {
|
|
83
|
-
if (ms === 0) return "N/A";
|
|
84
|
-
const hours = Math.floor(ms / 36e5);
|
|
85
|
-
const days = Math.floor(hours / 24);
|
|
86
|
-
if (days > 0) return `${days}d ${hours % 24}h`;
|
|
87
|
-
if (hours > 0) return `${hours}h`;
|
|
88
|
-
return "<1h";
|
|
89
|
-
}
|
|
90
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
91
|
-
displayAnalyticsDashboard().catch(console.error);
|
|
92
|
-
}
|
|
93
|
-
export {
|
|
94
|
-
displayAnalyticsDashboard
|
|
95
|
-
};
|
|
96
|
-
//# sourceMappingURL=viewer.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/utils/viewer.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\nimport chalk from 'chalk';\nimport { AnalyticsService } from '../../features/analytics/core/analytics-service.js';\n\nexport async function displayAnalyticsDashboard(\n projectPath?: string\n): Promise<void> {\n const service = new AnalyticsService(projectPath || process.cwd());\n\n try {\n // Sync from task store before displaying\n await service.syncFromTaskStore();\n const state = await service.getDashboardState();\n const { metrics, recentTasks, teamMetrics } = state;\n\n console.clear();\n console.log(chalk.bold.cyan('\\nStackMemory Analytics Dashboard\\n'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n\n // Key Metrics\n console.log(chalk.bold.white('\\nKey Metrics\\n'));\n\n const metricsDisplay = [\n ['Total Tasks', metrics.totalTasks],\n ['Completed', chalk.green(metrics.completedTasks)],\n ['In Progress', chalk.yellow(metrics.inProgressTasks)],\n ['Blocked', chalk.red(metrics.blockedTasks)],\n ['Completion Rate', `${metrics.completionRate.toFixed(1)}%`],\n ['Avg Time to Complete', formatDuration(metrics.averageTimeToComplete)],\n ['Effort Accuracy', `${metrics.effortAccuracy.toFixed(0)}%`],\n ['Blocking Issues', metrics.blockingIssuesCount],\n ];\n\n metricsDisplay.forEach(([label, value]) => {\n console.log(` ${chalk.gray(String(label).padEnd(20))} ${value}`);\n });\n\n // Velocity Trend (mini chart)\n if (metrics.velocityTrend.length > 0) {\n console.log(chalk.bold.white('\\n\uD83D\uDCC9 Velocity Trend (last 7 days)\\n'));\n const maxVelocity = Math.max(...metrics.velocityTrend);\n const scale = maxVelocity > 0 ? 10 / maxVelocity : 1;\n\n metrics.velocityTrend.slice(-7).forEach((velocity, i) => {\n const bar = '\u2588'.repeat(Math.round(velocity * scale));\n const day = new Date();\n day.setDate(day.getDate() - (6 - i));\n console.log(\n ` ${day.toLocaleDateString('en', { weekday: 'short' }).padEnd(4)} ${bar} ${velocity}`\n );\n });\n }\n\n // Recent Tasks\n if (recentTasks.length > 0) {\n console.log(chalk.bold.white('\\nRecent Tasks\\n'));\n recentTasks.slice(0, 5).forEach((task) => {\n const statePrefix = {\n completed: '[DONE]',\n in_progress: '[PROG]',\n blocked: '[BLCK]',\n todo: '[TODO]',\n }[task.state];\n\n const priorityColor = {\n urgent: chalk.red,\n high: chalk.yellow,\n medium: chalk.blue,\n low: chalk.gray,\n }[task.priority];\n\n console.log(\n ` ${statePrefix} ${priorityColor(`[${task.priority.toUpperCase()}]`)} ${task.title.slice(0, 50)}`\n );\n });\n }\n\n // Team Performance\n if (teamMetrics.length > 0) {\n console.log(chalk.bold.white('\\n\uD83D\uDC65 Team Performance\\n'));\n teamMetrics.slice(0, 3).forEach((member) => {\n const bar = '\u2593'.repeat(Math.round(member.contributionPercentage / 10));\n console.log(\n ` ${member.userName.padEnd(15)} ${bar} ${member.contributionPercentage.toFixed(0)}% (${member.individualMetrics.completedTasks} tasks)`\n );\n });\n }\n\n console.log(chalk.gray('\\n' + '\u2500'.repeat(50)));\n console.log(\n chalk.gray(`Last updated: ${state.lastUpdated.toLocaleString()}`)\n );\n console.log();\n } finally {\n service.close();\n }\n}\n\nfunction formatDuration(ms: number): string {\n if (ms === 0) return 'N/A';\n const hours = Math.floor(ms / 3600000);\n const days = Math.floor(hours / 24);\n if (days > 0) return `${days}d ${hours % 24}h`;\n if (hours > 0) return `${hours}h`;\n return '<1h';\n}\n\n// Allow direct execution\nif (import.meta.url === `file://${process.argv[1]}`) {\n displayAnalyticsDashboard().catch(console.error);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,378 +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 { logger } from "../monitoring/logger.js";
|
|
6
|
-
class TeamAnalytics {
|
|
7
|
-
teamMembers = /* @__PURE__ */ new Map();
|
|
8
|
-
handoffHistory = [];
|
|
9
|
-
mergeHistory = [];
|
|
10
|
-
analyticsCache = /* @__PURE__ */ new Map();
|
|
11
|
-
/**
|
|
12
|
-
* Add or update team member
|
|
13
|
-
*/
|
|
14
|
-
addTeamMember(member) {
|
|
15
|
-
this.teamMembers.set(member.userId, member);
|
|
16
|
-
logger.info(`Team member added: ${member.userId}`, {
|
|
17
|
-
role: member.role,
|
|
18
|
-
skills: member.skills
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Record handoff activity
|
|
23
|
-
*/
|
|
24
|
-
recordHandoffActivity(progress, metadata) {
|
|
25
|
-
this.handoffHistory.push(progress);
|
|
26
|
-
this.invalidateCache("handoff");
|
|
27
|
-
logger.debug(`Handoff activity recorded: ${progress.requestId}`, {
|
|
28
|
-
status: progress.status,
|
|
29
|
-
transferredFrames: progress.transferredFrames
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Record merge activity
|
|
34
|
-
*/
|
|
35
|
-
recordMergeActivity(session) {
|
|
36
|
-
this.mergeHistory.push(session);
|
|
37
|
-
this.invalidateCache("merge");
|
|
38
|
-
logger.debug(`Merge activity recorded: ${session.sessionId}`, {
|
|
39
|
-
conflicts: session.conflicts.length,
|
|
40
|
-
resolutions: session.resolutions.length
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Generate comprehensive collaboration metrics
|
|
45
|
-
*/
|
|
46
|
-
async generateCollaborationMetrics(timeRange) {
|
|
47
|
-
const cacheKey = `metrics-${timeRange.start.toISOString()}-${timeRange.end.toISOString()}`;
|
|
48
|
-
if (this.analyticsCache.has(cacheKey)) {
|
|
49
|
-
return this.analyticsCache.get(cacheKey);
|
|
50
|
-
}
|
|
51
|
-
const metrics = {
|
|
52
|
-
timeRange,
|
|
53
|
-
teamMetrics: await this.calculateTeamMetrics(timeRange),
|
|
54
|
-
handoffMetrics: await this.calculateHandoffMetrics(timeRange),
|
|
55
|
-
conflictMetrics: await this.calculateConflictMetrics(timeRange),
|
|
56
|
-
productivityMetrics: await this.calculateProductivityMetrics(timeRange)
|
|
57
|
-
};
|
|
58
|
-
this.analyticsCache.set(cacheKey, metrics);
|
|
59
|
-
return metrics;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Calculate team-level metrics
|
|
63
|
-
*/
|
|
64
|
-
async calculateTeamMetrics(timeRange) {
|
|
65
|
-
const allMembers = Array.from(this.teamMembers.values());
|
|
66
|
-
const activeMembers = allMembers.filter(
|
|
67
|
-
(m) => m.lastActive >= timeRange.start && m.lastActive <= timeRange.end
|
|
68
|
-
);
|
|
69
|
-
const newMembers = allMembers.filter(
|
|
70
|
-
(m) => m.joinedAt >= timeRange.start && m.joinedAt <= timeRange.end
|
|
71
|
-
);
|
|
72
|
-
const previousPeriodStart = new Date(
|
|
73
|
-
timeRange.start.getTime() - (timeRange.end.getTime() - timeRange.start.getTime())
|
|
74
|
-
);
|
|
75
|
-
const previousActiveMembers = allMembers.filter(
|
|
76
|
-
(m) => m.lastActive >= previousPeriodStart && m.lastActive < timeRange.start
|
|
77
|
-
);
|
|
78
|
-
const retainedMembers = activeMembers.filter(
|
|
79
|
-
(m) => previousActiveMembers.find((pm) => pm.userId === m.userId)
|
|
80
|
-
);
|
|
81
|
-
const retentionRate = previousActiveMembers.length > 0 ? retainedMembers.length / previousActiveMembers.length : 1;
|
|
82
|
-
return {
|
|
83
|
-
totalMembers: allMembers.length,
|
|
84
|
-
activeMembers: activeMembers.length,
|
|
85
|
-
newMembers: newMembers.length,
|
|
86
|
-
retentionRate
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Calculate handoff-specific metrics
|
|
91
|
-
*/
|
|
92
|
-
async calculateHandoffMetrics(timeRange) {
|
|
93
|
-
const relevantHandoffs = this.handoffHistory.filter((h) => {
|
|
94
|
-
return true;
|
|
95
|
-
});
|
|
96
|
-
const successfulHandoffs = relevantHandoffs.filter(
|
|
97
|
-
(h) => h.status === "completed"
|
|
98
|
-
);
|
|
99
|
-
const rejectedHandoffs = relevantHandoffs.filter(
|
|
100
|
-
(h) => h.status === "failed"
|
|
101
|
-
);
|
|
102
|
-
const averageApprovalTime = this.calculateAverageTime(
|
|
103
|
-
successfulHandoffs,
|
|
104
|
-
"approval"
|
|
105
|
-
);
|
|
106
|
-
const handoffPairs = this.analyzeHandoffPairs(relevantHandoffs);
|
|
107
|
-
return {
|
|
108
|
-
totalHandoffs: relevantHandoffs.length,
|
|
109
|
-
successfulHandoffs: successfulHandoffs.length,
|
|
110
|
-
averageApprovalTime,
|
|
111
|
-
rejectionRate: relevantHandoffs.length > 0 ? rejectedHandoffs.length / relevantHandoffs.length : 0,
|
|
112
|
-
mostActiveHandoffPairs: handoffPairs
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Calculate conflict resolution metrics
|
|
117
|
-
*/
|
|
118
|
-
async calculateConflictMetrics(timeRange) {
|
|
119
|
-
const relevantMerges = this.mergeHistory.filter((m) => {
|
|
120
|
-
return m.startedAt >= timeRange.start && m.startedAt <= timeRange.end;
|
|
121
|
-
});
|
|
122
|
-
const totalConflicts = relevantMerges.reduce(
|
|
123
|
-
(sum, m) => sum + m.conflicts.length,
|
|
124
|
-
0
|
|
125
|
-
);
|
|
126
|
-
const autoResolved = relevantMerges.reduce(
|
|
127
|
-
(sum, m) => sum + m.metadata.autoResolvedConflicts,
|
|
128
|
-
0
|
|
129
|
-
);
|
|
130
|
-
const manualResolved = relevantMerges.reduce(
|
|
131
|
-
(sum, m) => sum + m.metadata.manualResolvedConflicts,
|
|
132
|
-
0
|
|
133
|
-
);
|
|
134
|
-
const averageResolutionTime = this.calculateAverageResolutionTime(relevantMerges);
|
|
135
|
-
const conflictHotspots = this.analyzeConflictHotspots(relevantMerges);
|
|
136
|
-
return {
|
|
137
|
-
totalConflicts,
|
|
138
|
-
autoResolvedConflicts: autoResolved,
|
|
139
|
-
manualResolvedConflicts: manualResolved,
|
|
140
|
-
averageResolutionTime,
|
|
141
|
-
conflictHotspots
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Calculate productivity metrics
|
|
146
|
-
*/
|
|
147
|
-
async calculateProductivityMetrics(timeRange) {
|
|
148
|
-
return {
|
|
149
|
-
frameCreationRate: 15.5,
|
|
150
|
-
// frames per day
|
|
151
|
-
frameCompletionRate: 12.3,
|
|
152
|
-
// frames per day
|
|
153
|
-
averageFrameLifecycle: 2.5,
|
|
154
|
-
// days
|
|
155
|
-
collaborativeFramePercentage: 0.65
|
|
156
|
-
// 65% of frames involve collaboration
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Generate actionable insights from metrics
|
|
161
|
-
*/
|
|
162
|
-
async generateInsights(metrics) {
|
|
163
|
-
const insights = [];
|
|
164
|
-
if (metrics.handoffMetrics.rejectionRate > 0.3) {
|
|
165
|
-
insights.push({
|
|
166
|
-
id: `high-rejection-${Date.now()}`,
|
|
167
|
-
type: "risk",
|
|
168
|
-
severity: "high",
|
|
169
|
-
title: "High Handoff Rejection Rate",
|
|
170
|
-
description: `${Math.round(metrics.handoffMetrics.rejectionRate * 100)}% of handoffs are being rejected`,
|
|
171
|
-
actionItems: [
|
|
172
|
-
"Review handoff quality guidelines",
|
|
173
|
-
"Implement pre-handoff checklists",
|
|
174
|
-
"Provide additional training on code review standards"
|
|
175
|
-
],
|
|
176
|
-
affectedUsers: [],
|
|
177
|
-
// Would identify specific users
|
|
178
|
-
metrics: { rejectionRate: metrics.handoffMetrics.rejectionRate },
|
|
179
|
-
generatedAt: /* @__PURE__ */ new Date()
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
if (metrics.handoffMetrics.averageApprovalTime > 24 * 60 * 60 * 1e3) {
|
|
183
|
-
insights.push({
|
|
184
|
-
id: `slow-approval-${Date.now()}`,
|
|
185
|
-
type: "opportunity",
|
|
186
|
-
severity: "medium",
|
|
187
|
-
title: "Slow Handoff Approval Times",
|
|
188
|
-
description: "Average approval time exceeds 24 hours",
|
|
189
|
-
actionItems: [
|
|
190
|
-
"Set up approval time SLAs",
|
|
191
|
-
"Implement automated reminders",
|
|
192
|
-
"Add more reviewers to distribute load"
|
|
193
|
-
],
|
|
194
|
-
affectedUsers: [],
|
|
195
|
-
metrics: {
|
|
196
|
-
averageApprovalTime: metrics.handoffMetrics.averageApprovalTime
|
|
197
|
-
},
|
|
198
|
-
generatedAt: /* @__PURE__ */ new Date()
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
if (metrics.conflictMetrics.manualResolvedConflicts > metrics.conflictMetrics.autoResolvedConflicts) {
|
|
202
|
-
insights.push({
|
|
203
|
-
id: `high-conflicts-${Date.now()}`,
|
|
204
|
-
type: "risk",
|
|
205
|
-
severity: "medium",
|
|
206
|
-
title: "High Manual Conflict Resolution",
|
|
207
|
-
description: "Most conflicts require manual resolution",
|
|
208
|
-
actionItems: [
|
|
209
|
-
"Review merge policies to increase auto-resolution",
|
|
210
|
-
"Improve frame naming and organization conventions",
|
|
211
|
-
"Implement conflict prevention guidelines"
|
|
212
|
-
],
|
|
213
|
-
affectedUsers: [],
|
|
214
|
-
metrics: {
|
|
215
|
-
manualConflicts: metrics.conflictMetrics.manualResolvedConflicts,
|
|
216
|
-
autoConflicts: metrics.conflictMetrics.autoResolvedConflicts
|
|
217
|
-
},
|
|
218
|
-
generatedAt: /* @__PURE__ */ new Date()
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
if (metrics.productivityMetrics.collaborativeFramePercentage > 0.8) {
|
|
222
|
-
insights.push({
|
|
223
|
-
id: `high-collaboration-${Date.now()}`,
|
|
224
|
-
type: "success",
|
|
225
|
-
severity: "low",
|
|
226
|
-
title: "Excellent Collaboration Rate",
|
|
227
|
-
description: `${Math.round(metrics.productivityMetrics.collaborativeFramePercentage * 100)}% of frames involve collaboration`,
|
|
228
|
-
actionItems: [
|
|
229
|
-
"Document successful collaboration patterns",
|
|
230
|
-
"Share best practices with other teams",
|
|
231
|
-
"Consider mentoring programs"
|
|
232
|
-
],
|
|
233
|
-
affectedUsers: [],
|
|
234
|
-
metrics: {
|
|
235
|
-
collaborationRate: metrics.productivityMetrics.collaborativeFramePercentage
|
|
236
|
-
},
|
|
237
|
-
generatedAt: /* @__PURE__ */ new Date()
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
return insights;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Identify workflow patterns from team activity
|
|
244
|
-
*/
|
|
245
|
-
async identifyWorkflowPatterns() {
|
|
246
|
-
const patterns = [];
|
|
247
|
-
patterns.push({
|
|
248
|
-
id: "feature-development",
|
|
249
|
-
name: "Feature Development Workflow",
|
|
250
|
-
description: "Individual development \u2192 Review \u2192 Merge to shared stack",
|
|
251
|
-
frequency: this.calculatePatternFrequency("feature-development"),
|
|
252
|
-
participants: this.getPatternParticipants("feature-development"),
|
|
253
|
-
steps: [
|
|
254
|
-
{
|
|
255
|
-
action: "Create individual frames",
|
|
256
|
-
averageTime: 4 * 60 * 60 * 1e3,
|
|
257
|
-
successRate: 0.95
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
action: "Request handoff",
|
|
261
|
-
averageTime: 5 * 60 * 1e3,
|
|
262
|
-
successRate: 0.9
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
action: "Review and approve",
|
|
266
|
-
averageTime: 2 * 60 * 60 * 1e3,
|
|
267
|
-
successRate: 0.85
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
action: "Merge to shared stack",
|
|
271
|
-
averageTime: 10 * 60 * 1e3,
|
|
272
|
-
successRate: 0.95
|
|
273
|
-
}
|
|
274
|
-
],
|
|
275
|
-
efficiency: 0.85,
|
|
276
|
-
recommendations: [
|
|
277
|
-
"Standardize review criteria to reduce rejection rate",
|
|
278
|
-
"Implement automated checks before handoff request"
|
|
279
|
-
]
|
|
280
|
-
});
|
|
281
|
-
patterns.push({
|
|
282
|
-
id: "pair-programming",
|
|
283
|
-
name: "Pair Programming Workflow",
|
|
284
|
-
description: "Direct collaboration in shared stack",
|
|
285
|
-
frequency: this.calculatePatternFrequency("pair-programming"),
|
|
286
|
-
participants: this.getPatternParticipants("pair-programming"),
|
|
287
|
-
steps: [
|
|
288
|
-
{
|
|
289
|
-
action: "Create shared stack",
|
|
290
|
-
averageTime: 2 * 60 * 1e3,
|
|
291
|
-
successRate: 0.99
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
action: "Collaborative development",
|
|
295
|
-
averageTime: 6 * 60 * 60 * 1e3,
|
|
296
|
-
successRate: 0.9
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
action: "Resolve conflicts in real-time",
|
|
300
|
-
averageTime: 15 * 60 * 1e3,
|
|
301
|
-
successRate: 0.95
|
|
302
|
-
}
|
|
303
|
-
],
|
|
304
|
-
efficiency: 0.92,
|
|
305
|
-
recommendations: [
|
|
306
|
-
"Excellent pattern - consider promoting for complex features",
|
|
307
|
-
"Document best practices for real-time collaboration"
|
|
308
|
-
]
|
|
309
|
-
});
|
|
310
|
-
return patterns;
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Get team performance dashboard data
|
|
314
|
-
*/
|
|
315
|
-
async getDashboardData(timeRange) {
|
|
316
|
-
const metrics = await this.generateCollaborationMetrics(timeRange);
|
|
317
|
-
const insights = await this.generateInsights(metrics);
|
|
318
|
-
const patterns = await this.identifyWorkflowPatterns();
|
|
319
|
-
const topCollaborators = this.calculateTopCollaborators(timeRange);
|
|
320
|
-
return {
|
|
321
|
-
metrics,
|
|
322
|
-
insights,
|
|
323
|
-
patterns,
|
|
324
|
-
topCollaborators
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
// Helper methods
|
|
328
|
-
invalidateCache(type) {
|
|
329
|
-
const keysToRemove = Array.from(this.analyticsCache.keys()).filter(
|
|
330
|
-
(key) => key.includes(type)
|
|
331
|
-
);
|
|
332
|
-
keysToRemove.forEach((key) => this.analyticsCache.delete(key));
|
|
333
|
-
}
|
|
334
|
-
calculateAverageTime(items, type) {
|
|
335
|
-
return 2 * 60 * 60 * 1e3;
|
|
336
|
-
}
|
|
337
|
-
analyzeHandoffPairs(handoffs) {
|
|
338
|
-
return [
|
|
339
|
-
{ source: "alice", target: "bob", count: 15, successRate: 0.87 },
|
|
340
|
-
{ source: "bob", target: "charlie", count: 12, successRate: 0.92 }
|
|
341
|
-
];
|
|
342
|
-
}
|
|
343
|
-
calculateAverageResolutionTime(merges) {
|
|
344
|
-
const completedMerges = merges.filter((m) => m.completedAt && m.startedAt);
|
|
345
|
-
if (completedMerges.length === 0) return 0;
|
|
346
|
-
const totalTime = completedMerges.reduce(
|
|
347
|
-
(sum, m) => sum + (m.completedAt.getTime() - m.startedAt.getTime()),
|
|
348
|
-
0
|
|
349
|
-
);
|
|
350
|
-
return totalTime / completedMerges.length;
|
|
351
|
-
}
|
|
352
|
-
analyzeConflictHotspots(merges) {
|
|
353
|
-
return [
|
|
354
|
-
{ frameType: "implementation", conflictType: "content", frequency: 25 },
|
|
355
|
-
{ frameType: "task", conflictType: "metadata", frequency: 15 },
|
|
356
|
-
{ frameType: "test", conflictType: "sequence", frequency: 10 }
|
|
357
|
-
];
|
|
358
|
-
}
|
|
359
|
-
calculatePatternFrequency(patternId) {
|
|
360
|
-
return Math.random() * 50;
|
|
361
|
-
}
|
|
362
|
-
getPatternParticipants(patternId) {
|
|
363
|
-
return Array.from(this.teamMembers.keys()).slice(0, 3);
|
|
364
|
-
}
|
|
365
|
-
calculateTopCollaborators(timeRange) {
|
|
366
|
-
return Array.from(this.teamMembers.entries()).map(([userId, member]) => ({
|
|
367
|
-
userId,
|
|
368
|
-
handoffsInitiated: Math.floor(Math.random() * 20),
|
|
369
|
-
handoffsApproved: Math.floor(Math.random() * 15),
|
|
370
|
-
conflictsResolved: Math.floor(Math.random() * 10),
|
|
371
|
-
collaborationScore: Math.random()
|
|
372
|
-
})).sort((a, b) => b.collaborationScore - a.collaborationScore);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
export {
|
|
376
|
-
TeamAnalytics
|
|
377
|
-
};
|
|
378
|
-
//# sourceMappingURL=team-analytics.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/analytics/team-analytics.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Team Analytics - Phase 3 Collaboration Insights\n * Provides analytics and insights for team collaboration patterns\n */\n\nimport type {\n StackContext,\n HandoffRequest,\n} from '../context/dual-stack-manager.js';\nimport type {\n HandoffProgress,\n HandoffMetadata,\n} from '../context/frame-handoff-manager.js';\nimport type { MergeSession } from '../context/stack-merge-resolver.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport interface TeamMember {\n userId: string;\n name: string;\n role: 'developer' | 'lead' | 'architect' | 'qa' | 'designer';\n joinedAt: Date;\n lastActive: Date;\n skills: string[];\n permissions: {\n canCreateStacks: boolean;\n canApproveHandoffs: boolean;\n canMergeConflicts: boolean;\n };\n}\n\nexport interface CollaborationMetrics {\n timeRange: { start: Date; end: Date };\n teamMetrics: {\n totalMembers: number;\n activeMembers: number;\n newMembers: number;\n retentionRate: number;\n };\n handoffMetrics: {\n totalHandoffs: number;\n successfulHandoffs: number;\n averageApprovalTime: number;\n rejectionRate: number;\n mostActiveHandoffPairs: Array<{\n source: string;\n target: string;\n count: number;\n successRate: number;\n }>;\n };\n conflictMetrics: {\n totalConflicts: number;\n autoResolvedConflicts: number;\n manualResolvedConflicts: number;\n averageResolutionTime: number;\n conflictHotspots: Array<{\n frameType: string;\n conflictType: string;\n frequency: number;\n }>;\n };\n productivityMetrics: {\n frameCreationRate: number;\n frameCompletionRate: number;\n averageFrameLifecycle: number;\n collaborativeFramePercentage: number;\n };\n}\n\nexport interface TeamInsight {\n id: string;\n type: 'opportunity' | 'risk' | 'success' | 'recommendation';\n severity: 'low' | 'medium' | 'high';\n title: string;\n description: string;\n actionItems: string[];\n affectedUsers: string[];\n metrics: Record<string, number>;\n generatedAt: Date;\n}\n\nexport interface WorkflowPattern {\n id: string;\n name: string;\n description: string;\n frequency: number;\n participants: string[];\n steps: Array<{\n action: string;\n averageTime: number;\n successRate: number;\n }>;\n efficiency: number; // 0-1 score\n recommendations: string[];\n}\n\nexport class TeamAnalytics {\n private teamMembers: Map<string, TeamMember> = new Map();\n private handoffHistory: HandoffProgress[] = [];\n private mergeHistory: MergeSession[] = [];\n private analyticsCache: Map<string, any> = new Map();\n\n /**\n * Add or update team member\n */\n addTeamMember(member: TeamMember): void {\n this.teamMembers.set(member.userId, member);\n logger.info(`Team member added: ${member.userId}`, {\n role: member.role,\n skills: member.skills,\n });\n }\n\n /**\n * Record handoff activity\n */\n recordHandoffActivity(\n progress: HandoffProgress,\n metadata?: HandoffMetadata\n ): void {\n this.handoffHistory.push(progress);\n this.invalidateCache('handoff');\n\n logger.debug(`Handoff activity recorded: ${progress.requestId}`, {\n status: progress.status,\n transferredFrames: progress.transferredFrames,\n });\n }\n\n /**\n * Record merge activity\n */\n recordMergeActivity(session: MergeSession): void {\n this.mergeHistory.push(session);\n this.invalidateCache('merge');\n\n logger.debug(`Merge activity recorded: ${session.sessionId}`, {\n conflicts: session.conflicts.length,\n resolutions: session.resolutions.length,\n });\n }\n\n /**\n * Generate comprehensive collaboration metrics\n */\n async generateCollaborationMetrics(timeRange: {\n start: Date;\n end: Date;\n }): Promise<CollaborationMetrics> {\n const cacheKey = `metrics-${timeRange.start.toISOString()}-${timeRange.end.toISOString()}`;\n\n if (this.analyticsCache.has(cacheKey)) {\n return this.analyticsCache.get(cacheKey);\n }\n\n const metrics: CollaborationMetrics = {\n timeRange,\n teamMetrics: await this.calculateTeamMetrics(timeRange),\n handoffMetrics: await this.calculateHandoffMetrics(timeRange),\n conflictMetrics: await this.calculateConflictMetrics(timeRange),\n productivityMetrics: await this.calculateProductivityMetrics(timeRange),\n };\n\n this.analyticsCache.set(cacheKey, metrics);\n return metrics;\n }\n\n /**\n * Calculate team-level metrics\n */\n private async calculateTeamMetrics(timeRange: { start: Date; end: Date }) {\n const allMembers = Array.from(this.teamMembers.values());\n const activeMembers = allMembers.filter(\n (m) => m.lastActive >= timeRange.start && m.lastActive <= timeRange.end\n );\n const newMembers = allMembers.filter(\n (m) => m.joinedAt >= timeRange.start && m.joinedAt <= timeRange.end\n );\n\n // Calculate retention rate (simplified)\n const previousPeriodStart = new Date(\n timeRange.start.getTime() -\n (timeRange.end.getTime() - timeRange.start.getTime())\n );\n const previousActiveMembers = allMembers.filter(\n (m) =>\n m.lastActive >= previousPeriodStart && m.lastActive < timeRange.start\n );\n const retainedMembers = activeMembers.filter((m) =>\n previousActiveMembers.find((pm) => pm.userId === m.userId)\n );\n const retentionRate =\n previousActiveMembers.length > 0\n ? retainedMembers.length / previousActiveMembers.length\n : 1;\n\n return {\n totalMembers: allMembers.length,\n activeMembers: activeMembers.length,\n newMembers: newMembers.length,\n retentionRate,\n };\n }\n\n /**\n * Calculate handoff-specific metrics\n */\n private async calculateHandoffMetrics(timeRange: { start: Date; end: Date }) {\n const relevantHandoffs = this.handoffHistory.filter((h) => {\n // Filter by time range - would need timestamps in actual implementation\n return true; // Placeholder\n });\n\n const successfulHandoffs = relevantHandoffs.filter(\n (h) => h.status === 'completed'\n );\n const rejectedHandoffs = relevantHandoffs.filter(\n (h) => h.status === 'failed'\n );\n\n // Calculate approval time (simplified - would need proper timestamps)\n const averageApprovalTime = this.calculateAverageTime(\n successfulHandoffs,\n 'approval'\n );\n\n // Find most active handoff pairs\n const handoffPairs = this.analyzeHandoffPairs(relevantHandoffs);\n\n return {\n totalHandoffs: relevantHandoffs.length,\n successfulHandoffs: successfulHandoffs.length,\n averageApprovalTime,\n rejectionRate:\n relevantHandoffs.length > 0\n ? rejectedHandoffs.length / relevantHandoffs.length\n : 0,\n mostActiveHandoffPairs: handoffPairs,\n };\n }\n\n /**\n * Calculate conflict resolution metrics\n */\n private async calculateConflictMetrics(timeRange: {\n start: Date;\n end: Date;\n }) {\n const relevantMerges = this.mergeHistory.filter((m) => {\n return m.startedAt >= timeRange.start && m.startedAt <= timeRange.end;\n });\n\n const totalConflicts = relevantMerges.reduce(\n (sum, m) => sum + m.conflicts.length,\n 0\n );\n const autoResolved = relevantMerges.reduce(\n (sum, m) => sum + m.metadata.autoResolvedConflicts,\n 0\n );\n const manualResolved = relevantMerges.reduce(\n (sum, m) => sum + m.metadata.manualResolvedConflicts,\n 0\n );\n\n const averageResolutionTime =\n this.calculateAverageResolutionTime(relevantMerges);\n const conflictHotspots = this.analyzeConflictHotspots(relevantMerges);\n\n return {\n totalConflicts,\n autoResolvedConflicts: autoResolved,\n manualResolvedConflicts: manualResolved,\n averageResolutionTime,\n conflictHotspots,\n };\n }\n\n /**\n * Calculate productivity metrics\n */\n private async calculateProductivityMetrics(timeRange: {\n start: Date;\n end: Date;\n }) {\n // These would be calculated from frame creation/completion data\n // Placeholder implementation\n return {\n frameCreationRate: 15.5, // frames per day\n frameCompletionRate: 12.3, // frames per day\n averageFrameLifecycle: 2.5, // days\n collaborativeFramePercentage: 0.65, // 65% of frames involve collaboration\n };\n }\n\n /**\n * Generate actionable insights from metrics\n */\n async generateInsights(\n metrics: CollaborationMetrics\n ): Promise<TeamInsight[]> {\n const insights: TeamInsight[] = [];\n\n // High rejection rate insight\n if (metrics.handoffMetrics.rejectionRate > 0.3) {\n insights.push({\n id: `high-rejection-${Date.now()}`,\n type: 'risk',\n severity: 'high',\n title: 'High Handoff Rejection Rate',\n description: `${Math.round(metrics.handoffMetrics.rejectionRate * 100)}% of handoffs are being rejected`,\n actionItems: [\n 'Review handoff quality guidelines',\n 'Implement pre-handoff checklists',\n 'Provide additional training on code review standards',\n ],\n affectedUsers: [], // Would identify specific users\n metrics: { rejectionRate: metrics.handoffMetrics.rejectionRate },\n generatedAt: new Date(),\n });\n }\n\n // Slow approval times\n if (metrics.handoffMetrics.averageApprovalTime > 24 * 60 * 60 * 1000) {\n // > 24 hours\n insights.push({\n id: `slow-approval-${Date.now()}`,\n type: 'opportunity',\n severity: 'medium',\n title: 'Slow Handoff Approval Times',\n description: 'Average approval time exceeds 24 hours',\n actionItems: [\n 'Set up approval time SLAs',\n 'Implement automated reminders',\n 'Add more reviewers to distribute load',\n ],\n affectedUsers: [],\n metrics: {\n averageApprovalTime: metrics.handoffMetrics.averageApprovalTime,\n },\n generatedAt: new Date(),\n });\n }\n\n // High conflict rate\n if (\n metrics.conflictMetrics.manualResolvedConflicts >\n metrics.conflictMetrics.autoResolvedConflicts\n ) {\n insights.push({\n id: `high-conflicts-${Date.now()}`,\n type: 'risk',\n severity: 'medium',\n title: 'High Manual Conflict Resolution',\n description: 'Most conflicts require manual resolution',\n actionItems: [\n 'Review merge policies to increase auto-resolution',\n 'Improve frame naming and organization conventions',\n 'Implement conflict prevention guidelines',\n ],\n affectedUsers: [],\n metrics: {\n manualConflicts: metrics.conflictMetrics.manualResolvedConflicts,\n autoConflicts: metrics.conflictMetrics.autoResolvedConflicts,\n },\n generatedAt: new Date(),\n });\n }\n\n // High productivity teams\n if (metrics.productivityMetrics.collaborativeFramePercentage > 0.8) {\n insights.push({\n id: `high-collaboration-${Date.now()}`,\n type: 'success',\n severity: 'low',\n title: 'Excellent Collaboration Rate',\n description: `${Math.round(metrics.productivityMetrics.collaborativeFramePercentage * 100)}% of frames involve collaboration`,\n actionItems: [\n 'Document successful collaboration patterns',\n 'Share best practices with other teams',\n 'Consider mentoring programs',\n ],\n affectedUsers: [],\n metrics: {\n collaborationRate:\n metrics.productivityMetrics.collaborativeFramePercentage,\n },\n generatedAt: new Date(),\n });\n }\n\n return insights;\n }\n\n /**\n * Identify workflow patterns from team activity\n */\n async identifyWorkflowPatterns(): Promise<WorkflowPattern[]> {\n const patterns: WorkflowPattern[] = [];\n\n // Pattern 1: Standard Feature Development\n patterns.push({\n id: 'feature-development',\n name: 'Feature Development Workflow',\n description: 'Individual development \u2192 Review \u2192 Merge to shared stack',\n frequency: this.calculatePatternFrequency('feature-development'),\n participants: this.getPatternParticipants('feature-development'),\n steps: [\n {\n action: 'Create individual frames',\n averageTime: 4 * 60 * 60 * 1000,\n successRate: 0.95,\n },\n {\n action: 'Request handoff',\n averageTime: 5 * 60 * 1000,\n successRate: 0.9,\n },\n {\n action: 'Review and approve',\n averageTime: 2 * 60 * 60 * 1000,\n successRate: 0.85,\n },\n {\n action: 'Merge to shared stack',\n averageTime: 10 * 60 * 1000,\n successRate: 0.95,\n },\n ],\n efficiency: 0.85,\n recommendations: [\n 'Standardize review criteria to reduce rejection rate',\n 'Implement automated checks before handoff request',\n ],\n });\n\n // Pattern 2: Pair Programming\n patterns.push({\n id: 'pair-programming',\n name: 'Pair Programming Workflow',\n description: 'Direct collaboration in shared stack',\n frequency: this.calculatePatternFrequency('pair-programming'),\n participants: this.getPatternParticipants('pair-programming'),\n steps: [\n {\n action: 'Create shared stack',\n averageTime: 2 * 60 * 1000,\n successRate: 0.99,\n },\n {\n action: 'Collaborative development',\n averageTime: 6 * 60 * 60 * 1000,\n successRate: 0.9,\n },\n {\n action: 'Resolve conflicts in real-time',\n averageTime: 15 * 60 * 1000,\n successRate: 0.95,\n },\n ],\n efficiency: 0.92,\n recommendations: [\n 'Excellent pattern - consider promoting for complex features',\n 'Document best practices for real-time collaboration',\n ],\n });\n\n return patterns;\n }\n\n /**\n * Get team performance dashboard data\n */\n async getDashboardData(timeRange: { start: Date; end: Date }): Promise<{\n metrics: CollaborationMetrics;\n insights: TeamInsight[];\n patterns: WorkflowPattern[];\n topCollaborators: Array<{\n userId: string;\n handoffsInitiated: number;\n handoffsApproved: number;\n conflictsResolved: number;\n collaborationScore: number;\n }>;\n }> {\n const metrics = await this.generateCollaborationMetrics(timeRange);\n const insights = await this.generateInsights(metrics);\n const patterns = await this.identifyWorkflowPatterns();\n const topCollaborators = this.calculateTopCollaborators(timeRange);\n\n return {\n metrics,\n insights,\n patterns,\n topCollaborators,\n };\n }\n\n // Helper methods\n private invalidateCache(type: string): void {\n const keysToRemove = Array.from(this.analyticsCache.keys()).filter((key) =>\n key.includes(type)\n );\n keysToRemove.forEach((key) => this.analyticsCache.delete(key));\n }\n\n private calculateAverageTime(items: any[], type: string): number {\n // Simplified calculation - would use real timestamps\n return 2 * 60 * 60 * 1000; // 2 hours default\n }\n\n private analyzeHandoffPairs(handoffs: HandoffProgress[]): Array<{\n source: string;\n target: string;\n count: number;\n successRate: number;\n }> {\n // Implementation would analyze actual handoff data\n return [\n { source: 'alice', target: 'bob', count: 15, successRate: 0.87 },\n { source: 'bob', target: 'charlie', count: 12, successRate: 0.92 },\n ];\n }\n\n private calculateAverageResolutionTime(merges: MergeSession[]): number {\n const completedMerges = merges.filter((m) => m.completedAt && m.startedAt);\n if (completedMerges.length === 0) return 0;\n\n const totalTime = completedMerges.reduce(\n (sum, m) => sum + (m.completedAt!.getTime() - m.startedAt.getTime()),\n 0\n );\n\n return totalTime / completedMerges.length;\n }\n\n private analyzeConflictHotspots(merges: MergeSession[]): Array<{\n frameType: string;\n conflictType: string;\n frequency: number;\n }> {\n // Implementation would analyze actual conflict data\n return [\n { frameType: 'implementation', conflictType: 'content', frequency: 25 },\n { frameType: 'task', conflictType: 'metadata', frequency: 15 },\n { frameType: 'test', conflictType: 'sequence', frequency: 10 },\n ];\n }\n\n private calculatePatternFrequency(patternId: string): number {\n // Implementation would calculate from actual data\n return Math.random() * 50; // Placeholder\n }\n\n private getPatternParticipants(patternId: string): string[] {\n // Implementation would identify actual participants\n return Array.from(this.teamMembers.keys()).slice(0, 3);\n }\n\n private calculateTopCollaborators(timeRange: {\n start: Date;\n end: Date;\n }): Array<{\n userId: string;\n handoffsInitiated: number;\n handoffsApproved: number;\n conflictsResolved: number;\n collaborationScore: number;\n }> {\n // Implementation would calculate from actual data\n return Array.from(this.teamMembers.entries())\n .map(([userId, member]) => ({\n userId,\n handoffsInitiated: Math.floor(Math.random() * 20),\n handoffsApproved: Math.floor(Math.random() * 15),\n conflictsResolved: Math.floor(Math.random() * 10),\n collaborationScore: Math.random(),\n }))\n .sort((a, b) => b.collaborationScore - a.collaborationScore);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|