@stackmemoryai/stackmemory 0.3.0 → 0.3.3
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 +52 -272
- package/dist/cli/codex-sm.js +48 -19
- package/dist/cli/codex-sm.js.map +2 -2
- package/dist/cli/commands/clear.js +191 -0
- package/dist/cli/commands/clear.js.map +7 -0
- package/dist/cli/commands/config.js +152 -1
- package/dist/cli/commands/config.js.map +2 -2
- package/dist/cli/commands/dashboard.js +178 -0
- package/dist/cli/commands/dashboard.js.map +7 -0
- package/dist/cli/commands/handoff.js +125 -8
- package/dist/cli/commands/handoff.js.map +2 -2
- package/dist/cli/commands/linear-create.js +132 -0
- package/dist/cli/commands/linear-create.js.map +7 -0
- package/dist/cli/commands/linear-list.js +69 -0
- package/dist/cli/commands/linear-list.js.map +7 -0
- package/dist/cli/commands/linear-migrate.js +40 -0
- package/dist/cli/commands/linear-migrate.js.map +7 -0
- package/dist/cli/commands/linear.js +185 -36
- package/dist/cli/commands/linear.js.map +2 -2
- package/dist/cli/commands/monitor.js +309 -0
- package/dist/cli/commands/monitor.js.map +7 -0
- package/dist/cli/commands/quality.js +414 -0
- package/dist/cli/commands/quality.js.map +7 -0
- package/dist/cli/commands/storage.js +275 -0
- package/dist/cli/commands/storage.js.map +7 -0
- package/dist/cli/commands/tui.js +66 -0
- package/dist/cli/commands/tui.js.map +7 -0
- package/dist/cli/commands/workflow.js +134 -0
- package/dist/cli/commands/workflow.js.map +7 -0
- package/dist/cli/index.js +105 -9
- package/dist/cli/index.js.map +3 -3
- package/dist/core/analytics/team-analytics.js +374 -0
- package/dist/core/analytics/team-analytics.js.map +7 -0
- package/dist/core/context/context-bridge.js +234 -0
- package/dist/core/context/context-bridge.js.map +7 -0
- package/dist/core/context/dual-stack-manager.js +850 -0
- package/dist/core/context/dual-stack-manager.js.map +7 -0
- package/dist/core/context/frame-handoff-manager.js +384 -0
- package/dist/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/core/context/frame-manager.js +132 -12
- package/dist/core/context/frame-manager.js.map +2 -2
- package/dist/core/context/permission-manager.js +181 -0
- package/dist/core/context/permission-manager.js.map +7 -0
- package/dist/core/context/shared-context-layer.js +386 -0
- package/dist/core/context/shared-context-layer.js.map +7 -0
- package/dist/core/context/stack-merge-resolver.js +600 -0
- package/dist/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/core/context/validation.js +121 -0
- package/dist/core/context/validation.js.map +7 -0
- package/dist/core/database/connection-pool.js +266 -175
- package/dist/core/database/connection-pool.js.map +2 -2
- package/dist/core/database/database-adapter.js +51 -0
- package/dist/core/database/database-adapter.js.map +7 -0
- package/dist/core/database/migration-manager.js +514 -0
- package/dist/core/database/migration-manager.js.map +7 -0
- package/dist/core/database/paradedb-adapter.js +970 -0
- package/dist/core/database/paradedb-adapter.js.map +7 -0
- package/dist/core/database/query-router.js +421 -0
- package/dist/core/database/query-router.js.map +7 -0
- package/dist/core/database/sqlite-adapter.js +547 -0
- package/dist/core/database/sqlite-adapter.js.map +7 -0
- package/dist/core/errors/index.js +21 -1
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/frame/workflow-templates-stub.js +42 -0
- package/dist/core/frame/workflow-templates-stub.js.map +7 -0
- package/dist/core/frame/workflow-templates.js +276 -0
- package/dist/core/frame/workflow-templates.js.map +7 -0
- package/dist/core/merge/conflict-detector.js +5 -2
- package/dist/core/merge/conflict-detector.js.map +2 -2
- package/dist/core/merge/resolution-engine.js +3 -14
- package/dist/core/merge/resolution-engine.js.map +2 -2
- package/dist/core/merge/stack-diff.js.map +2 -2
- package/dist/core/monitoring/logger.js +18 -3
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/monitoring/session-monitor.js +296 -0
- package/dist/core/monitoring/session-monitor.js.map +7 -0
- package/dist/core/retrieval/context-retriever.js +475 -0
- package/dist/core/retrieval/context-retriever.js.map +7 -0
- package/dist/core/retrieval/graph-retrieval.js +658 -0
- package/dist/core/retrieval/graph-retrieval.js.map +7 -0
- package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
- package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
- package/dist/core/session/clear-survival-stub.js +49 -0
- package/dist/core/session/clear-survival-stub.js.map +7 -0
- package/dist/core/session/clear-survival.js +426 -0
- package/dist/core/session/clear-survival.js.map +7 -0
- package/dist/core/session/handoff-generator.js +339 -0
- package/dist/core/session/handoff-generator.js.map +7 -0
- package/dist/core/session/session-manager.js +61 -26
- package/dist/core/session/session-manager.js.map +3 -3
- package/dist/core/skills/index.js +3 -0
- package/dist/core/skills/index.js.map +7 -0
- package/dist/core/skills/skill-storage.js +749 -0
- package/dist/core/skills/skill-storage.js.map +7 -0
- package/dist/core/skills/types.js +189 -0
- package/dist/core/skills/types.js.map +7 -0
- package/dist/core/storage/railway-optimized-storage.js +550 -0
- package/dist/core/storage/railway-optimized-storage.js.map +7 -0
- package/dist/core/storage/remote-storage.js +456 -0
- package/dist/core/storage/remote-storage.js.map +7 -0
- package/dist/core/trace/trace-detector.js +136 -5
- package/dist/core/trace/trace-detector.js.map +2 -2
- package/dist/core/trace/trace-store.js.map +2 -2
- package/dist/features/tui/components/analytics-panel.js +136 -0
- package/dist/features/tui/components/analytics-panel.js.map +7 -0
- package/dist/features/tui/components/frame-visualizer.js +377 -0
- package/dist/features/tui/components/frame-visualizer.js.map +7 -0
- package/dist/features/tui/components/pr-tracker.js +123 -0
- package/dist/features/tui/components/pr-tracker.js.map +7 -0
- package/dist/features/tui/components/session-monitor.js +286 -0
- package/dist/features/tui/components/session-monitor.js.map +7 -0
- package/dist/features/tui/components/subagent-fleet.js +388 -0
- package/dist/features/tui/components/subagent-fleet.js.map +7 -0
- package/dist/features/tui/components/task-board.js +475 -0
- package/dist/features/tui/components/task-board.js.map +7 -0
- package/dist/features/tui/index.js +397 -0
- package/dist/features/tui/index.js.map +7 -0
- package/dist/features/tui/services/data-service.js +654 -0
- package/dist/features/tui/services/data-service.js.map +7 -0
- package/dist/features/tui/services/websocket-client.js +149 -0
- package/dist/features/tui/services/websocket-client.js.map +7 -0
- package/dist/features/tui/terminal-compat.js +205 -0
- package/dist/features/tui/terminal-compat.js.map +7 -0
- package/dist/features/tui/types.js +1 -0
- package/dist/features/tui/types.js.map +7 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/integrations/claude-code/post-task-hooks.js +541 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/integrations/linear/client.js +22 -4
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/linear/migration.js +299 -0
- package/dist/integrations/linear/migration.js.map +7 -0
- package/dist/integrations/linear/oauth-server.js +396 -0
- package/dist/integrations/linear/oauth-server.js.map +7 -0
- package/dist/integrations/linear/rest-client.js +199 -0
- package/dist/integrations/linear/rest-client.js.map +7 -0
- package/dist/integrations/linear/sync.js +14 -2
- package/dist/integrations/linear/sync.js.map +2 -2
- package/dist/integrations/linear/webhook-handler.js +200 -0
- package/dist/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/integrations/mcp/refactored-server.js +31 -3
- package/dist/integrations/mcp/refactored-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +25 -7
- package/dist/integrations/mcp/server.js.map +2 -2
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/models/user.model.js +3 -0
- package/dist/models/user.model.js.map +2 -2
- package/dist/services/context-service.js.map +2 -2
- package/dist/utils/formatting.js +58 -0
- package/dist/utils/formatting.js.map +7 -0
- package/package.json +24 -5
- package/dist/cli/__tests__/index.test.js +0 -290
- package/dist/cli/__tests__/index.test.js.map +0 -7
- package/dist/core/config/__tests__/config-manager.test.js +0 -248
- package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
- package/dist/core/context/__tests__/frame-manager.test.js +0 -879
- package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
- package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
- package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
- package/dist/core/errors/__tests__/error-handling.test.js +0 -270
- package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
- package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
- package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
- package/dist/core/query/__tests__/query-parser.test.js +0 -301
- package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
- package/dist/core/query/__tests__/query-templates.test.js +0 -210
- package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
- package/dist/core/trace/trace-detector.test.js +0 -401
- package/dist/core/trace/trace-detector.test.js.map +0 -7
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/auth.test.js +0 -558
- package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
- package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
- package/dist/integrations/mcp/__tests__/server.test.js +0 -798
- package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
- package/dist/scripts/benchmark-performance.d.ts +0 -7
- package/dist/scripts/benchmark-performance.d.ts.map +0 -1
- package/dist/scripts/benchmark-performance.js +0 -44
- package/dist/scripts/benchmark-performance.js.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
- package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.js +0 -172
- package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
- package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
- package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
- package/dist/scripts/initialize.d.ts +0 -6
- package/dist/scripts/initialize.d.ts.map +0 -1
- package/dist/scripts/initialize.js +0 -93
- package/dist/scripts/initialize.js.map +0 -1
- package/dist/scripts/list-linear-tasks.d.ts +0 -6
- package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
- package/dist/scripts/list-linear-tasks.js +0 -121
- package/dist/scripts/list-linear-tasks.js.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
- package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
- package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
- package/dist/scripts/show-linear-summary.d.ts +0 -6
- package/dist/scripts/show-linear-summary.d.ts.map +0 -1
- package/dist/scripts/show-linear-summary.js +0 -120
- package/dist/scripts/show-linear-summary.js.map +0 -1
- package/dist/scripts/status.d.ts +0 -6
- package/dist/scripts/status.d.ts.map +0 -1
- package/dist/scripts/status.js +0 -101
- package/dist/scripts/status.js.map +0 -1
- package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
- package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
- package/dist/src/agents/core/agent-task-manager.js +0 -504
- package/dist/src/agents/core/agent-task-manager.js.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
- package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.js +0 -130
- package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
- package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
- package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
- package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.js +0 -248
- package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
- package/dist/src/cli/auto-detect.d.ts +0 -61
- package/dist/src/cli/auto-detect.d.ts.map +0 -1
- package/dist/src/cli/auto-detect.js +0 -350
- package/dist/src/cli/auto-detect.js.map +0 -1
- package/dist/src/cli/browser-test.d.ts +0 -6
- package/dist/src/cli/browser-test.d.ts.map +0 -1
- package/dist/src/cli/browser-test.js +0 -32
- package/dist/src/cli/browser-test.js.map +0 -1
- package/dist/src/cli/claude-sm.d.ts +0 -7
- package/dist/src/cli/claude-sm.d.ts.map +0 -1
- package/dist/src/cli/claude-sm.js +0 -412
- package/dist/src/cli/claude-sm.js.map +0 -1
- package/dist/src/cli/commands/agent.d.ts +0 -9
- package/dist/src/cli/commands/agent.d.ts.map +0 -1
- package/dist/src/cli/commands/agent.js +0 -303
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/config.d.ts +0 -6
- package/dist/src/cli/commands/config.d.ts.map +0 -1
- package/dist/src/cli/commands/config.js +0 -224
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/context.d.ts +0 -7
- package/dist/src/cli/commands/context.d.ts.map +0 -1
- package/dist/src/cli/commands/context.js +0 -365
- package/dist/src/cli/commands/context.js.map +0 -1
- package/dist/src/cli/commands/handoff.d.ts +0 -6
- package/dist/src/cli/commands/handoff.d.ts.map +0 -1
- package/dist/src/cli/commands/handoff.js +0 -212
- package/dist/src/cli/commands/handoff.js.map +0 -1
- package/dist/src/cli/commands/linear-test.d.ts +0 -6
- package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
- package/dist/src/cli/commands/linear-test.js +0 -123
- package/dist/src/cli/commands/linear-test.js.map +0 -1
- package/dist/src/cli/commands/linear.d.ts +0 -6
- package/dist/src/cli/commands/linear.d.ts.map +0 -1
- package/dist/src/cli/commands/linear.js +0 -393
- package/dist/src/cli/commands/linear.js.map +0 -1
- package/dist/src/cli/commands/log.d.ts +0 -7
- package/dist/src/cli/commands/log.d.ts.map +0 -1
- package/dist/src/cli/commands/log.js +0 -168
- package/dist/src/cli/commands/log.js.map +0 -1
- package/dist/src/cli/commands/onboard.d.ts +0 -8
- package/dist/src/cli/commands/onboard.d.ts.map +0 -1
- package/dist/src/cli/commands/onboard.js +0 -363
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/projects.d.ts +0 -8
- package/dist/src/cli/commands/projects.d.ts.map +0 -1
- package/dist/src/cli/commands/projects.js +0 -220
- package/dist/src/cli/commands/projects.js.map +0 -1
- package/dist/src/cli/commands/search.d.ts +0 -7
- package/dist/src/cli/commands/search.d.ts.map +0 -1
- package/dist/src/cli/commands/search.js +0 -162
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session.d.ts +0 -7
- package/dist/src/cli/commands/session.d.ts.map +0 -1
- package/dist/src/cli/commands/session.js +0 -222
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/tasks.d.ts +0 -7
- package/dist/src/cli/commands/tasks.d.ts.map +0 -1
- package/dist/src/cli/commands/tasks.js +0 -229
- package/dist/src/cli/commands/tasks.js.map +0 -1
- package/dist/src/cli/commands/webhook.d.ts +0 -3
- package/dist/src/cli/commands/webhook.d.ts.map +0 -1
- package/dist/src/cli/commands/webhook.js +0 -157
- package/dist/src/cli/commands/webhook.js.map +0 -1
- package/dist/src/cli/commands/worktree.d.ts +0 -8
- package/dist/src/cli/commands/worktree.d.ts.map +0 -1
- package/dist/src/cli/commands/worktree.js +0 -339
- package/dist/src/cli/commands/worktree.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -995
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/utils/viewer.d.ts +0 -3
- package/dist/src/cli/utils/viewer.d.ts.map +0 -1
- package/dist/src/cli/utils/viewer.js +0 -91
- package/dist/src/cli/utils/viewer.js.map +0 -1
- package/dist/src/core/config/config-manager.d.ts +0 -95
- package/dist/src/core/config/config-manager.d.ts.map +0 -1
- package/dist/src/core/config/config-manager.js +0 -359
- package/dist/src/core/config/config-manager.js.map +0 -1
- package/dist/src/core/config/types.d.ts +0 -72
- package/dist/src/core/config/types.d.ts.map +0 -1
- package/dist/src/core/config/types.js +0 -127
- package/dist/src/core/config/types.js.map +0 -1
- package/dist/src/core/context/auto-context.d.ts +0 -22
- package/dist/src/core/context/auto-context.d.ts.map +0 -1
- package/dist/src/core/context/auto-context.js +0 -77
- package/dist/src/core/context/auto-context.js.map +0 -1
- package/dist/src/core/context/compaction-handler.d.ts +0 -119
- package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
- package/dist/src/core/context/compaction-handler.js +0 -306
- package/dist/src/core/context/compaction-handler.js.map +0 -1
- package/dist/src/core/context/frame-database.d.ts +0 -59
- package/dist/src/core/context/frame-database.d.ts.map +0 -1
- package/dist/src/core/context/frame-database.js +0 -333
- package/dist/src/core/context/frame-database.js.map +0 -1
- package/dist/src/core/context/frame-digest.d.ts +0 -59
- package/dist/src/core/context/frame-digest.d.ts.map +0 -1
- package/dist/src/core/context/frame-digest.js +0 -264
- package/dist/src/core/context/frame-digest.js.map +0 -1
- package/dist/src/core/context/frame-manager.d.ts +0 -112
- package/dist/src/core/context/frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/frame-manager.js +0 -600
- package/dist/src/core/context/frame-manager.js.map +0 -1
- package/dist/src/core/context/frame-stack.d.ts +0 -85
- package/dist/src/core/context/frame-stack.d.ts.map +0 -1
- package/dist/src/core/context/frame-stack.js +0 -287
- package/dist/src/core/context/frame-stack.js.map +0 -1
- package/dist/src/core/context/frame-types.d.ts +0 -67
- package/dist/src/core/context/frame-types.d.ts.map +0 -1
- package/dist/src/core/context/frame-types.js +0 -6
- package/dist/src/core/context/frame-types.js.map +0 -1
- package/dist/src/core/context/index.d.ts +0 -11
- package/dist/src/core/context/index.d.ts.map +0 -1
- package/dist/src/core/context/index.js +0 -14
- package/dist/src/core/context/index.js.map +0 -1
- package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
- package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
- package/dist/src/core/context/model-aware-compaction.js +0 -616
- package/dist/src/core/context/model-aware-compaction.js.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
- package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.js +0 -340
- package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
- package/dist/src/core/database/batch-operations.d.ts +0 -118
- package/dist/src/core/database/batch-operations.d.ts.map +0 -1
- package/dist/src/core/database/batch-operations.js +0 -339
- package/dist/src/core/database/batch-operations.js.map +0 -1
- package/dist/src/core/database/connection-pool.d.ts +0 -79
- package/dist/src/core/database/connection-pool.d.ts.map +0 -1
- package/dist/src/core/database/connection-pool.js +0 -236
- package/dist/src/core/database/connection-pool.js.map +0 -1
- package/dist/src/core/database/query-cache.d.ts +0 -135
- package/dist/src/core/database/query-cache.d.ts.map +0 -1
- package/dist/src/core/database/query-cache.js +0 -294
- package/dist/src/core/database/query-cache.js.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
- package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.js +0 -198
- package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
- package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
- package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
- package/dist/src/core/digest/index.d.ts +0 -9
- package/dist/src/core/digest/index.d.ts.map +0 -1
- package/dist/src/core/digest/index.js +0 -9
- package/dist/src/core/digest/index.js.map +0 -1
- package/dist/src/core/digest/types.d.ts +0 -154
- package/dist/src/core/digest/types.d.ts.map +0 -1
- package/dist/src/core/digest/types.js +0 -18
- package/dist/src/core/digest/types.js.map +0 -1
- package/dist/src/core/errors/index.d.ts +0 -143
- package/dist/src/core/errors/index.d.ts.map +0 -1
- package/dist/src/core/errors/index.js +0 -282
- package/dist/src/core/errors/index.js.map +0 -1
- package/dist/src/core/errors/recovery.d.ts +0 -86
- package/dist/src/core/errors/recovery.d.ts.map +0 -1
- package/dist/src/core/errors/recovery.js +0 -274
- package/dist/src/core/errors/recovery.js.map +0 -1
- package/dist/src/core/merge/conflict-detector.d.ts +0 -122
- package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
- package/dist/src/core/merge/conflict-detector.js +0 -468
- package/dist/src/core/merge/conflict-detector.js.map +0 -1
- package/dist/src/core/merge/index.d.ts +0 -9
- package/dist/src/core/merge/index.d.ts.map +0 -1
- package/dist/src/core/merge/index.js +0 -9
- package/dist/src/core/merge/index.js.map +0 -1
- package/dist/src/core/merge/resolution-engine.d.ts +0 -120
- package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
- package/dist/src/core/merge/resolution-engine.js +0 -573
- package/dist/src/core/merge/resolution-engine.js.map +0 -1
- package/dist/src/core/merge/stack-diff.d.ts +0 -97
- package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
- package/dist/src/core/merge/stack-diff.js +0 -516
- package/dist/src/core/merge/stack-diff.js.map +0 -1
- package/dist/src/core/merge/types.d.ts +0 -110
- package/dist/src/core/merge/types.d.ts.map +0 -1
- package/dist/src/core/merge/types.js +0 -6
- package/dist/src/core/merge/types.js.map +0 -1
- package/dist/src/core/monitoring/error-handler.d.ts +0 -46
- package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
- package/dist/src/core/monitoring/error-handler.js +0 -212
- package/dist/src/core/monitoring/error-handler.js.map +0 -1
- package/dist/src/core/monitoring/logger.d.ts +0 -24
- package/dist/src/core/monitoring/logger.d.ts.map +0 -1
- package/dist/src/core/monitoring/logger.js +0 -126
- package/dist/src/core/monitoring/logger.js.map +0 -1
- package/dist/src/core/monitoring/metrics.d.ts +0 -10
- package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
- package/dist/src/core/monitoring/metrics.js +0 -152
- package/dist/src/core/monitoring/metrics.js.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
- package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.js +0 -178
- package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
- package/dist/src/core/performance/context-cache.d.ts +0 -109
- package/dist/src/core/performance/context-cache.d.ts.map +0 -1
- package/dist/src/core/performance/context-cache.js +0 -280
- package/dist/src/core/performance/context-cache.js.map +0 -1
- package/dist/src/core/performance/index.d.ts +0 -3
- package/dist/src/core/performance/index.d.ts.map +0 -1
- package/dist/src/core/performance/index.js +0 -3
- package/dist/src/core/performance/index.js.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
- package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.js +0 -332
- package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
- package/dist/src/core/performance/monitor.d.ts +0 -48
- package/dist/src/core/performance/monitor.d.ts.map +0 -1
- package/dist/src/core/performance/monitor.js +0 -226
- package/dist/src/core/performance/monitor.js.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
- package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.js +0 -330
- package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
- package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
- package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
- package/dist/src/core/performance/performance-benchmark.js +0 -290
- package/dist/src/core/performance/performance-benchmark.js.map +0 -1
- package/dist/src/core/performance/performance-profiler.d.ts +0 -151
- package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
- package/dist/src/core/performance/performance-profiler.js +0 -346
- package/dist/src/core/performance/performance-profiler.js.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
- package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.js +0 -330
- package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
- package/dist/src/core/projects/project-manager.d.ts +0 -130
- package/dist/src/core/projects/project-manager.d.ts.map +0 -1
- package/dist/src/core/projects/project-manager.js +0 -709
- package/dist/src/core/projects/project-manager.js.map +0 -1
- package/dist/src/core/query/query-parser.d.ts +0 -109
- package/dist/src/core/query/query-parser.d.ts.map +0 -1
- package/dist/src/core/query/query-parser.js +0 -415
- package/dist/src/core/query/query-parser.js.map +0 -1
- package/dist/src/core/query/query-templates.d.ts +0 -44
- package/dist/src/core/query/query-templates.d.ts.map +0 -1
- package/dist/src/core/query/query-templates.js +0 -326
- package/dist/src/core/query/query-templates.js.map +0 -1
- package/dist/src/core/retrieval/index.d.ts +0 -8
- package/dist/src/core/retrieval/index.d.ts.map +0 -1
- package/dist/src/core/retrieval/index.js +0 -8
- package/dist/src/core/retrieval/index.js.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
- package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
- package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
- package/dist/src/core/retrieval/summary-generator.js +0 -622
- package/dist/src/core/retrieval/summary-generator.js.map +0 -1
- package/dist/src/core/retrieval/types.d.ts +0 -257
- package/dist/src/core/retrieval/types.d.ts.map +0 -1
- package/dist/src/core/retrieval/types.js +0 -18
- package/dist/src/core/retrieval/types.js.map +0 -1
- package/dist/src/core/session/index.d.ts +0 -2
- package/dist/src/core/session/index.d.ts.map +0 -1
- package/dist/src/core/session/index.js +0 -2
- package/dist/src/core/session/index.js.map +0 -1
- package/dist/src/core/session/session-manager.d.ts +0 -69
- package/dist/src/core/session/session-manager.d.ts.map +0 -1
- package/dist/src/core/session/session-manager.js +0 -311
- package/dist/src/core/session/session-manager.js.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
- package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
- package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
- package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.js +0 -252
- package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/debug-trace.d.ts +0 -84
- package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
- package/dist/src/core/trace/debug-trace.js +0 -402
- package/dist/src/core/trace/debug-trace.js.map +0 -1
- package/dist/src/core/trace/error-test.d.ts +0 -6
- package/dist/src/core/trace/error-test.d.ts.map +0 -1
- package/dist/src/core/trace/error-test.js +0 -128
- package/dist/src/core/trace/error-test.js.map +0 -1
- package/dist/src/core/trace/index.d.ts +0 -25
- package/dist/src/core/trace/index.d.ts.map +0 -1
- package/dist/src/core/trace/index.js +0 -121
- package/dist/src/core/trace/index.js.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
- package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.js +0 -205
- package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
- package/dist/src/core/trace/performance-test.d.ts +0 -6
- package/dist/src/core/trace/performance-test.d.ts.map +0 -1
- package/dist/src/core/trace/performance-test.js +0 -111
- package/dist/src/core/trace/performance-test.js.map +0 -1
- package/dist/src/core/trace/trace-demo.d.ts +0 -8
- package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-demo.js +0 -154
- package/dist/src/core/trace/trace-demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.d.ts +0 -108
- package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
- package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.js +0 -145
- package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.js +0 -425
- package/dist/src/core/trace/trace-detector.js.map +0 -1
- package/dist/src/core/trace/trace-store.d.ts +0 -60
- package/dist/src/core/trace/trace-store.d.ts.map +0 -1
- package/dist/src/core/trace/trace-store.js +0 -323
- package/dist/src/core/trace/trace-store.js.map +0 -1
- package/dist/src/core/trace/types.d.ts +0 -81
- package/dist/src/core/trace/types.d.ts.map +0 -1
- package/dist/src/core/trace/types.js +0 -70
- package/dist/src/core/trace/types.js.map +0 -1
- package/dist/src/core/types.d.ts +0 -35
- package/dist/src/core/types.d.ts.map +0 -1
- package/dist/src/core/types.js +0 -2
- package/dist/src/core/types.js.map +0 -1
- package/dist/src/core/utils/update-checker.d.ts +0 -38
- package/dist/src/core/utils/update-checker.d.ts.map +0 -1
- package/dist/src/core/utils/update-checker.js +0 -213
- package/dist/src/core/utils/update-checker.js.map +0 -1
- package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
- package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
- package/dist/src/core/worktree/worktree-manager.js +0 -456
- package/dist/src/core/worktree/worktree-manager.js.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
- package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.js +0 -289
- package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
- package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.js +0 -275
- package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
- package/dist/src/features/analytics/index.d.ts +0 -12
- package/dist/src/features/analytics/index.d.ts.map +0 -1
- package/dist/src/features/analytics/index.js +0 -11
- package/dist/src/features/analytics/index.js.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
- package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
- package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
- package/dist/src/features/analytics/types/metrics.d.ts +0 -60
- package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
- package/dist/src/features/analytics/types/metrics.js +0 -2
- package/dist/src/features/analytics/types/metrics.js.map +0 -1
- package/dist/src/features/browser/browser-mcp.d.ts +0 -94
- package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
- package/dist/src/features/browser/browser-mcp.js +0 -459
- package/dist/src/features/browser/browser-mcp.js.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.js +0 -572
- package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
- package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
- package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
- package/dist/src/features/tasks/task-aware-context.js +0 -412
- package/dist/src/features/tasks/task-aware-context.js.map +0 -1
- package/dist/src/index.d.ts +0 -21
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -9
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/linear/auth.d.ts +0 -99
- package/dist/src/integrations/linear/auth.d.ts.map +0 -1
- package/dist/src/integrations/linear/auth.js +0 -319
- package/dist/src/integrations/linear/auth.js.map +0 -1
- package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
- package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/auto-sync.js +0 -268
- package/dist/src/integrations/linear/auto-sync.js.map +0 -1
- package/dist/src/integrations/linear/client.d.ts +0 -127
- package/dist/src/integrations/linear/client.d.ts.map +0 -1
- package/dist/src/integrations/linear/client.js +0 -446
- package/dist/src/integrations/linear/client.js.map +0 -1
- package/dist/src/integrations/linear/config.d.ts +0 -51
- package/dist/src/integrations/linear/config.d.ts.map +0 -1
- package/dist/src/integrations/linear/config.js +0 -103
- package/dist/src/integrations/linear/config.js.map +0 -1
- package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
- package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-manager.js +0 -235
- package/dist/src/integrations/linear/sync-manager.js.map +0 -1
- package/dist/src/integrations/linear/sync-service.d.ts +0 -46
- package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-service.js +0 -217
- package/dist/src/integrations/linear/sync-service.js.map +0 -1
- package/dist/src/integrations/linear/sync.d.ts +0 -125
- package/dist/src/integrations/linear/sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync.js +0 -563
- package/dist/src/integrations/linear/sync.js.map +0 -1
- package/dist/src/integrations/linear/types.d.ts +0 -90
- package/dist/src/integrations/linear/types.d.ts.map +0 -1
- package/dist/src/integrations/linear/types.js +0 -2
- package/dist/src/integrations/linear/types.js.map +0 -1
- package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
- package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook-server.js +0 -190
- package/dist/src/integrations/linear/webhook-server.js.map +0 -1
- package/dist/src/integrations/linear/webhook.d.ts +0 -108
- package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook.js +0 -291
- package/dist/src/integrations/linear/webhook.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
- package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.js +0 -134
- package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/index.d.ts +0 -13
- package/dist/src/integrations/mcp/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/index.js +0 -17
- package/dist/src/integrations/mcp/index.js.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
- package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.js +0 -351
- package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
- package/dist/src/integrations/mcp/server.d.ts +0 -54
- package/dist/src/integrations/mcp/server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/server.js +0 -1616
- package/dist/src/integrations/mcp/server.js.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
- package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.js +0 -563
- package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
- package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
- package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
- package/dist/src/integrations/mcp/trace-test.js +0 -54
- package/dist/src/integrations/mcp/trace-test.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
- package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
- package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
- package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
- package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
- package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.js +0 -293
- package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
- package/dist/src/models/user.model.d.ts +0 -62
- package/dist/src/models/user.model.d.ts.map +0 -1
- package/dist/src/models/user.model.js +0 -311
- package/dist/src/models/user.model.js.map +0 -1
- package/dist/src/servers/production/auth-middleware.d.ts +0 -76
- package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
- package/dist/src/servers/production/auth-middleware.js +0 -558
- package/dist/src/servers/production/auth-middleware.js.map +0 -1
- package/dist/src/servers/railway/index.d.ts +0 -7
- package/dist/src/servers/railway/index.d.ts.map +0 -1
- package/dist/src/servers/railway/index.js +0 -401
- package/dist/src/servers/railway/index.js.map +0 -1
- package/dist/src/services/config-service.d.ts +0 -44
- package/dist/src/services/config-service.d.ts.map +0 -1
- package/dist/src/services/config-service.js +0 -61
- package/dist/src/services/config-service.js.map +0 -1
- package/dist/src/services/context-service.d.ts +0 -17
- package/dist/src/services/context-service.d.ts.map +0 -1
- package/dist/src/services/context-service.js +0 -173
- package/dist/src/services/context-service.js.map +0 -1
- package/dist/src/types/task.d.ts +0 -27
- package/dist/src/types/task.d.ts.map +0 -1
- package/dist/src/types/task.js +0 -2
- package/dist/src/types/task.js.map +0 -1
- package/dist/src/utils/logger.d.ts +0 -13
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/utils/logger.js +0 -52
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/validation/schemas.d.ts +0 -633
- package/dist/src/validation/schemas.d.ts.map +0 -1
- package/dist/src/validation/schemas.js +0 -347
- package/dist/src/validation/schemas.js.map +0 -1
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { logger } from "../monitoring/logger.js";
|
|
2
|
+
class TeamAnalytics {
|
|
3
|
+
teamMembers = /* @__PURE__ */ new Map();
|
|
4
|
+
handoffHistory = [];
|
|
5
|
+
mergeHistory = [];
|
|
6
|
+
analyticsCache = /* @__PURE__ */ new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Add or update team member
|
|
9
|
+
*/
|
|
10
|
+
addTeamMember(member) {
|
|
11
|
+
this.teamMembers.set(member.userId, member);
|
|
12
|
+
logger.info(`Team member added: ${member.userId}`, {
|
|
13
|
+
role: member.role,
|
|
14
|
+
skills: member.skills
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Record handoff activity
|
|
19
|
+
*/
|
|
20
|
+
recordHandoffActivity(progress, metadata) {
|
|
21
|
+
this.handoffHistory.push(progress);
|
|
22
|
+
this.invalidateCache("handoff");
|
|
23
|
+
logger.debug(`Handoff activity recorded: ${progress.requestId}`, {
|
|
24
|
+
status: progress.status,
|
|
25
|
+
transferredFrames: progress.transferredFrames
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Record merge activity
|
|
30
|
+
*/
|
|
31
|
+
recordMergeActivity(session) {
|
|
32
|
+
this.mergeHistory.push(session);
|
|
33
|
+
this.invalidateCache("merge");
|
|
34
|
+
logger.debug(`Merge activity recorded: ${session.sessionId}`, {
|
|
35
|
+
conflicts: session.conflicts.length,
|
|
36
|
+
resolutions: session.resolutions.length
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Generate comprehensive collaboration metrics
|
|
41
|
+
*/
|
|
42
|
+
async generateCollaborationMetrics(timeRange) {
|
|
43
|
+
const cacheKey = `metrics-${timeRange.start.toISOString()}-${timeRange.end.toISOString()}`;
|
|
44
|
+
if (this.analyticsCache.has(cacheKey)) {
|
|
45
|
+
return this.analyticsCache.get(cacheKey);
|
|
46
|
+
}
|
|
47
|
+
const metrics = {
|
|
48
|
+
timeRange,
|
|
49
|
+
teamMetrics: await this.calculateTeamMetrics(timeRange),
|
|
50
|
+
handoffMetrics: await this.calculateHandoffMetrics(timeRange),
|
|
51
|
+
conflictMetrics: await this.calculateConflictMetrics(timeRange),
|
|
52
|
+
productivityMetrics: await this.calculateProductivityMetrics(timeRange)
|
|
53
|
+
};
|
|
54
|
+
this.analyticsCache.set(cacheKey, metrics);
|
|
55
|
+
return metrics;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Calculate team-level metrics
|
|
59
|
+
*/
|
|
60
|
+
async calculateTeamMetrics(timeRange) {
|
|
61
|
+
const allMembers = Array.from(this.teamMembers.values());
|
|
62
|
+
const activeMembers = allMembers.filter(
|
|
63
|
+
(m) => m.lastActive >= timeRange.start && m.lastActive <= timeRange.end
|
|
64
|
+
);
|
|
65
|
+
const newMembers = allMembers.filter(
|
|
66
|
+
(m) => m.joinedAt >= timeRange.start && m.joinedAt <= timeRange.end
|
|
67
|
+
);
|
|
68
|
+
const previousPeriodStart = new Date(
|
|
69
|
+
timeRange.start.getTime() - (timeRange.end.getTime() - timeRange.start.getTime())
|
|
70
|
+
);
|
|
71
|
+
const previousActiveMembers = allMembers.filter(
|
|
72
|
+
(m) => m.lastActive >= previousPeriodStart && m.lastActive < timeRange.start
|
|
73
|
+
);
|
|
74
|
+
const retainedMembers = activeMembers.filter(
|
|
75
|
+
(m) => previousActiveMembers.find((pm) => pm.userId === m.userId)
|
|
76
|
+
);
|
|
77
|
+
const retentionRate = previousActiveMembers.length > 0 ? retainedMembers.length / previousActiveMembers.length : 1;
|
|
78
|
+
return {
|
|
79
|
+
totalMembers: allMembers.length,
|
|
80
|
+
activeMembers: activeMembers.length,
|
|
81
|
+
newMembers: newMembers.length,
|
|
82
|
+
retentionRate
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Calculate handoff-specific metrics
|
|
87
|
+
*/
|
|
88
|
+
async calculateHandoffMetrics(timeRange) {
|
|
89
|
+
const relevantHandoffs = this.handoffHistory.filter((h) => {
|
|
90
|
+
return true;
|
|
91
|
+
});
|
|
92
|
+
const successfulHandoffs = relevantHandoffs.filter(
|
|
93
|
+
(h) => h.status === "completed"
|
|
94
|
+
);
|
|
95
|
+
const rejectedHandoffs = relevantHandoffs.filter(
|
|
96
|
+
(h) => h.status === "failed"
|
|
97
|
+
);
|
|
98
|
+
const averageApprovalTime = this.calculateAverageTime(
|
|
99
|
+
successfulHandoffs,
|
|
100
|
+
"approval"
|
|
101
|
+
);
|
|
102
|
+
const handoffPairs = this.analyzeHandoffPairs(relevantHandoffs);
|
|
103
|
+
return {
|
|
104
|
+
totalHandoffs: relevantHandoffs.length,
|
|
105
|
+
successfulHandoffs: successfulHandoffs.length,
|
|
106
|
+
averageApprovalTime,
|
|
107
|
+
rejectionRate: relevantHandoffs.length > 0 ? rejectedHandoffs.length / relevantHandoffs.length : 0,
|
|
108
|
+
mostActiveHandoffPairs: handoffPairs
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calculate conflict resolution metrics
|
|
113
|
+
*/
|
|
114
|
+
async calculateConflictMetrics(timeRange) {
|
|
115
|
+
const relevantMerges = this.mergeHistory.filter((m) => {
|
|
116
|
+
return m.startedAt >= timeRange.start && m.startedAt <= timeRange.end;
|
|
117
|
+
});
|
|
118
|
+
const totalConflicts = relevantMerges.reduce(
|
|
119
|
+
(sum, m) => sum + m.conflicts.length,
|
|
120
|
+
0
|
|
121
|
+
);
|
|
122
|
+
const autoResolved = relevantMerges.reduce(
|
|
123
|
+
(sum, m) => sum + m.metadata.autoResolvedConflicts,
|
|
124
|
+
0
|
|
125
|
+
);
|
|
126
|
+
const manualResolved = relevantMerges.reduce(
|
|
127
|
+
(sum, m) => sum + m.metadata.manualResolvedConflicts,
|
|
128
|
+
0
|
|
129
|
+
);
|
|
130
|
+
const averageResolutionTime = this.calculateAverageResolutionTime(relevantMerges);
|
|
131
|
+
const conflictHotspots = this.analyzeConflictHotspots(relevantMerges);
|
|
132
|
+
return {
|
|
133
|
+
totalConflicts,
|
|
134
|
+
autoResolvedConflicts: autoResolved,
|
|
135
|
+
manualResolvedConflicts: manualResolved,
|
|
136
|
+
averageResolutionTime,
|
|
137
|
+
conflictHotspots
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Calculate productivity metrics
|
|
142
|
+
*/
|
|
143
|
+
async calculateProductivityMetrics(timeRange) {
|
|
144
|
+
return {
|
|
145
|
+
frameCreationRate: 15.5,
|
|
146
|
+
// frames per day
|
|
147
|
+
frameCompletionRate: 12.3,
|
|
148
|
+
// frames per day
|
|
149
|
+
averageFrameLifecycle: 2.5,
|
|
150
|
+
// days
|
|
151
|
+
collaborativeFramePercentage: 0.65
|
|
152
|
+
// 65% of frames involve collaboration
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Generate actionable insights from metrics
|
|
157
|
+
*/
|
|
158
|
+
async generateInsights(metrics) {
|
|
159
|
+
const insights = [];
|
|
160
|
+
if (metrics.handoffMetrics.rejectionRate > 0.3) {
|
|
161
|
+
insights.push({
|
|
162
|
+
id: `high-rejection-${Date.now()}`,
|
|
163
|
+
type: "risk",
|
|
164
|
+
severity: "high",
|
|
165
|
+
title: "High Handoff Rejection Rate",
|
|
166
|
+
description: `${Math.round(metrics.handoffMetrics.rejectionRate * 100)}% of handoffs are being rejected`,
|
|
167
|
+
actionItems: [
|
|
168
|
+
"Review handoff quality guidelines",
|
|
169
|
+
"Implement pre-handoff checklists",
|
|
170
|
+
"Provide additional training on code review standards"
|
|
171
|
+
],
|
|
172
|
+
affectedUsers: [],
|
|
173
|
+
// Would identify specific users
|
|
174
|
+
metrics: { rejectionRate: metrics.handoffMetrics.rejectionRate },
|
|
175
|
+
generatedAt: /* @__PURE__ */ new Date()
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (metrics.handoffMetrics.averageApprovalTime > 24 * 60 * 60 * 1e3) {
|
|
179
|
+
insights.push({
|
|
180
|
+
id: `slow-approval-${Date.now()}`,
|
|
181
|
+
type: "opportunity",
|
|
182
|
+
severity: "medium",
|
|
183
|
+
title: "Slow Handoff Approval Times",
|
|
184
|
+
description: "Average approval time exceeds 24 hours",
|
|
185
|
+
actionItems: [
|
|
186
|
+
"Set up approval time SLAs",
|
|
187
|
+
"Implement automated reminders",
|
|
188
|
+
"Add more reviewers to distribute load"
|
|
189
|
+
],
|
|
190
|
+
affectedUsers: [],
|
|
191
|
+
metrics: {
|
|
192
|
+
averageApprovalTime: metrics.handoffMetrics.averageApprovalTime
|
|
193
|
+
},
|
|
194
|
+
generatedAt: /* @__PURE__ */ new Date()
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (metrics.conflictMetrics.manualResolvedConflicts > metrics.conflictMetrics.autoResolvedConflicts) {
|
|
198
|
+
insights.push({
|
|
199
|
+
id: `high-conflicts-${Date.now()}`,
|
|
200
|
+
type: "risk",
|
|
201
|
+
severity: "medium",
|
|
202
|
+
title: "High Manual Conflict Resolution",
|
|
203
|
+
description: "Most conflicts require manual resolution",
|
|
204
|
+
actionItems: [
|
|
205
|
+
"Review merge policies to increase auto-resolution",
|
|
206
|
+
"Improve frame naming and organization conventions",
|
|
207
|
+
"Implement conflict prevention guidelines"
|
|
208
|
+
],
|
|
209
|
+
affectedUsers: [],
|
|
210
|
+
metrics: {
|
|
211
|
+
manualConflicts: metrics.conflictMetrics.manualResolvedConflicts,
|
|
212
|
+
autoConflicts: metrics.conflictMetrics.autoResolvedConflicts
|
|
213
|
+
},
|
|
214
|
+
generatedAt: /* @__PURE__ */ new Date()
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (metrics.productivityMetrics.collaborativeFramePercentage > 0.8) {
|
|
218
|
+
insights.push({
|
|
219
|
+
id: `high-collaboration-${Date.now()}`,
|
|
220
|
+
type: "success",
|
|
221
|
+
severity: "low",
|
|
222
|
+
title: "Excellent Collaboration Rate",
|
|
223
|
+
description: `${Math.round(metrics.productivityMetrics.collaborativeFramePercentage * 100)}% of frames involve collaboration`,
|
|
224
|
+
actionItems: [
|
|
225
|
+
"Document successful collaboration patterns",
|
|
226
|
+
"Share best practices with other teams",
|
|
227
|
+
"Consider mentoring programs"
|
|
228
|
+
],
|
|
229
|
+
affectedUsers: [],
|
|
230
|
+
metrics: {
|
|
231
|
+
collaborationRate: metrics.productivityMetrics.collaborativeFramePercentage
|
|
232
|
+
},
|
|
233
|
+
generatedAt: /* @__PURE__ */ new Date()
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
return insights;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Identify workflow patterns from team activity
|
|
240
|
+
*/
|
|
241
|
+
async identifyWorkflowPatterns() {
|
|
242
|
+
const patterns = [];
|
|
243
|
+
patterns.push({
|
|
244
|
+
id: "feature-development",
|
|
245
|
+
name: "Feature Development Workflow",
|
|
246
|
+
description: "Individual development \u2192 Review \u2192 Merge to shared stack",
|
|
247
|
+
frequency: this.calculatePatternFrequency("feature-development"),
|
|
248
|
+
participants: this.getPatternParticipants("feature-development"),
|
|
249
|
+
steps: [
|
|
250
|
+
{
|
|
251
|
+
action: "Create individual frames",
|
|
252
|
+
averageTime: 4 * 60 * 60 * 1e3,
|
|
253
|
+
successRate: 0.95
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
action: "Request handoff",
|
|
257
|
+
averageTime: 5 * 60 * 1e3,
|
|
258
|
+
successRate: 0.9
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
action: "Review and approve",
|
|
262
|
+
averageTime: 2 * 60 * 60 * 1e3,
|
|
263
|
+
successRate: 0.85
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
action: "Merge to shared stack",
|
|
267
|
+
averageTime: 10 * 60 * 1e3,
|
|
268
|
+
successRate: 0.95
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
efficiency: 0.85,
|
|
272
|
+
recommendations: [
|
|
273
|
+
"Standardize review criteria to reduce rejection rate",
|
|
274
|
+
"Implement automated checks before handoff request"
|
|
275
|
+
]
|
|
276
|
+
});
|
|
277
|
+
patterns.push({
|
|
278
|
+
id: "pair-programming",
|
|
279
|
+
name: "Pair Programming Workflow",
|
|
280
|
+
description: "Direct collaboration in shared stack",
|
|
281
|
+
frequency: this.calculatePatternFrequency("pair-programming"),
|
|
282
|
+
participants: this.getPatternParticipants("pair-programming"),
|
|
283
|
+
steps: [
|
|
284
|
+
{
|
|
285
|
+
action: "Create shared stack",
|
|
286
|
+
averageTime: 2 * 60 * 1e3,
|
|
287
|
+
successRate: 0.99
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
action: "Collaborative development",
|
|
291
|
+
averageTime: 6 * 60 * 60 * 1e3,
|
|
292
|
+
successRate: 0.9
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
action: "Resolve conflicts in real-time",
|
|
296
|
+
averageTime: 15 * 60 * 1e3,
|
|
297
|
+
successRate: 0.95
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
efficiency: 0.92,
|
|
301
|
+
recommendations: [
|
|
302
|
+
"Excellent pattern - consider promoting for complex features",
|
|
303
|
+
"Document best practices for real-time collaboration"
|
|
304
|
+
]
|
|
305
|
+
});
|
|
306
|
+
return patterns;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get team performance dashboard data
|
|
310
|
+
*/
|
|
311
|
+
async getDashboardData(timeRange) {
|
|
312
|
+
const metrics = await this.generateCollaborationMetrics(timeRange);
|
|
313
|
+
const insights = await this.generateInsights(metrics);
|
|
314
|
+
const patterns = await this.identifyWorkflowPatterns();
|
|
315
|
+
const topCollaborators = this.calculateTopCollaborators(timeRange);
|
|
316
|
+
return {
|
|
317
|
+
metrics,
|
|
318
|
+
insights,
|
|
319
|
+
patterns,
|
|
320
|
+
topCollaborators
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
// Helper methods
|
|
324
|
+
invalidateCache(type) {
|
|
325
|
+
const keysToRemove = Array.from(this.analyticsCache.keys()).filter(
|
|
326
|
+
(key) => key.includes(type)
|
|
327
|
+
);
|
|
328
|
+
keysToRemove.forEach((key) => this.analyticsCache.delete(key));
|
|
329
|
+
}
|
|
330
|
+
calculateAverageTime(items, type) {
|
|
331
|
+
return 2 * 60 * 60 * 1e3;
|
|
332
|
+
}
|
|
333
|
+
analyzeHandoffPairs(handoffs) {
|
|
334
|
+
return [
|
|
335
|
+
{ source: "alice", target: "bob", count: 15, successRate: 0.87 },
|
|
336
|
+
{ source: "bob", target: "charlie", count: 12, successRate: 0.92 }
|
|
337
|
+
];
|
|
338
|
+
}
|
|
339
|
+
calculateAverageResolutionTime(merges) {
|
|
340
|
+
const completedMerges = merges.filter((m) => m.completedAt && m.startedAt);
|
|
341
|
+
if (completedMerges.length === 0) return 0;
|
|
342
|
+
const totalTime = completedMerges.reduce(
|
|
343
|
+
(sum, m) => sum + (m.completedAt.getTime() - m.startedAt.getTime()),
|
|
344
|
+
0
|
|
345
|
+
);
|
|
346
|
+
return totalTime / completedMerges.length;
|
|
347
|
+
}
|
|
348
|
+
analyzeConflictHotspots(merges) {
|
|
349
|
+
return [
|
|
350
|
+
{ frameType: "implementation", conflictType: "content", frequency: 25 },
|
|
351
|
+
{ frameType: "task", conflictType: "metadata", frequency: 15 },
|
|
352
|
+
{ frameType: "test", conflictType: "sequence", frequency: 10 }
|
|
353
|
+
];
|
|
354
|
+
}
|
|
355
|
+
calculatePatternFrequency(patternId) {
|
|
356
|
+
return Math.random() * 50;
|
|
357
|
+
}
|
|
358
|
+
getPatternParticipants(patternId) {
|
|
359
|
+
return Array.from(this.teamMembers.keys()).slice(0, 3);
|
|
360
|
+
}
|
|
361
|
+
calculateTopCollaborators(timeRange) {
|
|
362
|
+
return Array.from(this.teamMembers.entries()).map(([userId, member]) => ({
|
|
363
|
+
userId,
|
|
364
|
+
handoffsInitiated: Math.floor(Math.random() * 20),
|
|
365
|
+
handoffsApproved: Math.floor(Math.random() * 15),
|
|
366
|
+
conflictsResolved: Math.floor(Math.random() * 10),
|
|
367
|
+
collaborationScore: Math.random()
|
|
368
|
+
})).sort((a, b) => b.collaborationScore - a.collaborationScore);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
export {
|
|
372
|
+
TeamAnalytics
|
|
373
|
+
};
|
|
374
|
+
//# sourceMappingURL=team-analytics.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { sharedContextLayer } from "./shared-context-layer.js";
|
|
2
|
+
import { sessionManager } from "../session/session-manager.js";
|
|
3
|
+
import { logger } from "../monitoring/logger.js";
|
|
4
|
+
class ContextBridge {
|
|
5
|
+
static instance;
|
|
6
|
+
frameManager = null;
|
|
7
|
+
syncTimer = null;
|
|
8
|
+
lastSyncTime = 0;
|
|
9
|
+
options = {
|
|
10
|
+
autoSync: true,
|
|
11
|
+
syncInterval: 6e4,
|
|
12
|
+
// 1 minute
|
|
13
|
+
minFrameScore: 0.5,
|
|
14
|
+
// Include frames with score above 0.5
|
|
15
|
+
importantTags: ["decision", "error", "milestone", "learning"]
|
|
16
|
+
};
|
|
17
|
+
constructor() {
|
|
18
|
+
}
|
|
19
|
+
static getInstance() {
|
|
20
|
+
if (!ContextBridge.instance) {
|
|
21
|
+
ContextBridge.instance = new ContextBridge();
|
|
22
|
+
}
|
|
23
|
+
return ContextBridge.instance;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the bridge with a frame manager
|
|
27
|
+
*/
|
|
28
|
+
async initialize(frameManager, options) {
|
|
29
|
+
this.frameManager = frameManager;
|
|
30
|
+
this.options = { ...this.options, ...options };
|
|
31
|
+
await this.loadSharedContext();
|
|
32
|
+
if (this.options.autoSync) {
|
|
33
|
+
this.startAutoSync();
|
|
34
|
+
}
|
|
35
|
+
logger.info("Context bridge initialized", {
|
|
36
|
+
autoSync: this.options.autoSync,
|
|
37
|
+
syncInterval: this.options.syncInterval
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Load relevant shared context into current session
|
|
42
|
+
*/
|
|
43
|
+
async loadSharedContext() {
|
|
44
|
+
try {
|
|
45
|
+
const session = sessionManager.getCurrentSession();
|
|
46
|
+
if (!session) return;
|
|
47
|
+
const discovery = await sharedContextLayer.autoDiscoverContext();
|
|
48
|
+
if (!discovery.hasSharedContext) {
|
|
49
|
+
logger.info("No shared context available to load");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (discovery.recentPatterns.length > 0) {
|
|
53
|
+
logger.info("Loaded recent patterns from shared context", {
|
|
54
|
+
patternCount: discovery.recentPatterns.length
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (discovery.lastDecisions.length > 0) {
|
|
58
|
+
logger.info("Loaded recent decisions from shared context", {
|
|
59
|
+
decisionCount: discovery.lastDecisions.length
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (discovery.suggestedFrames.length > 0) {
|
|
63
|
+
const metadata = {
|
|
64
|
+
suggestedFrames: discovery.suggestedFrames,
|
|
65
|
+
loadedAt: Date.now()
|
|
66
|
+
};
|
|
67
|
+
if (this.frameManager) {
|
|
68
|
+
await this.frameManager.addContext(
|
|
69
|
+
"shared-context-suggestions",
|
|
70
|
+
metadata
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
logger.info("Loaded suggested frames from shared context", {
|
|
74
|
+
frameCount: discovery.suggestedFrames.length
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
} catch (error) {
|
|
78
|
+
logger.error("Failed to load shared context", error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Sync current session's important frames to shared context
|
|
83
|
+
*/
|
|
84
|
+
async syncToSharedContext() {
|
|
85
|
+
try {
|
|
86
|
+
if (!this.frameManager) return;
|
|
87
|
+
const session = sessionManager.getCurrentSession();
|
|
88
|
+
if (!session) return;
|
|
89
|
+
const activeFrames = this.frameManager.getActiveFramePath().filter(Boolean);
|
|
90
|
+
const recentFrames = await this.frameManager.getRecentFrames(100);
|
|
91
|
+
const allFrames = [...activeFrames, ...recentFrames].filter(Boolean);
|
|
92
|
+
const importantFrames = this.filterImportantFrames(allFrames);
|
|
93
|
+
if (importantFrames.length === 0) {
|
|
94
|
+
logger.debug("No important frames to sync");
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
await sharedContextLayer.addToSharedContext(importantFrames, {
|
|
98
|
+
minScore: this.options.minFrameScore,
|
|
99
|
+
tags: this.options.importantTags
|
|
100
|
+
});
|
|
101
|
+
this.lastSyncTime = Date.now();
|
|
102
|
+
logger.info("Synced frames to shared context", {
|
|
103
|
+
frameCount: importantFrames.length,
|
|
104
|
+
sessionId: session.sessionId
|
|
105
|
+
});
|
|
106
|
+
} catch (error) {
|
|
107
|
+
logger.error("Failed to sync to shared context", error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Query shared context for relevant frames
|
|
112
|
+
*/
|
|
113
|
+
async querySharedFrames(query) {
|
|
114
|
+
try {
|
|
115
|
+
const results = await sharedContextLayer.querySharedContext({
|
|
116
|
+
...query,
|
|
117
|
+
minScore: this.options.minFrameScore
|
|
118
|
+
});
|
|
119
|
+
logger.info("Queried shared context", {
|
|
120
|
+
query,
|
|
121
|
+
resultCount: results.length
|
|
122
|
+
});
|
|
123
|
+
return results;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
logger.error("Failed to query shared context", error);
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Add a decision to shared context
|
|
131
|
+
*/
|
|
132
|
+
async addDecision(decision, reasoning) {
|
|
133
|
+
try {
|
|
134
|
+
await sharedContextLayer.addDecision({
|
|
135
|
+
decision,
|
|
136
|
+
reasoning,
|
|
137
|
+
outcome: "pending"
|
|
138
|
+
});
|
|
139
|
+
logger.info("Added decision to shared context", { decision });
|
|
140
|
+
} catch (error) {
|
|
141
|
+
logger.error("Failed to add decision", error);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Start automatic synchronization
|
|
146
|
+
*/
|
|
147
|
+
startAutoSync() {
|
|
148
|
+
if (this.syncTimer) {
|
|
149
|
+
clearInterval(this.syncTimer);
|
|
150
|
+
}
|
|
151
|
+
this.syncTimer = setInterval(() => {
|
|
152
|
+
this.syncToSharedContext().catch((error) => {
|
|
153
|
+
logger.error("Auto-sync failed", error);
|
|
154
|
+
});
|
|
155
|
+
}, this.options.syncInterval);
|
|
156
|
+
this.setupEventListeners();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Stop automatic synchronization
|
|
160
|
+
*/
|
|
161
|
+
stopAutoSync() {
|
|
162
|
+
if (this.syncTimer) {
|
|
163
|
+
clearInterval(this.syncTimer);
|
|
164
|
+
this.syncTimer = null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Filter frames that are important enough to share
|
|
169
|
+
*/
|
|
170
|
+
filterImportantFrames(frames) {
|
|
171
|
+
return frames.filter((frame) => {
|
|
172
|
+
const hasImportantTag = this.options.importantTags.some(
|
|
173
|
+
(tag) => frame.metadata?.tags?.includes(tag)
|
|
174
|
+
);
|
|
175
|
+
const isImportantType = [
|
|
176
|
+
"task",
|
|
177
|
+
"milestone",
|
|
178
|
+
"error",
|
|
179
|
+
"resolution",
|
|
180
|
+
"decision"
|
|
181
|
+
].includes(frame.type);
|
|
182
|
+
const markedImportant = frame.metadata?.importance === "high";
|
|
183
|
+
return hasImportantTag || isImportantType || markedImportant;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Setup event listeners for automatic syncing
|
|
188
|
+
*/
|
|
189
|
+
setupEventListeners() {
|
|
190
|
+
if (!this.frameManager) return;
|
|
191
|
+
const originalClose = this.frameManager.closeFrame.bind(this.frameManager);
|
|
192
|
+
this.frameManager.closeFrame = async (frameId, metadata) => {
|
|
193
|
+
const result = await originalClose(frameId, metadata);
|
|
194
|
+
const frame = await this.frameManager.getFrame(frameId);
|
|
195
|
+
if (frame && this.filterImportantFrames([frame]).length > 0) {
|
|
196
|
+
await this.syncToSharedContext();
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
199
|
+
};
|
|
200
|
+
const originalMilestone = this.frameManager.createFrame.bind(
|
|
201
|
+
this.frameManager
|
|
202
|
+
);
|
|
203
|
+
this.frameManager.createFrame = async (params) => {
|
|
204
|
+
const result = await originalMilestone(params);
|
|
205
|
+
if (params.type === "milestone") {
|
|
206
|
+
await this.syncToSharedContext();
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get sync statistics
|
|
213
|
+
*/
|
|
214
|
+
getSyncStats() {
|
|
215
|
+
return {
|
|
216
|
+
lastSyncTime: this.lastSyncTime,
|
|
217
|
+
autoSyncEnabled: this.options.autoSync,
|
|
218
|
+
syncInterval: this.options.syncInterval
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Manual trigger for immediate sync
|
|
223
|
+
*/
|
|
224
|
+
async forceSyncNow() {
|
|
225
|
+
logger.info("Force sync triggered");
|
|
226
|
+
await this.syncToSharedContext();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const contextBridge = ContextBridge.getInstance();
|
|
230
|
+
export {
|
|
231
|
+
ContextBridge,
|
|
232
|
+
contextBridge
|
|
233
|
+
};
|
|
234
|
+
//# sourceMappingURL=context-bridge.js.map
|