@stackmemoryai/stackmemory 0.5.5 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/core/agent-task-manager.js +4 -0
- package/dist/agents/core/agent-task-manager.js.map +1 -1
- package/dist/agents/testing-agent.js +4 -0
- package/dist/agents/testing-agent.js.map +1 -1
- package/dist/agents/verifiers/base-verifier.js +4 -0
- package/dist/agents/verifiers/base-verifier.js.map +1 -1
- package/dist/agents/verifiers/formatter-verifier.js +4 -0
- package/dist/agents/verifiers/formatter-verifier.js.map +1 -1
- package/dist/agents/verifiers/llm-judge.js +4 -0
- package/dist/agents/verifiers/llm-judge.js.map +1 -1
- package/dist/cli/auto-detect.js +4 -0
- package/dist/cli/auto-detect.js.map +1 -1
- package/dist/cli/browser-test.js +4 -0
- package/dist/cli/browser-test.js.map +1 -1
- package/dist/cli/claude-sm-danger.js +4 -3
- package/dist/cli/claude-sm-danger.js.map +2 -2
- package/dist/cli/claude-sm.js +4 -0
- package/dist/cli/claude-sm.js.map +2 -2
- package/dist/cli/codex-sm.js +4 -0
- package/dist/cli/codex-sm.js.map +1 -1
- package/dist/cli/commands/api.js +4 -0
- package/dist/cli/commands/api.js.map +1 -1
- package/dist/cli/commands/cleanup-processes.js +4 -0
- package/dist/cli/commands/cleanup-processes.js.map +1 -1
- package/dist/cli/commands/clear.js +4 -0
- package/dist/cli/commands/clear.js.map +1 -1
- package/dist/cli/commands/config.js +4 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context-rehydrate.js +4 -0
- package/dist/cli/commands/context-rehydrate.js.map +1 -1
- package/dist/cli/commands/context.js +4 -0
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/dashboard.js +4 -0
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/db.js +4 -0
- package/dist/cli/commands/db.js.map +1 -1
- package/dist/cli/commands/decision.js +4 -0
- package/dist/cli/commands/decision.js.map +1 -1
- package/dist/cli/commands/handoff.js +4 -0
- package/dist/cli/commands/handoff.js.map +1 -1
- package/dist/cli/commands/hooks.js +4 -0
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli/commands/linear-unified.js +4 -0
- package/dist/cli/commands/linear-unified.js.map +1 -1
- package/dist/cli/commands/linear.js +4 -0
- package/dist/cli/commands/linear.js.map +1 -1
- package/dist/cli/commands/log.js +4 -0
- package/dist/cli/commands/log.js.map +1 -1
- package/dist/cli/commands/login.js +4 -0
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/migrate.js +4 -0
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/monitor.js +4 -0
- package/dist/cli/commands/monitor.js.map +1 -1
- package/dist/cli/commands/onboard.js +4 -0
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/projects.js +4 -0
- package/dist/cli/commands/projects.js.map +1 -1
- package/dist/cli/commands/quality.js +4 -0
- package/dist/cli/commands/quality.js.map +1 -1
- package/dist/cli/commands/ralph.js +4 -0
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/search.js +4 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/service.js +4 -0
- package/dist/cli/commands/service.js.map +1 -1
- package/dist/cli/commands/session.js +4 -0
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/shell.js +5 -4
- package/dist/cli/commands/shell.js.map +2 -2
- package/dist/cli/commands/signup.js +4 -0
- package/dist/cli/commands/signup.js.map +1 -1
- package/dist/cli/commands/skills.js +4 -0
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/storage-tier.js +4 -0
- package/dist/cli/commands/storage-tier.js.map +1 -1
- package/dist/cli/commands/storage.js +4 -0
- package/dist/cli/commands/storage.js.map +1 -1
- package/dist/cli/commands/sweep.js +5 -4
- package/dist/cli/commands/sweep.js.map +2 -2
- package/dist/cli/commands/tasks.js +4 -0
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/test.js +4 -0
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/workflow.js +4 -0
- package/dist/cli/commands/workflow.js.map +1 -1
- package/dist/cli/commands/worktree.js +4 -0
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/viewer.js +4 -0
- package/dist/cli/utils/viewer.js.map +1 -1
- package/dist/core/analytics/team-analytics.js +4 -0
- package/dist/core/analytics/team-analytics.js.map +1 -1
- package/dist/core/config/config-manager.js +4 -0
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/storage-config.js +4 -0
- package/dist/core/config/storage-config.js.map +1 -1
- package/dist/core/config/types.js +4 -0
- package/dist/core/config/types.js.map +1 -1
- package/dist/core/context/auto-context.js +4 -0
- package/dist/core/context/auto-context.js.map +1 -1
- package/dist/core/context/compaction-handler.js +4 -0
- package/dist/core/context/compaction-handler.js.map +1 -1
- package/dist/core/context/context-bridge.js +4 -0
- package/dist/core/context/context-bridge.js.map +1 -1
- package/dist/core/context/dual-stack-manager.js +4 -0
- package/dist/core/context/dual-stack-manager.js.map +1 -1
- package/dist/core/context/enhanced-rehydration.js +4 -0
- package/dist/core/context/enhanced-rehydration.js.map +1 -1
- package/dist/core/context/frame-database.js +4 -0
- package/dist/core/context/frame-database.js.map +1 -1
- package/dist/core/context/frame-digest.js +4 -0
- package/dist/core/context/frame-digest.js.map +1 -1
- package/dist/core/context/frame-handoff-manager.js +4 -0
- package/dist/core/context/frame-handoff-manager.js.map +1 -1
- package/dist/core/context/frame-manager.js +4 -0
- package/dist/core/context/frame-manager.js.map +1 -1
- package/dist/core/context/frame-stack.js +4 -0
- package/dist/core/context/frame-stack.js.map +1 -1
- package/dist/core/context/frame-types.js +4 -0
- package/dist/core/context/incremental-gc.js +4 -0
- package/dist/core/context/incremental-gc.js.map +1 -1
- package/dist/core/context/index.js +4 -0
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/model-aware-compaction.js +4 -0
- package/dist/core/context/model-aware-compaction.js.map +1 -1
- package/dist/core/context/permission-manager.js +4 -0
- package/dist/core/context/permission-manager.js.map +1 -1
- package/dist/core/context/recursive-context-manager.js +4 -0
- package/dist/core/context/recursive-context-manager.js.map +1 -1
- package/dist/core/context/refactored-frame-manager.js +4 -0
- package/dist/core/context/refactored-frame-manager.js.map +1 -1
- package/dist/core/context/shared-context-layer.js +4 -0
- package/dist/core/context/shared-context-layer.js.map +1 -1
- package/dist/core/context/stack-merge-resolver.js +4 -0
- package/dist/core/context/stack-merge-resolver.js.map +1 -1
- package/dist/core/context/validation.js +4 -0
- package/dist/core/context/validation.js.map +1 -1
- package/dist/core/database/batch-operations.js +4 -0
- package/dist/core/database/batch-operations.js.map +1 -1
- package/dist/core/database/connection-pool.js +4 -0
- package/dist/core/database/connection-pool.js.map +1 -1
- package/dist/core/database/database-adapter.js +4 -0
- package/dist/core/database/database-adapter.js.map +1 -1
- package/dist/core/database/migration-manager.js +4 -0
- package/dist/core/database/migration-manager.js.map +1 -1
- package/dist/core/database/paradedb-adapter.js +4 -0
- package/dist/core/database/paradedb-adapter.js.map +1 -1
- package/dist/core/database/query-cache.js +4 -0
- package/dist/core/database/query-cache.js.map +1 -1
- package/dist/core/database/query-router.js +4 -0
- package/dist/core/database/query-router.js.map +1 -1
- package/dist/core/database/sqlite-adapter.js +4 -0
- package/dist/core/database/sqlite-adapter.js.map +1 -1
- package/dist/core/digest/enhanced-hybrid-digest.js +4 -0
- package/dist/core/digest/enhanced-hybrid-digest.js.map +1 -1
- package/dist/core/digest/frame-digest-integration.js +4 -0
- package/dist/core/digest/frame-digest-integration.js.map +1 -1
- package/dist/core/digest/hybrid-digest-generator.js +4 -0
- package/dist/core/digest/hybrid-digest-generator.js.map +1 -1
- package/dist/core/digest/index.js +4 -0
- package/dist/core/digest/index.js.map +1 -1
- package/dist/core/digest/types.js +4 -0
- package/dist/core/digest/types.js.map +1 -1
- package/dist/core/errors/index.js +4 -0
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/recovery.js +4 -0
- package/dist/core/errors/recovery.js.map +1 -1
- package/dist/core/execution/parallel-executor.js +4 -0
- package/dist/core/execution/parallel-executor.js.map +1 -1
- package/dist/core/frame/workflow-templates.js +4 -0
- package/dist/core/frame/workflow-templates.js.map +1 -1
- package/dist/core/merge/conflict-detector.js +4 -0
- package/dist/core/merge/conflict-detector.js.map +1 -1
- package/dist/core/merge/index.js +4 -0
- package/dist/core/merge/index.js.map +1 -1
- package/dist/core/merge/resolution-engine.js +4 -0
- package/dist/core/merge/resolution-engine.js.map +1 -1
- package/dist/core/merge/stack-diff.js +4 -0
- package/dist/core/merge/stack-diff.js.map +1 -1
- package/dist/core/merge/types.js +4 -0
- package/dist/core/monitoring/error-handler.js +4 -0
- package/dist/core/monitoring/error-handler.js.map +1 -1
- package/dist/core/monitoring/logger.js +4 -0
- package/dist/core/monitoring/logger.js.map +1 -1
- package/dist/core/monitoring/metrics.js +4 -0
- package/dist/core/monitoring/metrics.js.map +1 -1
- package/dist/core/monitoring/progress-tracker.js +4 -0
- package/dist/core/monitoring/progress-tracker.js.map +1 -1
- package/dist/core/monitoring/session-monitor.js +4 -0
- package/dist/core/monitoring/session-monitor.js.map +1 -1
- package/dist/core/performance/context-cache.js +4 -0
- package/dist/core/performance/context-cache.js.map +1 -1
- package/dist/core/performance/index.js +4 -0
- package/dist/core/performance/index.js.map +1 -1
- package/dist/core/performance/lazy-context-loader.js +4 -0
- package/dist/core/performance/lazy-context-loader.js.map +1 -1
- package/dist/core/performance/monitor.js +4 -0
- package/dist/core/performance/monitor.js.map +1 -1
- package/dist/core/performance/optimized-frame-context.js +4 -0
- package/dist/core/performance/optimized-frame-context.js.map +1 -1
- package/dist/core/performance/performance-benchmark.js +4 -0
- package/dist/core/performance/performance-benchmark.js.map +1 -1
- package/dist/core/performance/performance-profiler.js +4 -0
- package/dist/core/performance/performance-profiler.js.map +1 -1
- package/dist/core/performance/streaming-jsonl-parser.js +4 -0
- package/dist/core/performance/streaming-jsonl-parser.js.map +1 -1
- package/dist/core/persistence/postgres-adapter.js +4 -0
- package/dist/core/persistence/postgres-adapter.js.map +1 -1
- package/dist/core/projects/project-isolation.js +4 -0
- package/dist/core/projects/project-isolation.js.map +1 -1
- package/dist/core/projects/project-manager.js +4 -0
- package/dist/core/projects/project-manager.js.map +1 -1
- package/dist/core/query/query-parser.js +4 -0
- package/dist/core/query/query-parser.js.map +1 -1
- package/dist/core/query/query-templates.js +4 -0
- package/dist/core/query/query-templates.js.map +1 -1
- package/dist/core/retrieval/context-retriever.js +4 -0
- package/dist/core/retrieval/context-retriever.js.map +1 -1
- package/dist/core/retrieval/graph-retrieval.js +4 -0
- package/dist/core/retrieval/graph-retrieval.js.map +1 -1
- package/dist/core/retrieval/hierarchical-retrieval.js +4 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +1 -1
- package/dist/core/retrieval/index.js +4 -0
- package/dist/core/retrieval/index.js.map +1 -1
- package/dist/core/retrieval/llm-context-retrieval.js +4 -0
- package/dist/core/retrieval/llm-context-retrieval.js.map +1 -1
- package/dist/core/retrieval/retrieval-benchmarks.js +4 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +1 -1
- package/dist/core/retrieval/summary-generator.js +4 -0
- package/dist/core/retrieval/summary-generator.js.map +1 -1
- package/dist/core/retrieval/types.js +4 -0
- package/dist/core/retrieval/types.js.map +1 -1
- package/dist/core/session/clear-survival.js +4 -0
- package/dist/core/session/clear-survival.js.map +1 -1
- package/dist/core/session/enhanced-handoff.js +4 -0
- package/dist/core/session/enhanced-handoff.js.map +1 -1
- package/dist/core/session/handoff-generator.js +4 -0
- package/dist/core/session/handoff-generator.js.map +1 -1
- package/dist/core/session/index.js +4 -0
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/session-manager.js +4 -0
- package/dist/core/session/session-manager.js.map +1 -1
- package/dist/core/skills/index.js +4 -0
- package/dist/core/skills/index.js.map +1 -1
- package/dist/core/skills/skill-storage.js +4 -0
- package/dist/core/skills/skill-storage.js.map +1 -1
- package/dist/core/skills/types.js +4 -0
- package/dist/core/skills/types.js.map +1 -1
- package/dist/core/storage/chromadb-adapter.js +4 -0
- package/dist/core/storage/chromadb-adapter.js.map +1 -1
- package/dist/core/storage/infinite-storage.js +4 -0
- package/dist/core/storage/infinite-storage.js.map +1 -1
- package/dist/core/storage/railway-optimized-storage.js +4 -0
- package/dist/core/storage/railway-optimized-storage.js.map +1 -1
- package/dist/core/storage/remote-storage.js +4 -0
- package/dist/core/storage/remote-storage.js.map +1 -1
- package/dist/core/storage/two-tier-storage.js +4 -0
- package/dist/core/storage/two-tier-storage.js.map +1 -1
- package/dist/core/trace/cli-trace-wrapper.js +4 -0
- package/dist/core/trace/cli-trace-wrapper.js.map +1 -1
- package/dist/core/trace/db-trace-wrapper.js +4 -0
- package/dist/core/trace/db-trace-wrapper.js.map +1 -1
- package/dist/core/trace/debug-trace.js +4 -0
- package/dist/core/trace/debug-trace.js.map +1 -1
- package/dist/core/trace/index.js +4 -0
- package/dist/core/trace/index.js.map +1 -1
- package/dist/core/trace/linear-api-wrapper.js +4 -0
- package/dist/core/trace/linear-api-wrapper.js.map +1 -1
- package/dist/core/trace/trace-demo.js +4 -0
- package/dist/core/trace/trace-demo.js.map +1 -1
- package/dist/core/trace/trace-detector.demo.js +4 -0
- package/dist/core/trace/trace-detector.demo.js.map +1 -1
- package/dist/core/trace/trace-detector.js +4 -0
- package/dist/core/trace/trace-detector.js.map +1 -1
- package/dist/core/trace/trace-store.js +4 -0
- package/dist/core/trace/trace-store.js.map +1 -1
- package/dist/core/trace/types.js +4 -0
- package/dist/core/trace/types.js.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/utils/compression.js +4 -0
- package/dist/core/utils/compression.js.map +1 -1
- package/dist/core/utils/update-checker.js +4 -0
- package/dist/core/utils/update-checker.js.map +1 -1
- package/dist/core/worktree/worktree-manager.js +4 -0
- package/dist/core/worktree/worktree-manager.js.map +1 -1
- package/dist/daemon/session-daemon.js +4 -0
- package/dist/daemon/session-daemon.js.map +1 -1
- package/dist/features/analytics/api/analytics-api.js +4 -0
- package/dist/features/analytics/api/analytics-api.js.map +1 -1
- package/dist/features/analytics/core/analytics-service.js +4 -0
- package/dist/features/analytics/core/analytics-service.js.map +1 -1
- package/dist/features/analytics/index.js +4 -0
- package/dist/features/analytics/index.js.map +1 -1
- package/dist/features/analytics/queries/metrics-queries.js +4 -0
- package/dist/features/analytics/queries/metrics-queries.js.map +1 -1
- package/dist/features/analytics/types/metrics.js +4 -0
- package/dist/features/browser/browser-mcp.js +4 -0
- package/dist/features/browser/browser-mcp.js.map +1 -1
- package/dist/features/tasks/linear-task-manager.js +4 -0
- package/dist/features/tasks/linear-task-manager.js.map +1 -1
- package/dist/features/tasks/task-aware-context.js +4 -0
- package/dist/features/tasks/task-aware-context.js.map +1 -1
- package/dist/features/tui/simple-monitor.js +4 -0
- package/dist/features/tui/simple-monitor.js.map +1 -1
- package/dist/features/tui/swarm-monitor.js +4 -0
- package/dist/features/tui/swarm-monitor.js.map +1 -1
- package/dist/features/web/client/stores/task-store.js +4 -0
- package/dist/features/web/client/stores/task-store.js.map +1 -1
- package/dist/features/web/server/index.js +4 -0
- package/dist/features/web/server/index.js.map +1 -1
- package/dist/hooks/config.js +4 -0
- package/dist/hooks/config.js.map +1 -1
- package/dist/hooks/daemon.js +4 -0
- package/dist/hooks/daemon.js.map +1 -1
- package/dist/hooks/events.js +4 -0
- package/dist/hooks/events.js.map +1 -1
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic/client.js +4 -0
- package/dist/integrations/anthropic/client.js.map +1 -1
- package/dist/integrations/claude-code/agent-bridge.js +4 -0
- package/dist/integrations/claude-code/agent-bridge.js.map +1 -1
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +4 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +1 -1
- package/dist/integrations/claude-code/lifecycle-hooks.js +4 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +1 -1
- package/dist/integrations/claude-code/post-task-hooks.js +4 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +1 -1
- package/dist/integrations/claude-code/subagent-client-stub.js +4 -0
- package/dist/integrations/claude-code/subagent-client-stub.js.map +1 -1
- package/dist/integrations/claude-code/subagent-client.js +4 -0
- package/dist/integrations/claude-code/subagent-client.js.map +1 -1
- package/dist/integrations/claude-code/task-coordinator.js +4 -0
- package/dist/integrations/claude-code/task-coordinator.js.map +1 -1
- package/dist/integrations/linear/auth.js +4 -0
- package/dist/integrations/linear/auth.js.map +1 -1
- package/dist/integrations/linear/auto-sync.js +4 -0
- package/dist/integrations/linear/auto-sync.js.map +1 -1
- package/dist/integrations/linear/client.js +4 -0
- package/dist/integrations/linear/client.js.map +1 -1
- package/dist/integrations/linear/config.js +4 -0
- package/dist/integrations/linear/config.js.map +1 -1
- package/dist/integrations/linear/migration.js +4 -0
- package/dist/integrations/linear/migration.js.map +1 -1
- package/dist/integrations/linear/oauth-server.js +4 -0
- package/dist/integrations/linear/oauth-server.js.map +1 -1
- package/dist/integrations/linear/rest-client.js +4 -0
- package/dist/integrations/linear/rest-client.js.map +1 -1
- package/dist/integrations/linear/sync-manager.js +4 -0
- package/dist/integrations/linear/sync-manager.js.map +1 -1
- package/dist/integrations/linear/sync-service.js +4 -0
- package/dist/integrations/linear/sync-service.js.map +1 -1
- package/dist/integrations/linear/sync.js +4 -0
- package/dist/integrations/linear/sync.js.map +1 -1
- package/dist/integrations/linear/types.js +4 -0
- package/dist/integrations/linear/unified-sync.js +4 -0
- package/dist/integrations/linear/unified-sync.js.map +1 -1
- package/dist/integrations/linear/webhook-handler.js +4 -0
- package/dist/integrations/linear/webhook-handler.js.map +1 -1
- package/dist/integrations/linear/webhook-server.js +4 -0
- package/dist/integrations/linear/webhook-server.js.map +1 -1
- package/dist/integrations/linear/webhook.js +4 -0
- package/dist/integrations/linear/webhook.js.map +1 -1
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/context-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/context-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/index.js +4 -0
- package/dist/integrations/mcp/handlers/index.js.map +1 -1
- package/dist/integrations/mcp/handlers/linear-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/skill-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/task-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/task-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/trace-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +1 -1
- package/dist/integrations/mcp/index.js +4 -0
- package/dist/integrations/mcp/index.js.map +1 -1
- package/dist/integrations/mcp/middleware/tool-scoring.js +4 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +1 -1
- package/dist/integrations/mcp/refactored-server.js +4 -0
- package/dist/integrations/mcp/refactored-server.js.map +1 -1
- package/dist/integrations/mcp/server.js +4 -0
- package/dist/integrations/mcp/server.js.map +1 -1
- package/dist/integrations/mcp/tool-definitions-code.js +4 -0
- package/dist/integrations/mcp/tool-definitions-code.js.map +1 -1
- package/dist/integrations/mcp/tool-definitions.js +4 -0
- package/dist/integrations/mcp/tool-definitions.js.map +1 -1
- package/dist/integrations/mcp/trace-test.js +4 -0
- package/dist/integrations/mcp/trace-test.js.map +1 -1
- package/dist/integrations/pg-aiguide/embedding-provider.js +4 -0
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +1 -1
- package/dist/integrations/pg-aiguide/semantic-search.js +4 -0
- package/dist/integrations/pg-aiguide/semantic-search.js.map +1 -1
- package/dist/integrations/pg-aiguide/timescale-analytics.js +4 -0
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +1 -1
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +4 -0
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +1 -1
- package/dist/integrations/ralph/context/context-budget-manager.js +4 -0
- package/dist/integrations/ralph/context/context-budget-manager.js.map +1 -1
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +4 -0
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +1 -1
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +4 -0
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +1 -1
- package/dist/integrations/ralph/index.js +4 -0
- package/dist/integrations/ralph/index.js.map +1 -1
- package/dist/integrations/ralph/learning/pattern-learner.js +4 -0
- package/dist/integrations/ralph/learning/pattern-learner.js.map +1 -1
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +4 -0
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +1 -1
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +4 -0
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +1 -1
- package/dist/integrations/ralph/monitoring/swarm-registry.js +4 -0
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +1 -1
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +4 -0
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +1 -1
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +4 -0
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +1 -1
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +4 -0
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +1 -1
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +4 -0
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +1 -1
- package/dist/integrations/ralph/performance/performance-optimizer.js +4 -0
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +1 -1
- package/dist/integrations/ralph/ralph-integration-demo.js +4 -0
- package/dist/integrations/ralph/ralph-integration-demo.js.map +1 -1
- package/dist/integrations/ralph/recovery/crash-recovery.js +4 -0
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +1 -1
- package/dist/integrations/ralph/state/state-reconciler.js +4 -0
- package/dist/integrations/ralph/state/state-reconciler.js.map +1 -1
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +4 -0
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +1 -1
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +4 -0
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +1 -1
- package/dist/integrations/ralph/types.js +4 -0
- package/dist/integrations/ralph/visualization/ralph-debugger.js +4 -0
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +1 -1
- package/dist/mcp/stackmemory-mcp-server.js +4 -0
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/middleware/exponential-rate-limiter.js +4 -0
- package/dist/middleware/exponential-rate-limiter.js.map +1 -1
- package/dist/models/user.model.js +4 -0
- package/dist/models/user.model.js.map +1 -1
- package/dist/servers/production/auth-middleware.js +4 -0
- package/dist/servers/production/auth-middleware.js.map +1 -1
- package/dist/servers/railway/config.js +4 -0
- package/dist/servers/railway/config.js.map +1 -1
- package/dist/servers/railway/index-enhanced.js +4 -0
- package/dist/servers/railway/index-enhanced.js.map +1 -1
- package/dist/servers/railway/index.js +4 -0
- package/dist/servers/railway/index.js.map +1 -1
- package/dist/servers/railway/simple.js +4 -0
- package/dist/servers/railway/simple.js.map +1 -1
- package/dist/servers/railway/storage-test.js +4 -0
- package/dist/servers/railway/storage-test.js.map +1 -1
- package/dist/services/config-service.js +4 -0
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/context-service.js +4 -0
- package/dist/services/context-service.js.map +1 -1
- package/dist/skills/api-discovery.js +4 -0
- package/dist/skills/api-discovery.js.map +1 -1
- package/dist/skills/api-skill.js +4 -0
- package/dist/skills/api-skill.js.map +1 -1
- package/dist/skills/claude-skills.js +4 -0
- package/dist/skills/claude-skills.js.map +1 -1
- package/dist/skills/dashboard-launcher.js +4 -0
- package/dist/skills/dashboard-launcher.js.map +1 -1
- package/dist/skills/recursive-agent-orchestrator.js +4 -0
- package/dist/skills/recursive-agent-orchestrator.js.map +1 -1
- package/dist/skills/repo-ingestion-skill.js +4 -0
- package/dist/skills/repo-ingestion-skill.js.map +1 -1
- package/dist/skills/security-secrets-scanner.js +4 -0
- package/dist/skills/security-secrets-scanner.js.map +1 -1
- package/dist/skills/unified-rlm-orchestrator.js +4 -0
- package/dist/skills/unified-rlm-orchestrator.js.map +1 -1
- package/dist/types/task.js +4 -0
- package/dist/utils/env.js +4 -0
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/formatting.js +4 -0
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/process-cleanup.js +4 -0
- package/dist/utils/process-cleanup.js.map +1 -1
- package/dist/validation/schemas.js +4 -0
- package/dist/validation/schemas.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import { MetricsQueries } from "../queries/metrics-queries.js";
|
|
2
6
|
import { LinearClient } from "../../../integrations/linear/client.js";
|
|
3
7
|
import { LinearTaskManager } from "../../tasks/linear-task-manager.js";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/features/analytics/core/analytics-service.ts"],
|
|
4
4
|
"sourcesContent": ["import { MetricsQueries } from '../queries/metrics-queries.js';\nimport { LinearClient } from '../../../integrations/linear/client.js';\nimport { LinearTaskManager } from '../../tasks/linear-task-manager.js';\nimport Database from 'better-sqlite3';\nimport {\n TaskMetrics,\n TeamMetrics,\n TaskAnalytics,\n DashboardState,\n TimeRange,\n AnalyticsQuery,\n} from '../types/metrics.js';\nimport path from 'path';\nimport fs from 'fs';\nimport os from 'os';\n// Type-safe environment variable access\nfunction getEnv(key: string, defaultValue?: string): string {\n const value = process.env[key];\n if (value === undefined) {\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Environment variable ${key} is required`);\n }\n return value;\n}\n\nfunction getOptionalEnv(key: string): string | undefined {\n return process.env[key];\n}\n\nexport class AnalyticsService {\n private metricsQueries: MetricsQueries;\n private linearClient?: LinearClient;\n private taskStore?: LinearTaskManager;\n private dbPath: string;\n private projectPath: string;\n private updateCallbacks: Set<(state: DashboardState) => void> = new Set();\n\n constructor(projectPath?: string) {\n this.projectPath = projectPath || process.cwd();\n this.dbPath = path.join(this.projectPath, '.stackmemory', 'analytics.db');\n\n this.ensureDirectoryExists();\n this.metricsQueries = new MetricsQueries(this.dbPath);\n\n // Initialize task store for syncing\n this.initializeTaskStore();\n\n if (process.env['LINEAR_API_KEY']) {\n this.initializeLinearIntegration();\n }\n }\n\n private initializeTaskStore(): void {\n try {\n const contextDbPath = path.join(\n this.projectPath,\n '.stackmemory',\n 'context.db'\n );\n if (fs.existsSync(contextDbPath)) {\n const db = new Database(contextDbPath);\n this.taskStore = new LinearTaskManager(this.projectPath, db);\n }\n } catch (error: unknown) {\n console.error('Failed to initialize task store:', error);\n }\n }\n\n private ensureDirectoryExists(): void {\n const dir = path.dirname(this.dbPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n private async initializeLinearIntegration(): Promise<void> {\n try {\n const configPath = path.join(\n os.homedir(),\n '.stackmemory',\n 'linear-config.json'\n );\n if (fs.existsSync(configPath)) {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));\n this.linearClient = new LinearClient(config);\n await this.syncLinearTasks();\n }\n } catch (error: unknown) {\n console.error('Failed to initialize Linear integration:', error);\n }\n }\n\n async syncLinearTasks(): Promise<void> {\n // First sync from task store (which includes Linear-synced tasks)\n await this.syncFromTaskStore();\n\n // Then try direct Linear sync if client available\n if (this.linearClient) {\n try {\n const issues = await this.linearClient.getIssues({ limit: 100 });\n for (const issue of issues) {\n const task: TaskAnalytics = {\n id: issue.id,\n title: issue.title,\n state: this.mapLinearState(issue.state.type),\n createdAt: new Date(issue.createdAt),\n completedAt:\n issue.state.type === 'completed'\n ? new Date(issue.updatedAt)\n : undefined,\n estimatedEffort: issue.estimate ? issue.estimate * 60 : undefined,\n assigneeId: issue.assignee?.id,\n priority: this.mapLinearPriority(issue.priority),\n labels: Array.isArray(issue.labels)\n ? issue.labels.map((l: any) => l.name)\n : (issue.labels as any)?.nodes?.map((l: any) => l.name) || [],\n blockingIssues: [],\n };\n this.metricsQueries.upsertTask(task);\n }\n } catch (error: unknown) {\n console.error('Failed to sync from Linear API:', error);\n }\n }\n\n await this.notifyUpdate();\n }\n\n async syncFromTaskStore(): Promise<number> {\n if (!this.taskStore) return 0;\n\n try {\n // Get all tasks including completed ones\n const allTasks = this.getAllTasksFromStore();\n let synced = 0;\n\n for (const task of allTasks) {\n const analyticsTask: TaskAnalytics = {\n id: task.id,\n title: task.title,\n state: this.mapTaskStatus(task.status),\n createdAt: new Date(task.created_at * 1000),\n completedAt: task.completed_at\n ? new Date(task.completed_at * 1000)\n : undefined,\n estimatedEffort: task.estimated_effort,\n actualEffort: task.actual_effort,\n assigneeId: task.assignee,\n priority: task.priority as TaskAnalytics['priority'],\n labels: task.tags || [],\n blockingIssues: task.depends_on || [],\n };\n this.metricsQueries.upsertTask(analyticsTask);\n synced++;\n }\n\n return synced;\n } catch (error: unknown) {\n console.error('Failed to sync from task store:', error);\n return 0;\n }\n }\n\n private getAllTasksFromStore(): any[] {\n if (!this.taskStore) return [];\n\n try {\n // Access the db directly to get ALL tasks including completed\n const contextDbPath = path.join(\n this.projectPath,\n '.stackmemory',\n 'context.db'\n );\n const db = new Database(contextDbPath);\n\n const rows = db\n .prepare(\n `\n SELECT * FROM task_cache \n ORDER BY created_at DESC\n `\n )\n .all() as any[];\n\n db.close();\n\n // Hydrate the rows\n return rows.map((row) => ({\n id: row.id,\n title: row.title,\n description: row.description,\n status: row.status,\n priority: row.priority,\n created_at: row.created_at,\n completed_at: row.completed_at,\n estimated_effort: row.estimated_effort,\n actual_effort: row.actual_effort,\n assignee: row.assignee,\n tags: JSON.parse(row.tags || '[]'),\n depends_on: JSON.parse(row.depends_on || '[]'),\n }));\n } catch (error: unknown) {\n console.error('Failed to get all tasks:', error);\n return [];\n }\n }\n\n private mapTaskStatus(status: string): TaskAnalytics['state'] {\n const statusMap: Record<string, TaskAnalytics['state']> = {\n pending: 'todo',\n in_progress: 'in_progress',\n completed: 'completed',\n blocked: 'blocked',\n cancelled: 'blocked',\n };\n return statusMap[status] || 'todo';\n }\n\n private mapLinearState(linearState: string): TaskAnalytics['state'] {\n const stateMap: Record<string, TaskAnalytics['state']> = {\n backlog: 'todo',\n unstarted: 'todo',\n started: 'in_progress',\n completed: 'completed',\n done: 'completed',\n canceled: 'blocked',\n };\n return stateMap[linearState.toLowerCase()] || 'todo';\n }\n\n private mapLinearPriority(priority: number): TaskAnalytics['priority'] {\n if (priority === 1) return 'urgent';\n if (priority === 2) return 'high';\n if (priority === 3) return 'medium';\n return 'low';\n }\n\n async getDashboardState(query: AnalyticsQuery = {}): Promise<DashboardState> {\n const timeRange = query.timeRange || this.getDefaultTimeRange();\n\n const metrics = this.metricsQueries.getTaskMetrics({\n ...query,\n timeRange,\n });\n\n const recentTasks = this.metricsQueries.getRecentTasks({\n ...query,\n limit: 20,\n });\n\n const teamMetrics = await this.getTeamMetrics(query);\n\n return {\n metrics,\n teamMetrics,\n recentTasks,\n timeRange,\n teamFilter: query.userIds || [],\n isLive: this.updateCallbacks.size > 0,\n lastUpdated: new Date(),\n };\n }\n\n private async getTeamMetrics(query: AnalyticsQuery): Promise<TeamMetrics[]> {\n const uniqueUserIds = new Set<string>();\n const tasks = this.metricsQueries.getRecentTasks({ limit: 1000 });\n\n tasks.forEach((task) => {\n if (task.assigneeId) {\n uniqueUserIds.add(task.assigneeId);\n }\n });\n\n const teamMetrics: TeamMetrics[] = [];\n const totalCompleted = tasks.filter((t) => t.state === 'completed').length;\n\n for (const userId of uniqueUserIds) {\n const userQuery = { ...query, userIds: [userId] };\n const individualMetrics = this.metricsQueries.getTaskMetrics(userQuery);\n\n teamMetrics.push({\n userId,\n userName: await this.getUserName(userId),\n individualMetrics,\n contributionPercentage:\n totalCompleted > 0\n ? (individualMetrics.completedTasks / totalCompleted) * 100\n : 0,\n lastActive: new Date(),\n });\n }\n\n return teamMetrics.sort(\n (a, b) => b.contributionPercentage - a.contributionPercentage\n );\n }\n\n private async getUserName(userId: string): Promise<string> {\n // Stub for now - would need LinearClient to expose user query method\n return userId;\n }\n\n private getDefaultTimeRange(): TimeRange {\n const end = new Date();\n const start = new Date();\n start.setDate(start.getDate() - 7);\n\n return {\n start,\n end,\n preset: '7d',\n };\n }\n\n subscribeToUpdates(callback: (state: DashboardState) => void): () => void {\n this.updateCallbacks.add(callback);\n\n return () => {\n this.updateCallbacks.delete(callback);\n };\n }\n\n private async notifyUpdate(): Promise<void> {\n const state = await this.getDashboardState();\n this.updateCallbacks.forEach((callback) => callback(state));\n }\n\n async addTask(task: TaskAnalytics): Promise<void> {\n this.metricsQueries.upsertTask(task);\n await this.notifyUpdate();\n }\n\n async updateTask(\n taskId: string,\n updates: Partial<TaskAnalytics>\n ): Promise<void> {\n const tasks = this.metricsQueries.getRecentTasks({ limit: 1 });\n const existingTask = tasks.find((t) => t.id === taskId);\n\n if (existingTask) {\n const updatedTask = { ...existingTask, ...updates };\n this.metricsQueries.upsertTask(updatedTask);\n await this.notifyUpdate();\n }\n }\n\n close(): void {\n this.metricsQueries.close();\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": ";;;;AAAA,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,yBAAyB;AAClC,OAAO,cAAc;AASrB,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,QAAQ;AAEf,SAAS,OAAO,KAAa,cAA+B;AAC1D,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,MAAI,UAAU,QAAW;AACvB,QAAI,iBAAiB,OAAW,QAAO;AACvC,UAAM,IAAI,MAAM,wBAAwB,GAAG,cAAc;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAiC;AACvD,SAAO,QAAQ,IAAI,GAAG;AACxB;AAEO,MAAM,iBAAiB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAwD,oBAAI,IAAI;AAAA,EAExE,YAAY,aAAsB;AAChC,SAAK,cAAc,eAAe,QAAQ,IAAI;AAC9C,SAAK,SAAS,KAAK,KAAK,KAAK,aAAa,gBAAgB,cAAc;AAExE,SAAK,sBAAsB;AAC3B,SAAK,iBAAiB,IAAI,eAAe,KAAK,MAAM;AAGpD,SAAK,oBAAoB;AAEzB,QAAI,QAAQ,IAAI,gBAAgB,GAAG;AACjC,WAAK,4BAA4B;AAAA,IACnC;AAAA,EACF;AAAA,EAEQ,sBAA4B;AAClC,QAAI;AACF,YAAM,gBAAgB,KAAK;AAAA,QACzB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,MACF;AACA,UAAI,GAAG,WAAW,aAAa,GAAG;AAChC,cAAM,KAAK,IAAI,SAAS,aAAa;AACrC,aAAK,YAAY,IAAI,kBAAkB,KAAK,aAAa,EAAE;AAAA,MAC7D;AAAA,IACF,SAAS,OAAgB;AACvB,cAAQ,MAAM,oCAAoC,KAAK;AAAA,IACzD;AAAA,EACF;AAAA,EAEQ,wBAA8B;AACpC,UAAM,MAAM,KAAK,QAAQ,KAAK,MAAM;AACpC,QAAI,CAAC,GAAG,WAAW,GAAG,GAAG;AACvB,SAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAc,8BAA6C;AACzD,QAAI;AACF,YAAM,aAAa,KAAK;AAAA,QACtB,GAAG,QAAQ;AAAA,QACX;AAAA,QACA;AAAA,MACF;AACA,UAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,cAAM,SAAS,KAAK,MAAM,GAAG,aAAa,YAAY,OAAO,CAAC;AAC9D,aAAK,eAAe,IAAI,aAAa,MAAM;AAC3C,cAAM,KAAK,gBAAgB;AAAA,MAC7B;AAAA,IACF,SAAS,OAAgB;AACvB,cAAQ,MAAM,4CAA4C,KAAK;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAM,kBAAiC;AAErC,UAAM,KAAK,kBAAkB;AAG7B,QAAI,KAAK,cAAc;AACrB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,aAAa,UAAU,EAAE,OAAO,IAAI,CAAC;AAC/D,mBAAW,SAAS,QAAQ;AAC1B,gBAAM,OAAsB;AAAA,YAC1B,IAAI,MAAM;AAAA,YACV,OAAO,MAAM;AAAA,YACb,OAAO,KAAK,eAAe,MAAM,MAAM,IAAI;AAAA,YAC3C,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,YACnC,aACE,MAAM,MAAM,SAAS,cACjB,IAAI,KAAK,MAAM,SAAS,IACxB;AAAA,YACN,iBAAiB,MAAM,WAAW,MAAM,WAAW,KAAK;AAAA,YACxD,YAAY,MAAM,UAAU;AAAA,YAC5B,UAAU,KAAK,kBAAkB,MAAM,QAAQ;AAAA,YAC/C,QAAQ,MAAM,QAAQ,MAAM,MAAM,IAC9B,MAAM,OAAO,IAAI,CAAC,MAAW,EAAE,IAAI,IAClC,MAAM,QAAgB,OAAO,IAAI,CAAC,MAAW,EAAE,IAAI,KAAK,CAAC;AAAA,YAC9D,gBAAgB,CAAC;AAAA,UACnB;AACA,eAAK,eAAe,WAAW,IAAI;AAAA,QACrC;AAAA,MACF,SAAS,OAAgB;AACvB,gBAAQ,MAAM,mCAAmC,KAAK;AAAA,MACxD;AAAA,IACF;AAEA,UAAM,KAAK,aAAa;AAAA,EAC1B;AAAA,EAEA,MAAM,oBAAqC;AACzC,QAAI,CAAC,KAAK,UAAW,QAAO;AAE5B,QAAI;AAEF,YAAM,WAAW,KAAK,qBAAqB;AAC3C,UAAI,SAAS;AAEb,iBAAW,QAAQ,UAAU;AAC3B,cAAM,gBAA+B;AAAA,UACnC,IAAI,KAAK;AAAA,UACT,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK,cAAc,KAAK,MAAM;AAAA,UACrC,WAAW,IAAI,KAAK,KAAK,aAAa,GAAI;AAAA,UAC1C,aAAa,KAAK,eACd,IAAI,KAAK,KAAK,eAAe,GAAI,IACjC;AAAA,UACJ,iBAAiB,KAAK;AAAA,UACtB,cAAc,KAAK;AAAA,UACnB,YAAY,KAAK;AAAA,UACjB,UAAU,KAAK;AAAA,UACf,QAAQ,KAAK,QAAQ,CAAC;AAAA,UACtB,gBAAgB,KAAK,cAAc,CAAC;AAAA,QACtC;AACA,aAAK,eAAe,WAAW,aAAa;AAC5C;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAgB;AACvB,cAAQ,MAAM,mCAAmC,KAAK;AACtD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,uBAA8B;AACpC,QAAI,CAAC,KAAK,UAAW,QAAO,CAAC;AAE7B,QAAI;AAEF,YAAM,gBAAgB,KAAK;AAAA,QACzB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,MACF;AACA,YAAM,KAAK,IAAI,SAAS,aAAa;AAErC,YAAM,OAAO,GACV;AAAA,QACC;AAAA;AAAA;AAAA;AAAA,MAIF,EACC,IAAI;AAEP,SAAG,MAAM;AAGT,aAAO,KAAK,IAAI,CAAC,SAAS;AAAA,QACxB,IAAI,IAAI;AAAA,QACR,OAAO,IAAI;AAAA,QACX,aAAa,IAAI;AAAA,QACjB,QAAQ,IAAI;AAAA,QACZ,UAAU,IAAI;AAAA,QACd,YAAY,IAAI;AAAA,QAChB,cAAc,IAAI;AAAA,QAClB,kBAAkB,IAAI;AAAA,QACtB,eAAe,IAAI;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,KAAK,MAAM,IAAI,QAAQ,IAAI;AAAA,QACjC,YAAY,KAAK,MAAM,IAAI,cAAc,IAAI;AAAA,MAC/C,EAAE;AAAA,IACJ,SAAS,OAAgB;AACvB,cAAQ,MAAM,4BAA4B,KAAK;AAC/C,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEQ,cAAc,QAAwC;AAC5D,UAAM,YAAoD;AAAA,MACxD,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AACA,WAAO,UAAU,MAAM,KAAK;AAAA,EAC9B;AAAA,EAEQ,eAAe,aAA6C;AAClE,UAAM,WAAmD;AAAA,MACvD,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AACA,WAAO,SAAS,YAAY,YAAY,CAAC,KAAK;AAAA,EAChD;AAAA,EAEQ,kBAAkB,UAA6C;AACrE,QAAI,aAAa,EAAG,QAAO;AAC3B,QAAI,aAAa,EAAG,QAAO;AAC3B,QAAI,aAAa,EAAG,QAAO;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,QAAwB,CAAC,GAA4B;AAC3E,UAAM,YAAY,MAAM,aAAa,KAAK,oBAAoB;AAE9D,UAAM,UAAU,KAAK,eAAe,eAAe;AAAA,MACjD,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,cAAc,KAAK,eAAe,eAAe;AAAA,MACrD,GAAG;AAAA,MACH,OAAO;AAAA,IACT,CAAC;AAED,UAAM,cAAc,MAAM,KAAK,eAAe,KAAK;AAEnD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,MAAM,WAAW,CAAC;AAAA,MAC9B,QAAQ,KAAK,gBAAgB,OAAO;AAAA,MACpC,aAAa,oBAAI,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAc,eAAe,OAA+C;AAC1E,UAAM,gBAAgB,oBAAI,IAAY;AACtC,UAAM,QAAQ,KAAK,eAAe,eAAe,EAAE,OAAO,IAAK,CAAC;AAEhE,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,KAAK,YAAY;AACnB,sBAAc,IAAI,KAAK,UAAU;AAAA,MACnC;AAAA,IACF,CAAC;AAED,UAAM,cAA6B,CAAC;AACpC,UAAM,iBAAiB,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,WAAW,EAAE;AAEpE,eAAW,UAAU,eAAe;AAClC,YAAM,YAAY,EAAE,GAAG,OAAO,SAAS,CAAC,MAAM,EAAE;AAChD,YAAM,oBAAoB,KAAK,eAAe,eAAe,SAAS;AAEtE,kBAAY,KAAK;AAAA,QACf;AAAA,QACA,UAAU,MAAM,KAAK,YAAY,MAAM;AAAA,QACvC;AAAA,QACA,wBACE,iBAAiB,IACZ,kBAAkB,iBAAiB,iBAAkB,MACtD;AAAA,QACN,YAAY,oBAAI,KAAK;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,WAAO,YAAY;AAAA,MACjB,CAAC,GAAG,MAAM,EAAE,yBAAyB,EAAE;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAc,YAAY,QAAiC;AAEzD,WAAO;AAAA,EACT;AAAA,EAEQ,sBAAiC;AACvC,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,QAAQ,MAAM,QAAQ,IAAI,CAAC;AAEjC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,mBAAmB,UAAuD;AACxE,SAAK,gBAAgB,IAAI,QAAQ;AAEjC,WAAO,MAAM;AACX,WAAK,gBAAgB,OAAO,QAAQ;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAc,eAA8B;AAC1C,UAAM,QAAQ,MAAM,KAAK,kBAAkB;AAC3C,SAAK,gBAAgB,QAAQ,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,EAC5D;AAAA,EAEA,MAAM,QAAQ,MAAoC;AAChD,SAAK,eAAe,WAAW,IAAI;AACnC,UAAM,KAAK,aAAa;AAAA,EAC1B;AAAA,EAEA,MAAM,WACJ,QACA,SACe;AACf,UAAM,QAAQ,KAAK,eAAe,eAAe,EAAE,OAAO,EAAE,CAAC;AAC7D,UAAM,eAAe,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM;AAEtD,QAAI,cAAc;AAChB,YAAM,cAAc,EAAE,GAAG,cAAc,GAAG,QAAQ;AAClD,WAAK,eAAe,WAAW,WAAW;AAC1C,YAAM,KAAK,aAAa;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,SAAK,eAAe,MAAM;AAAA,EAC5B;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
export * from "./types/metrics.js";
|
|
2
6
|
export * from "./core/analytics-service.js";
|
|
3
7
|
export * from "./api/analytics-api.js";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/analytics/index.ts"],
|
|
4
4
|
"sourcesContent": ["export * from './types/metrics.js';\nexport * from './core/analytics-service.js';\nexport * from './api/analytics-api.js';\nexport * from './queries/metrics-queries.js';\n\nimport { AnalyticsService } from './core/analytics-service.js';\nimport { AnalyticsAPI } from './api/analytics-api.js';\n\nexport default {\n AnalyticsService,\n AnalyticsAPI,\n};\n"],
|
|
5
|
-
"mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAE7B,IAAO,oBAAQ;AAAA,EACb;AAAA,EACA;AACF;",
|
|
5
|
+
"mappings": ";;;;AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAE7B,IAAO,oBAAQ;AAAA,EACb;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import Database from "better-sqlite3";
|
|
2
6
|
import {
|
|
3
7
|
DatabaseError,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/features/analytics/queries/metrics-queries.ts"],
|
|
4
4
|
"sourcesContent": ["import Database from 'better-sqlite3';\nimport {\n TaskAnalytics,\n TaskMetrics,\n TimeRange,\n AnalyticsQuery,\n} from '../types/metrics.js';\nimport {\n DatabaseError,\n SystemError,\n ErrorCode,\n createErrorHandler,\n} from '../../../core/errors/index.js';\nimport { retry } from '../../../core/errors/recovery.js';\n\nexport class MetricsQueries {\n private db: Database.Database;\n\n constructor(dbPath: string) {\n try {\n this.db = new Database(dbPath, { readonly: false });\n this.initializeTables();\n } catch (error: unknown) {\n throw new DatabaseError(\n 'Failed to initialize metrics database',\n ErrorCode.DB_CONNECTION_FAILED,\n {\n dbPath,\n operation: 'constructor',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n private initializeTables(): void {\n const errorHandler = createErrorHandler({\n operation: 'initializeTables',\n });\n\n try {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS task_analytics (\n id TEXT PRIMARY KEY,\n title TEXT NOT NULL,\n state TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n completed_at INTEGER,\n estimated_effort INTEGER,\n actual_effort INTEGER,\n assignee_id TEXT,\n priority TEXT DEFAULT 'medium',\n labels TEXT DEFAULT '[]',\n blocking_issues TEXT DEFAULT '[]',\n updated_at INTEGER DEFAULT (strftime('%s', 'now'))\n );\n\n CREATE INDEX IF NOT EXISTS idx_task_state ON task_analytics(state);\n CREATE INDEX IF NOT EXISTS idx_task_created ON task_analytics(created_at);\n CREATE INDEX IF NOT EXISTS idx_task_assignee ON task_analytics(assignee_id);\n `);\n } catch (error: unknown) {\n const dbError = errorHandler(error, {\n operation: 'initializeTables',\n schema: 'task_analytics',\n });\n\n throw new DatabaseError(\n 'Failed to initialize analytics tables',\n ErrorCode.DB_MIGRATION_FAILED,\n {\n operation: 'initializeTables',\n schema: 'task_analytics',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n getTaskMetrics(query: AnalyticsQuery = {}): TaskMetrics {\n try {\n const { timeRange, userIds, states, priorities } = query;\n\n const whereConditions: string[] = ['1=1'];\n const params: any = {};\n\n if (timeRange) {\n whereConditions.push(\n 'created_at >= @startTime AND created_at <= @endTime'\n );\n params.startTime = Math.floor(timeRange.start.getTime() / 1000);\n params.endTime = Math.floor(timeRange.end.getTime() / 1000);\n }\n\n if (userIds && userIds.length > 0) {\n whereConditions.push(\n `assignee_id IN (${userIds.map((_, i) => `@user${i}`).join(',')})`\n );\n userIds.forEach((id, i) => (params[`user${i}`] = id));\n }\n\n if (states && states.length > 0) {\n whereConditions.push(\n `state IN (${states.map((_, i) => `@state${i}`).join(',')})`\n );\n states.forEach((s, i) => (params[`state${i}`] = s));\n }\n\n if (priorities && priorities.length > 0) {\n whereConditions.push(\n `priority IN (${priorities.map((_, i) => `@priority${i}`).join(',')})`\n );\n priorities.forEach((p, i) => (params[`priority${i}`] = p));\n }\n\n const whereClause = whereConditions.join(' AND ');\n\n const metricsQuery = this.db.prepare(`\n SELECT \n COUNT(*) as total_tasks,\n SUM(CASE WHEN state = 'completed' THEN 1 ELSE 0 END) as completed_tasks,\n SUM(CASE WHEN state = 'in_progress' THEN 1 ELSE 0 END) as in_progress_tasks,\n SUM(CASE WHEN state = 'blocked' THEN 1 ELSE 0 END) as blocked_tasks,\n AVG(CASE \n WHEN state = 'completed' AND completed_at IS NOT NULL \n THEN (completed_at - created_at) * 1000\n ELSE NULL \n END) as avg_time_to_complete,\n AVG(CASE \n WHEN actual_effort IS NOT NULL AND estimated_effort IS NOT NULL AND estimated_effort > 0\n THEN (CAST(actual_effort AS REAL) / estimated_effort) * 100\n ELSE NULL\n END) as effort_accuracy,\n SUM(CASE \n WHEN json_array_length(blocking_issues) > 0 \n THEN json_array_length(blocking_issues)\n ELSE 0\n END) as blocking_issues_count\n FROM task_analytics\n WHERE ${whereClause}\n `);\n\n const result = metricsQuery.get(params) as any;\n\n const velocityQuery = this.db.prepare(`\n SELECT \n DATE(created_at, 'unixepoch') as day,\n COUNT(*) as completed_count\n FROM task_analytics\n WHERE state = 'completed' \n AND ${whereClause}\n GROUP BY day\n ORDER BY day DESC\n LIMIT 30\n `);\n\n const velocityData = velocityQuery.all(params) as any[];\n const velocityTrend = velocityData\n .map((v) => v.completed_count)\n .reverse();\n\n return {\n totalTasks: result.total_tasks || 0,\n completedTasks: result.completed_tasks || 0,\n inProgressTasks: result.in_progress_tasks || 0,\n blockedTasks: result.blocked_tasks || 0,\n completionRate:\n result.total_tasks > 0\n ? (result.completed_tasks / result.total_tasks) * 100\n : 0,\n averageTimeToComplete: result.avg_time_to_complete || 0,\n effortAccuracy: result.effort_accuracy || 100,\n blockingIssuesCount: result.blocking_issues_count || 0,\n velocityTrend,\n };\n } catch (error: unknown) {\n throw new DatabaseError(\n 'Failed to get task metrics',\n ErrorCode.DB_QUERY_FAILED,\n {\n query,\n operation: 'getTaskMetrics',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n getRecentTasks(query: AnalyticsQuery = {}): TaskAnalytics[] {\n try {\n const { limit = 100, offset = 0 } = query;\n\n const tasksQuery = this.db.prepare(`\n SELECT \n id,\n title,\n state,\n created_at,\n completed_at,\n estimated_effort,\n actual_effort,\n assignee_id,\n priority,\n labels,\n blocking_issues\n FROM task_analytics\n ORDER BY updated_at DESC\n LIMIT ? OFFSET ?\n `);\n\n const rows = tasksQuery.all(limit, offset) as any[];\n\n return rows.map((row) => ({\n id: row.id,\n title: row.title,\n state: row.state as TaskAnalytics['state'],\n createdAt: new Date(row.created_at * 1000),\n completedAt: row.completed_at\n ? new Date(row.completed_at * 1000)\n : undefined,\n estimatedEffort: row.estimated_effort,\n actualEffort: row.actual_effort,\n assigneeId: row.assignee_id,\n priority: row.priority as TaskAnalytics['priority'],\n labels: JSON.parse(row.labels),\n blockingIssues: JSON.parse(row.blocking_issues),\n }));\n } catch (error: unknown) {\n throw new DatabaseError(\n 'Failed to get recent tasks',\n ErrorCode.DB_QUERY_FAILED,\n {\n limit: query.limit,\n offset: query.offset,\n operation: 'getRecentTasks',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n upsertTask(task: TaskAnalytics): void {\n try {\n const stmt = this.db.prepare(`\n INSERT INTO task_analytics (\n id, title, state, created_at, completed_at,\n estimated_effort, actual_effort, assignee_id,\n priority, labels, blocking_issues\n ) VALUES (\n @id, @title, @state, @created_at, @completed_at,\n @estimated_effort, @actual_effort, @assignee_id,\n @priority, @labels, @blocking_issues\n )\n ON CONFLICT(id) DO UPDATE SET\n title = @title,\n state = @state,\n completed_at = @completed_at,\n estimated_effort = @estimated_effort,\n actual_effort = @actual_effort,\n assignee_id = @assignee_id,\n priority = @priority,\n labels = @labels,\n blocking_issues = @blocking_issues,\n updated_at = strftime('%s', 'now')\n `);\n\n stmt.run({\n id: task.id,\n title: task.title,\n state: task.state,\n created_at: Math.floor(task.createdAt.getTime() / 1000),\n completed_at: task.completedAt\n ? Math.floor(task.completedAt.getTime() / 1000)\n : null,\n estimated_effort: task.estimatedEffort || null,\n actual_effort: task.actualEffort || null,\n assignee_id: task.assigneeId || null,\n priority: task.priority,\n labels: JSON.stringify(task.labels),\n blocking_issues: JSON.stringify(task.blockingIssues),\n });\n } catch (error: unknown) {\n throw new DatabaseError(\n `Failed to upsert task analytics: ${task.id}`,\n ErrorCode.DB_QUERY_FAILED,\n {\n taskId: task.id,\n taskState: task.state,\n operation: 'upsertTask',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n close(): void {\n try {\n this.db.close();\n } catch (error: unknown) {\n throw new DatabaseError(\n 'Failed to close analytics database',\n ErrorCode.DB_CONNECTION_FAILED,\n {\n operation: 'close',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
6
|
import {
|
|
3
7
|
CallToolRequestSchema,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/browser/browser-mcp.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Browser MCP Integration for StackMemory\n * Provides browser automation capabilities through MCP\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n McpError,\n ErrorCode,\n} from '@modelcontextprotocol/sdk/types.js';\nimport puppeteer, { Browser, Page } from 'puppeteer';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport interface BrowserAction {\n type: 'navigate' | 'click' | 'type' | 'screenshot' | 'evaluate' | 'wait';\n selector?: string;\n value?: string;\n script?: string;\n timeout?: number;\n}\n\nexport interface BrowserSession {\n id: string;\n browser: Browser;\n page: Page;\n createdAt: Date;\n lastActivity: Date;\n url?: string;\n}\n\nexport class BrowserMCPIntegration {\n private sessions: Map<string, BrowserSession> = new Map();\n private server?: Server;\n private maxSessions = 5;\n private sessionTimeout = 30 * 60 * 1000; // 30 minutes\n\n constructor(\n private config: {\n headless?: boolean;\n defaultViewport?: { width: number; height: number };\n userDataDir?: string;\n executablePath?: string;\n } = {}\n ) {\n this.startCleanupInterval();\n }\n\n /**\n * Initialize the Browser MCP server\n */\n async initialize(mcpServer?: Server): Promise<void> {\n this.server =\n mcpServer ||\n new Server(\n {\n name: 'stackmemory-browser',\n version: '1.0.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n this.setupHandlers();\n logger.info('Browser MCP integration initialized');\n }\n\n /**\n * Set up MCP request handlers\n */\n private setupHandlers(): void {\n if (!this.server) return;\n\n // List available browser tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n {\n name: 'browser_navigate',\n description: 'Navigate to a URL in the browser',\n inputSchema: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'URL to navigate to' },\n sessionId: { type: 'string', description: 'Optional session ID' },\n },\n required: ['url'],\n },\n },\n {\n name: 'browser_screenshot',\n description: 'Take a screenshot of the current page',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID' },\n fullPage: { type: 'boolean', description: 'Capture full page' },\n selector: {\n type: 'string',\n description: 'CSS selector to screenshot',\n },\n },\n required: ['sessionId'],\n },\n },\n {\n name: 'browser_click',\n description: 'Click an element on the page',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID' },\n selector: {\n type: 'string',\n description: 'CSS selector to click',\n },\n },\n required: ['sessionId', 'selector'],\n },\n },\n {\n name: 'browser_type',\n description: 'Type text into an input field',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID' },\n selector: {\n type: 'string',\n description: 'CSS selector of input',\n },\n text: { type: 'string', description: 'Text to type' },\n },\n required: ['sessionId', 'selector', 'text'],\n },\n },\n {\n name: 'browser_evaluate',\n description: 'Execute JavaScript in the browser context',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID' },\n script: {\n type: 'string',\n description: 'JavaScript code to execute',\n },\n },\n required: ['sessionId', 'script'],\n },\n },\n {\n name: 'browser_wait',\n description: 'Wait for an element or condition',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID' },\n selector: {\n type: 'string',\n description: 'CSS selector to wait for',\n },\n timeout: {\n type: 'number',\n description: 'Timeout in milliseconds',\n },\n },\n required: ['sessionId'],\n },\n },\n {\n name: 'browser_get_content',\n description: 'Get the text content of the page or element',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID' },\n selector: {\n type: 'string',\n description: 'CSS selector (optional)',\n },\n },\n required: ['sessionId'],\n },\n },\n {\n name: 'browser_close',\n description: 'Close a browser session',\n inputSchema: {\n type: 'object',\n properties: {\n sessionId: { type: 'string', description: 'Session ID to close' },\n },\n required: ['sessionId'],\n },\n },\n ],\n }));\n\n // Handle tool calls\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n if (!args) {\n throw new McpError(ErrorCode.InvalidParams, 'Missing arguments');\n }\n\n try {\n switch (name) {\n case 'browser_navigate':\n return await this.navigate(\n String(args.url),\n args.sessionId as string\n );\n\n case 'browser_screenshot':\n return await this.screenshot(\n String(args.sessionId),\n args.fullPage as boolean,\n args.selector as string\n );\n\n case 'browser_click':\n return await this.click(\n String(args.sessionId),\n String(args.selector)\n );\n\n case 'browser_type':\n return await this.type(\n String(args.sessionId),\n String(args.selector),\n String(args.text)\n );\n\n case 'browser_evaluate':\n return await this.evaluate(\n String(args.sessionId),\n String(args.script)\n );\n\n case 'browser_wait':\n return await this.waitFor(\n String(args.sessionId),\n args.selector as string,\n args.timeout as number\n );\n\n case 'browser_get_content':\n return await this.getContent(\n String(args.sessionId),\n args.selector as string\n );\n\n case 'browser_close':\n return await this.closeSession(String(args.sessionId));\n\n default:\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown tool: ${name}`\n );\n }\n } catch (error: any) {\n logger.error('Browser MCP tool error', error);\n throw new McpError(ErrorCode.InternalError, error.message);\n }\n });\n }\n\n /**\n * Navigate to a URL\n */\n private async navigate(url: string, sessionId?: string): Promise<any> {\n const session = await this.getOrCreateSession(sessionId);\n\n await session.page.goto(url, { waitUntil: 'networkidle2' });\n session.url = url;\n session.lastActivity = new Date();\n\n logger.info(`Browser navigated to ${url}`, { sessionId: session.id });\n\n return {\n content: [\n {\n type: 'text',\n text: `Navigated to ${url}`,\n },\n ],\n sessionId: session.id,\n url,\n };\n }\n\n /**\n * Take a screenshot\n */\n private async screenshot(\n sessionId: string,\n fullPage = false,\n selector?: string\n ): Promise<any> {\n const session = this.getSession(sessionId);\n if (!session) {\n throw new Error(`Session ${sessionId} not found`);\n }\n\n let screenshot: Buffer;\n\n if (selector) {\n const element = await session.page.$(selector);\n if (!element) {\n throw new Error(`Element ${selector} not found`);\n }\n screenshot = Buffer.from(await element.screenshot());\n } else {\n screenshot = Buffer.from(await session.page.screenshot({ fullPage }));\n }\n\n session.lastActivity = new Date();\n\n return {\n content: [\n {\n type: 'image',\n data: screenshot.toString('base64'),\n },\n ],\n sessionId: session.id,\n };\n }\n\n /**\n * Click an element\n */\n private async click(sessionId: string, selector: string): Promise<any> {\n const session = this.getSession(sessionId);\n if (!session) {\n throw new Error(`Session ${sessionId} not found`);\n }\n\n await session.page.click(selector);\n session.lastActivity = new Date();\n\n return {\n content: [\n {\n type: 'text',\n text: `Clicked element: ${selector}`,\n },\n ],\n sessionId: session.id,\n };\n }\n\n /**\n * Type text into an input\n */\n private async type(\n sessionId: string,\n selector: string,\n text: string\n ): Promise<any> {\n const session = this.getSession(sessionId);\n if (!session) {\n throw new Error(`Session ${sessionId} not found`);\n }\n\n await session.page.type(selector, text);\n session.lastActivity = new Date();\n\n return {\n content: [\n {\n type: 'text',\n text: `Typed \"${text}\" into ${selector}`,\n },\n ],\n sessionId: session.id,\n };\n }\n\n /**\n * Execute JavaScript in page context\n */\n private async evaluate(sessionId: string, script: string): Promise<any> {\n const session = this.getSession(sessionId);\n if (!session) {\n throw new Error(`Session ${sessionId} not found`);\n }\n\n const result = await session.page.evaluate(script);\n session.lastActivity = new Date();\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n sessionId: session.id,\n result,\n };\n }\n\n /**\n * Wait for element or timeout\n */\n private async waitFor(\n sessionId: string,\n selector?: string,\n timeout = 5000\n ): Promise<any> {\n const session = this.getSession(sessionId);\n if (!session) {\n throw new Error(`Session ${sessionId} not found`);\n }\n\n if (selector) {\n await session.page.waitForSelector(selector, { timeout });\n } else {\n await new Promise((resolve) => setTimeout(resolve, timeout));\n }\n\n session.lastActivity = new Date();\n\n return {\n content: [\n {\n type: 'text',\n text: selector ? `Element ${selector} found` : `Waited ${timeout}ms`,\n },\n ],\n sessionId: session.id,\n };\n }\n\n /**\n * Get page content\n */\n private async getContent(sessionId: string, selector?: string): Promise<any> {\n const session = this.getSession(sessionId);\n if (!session) {\n throw new Error(`Session ${sessionId} not found`);\n }\n\n let content: string;\n\n if (selector) {\n content = await session.page.$eval(\n selector,\n (el) => el.textContent || ''\n );\n } else {\n content = await session.page.content();\n }\n\n session.lastActivity = new Date();\n\n return {\n content: [\n {\n type: 'text',\n text: content,\n },\n ],\n sessionId: session.id,\n };\n }\n\n /**\n * Get or create a browser session\n */\n private async getOrCreateSession(\n sessionId?: string\n ): Promise<BrowserSession> {\n if (sessionId) {\n const existing = this.sessions.get(sessionId);\n if (existing) {\n existing.lastActivity = new Date();\n return existing;\n }\n }\n\n // Clean up old sessions if at max\n if (this.sessions.size >= this.maxSessions) {\n const oldest = Array.from(this.sessions.values()).sort(\n (a, b) => a.lastActivity.getTime() - b.lastActivity.getTime()\n )[0];\n await this.closeSession(oldest.id);\n }\n\n // Create new session\n const browser = await puppeteer.launch({\n headless: this.config.headless ?? true,\n defaultViewport: this.config.defaultViewport || {\n width: 1280,\n height: 720,\n },\n userDataDir: this.config.userDataDir,\n executablePath: this.config.executablePath,\n args: ['--no-sandbox', '--disable-setuid-sandbox'], // For Railway/Docker\n });\n\n const page = await browser.newPage();\n const id = sessionId || `session-${Date.now()}`;\n\n const session: BrowserSession = {\n id,\n browser,\n page,\n createdAt: new Date(),\n lastActivity: new Date(),\n };\n\n this.sessions.set(id, session);\n logger.info(`Created browser session ${id}`);\n\n return session;\n }\n\n /**\n * Get existing session\n */\n private getSession(sessionId: string): BrowserSession | undefined {\n return this.sessions.get(sessionId);\n }\n\n /**\n * Close a browser session\n */\n private async closeSession(sessionId: string): Promise<any> {\n const session = this.sessions.get(sessionId);\n if (!session) {\n return {\n content: [\n {\n type: 'text',\n text: `Session ${sessionId} not found`,\n },\n ],\n };\n }\n\n await session.browser.close();\n this.sessions.delete(sessionId);\n\n logger.info(`Closed browser session ${sessionId}`);\n\n return {\n content: [\n {\n type: 'text',\n text: `Session ${sessionId} closed`,\n },\n ],\n };\n }\n\n /**\n * Clean up inactive sessions\n */\n private startCleanupInterval(): void {\n setInterval(async () => {\n const now = Date.now();\n\n for (const [id, session] of this.sessions.entries()) {\n const inactiveTime = now - session.lastActivity.getTime();\n\n if (inactiveTime > this.sessionTimeout) {\n logger.info(`Cleaning up inactive session ${id}`);\n await this.closeSession(id);\n }\n }\n }, 60000); // Check every minute\n }\n\n /**\n * Close all sessions\n */\n async cleanup(): Promise<void> {\n for (const sessionId of this.sessions.keys()) {\n await this.closeSession(sessionId);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import { EventEmitter } from "events";
|
|
2
6
|
import { logger } from "../../core/monitoring/logger.js";
|
|
3
7
|
import { LinearClient } from "../../integrations/linear/client.js";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/tasks/linear-task-manager.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Linear Task Manager\n * In-memory task storage with Linear synchronization\n * Replaces LinearTaskManager system\n */\n\nimport { EventEmitter } from 'events';\nimport { logger } from '../../core/monitoring/logger.js';\nimport {\n Task,\n TaskStatus,\n TaskPriority,\n TaskMetadata,\n} from '../../types/task.js';\nimport { LinearClient, LinearIssue } from '../../integrations/linear/client.js';\nimport { ProjectIsolationManager } from '../../core/projects/project-isolation.js';\n\nexport interface LinearTaskManagerConfig {\n linearApiKey?: string;\n teamId?: string;\n projectFilter?: string; // Filter tasks by project name/org\n autoSync?: boolean;\n syncInterval?: number; // minutes\n batchSize?: number; // Number of tasks to sync per batch (rate limiting)\n rateLimitDelay?: number; // Delay between API calls in ms\n}\n\nexport interface TaskMetrics {\n total_tasks: number;\n by_status: Record<TaskStatus, number>;\n by_priority: Record<TaskPriority, number>;\n completion_rate: number;\n avg_effort_accuracy: number;\n blocked_tasks: number;\n overdue_tasks: number;\n}\n\nexport class LinearTaskManager extends EventEmitter {\n private tasks: Map<string, Task> = new Map();\n private linearClient?: LinearClient;\n private config: LinearTaskManagerConfig;\n private projectId?: string;\n private syncTimer?: NodeJS.Timeout;\n private isolationManager: ProjectIsolationManager;\n private lastSyncTimestamp: number = 0;\n private syncInProgress: boolean = false;\n\n constructor(\n config: LinearTaskManagerConfig = {},\n projectId?: string,\n projectRoot?: string\n ) {\n super();\n this.config = config;\n this.projectId = projectId;\n this.isolationManager = ProjectIsolationManager.getInstance();\n\n // Get project-specific configuration if projectRoot is provided\n if (projectRoot) {\n const projectInfo =\n this.isolationManager.getProjectIdentification(projectRoot);\n this.projectId = projectInfo.projectId;\n\n // Override config with project-specific settings\n this.config = {\n ...config,\n teamId: config.teamId || projectInfo.linearTeamId,\n projectFilter: config.projectFilter || projectInfo.workspaceFilter,\n batchSize: config.batchSize || 5, // Conservative batch size for rate limiting\n rateLimitDelay: config.rateLimitDelay || 1000, // 1 second between calls\n };\n }\n\n // Initialize Linear client if API key is provided\n if (config.linearApiKey) {\n this.linearClient = new LinearClient({\n apiKey: config.linearApiKey,\n teamId: this.config.teamId,\n });\n }\n\n // Setup auto-sync if enabled\n if (config.autoSync && config.syncInterval && this.linearClient) {\n this.setupAutoSync();\n }\n }\n\n /**\n * Create a new task\n */\n createTask(options: {\n title: string;\n description?: string;\n priority?: TaskPriority;\n tags?: string[];\n metadata?: TaskMetadata;\n }): string {\n const id = this.generateTaskId();\n const now = new Date();\n\n const task: Task = {\n id,\n title: options.title,\n description: options.description || '',\n status: 'todo',\n priority: options.priority || 'medium',\n tags: [...(options.tags || []), ...this.getProjectTags()],\n metadata: {\n ...options.metadata,\n projectId: this.projectId,\n teamId: this.config.teamId,\n projectFilter: this.config.projectFilter,\n },\n createdAt: now,\n updatedAt: now,\n };\n\n this.tasks.set(id, task);\n this.emit('task:created', task);\n this.emit('sync:needed', 'task:created');\n\n return id;\n }\n\n /**\n * Update task status\n */\n updateTaskStatus(\n taskId: string,\n newStatus: TaskStatus,\n _reason?: string\n ): void {\n const task = this.tasks.get(taskId);\n if (!task) {\n throw new Error(`Task not found: ${taskId}`);\n }\n\n task.status = newStatus;\n task.updatedAt = new Date();\n\n this.tasks.set(taskId, task);\n\n if (newStatus === 'done') {\n this.emit('task:completed', task);\n }\n\n this.emit('task:updated', task);\n this.emit('sync:needed', 'task:updated');\n }\n\n /**\n * Get task by ID\n */\n getTask(taskId: string): Task | undefined {\n return this.tasks.get(taskId);\n }\n\n /**\n * Get all active tasks (not done/cancelled)\n */\n getActiveTasks(): Task[] {\n return Array.from(this.tasks.values())\n .filter((task) => !['done', 'cancelled'].includes(task.status))\n .sort((a, b) => {\n // Sort by priority then by creation date\n const priorityOrder = { urgent: 4, high: 3, medium: 2, low: 1 };\n const aPriority = priorityOrder[a.priority || 'medium'];\n const bPriority = priorityOrder[b.priority || 'medium'];\n\n if (aPriority !== bPriority) {\n return bPriority - aPriority; // Higher priority first\n }\n\n return a.createdAt.getTime() - b.createdAt.getTime(); // Older first\n });\n }\n\n /**\n * Get tasks by status\n */\n getTasksByStatus(status: TaskStatus): Task[] {\n return Array.from(this.tasks.values()).filter(\n (task) => task.status === status\n );\n }\n\n /**\n * Get metrics for tasks\n */\n getMetrics(): TaskMetrics {\n const allTasks = Array.from(this.tasks.values());\n const totalTasks = allTasks.length;\n\n const byStatus: Record<TaskStatus, number> = {\n todo: 0,\n in_progress: 0,\n done: 0,\n cancelled: 0,\n };\n\n const byPriority: Record<TaskPriority, number> = {\n low: 0,\n medium: 0,\n high: 0,\n urgent: 0,\n };\n\n for (const task of allTasks) {\n byStatus[task.status]++;\n if (task.priority) {\n byPriority[task.priority]++;\n }\n }\n\n const completedTasks = byStatus.done;\n const completionRate = totalTasks > 0 ? completedTasks / totalTasks : 0;\n\n return {\n total_tasks: totalTasks,\n by_status: byStatus,\n by_priority: byPriority,\n completion_rate: completionRate,\n avg_effort_accuracy: 0, // Not implemented in this simplified version\n blocked_tasks: 0, // Could be implemented with tags or metadata\n overdue_tasks: 0, // Could be implemented with due dates\n };\n }\n\n /**\n * Sync with Linear workspace (incremental with rate limiting and exponential backoff)\n */\n async syncWithLinear(): Promise<{ synced: number; errors: string[] }> {\n if (!this.linearClient) {\n throw new Error('Linear client not initialized');\n }\n\n if (this.syncInProgress) {\n logger.warn('Sync already in progress, skipping');\n return { synced: 0, errors: ['Sync already in progress'] };\n }\n\n this.syncInProgress = true;\n const errors: string[] = [];\n let synced = 0;\n\n try {\n // Get tasks that need syncing (created/updated since last sync)\n const tasksToSync = this.getTasksRequiringSync();\n const batchSize = this.config.batchSize || 5;\n const rateLimitDelay = this.config.rateLimitDelay || 1000;\n\n logger.info(\n `Starting incremental sync: ${tasksToSync.length} tasks to process`\n );\n\n // Process tasks in batches to respect rate limits\n for (let i = 0; i < tasksToSync.length; i += batchSize) {\n const batch = tasksToSync.slice(i, i + batchSize);\n\n for (const task of batch) {\n try {\n await this.withExponentialBackoff(\n async () => {\n if (!task.externalId) {\n // Create new issue in Linear\n const linearIssue = await this.createLinearIssue(task);\n task.externalId = linearIssue.id;\n task.externalIdentifier = linearIssue.identifier;\n task.externalUrl = linearIssue.url;\n task.updatedAt = new Date();\n\n logger.debug(\n `Created Linear issue: ${linearIssue.identifier} for task ${task.id}`\n );\n } else {\n // Update existing issue if needed\n await this.updateLinearIssue(task);\n\n logger.debug(\n `Updated Linear issue: ${task.externalIdentifier} for task ${task.id}`\n );\n }\n },\n 3,\n rateLimitDelay\n );\n\n synced++;\n\n // Base rate limiting delay between API calls\n if (rateLimitDelay > 0) {\n await this.sleep(rateLimitDelay);\n }\n } catch (error) {\n const errorMsg =\n error instanceof Error ? error.message : String(error);\n errors.push(`Failed to sync task ${task.id}: ${errorMsg}`);\n logger.error('Failed to sync task to Linear after retries', {\n taskId: task.id,\n error: errorMsg,\n projectId: this.projectId,\n });\n }\n }\n\n // Batch delay (longer between batches)\n if (i + batchSize < tasksToSync.length && rateLimitDelay > 0) {\n await this.sleep(rateLimitDelay * 2);\n }\n }\n\n this.lastSyncTimestamp = Date.now();\n this.emit('sync:completed', {\n synced,\n errors,\n projectId: this.projectId,\n });\n\n logger.info(\n `Linear sync completed: ${synced} tasks synced, ${errors.length} errors`\n );\n return { synced, errors };\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n errors.push(`Sync failed: ${errorMsg}`);\n logger.error('Linear sync failed', {\n error: errorMsg,\n projectId: this.projectId,\n });\n throw new Error(`Linear sync failed: ${errorMsg}`);\n } finally {\n this.syncInProgress = false;\n }\n }\n\n /**\n * Load tasks from Linear\n */\n async loadFromLinear(): Promise<number> {\n if (!this.linearClient || !this.config.teamId) {\n throw new Error('Linear client or team ID not configured');\n }\n\n try {\n const issues = await this.linearClient.getIssues({\n teamId: this.config.teamId,\n });\n\n let loaded = 0;\n for (const issue of issues) {\n // Only load issues that belong to this project\n if (this.shouldIncludeIssue(issue)) {\n const task = this.convertLinearIssueToTask(issue);\n this.tasks.set(task.id, task);\n loaded++;\n }\n }\n\n logger.info(\n `Loaded ${loaded} tasks from Linear for project ${this.projectId}`\n );\n this.emit('tasks:loaded', { count: loaded, projectId: this.projectId });\n return loaded;\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n logger.error('Failed to load tasks from Linear', {\n error: errorMsg,\n projectId: this.projectId,\n teamId: this.config.teamId,\n });\n throw new Error(`Failed to load from Linear: ${errorMsg}`);\n }\n }\n\n /**\n * Clear all tasks (for testing or cleanup)\n */\n clear(): void {\n this.tasks.clear();\n this.emit('tasks:cleared');\n }\n\n /**\n * Get task count\n */\n getTaskCount(): number {\n return this.tasks.size;\n }\n\n // Private methods\n\n private generateTaskId(): string {\n return `tsk-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private async createLinearIssue(task: Task): Promise<LinearIssue> {\n if (!this.linearClient || !this.config.teamId) {\n throw new Error('Linear client or team ID not configured');\n }\n\n const priorityMap: Record<TaskPriority, number> = {\n urgent: 1,\n high: 2,\n medium: 3,\n low: 4,\n };\n\n return await this.linearClient.createIssue({\n title: task.title,\n description: task.description,\n teamId: this.config.teamId,\n priority: task.priority ? priorityMap[task.priority] : 3,\n });\n }\n\n private convertLinearIssueToTask(issue: LinearIssue): Task {\n const priorityMap: Record<number, TaskPriority> = {\n 1: 'urgent',\n 2: 'high',\n 3: 'medium',\n 4: 'low',\n };\n\n const statusMap: Record<string, TaskStatus> = {\n backlog: 'todo',\n unstarted: 'todo',\n started: 'in_progress',\n completed: 'done',\n cancelled: 'cancelled',\n };\n\n return {\n id: `linear-${issue.id}`,\n title: issue.title,\n description: issue.description || '',\n status: statusMap[issue.state.type] || 'todo',\n priority: priorityMap[issue.priority] || 'medium',\n tags: issue.labels?.map((label) => label.name) || [],\n externalId: issue.id,\n externalIdentifier: issue.identifier,\n externalUrl: issue.url,\n metadata: {\n linear: {\n stateId: issue.state.id,\n assigneeId: issue.assignee?.id,\n },\n },\n createdAt: new Date(issue.createdAt),\n updatedAt: new Date(issue.updatedAt),\n };\n }\n\n private setupAutoSync(): void {\n if (this.syncTimer) {\n clearInterval(this.syncTimer);\n }\n\n const intervalMs = (this.config.syncInterval || 15) * 60 * 1000;\n this.syncTimer = setInterval(async () => {\n try {\n await this.syncWithLinear();\n } catch (error) {\n logger.error(\n 'Auto-sync failed',\n error instanceof Error ? error : new Error(String(error))\n );\n }\n }, intervalMs);\n }\n\n /**\n * Get project-specific tags\n */\n private getProjectTags(): string[] {\n const tags = [];\n if (this.config.projectFilter) {\n tags.push(`project:${this.config.projectFilter}`);\n }\n if (this.projectId) {\n tags.push(`proj:${this.projectId.slice(-8)}`); // Short project ID\n }\n return tags;\n }\n\n /**\n * Check if a Linear issue should be included in this project\n */\n private shouldIncludeIssue(issue: LinearIssue): boolean {\n if (!this.config.projectFilter) {\n return true; // Include all if no filter\n }\n\n // Check if issue has project tags\n const projectTags = issue.labels?.map((label) => label.name) || [];\n return projectTags.some(\n (tag) =>\n tag.includes(this.config.projectFilter!) ||\n tag.includes(`proj:${this.projectId?.slice(-8)}`)\n );\n }\n\n /**\n * Get project information\n */\n getProjectInfo() {\n return {\n projectId: this.projectId,\n teamId: this.config.teamId,\n projectFilter: this.config.projectFilter,\n };\n }\n\n /**\n * Cleanup resources\n */\n /**\n * Get tasks that require syncing (created or updated since last sync)\n */\n private getTasksRequiringSync(): Task[] {\n return Array.from(this.tasks.values()).filter((task) => {\n // Include tasks without external ID (new tasks)\n if (!task.externalId) {\n return true;\n }\n\n // Include tasks updated since last sync\n if (this.lastSyncTimestamp > 0) {\n return task.updatedAt.getTime() > this.lastSyncTimestamp;\n }\n\n return false;\n });\n }\n\n /**\n * Update an existing Linear issue\n */\n private async updateLinearIssue(task: Task): Promise<void> {\n if (!this.linearClient || !task.externalId) {\n return;\n }\n\n const priorityMap: Record<TaskPriority, number> = {\n urgent: 1,\n high: 2,\n medium: 3,\n low: 4,\n };\n\n // Only update if the task was modified after last sync\n if (task.updatedAt.getTime() <= this.lastSyncTimestamp) {\n return;\n }\n\n await this.linearClient.updateIssue(task.externalId, {\n title: task.title,\n description: task.description,\n priority: task.priority ? priorityMap[task.priority] : 3,\n });\n }\n\n /**\n * Sleep for specified milliseconds\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Exponential backoff retry wrapper\n */\n private async withExponentialBackoff<T>(\n operation: () => Promise<T>,\n maxRetries: number = 3,\n baseDelay: number = 1000\n ): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Don't retry on final attempt\n if (attempt === maxRetries) {\n break;\n }\n\n // Check if it's a rate limit error\n const errorMsg = lastError.message.toLowerCase();\n const isRateLimit =\n errorMsg.includes('rate limit') ||\n errorMsg.includes('429') ||\n errorMsg.includes('too many requests');\n\n if (isRateLimit) {\n // Exponential backoff with jitter for rate limit errors\n const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000;\n logger.warn(\n `Rate limit hit, retrying in ${delay}ms (attempt ${attempt + 1}/${maxRetries + 1})`\n );\n await this.sleep(delay);\n } else {\n // For other errors, shorter delay\n const delay = baseDelay * Math.pow(1.5, attempt);\n logger.warn(\n `API error, retrying in ${delay}ms: ${lastError.message}`\n );\n await this.sleep(delay);\n }\n }\n }\n\n throw lastError!;\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n if (this.syncTimer) {\n clearInterval(this.syncTimer);\n this.syncTimer = undefined;\n }\n this.removeAllListeners();\n }\n}\n"],
|
|
5
|
-
"mappings": "AAMA,SAAS,oBAAoB;AAC7B,SAAS,cAAc;AAOvB,SAAS,oBAAiC;AAC1C,SAAS,+BAA+B;AAsBjC,MAAM,0BAA0B,aAAa;AAAA,EAC1C,QAA2B,oBAAI,IAAI;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAA4B;AAAA,EAC5B,iBAA0B;AAAA,EAElC,YACE,SAAkC,CAAC,GACnC,WACA,aACA;AACA,UAAM;AACN,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,mBAAmB,wBAAwB,YAAY;AAG5D,QAAI,aAAa;AACf,YAAM,cACJ,KAAK,iBAAiB,yBAAyB,WAAW;AAC5D,WAAK,YAAY,YAAY;AAG7B,WAAK,SAAS;AAAA,QACZ,GAAG;AAAA,QACH,QAAQ,OAAO,UAAU,YAAY;AAAA,QACrC,eAAe,OAAO,iBAAiB,YAAY;AAAA,QACnD,WAAW,OAAO,aAAa;AAAA;AAAA,QAC/B,gBAAgB,OAAO,kBAAkB;AAAA;AAAA,MAC3C;AAAA,IACF;AAGA,QAAI,OAAO,cAAc;AACvB,WAAK,eAAe,IAAI,aAAa;AAAA,QACnC,QAAQ,OAAO;AAAA,QACf,QAAQ,KAAK,OAAO;AAAA,MACtB,CAAC;AAAA,IACH;AAGA,QAAI,OAAO,YAAY,OAAO,gBAAgB,KAAK,cAAc;AAC/D,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAMA;AACT,UAAM,KAAK,KAAK,eAAe;AAC/B,UAAM,MAAM,oBAAI,KAAK;AAErB,UAAM,OAAa;AAAA,MACjB;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ,eAAe;AAAA,MACpC,QAAQ;AAAA,MACR,UAAU,QAAQ,YAAY;AAAA,MAC9B,MAAM,CAAC,GAAI,QAAQ,QAAQ,CAAC,GAAI,GAAG,KAAK,eAAe,CAAC;AAAA,MACxD,UAAU;AAAA,QACR,GAAG,QAAQ;AAAA,QACX,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK,OAAO;AAAA,QACpB,eAAe,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAEA,SAAK,MAAM,IAAI,IAAI,IAAI;AACvB,SAAK,KAAK,gBAAgB,IAAI;AAC9B,SAAK,KAAK,eAAe,cAAc;AAEvC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,iBACE,QACA,WACA,SACM;AACN,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM;AAClC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC7C;AAEA,SAAK,SAAS;AACd,SAAK,YAAY,oBAAI,KAAK;AAE1B,SAAK,MAAM,IAAI,QAAQ,IAAI;AAE3B,QAAI,cAAc,QAAQ;AACxB,WAAK,KAAK,kBAAkB,IAAI;AAAA,IAClC;AAEA,SAAK,KAAK,gBAAgB,IAAI;AAC9B,SAAK,KAAK,eAAe,cAAc;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,QAAkC;AACxC,WAAO,KAAK,MAAM,IAAI,MAAM;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAyB;AACvB,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAClC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,WAAW,EAAE,SAAS,KAAK,MAAM,CAAC,EAC7D,KAAK,CAAC,GAAG,MAAM;AAEd,YAAM,gBAAgB,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,EAAE;AAC9D,YAAM,YAAY,cAAc,EAAE,YAAY,QAAQ;AACtD,YAAM,YAAY,cAAc,EAAE,YAAY,QAAQ;AAEtD,UAAI,cAAc,WAAW;AAC3B,eAAO,YAAY;AAAA,MACrB;AAEA,aAAO,EAAE,UAAU,QAAQ,IAAI,EAAE,UAAU,QAAQ;AAAA,IACrD,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,QAA4B;AAC3C,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE;AAAA,MACrC,CAAC,SAAS,KAAK,WAAW;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAA0B;AACxB,UAAM,WAAW,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/C,UAAM,aAAa,SAAS;AAE5B,UAAM,WAAuC;AAAA,MAC3C,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AAEA,UAAM,aAA2C;AAAA,MAC/C,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAEA,eAAW,QAAQ,UAAU;AAC3B,eAAS,KAAK,MAAM;AACpB,UAAI,KAAK,UAAU;AACjB,mBAAW,KAAK,QAAQ;AAAA,MAC1B;AAAA,IACF;AAEA,UAAM,iBAAiB,SAAS;AAChC,UAAM,iBAAiB,aAAa,IAAI,iBAAiB,aAAa;AAEtE,WAAO;AAAA,MACL,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,qBAAqB;AAAA;AAAA,MACrB,eAAe;AAAA;AAAA,MACf,eAAe;AAAA;AAAA,IACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAgE;AACpE,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,QAAI,KAAK,gBAAgB;AACvB,aAAO,KAAK,oCAAoC;AAChD,aAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC,0BAA0B,EAAE;AAAA,IAC3D;AAEA,SAAK,iBAAiB;AACtB,UAAM,SAAmB,CAAC;AAC1B,QAAI,SAAS;AAEb,QAAI;AAEF,YAAM,cAAc,KAAK,sBAAsB;AAC/C,YAAM,YAAY,KAAK,OAAO,aAAa;AAC3C,YAAM,iBAAiB,KAAK,OAAO,kBAAkB;AAErD,aAAO;AAAA,QACL,8BAA8B,YAAY,MAAM;AAAA,MAClD;AAGA,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK,WAAW;AACtD,cAAM,QAAQ,YAAY,MAAM,GAAG,IAAI,SAAS;AAEhD,mBAAW,QAAQ,OAAO;AACxB,cAAI;AACF,kBAAM,KAAK;AAAA,cACT,YAAY;AACV,oBAAI,CAAC,KAAK,YAAY;AAEpB,wBAAM,cAAc,MAAM,KAAK,kBAAkB,IAAI;AACrD,uBAAK,aAAa,YAAY;AAC9B,uBAAK,qBAAqB,YAAY;AACtC,uBAAK,cAAc,YAAY;AAC/B,uBAAK,YAAY,oBAAI,KAAK;AAE1B,yBAAO;AAAA,oBACL,yBAAyB,YAAY,UAAU,aAAa,KAAK,EAAE;AAAA,kBACrE;AAAA,gBACF,OAAO;AAEL,wBAAM,KAAK,kBAAkB,IAAI;AAEjC,yBAAO;AAAA,oBACL,yBAAyB,KAAK,kBAAkB,aAAa,KAAK,EAAE;AAAA,kBACtE;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA;AAGA,gBAAI,iBAAiB,GAAG;AACtB,oBAAM,KAAK,MAAM,cAAc;AAAA,YACjC;AAAA,UACF,SAAS,OAAO;AACd,kBAAM,WACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,mBAAO,KAAK,uBAAuB,KAAK,EAAE,KAAK,QAAQ,EAAE;AACzD,mBAAO,MAAM,+CAA+C;AAAA,cAC1D,QAAQ,KAAK;AAAA,cACb,OAAO;AAAA,cACP,WAAW,KAAK;AAAA,YAClB,CAAC;AAAA,UACH;AAAA,QACF;AAGA,YAAI,IAAI,YAAY,YAAY,UAAU,iBAAiB,GAAG;AAC5D,gBAAM,KAAK,MAAM,iBAAiB,CAAC;AAAA,QACrC;AAAA,MACF;AAEA,WAAK,oBAAoB,KAAK,IAAI;AAClC,WAAK,KAAK,kBAAkB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,WAAW,KAAK;AAAA,MAClB,CAAC;AAED,aAAO;AAAA,QACL,0BAA0B,MAAM,kBAAkB,OAAO,MAAM;AAAA,MACjE;AACA,aAAO,EAAE,QAAQ,OAAO;AAAA,IAC1B,SAAS,OAAO;AACd,YAAM,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACtE,aAAO,KAAK,gBAAgB,QAAQ,EAAE;AACtC,aAAO,MAAM,sBAAsB;AAAA,QACjC,OAAO;AAAA,QACP,WAAW,KAAK;AAAA,MAClB,CAAC;AACD,YAAM,IAAI,MAAM,uBAAuB,QAAQ,EAAE;AAAA,IACnD,UAAE;AACA,WAAK,iBAAiB;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAkC;AACtC,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,OAAO,QAAQ;AAC7C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,aAAa,UAAU;AAAA,QAC/C,QAAQ,KAAK,OAAO;AAAA,MACtB,CAAC;AAED,UAAI,SAAS;AACb,iBAAW,SAAS,QAAQ;AAE1B,YAAI,KAAK,mBAAmB,KAAK,GAAG;AAClC,gBAAM,OAAO,KAAK,yBAAyB,KAAK;AAChD,eAAK,MAAM,IAAI,KAAK,IAAI,IAAI;AAC5B;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,UAAU,MAAM,kCAAkC,KAAK,SAAS;AAAA,MAClE;AACA,WAAK,KAAK,gBAAgB,EAAE,OAAO,QAAQ,WAAW,KAAK,UAAU,CAAC;AACtE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACtE,aAAO,MAAM,oCAAoC;AAAA,QAC/C,OAAO;AAAA,QACP,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK,OAAO;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,MAAM,+BAA+B,QAAQ,EAAE;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,MAAM,MAAM;AACjB,SAAK,KAAK,eAAe;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,eAAuB;AACrB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAIQ,iBAAyB;AAC/B,WAAO,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EACrE;AAAA,EAEA,MAAc,kBAAkB,MAAkC;AAChE,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,OAAO,QAAQ;AAC7C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAEA,UAAM,cAA4C;AAAA,MAChD,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAEA,WAAO,MAAM,KAAK,aAAa,YAAY;AAAA,MACzC,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK,WAAW,YAAY,KAAK,QAAQ,IAAI;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EAEQ,yBAAyB,OAA0B;AACzD,UAAM,cAA4C;AAAA,MAChD,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,UAAM,YAAwC;AAAA,MAC5C,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAEA,WAAO;AAAA,MACL,IAAI,UAAU,MAAM,EAAE;AAAA,MACtB,OAAO,MAAM;AAAA,MACb,aAAa,MAAM,eAAe;AAAA,MAClC,QAAQ,UAAU,MAAM,MAAM,IAAI,KAAK;AAAA,MACvC,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAA,MACzC,MAAM,MAAM,QAAQ,IAAI,CAAC,UAAU,MAAM,IAAI,KAAK,CAAC;AAAA,MACnD,YAAY,MAAM;AAAA,MAClB,oBAAoB,MAAM;AAAA,MAC1B,aAAa,MAAM;AAAA,MACnB,UAAU;AAAA,QACR,QAAQ;AAAA,UACN,SAAS,MAAM,MAAM;AAAA,UACrB,YAAY,MAAM,UAAU;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,KAAK,WAAW;AAClB,oBAAc,KAAK,SAAS;AAAA,IAC9B;AAEA,UAAM,cAAc,KAAK,OAAO,gBAAgB,MAAM,KAAK;AAC3D,SAAK,YAAY,YAAY,YAAY;AACvC,UAAI;AACF,cAAM,KAAK,eAAe;AAAA,MAC5B,SAAS,OAAO;AACd,eAAO;AAAA,UACL;AAAA,UACA,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,GAAG,UAAU;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAA2B;AACjC,UAAM,OAAO,CAAC;AACd,QAAI,KAAK,OAAO,eAAe;AAC7B,WAAK,KAAK,WAAW,KAAK,OAAO,aAAa,EAAE;AAAA,IAClD;AACA,QAAI,KAAK,WAAW;AAClB,WAAK,KAAK,QAAQ,KAAK,UAAU,MAAM,EAAE,CAAC,EAAE;AAAA,IAC9C;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,OAA6B;AACtD,QAAI,CAAC,KAAK,OAAO,eAAe;AAC9B,aAAO;AAAA,IACT;AAGA,UAAM,cAAc,MAAM,QAAQ,IAAI,CAAC,UAAU,MAAM,IAAI,KAAK,CAAC;AACjE,WAAO,YAAY;AAAA,MACjB,CAAC,QACC,IAAI,SAAS,KAAK,OAAO,aAAc,KACvC,IAAI,SAAS,QAAQ,KAAK,WAAW,MAAM,EAAE,CAAC,EAAE;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACf,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK,OAAO;AAAA,MACpB,eAAe,KAAK,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,wBAAgC;AACtC,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS;AAEtD,UAAI,CAAC,KAAK,YAAY;AACpB,eAAO;AAAA,MACT;AAGA,UAAI,KAAK,oBAAoB,GAAG;AAC9B,eAAO,KAAK,UAAU,QAAQ,IAAI,KAAK;AAAA,MACzC;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,MAA2B;AACzD,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,YAAY;AAC1C;AAAA,IACF;AAEA,UAAM,cAA4C;AAAA,MAChD,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAGA,QAAI,KAAK,UAAU,QAAQ,KAAK,KAAK,mBAAmB;AACtD;AAAA,IACF;AAEA,UAAM,KAAK,aAAa,YAAY,KAAK,YAAY;AAAA,MACnD,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK,WAAW,YAAY,KAAK,QAAQ,IAAI;AAAA,IACzD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,MAAM,IAA2B;AACvC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,uBACZ,WACA,aAAqB,GACrB,YAAoB,KACR;AACZ,QAAI;AAEJ,aAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACtD,UAAI;AACF,eAAO,MAAM,UAAU;AAAA,MACzB,SAAS,OAAO;AACd,oBAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAGpE,YAAI,YAAY,YAAY;AAC1B;AAAA,QACF;AAGA,cAAM,WAAW,UAAU,QAAQ,YAAY;AAC/C,cAAM,cACJ,SAAS,SAAS,YAAY,KAC9B,SAAS,SAAS,KAAK,KACvB,SAAS,SAAS,mBAAmB;AAEvC,YAAI,aAAa;AAEf,gBAAM,QAAQ,YAAY,KAAK,IAAI,GAAG,OAAO,IAAI,KAAK,OAAO,IAAI;AACjE,iBAAO;AAAA,YACL,+BAA+B,KAAK,eAAe,UAAU,CAAC,IAAI,aAAa,CAAC;AAAA,UAClF;AACA,gBAAM,KAAK,MAAM,KAAK;AAAA,QACxB,OAAO;AAEL,gBAAM,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO;AAC/C,iBAAO;AAAA,YACL,0BAA0B,KAAK,OAAO,UAAU,OAAO;AAAA,UACzD;AACA,gBAAM,KAAK,MAAM,KAAK;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,QAAI,KAAK,WAAW;AAClB,oBAAc,KAAK,SAAS;AAC5B,WAAK,YAAY;AAAA,IACnB;AACA,SAAK,mBAAmB;AAAA,EAC1B;AACF;",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import { logger } from "../../core/monitoring/logger.js";
|
|
2
6
|
class TaskAwareContextManager {
|
|
3
7
|
db;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/tasks/task-aware-context.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Task-Aware Context Assembly\n * Intelligently selects context based on active tasks and their relationships\n */\n\nimport Database from 'better-sqlite3';\nimport {\n Frame,\n Anchor,\n Event,\n FrameManager,\n} from '../../core/context/frame-manager.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport type TaskStatus =\n | 'pending'\n | 'in_progress'\n | 'completed'\n | 'blocked'\n | 'cancelled';\nexport type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';\n\nexport interface Task {\n task_id: string;\n frame_id: string;\n anchor_id?: string; // Reference to TODO anchor if exists\n name: string;\n description?: string;\n status: TaskStatus;\n priority: TaskPriority;\n parent_task_id?: string;\n depends_on: string[]; // Task IDs this depends on\n assigned_to?: string; // For team contexts\n estimated_effort?: number; // In minutes\n actual_effort?: number;\n created_at: number;\n started_at?: number;\n completed_at?: number;\n blocked_reason?: string;\n context_tags: string[]; // For context relevance scoring\n metadata: Record<string, any>;\n}\n\nexport interface TaskContext {\n activeTasks: Task[];\n blockedTasks: Task[];\n relatedContext: {\n frames: Frame[];\n anchors: Anchor[];\n recentEvents: Event[];\n };\n contextScore: number; // Relevance score for current work\n}\n\nexport interface ContextRequest {\n query?: string;\n maxTokens?: number;\n taskFocus?: string[]; // Specific task IDs to focus on\n includeHistory?: boolean;\n priorityFilter?: TaskPriority[];\n}\n\nexport class TaskAwareContextManager {\n private db: Database.Database;\n private frameManager: FrameManager;\n private projectId: string;\n\n constructor(\n db: Database.Database,\n frameManager: FrameManager,\n projectId: string\n ) {\n this.db = db;\n this.frameManager = frameManager;\n this.projectId = projectId;\n this.initializeTaskSchema();\n }\n\n private initializeTaskSchema() {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS tasks (\n task_id TEXT PRIMARY KEY,\n frame_id TEXT NOT NULL,\n anchor_id TEXT,\n name TEXT NOT NULL,\n description TEXT,\n status TEXT DEFAULT 'pending',\n priority TEXT DEFAULT 'medium',\n parent_task_id TEXT,\n depends_on TEXT DEFAULT '[]',\n assigned_to TEXT,\n estimated_effort INTEGER,\n actual_effort INTEGER,\n created_at INTEGER DEFAULT (unixepoch()),\n started_at INTEGER,\n completed_at INTEGER,\n blocked_reason TEXT,\n context_tags TEXT DEFAULT '[]',\n metadata TEXT DEFAULT '{}',\n FOREIGN KEY(frame_id) REFERENCES frames(frame_id),\n FOREIGN KEY(anchor_id) REFERENCES anchors(anchor_id),\n FOREIGN KEY(parent_task_id) REFERENCES tasks(task_id)\n );\n\n CREATE TABLE IF NOT EXISTS task_dependencies (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL,\n depends_on_task_id TEXT NOT NULL,\n dependency_type TEXT DEFAULT 'blocks',\n created_at INTEGER DEFAULT (unixepoch()),\n FOREIGN KEY(task_id) REFERENCES tasks(task_id),\n FOREIGN KEY(depends_on_task_id) REFERENCES tasks(task_id)\n );\n\n CREATE TABLE IF NOT EXISTS context_access_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n request_id TEXT NOT NULL,\n task_ids TEXT, -- JSON array of relevant task IDs\n context_items TEXT, -- JSON array of included context items\n relevance_scores TEXT, -- JSON object of item -> score mappings\n total_tokens INTEGER,\n query_hash TEXT,\n timestamp INTEGER DEFAULT (unixepoch())\n );\n\n CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);\n CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);\n CREATE INDEX IF NOT EXISTS idx_tasks_frame ON tasks(frame_id);\n CREATE INDEX IF NOT EXISTS idx_task_deps ON task_dependencies(task_id);\n `);\n }\n\n /**\n * Create task from TODO anchor or standalone\n */\n public createTask(options: {\n name: string;\n description?: string;\n priority?: TaskPriority;\n frameId?: string;\n anchorId?: string;\n parentTaskId?: string;\n dependsOn?: string[];\n contextTags?: string[];\n estimatedEffort?: number;\n metadata?: Record<string, any>;\n }): string {\n const taskId = `task_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n const frameId = options.frameId || this.frameManager.getCurrentFrameId();\n\n if (!frameId) {\n throw new Error('No active frame for task creation');\n }\n\n const task: Omit<\n Task,\n 'started_at' | 'completed_at' | 'blocked_reason' | 'actual_effort'\n > = {\n task_id: taskId,\n frame_id: frameId,\n anchor_id: options.anchorId,\n name: options.name,\n description: options.description,\n status: 'pending',\n priority: options.priority || 'medium',\n parent_task_id: options.parentTaskId,\n depends_on: options.dependsOn || [],\n estimated_effort: options.estimatedEffort,\n created_at: Math.floor(Date.now() / 1000),\n context_tags: options.contextTags || [],\n metadata: options.metadata || {},\n };\n\n // Insert task\n this.db\n .prepare(\n `\n INSERT INTO tasks (\n task_id, frame_id, anchor_id, name, description, status, priority,\n parent_task_id, depends_on, estimated_effort, created_at, context_tags, metadata\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n task.task_id,\n task.frame_id,\n task.anchor_id,\n task.name,\n task.description,\n task.status,\n task.priority,\n task.parent_task_id,\n JSON.stringify(task.depends_on),\n task.estimated_effort,\n task.created_at,\n JSON.stringify(task.context_tags),\n JSON.stringify(task.metadata)\n );\n\n // Create dependency relationships\n if (task.depends_on.length > 0) {\n const dependencyStmt = this.db.prepare(`\n INSERT INTO task_dependencies (task_id, depends_on_task_id) VALUES (?, ?)\n `);\n\n task.depends_on.forEach((depTaskId) => {\n dependencyStmt.run(taskId, depTaskId);\n });\n }\n\n // Log event\n this.frameManager.addEvent('decision', {\n action: 'create_task',\n task_id: taskId,\n name: task.name,\n priority: task.priority,\n });\n\n logger.info('Created task', { taskId, name: task.name, frameId });\n return taskId;\n }\n\n /**\n * Update task status with automatic time tracking\n */\n public updateTaskStatus(\n taskId: string,\n newStatus: TaskStatus,\n reason?: string\n ): void {\n const task = this.getTask(taskId);\n if (!task) throw new Error(`Task not found: ${taskId}`);\n\n const now = Math.floor(Date.now() / 1000);\n const updates: Record<string, any> = { status: newStatus };\n\n // Automatic time tracking\n if (newStatus === 'in_progress' && task.status === 'pending') {\n updates.started_at = now;\n } else if (newStatus === 'completed' && task.status === 'in_progress') {\n updates.completed_at = now;\n if (task.started_at) {\n updates.actual_effort = now - task.started_at;\n }\n } else if (newStatus === 'blocked') {\n updates.blocked_reason = reason || 'No reason provided';\n }\n\n // Build dynamic update query\n const setClause = Object.keys(updates)\n .map((key) => `${key} = ?`)\n .join(', ');\n const values = Object.values(updates);\n\n this.db\n .prepare(`UPDATE tasks SET ${setClause} WHERE task_id = ?`)\n .run(...values, taskId);\n\n // Log status change\n this.frameManager.addEvent('observation', {\n action: 'task_status_change',\n task_id: taskId,\n old_status: task.status,\n new_status: newStatus,\n reason,\n });\n\n logger.info('Updated task status', {\n taskId,\n oldStatus: task.status,\n newStatus,\n });\n }\n\n /**\n * Assemble context optimized for active tasks and query\n */\n public assembleTaskAwareContext(request: ContextRequest): {\n context: string;\n metadata: {\n includedTasks: Task[];\n contextSources: string[];\n totalTokens: number;\n relevanceScores: Record<string, number>;\n };\n } {\n const startTime = Date.now();\n\n // 1. Get active and relevant tasks\n const activeTasks = this.getActiveTasks(request.taskFocus);\n const blockedTasks = this.getBlockedTasks();\n\n // 2. Score and select relevant context\n const contextItems = this.selectRelevantContext(activeTasks, request);\n\n // 3. Assemble final context with smart ordering\n const { context, totalTokens, relevanceScores } = this.buildContextString(\n contextItems,\n activeTasks,\n request.maxTokens || 4000\n );\n\n // 4. Log context access for learning\n this.logContextAccess({\n taskIds: activeTasks.map((t) => t.task_id),\n contextItems: contextItems.map((item) => item.id),\n relevanceScores,\n totalTokens,\n query: request.query || '',\n });\n\n const metadata = {\n includedTasks: activeTasks,\n contextSources: contextItems.map((item) => `${item.type}:${item.id}`),\n totalTokens,\n relevanceScores,\n };\n\n logger.info('Assembled task-aware context', {\n activeTasks: activeTasks.length,\n blockedTasks: blockedTasks.length,\n contextItems: contextItems.length,\n totalTokens,\n assemblyTimeMs: Date.now() - startTime,\n });\n\n return { context, metadata };\n }\n\n /**\n * Get tasks that are currently active or should be in context\n */\n private getActiveTasks(taskFocus?: string[]): Task[] {\n let query = `\n SELECT * FROM tasks \n WHERE status IN ('in_progress', 'pending') \n `;\n let params: any[] = [];\n\n if (taskFocus && taskFocus.length > 0) {\n query += ` AND task_id IN (${taskFocus.map(() => '?').join(',')})`;\n params = taskFocus;\n }\n\n query += ` ORDER BY priority DESC, created_at ASC`;\n\n const rows = this.db.prepare(query).all(...params) as any[];\n return this.hydrateTasks(rows);\n }\n\n private getBlockedTasks(): Task[] {\n const rows = this.db\n .prepare(\n `\n SELECT * FROM tasks WHERE status = 'blocked' ORDER BY priority DESC\n `\n )\n .all() as any[];\n return this.hydrateTasks(rows);\n }\n\n /**\n * Select context items relevant to active tasks\n */\n private selectRelevantContext(activeTasks: Task[], request: ContextRequest) {\n const contextItems: Array<{\n id: string;\n type: 'frame' | 'anchor' | 'event';\n content: string;\n relevanceScore: number;\n tokenEstimate: number;\n }> = [];\n\n // Get frames for active tasks\n const frameIds = [...new Set(activeTasks.map((t) => t.frame_id))];\n frameIds.forEach((frameId) => {\n const frame = this.frameManager.getFrame(frameId);\n if (frame) {\n const score = this.calculateFrameRelevance(\n frame,\n activeTasks,\n request.query\n );\n contextItems.push({\n id: frameId,\n type: 'frame',\n content: `Frame: ${frame.name} (${frame.type})`,\n relevanceScore: score,\n tokenEstimate: frame.name.length + 20,\n });\n }\n });\n\n // Get relevant anchors\n const anchors = this.getRelevantAnchors(frameIds, request);\n anchors.forEach((anchor) => {\n const score = this.calculateAnchorRelevance(\n anchor,\n activeTasks,\n request.query\n );\n contextItems.push({\n id: anchor.anchor_id,\n type: 'anchor',\n content: `${anchor.type}: ${anchor.text}`,\n relevanceScore: score,\n tokenEstimate: anchor.text.length + 10,\n });\n });\n\n // Get recent events from active frames\n if (request.includeHistory) {\n frameIds.forEach((frameId) => {\n const events = this.frameManager.getFrameEvents(frameId, 5);\n events.forEach((event) => {\n const score = this.calculateEventRelevance(\n event,\n activeTasks,\n request.query\n );\n if (score > 0.3) {\n contextItems.push({\n id: event.event_id,\n type: 'event',\n content: `Event: ${event.event_type}`,\n relevanceScore: score,\n tokenEstimate: 30,\n });\n }\n });\n });\n }\n\n // Sort by relevance score\n return contextItems.sort((a, b) => b.relevanceScore - a.relevanceScore);\n }\n\n private buildContextString(\n contextItems: any[],\n activeTasks: Task[],\n maxTokens: number\n ): {\n context: string;\n totalTokens: number;\n relevanceScores: Record<string, number>;\n } {\n let context = '# Active Task Context\\n\\n';\n let totalTokens = 20; // Header estimate\n const relevanceScores: Record<string, number> = {};\n\n // Always include active tasks summary\n context += '## Current Tasks\\n';\n activeTasks.forEach((task) => {\n const line = `- [${task.status.toUpperCase()}] ${task.name} (${task.priority})\\n`;\n context += line;\n totalTokens += line.length / 4; // Rough token estimate\n relevanceScores[task.task_id] = 1.0;\n });\n context += '\\n';\n\n // Add context items within token budget\n context += '## Relevant Context\\n';\n for (const item of contextItems) {\n if (totalTokens + item.tokenEstimate > maxTokens) break;\n\n context += `${item.content}\\n`;\n totalTokens += item.tokenEstimate;\n relevanceScores[item.id] = item.relevanceScore;\n }\n\n return { context, totalTokens, relevanceScores };\n }\n\n // Relevance scoring methods\n private calculateFrameRelevance(\n frame: Frame,\n activeTasks: Task[],\n query?: string\n ): number {\n let score = 0.5; // Base relevance\n\n // Higher score if frame contains active tasks\n if (activeTasks.some((t) => t.frame_id === frame.frame_id)) {\n score += 0.4;\n }\n\n // Query matching\n if (query) {\n const queryLower = query.toLowerCase();\n if (frame.name.toLowerCase().includes(queryLower)) {\n score += 0.3;\n }\n }\n\n // Recent frames get boost\n const ageHours = (Date.now() / 1000 - frame.created_at) / 3600;\n if (ageHours < 24) score += 0.2;\n\n return Math.min(score, 1.0);\n }\n\n private calculateAnchorRelevance(\n anchor: Anchor,\n activeTasks: Task[],\n query?: string\n ): number {\n let score = 0.3; // Base relevance\n\n // Task-related anchors get priority\n if (anchor.type === 'TODO') score += 0.4;\n if (anchor.type === 'DECISION') score += 0.3;\n if (anchor.type === 'CONSTRAINT') score += 0.2;\n\n // Priority-based boost\n score += (anchor.priority / 10) * 0.2;\n\n // Query matching\n if (query) {\n const queryLower = query.toLowerCase();\n if (anchor.text.toLowerCase().includes(queryLower)) {\n score += 0.3;\n }\n }\n\n return Math.min(score, 1.0);\n }\n\n private calculateEventRelevance(\n event: Event,\n _activeTasks: Task[],\n _query?: string\n ): number {\n let score = 0.1; // Base relevance\n\n // Event type relevance\n if (event.event_type === 'decision') score += 0.4;\n if (event.event_type === 'tool_call') score += 0.3;\n if (event.event_type === 'observation') score += 0.2;\n\n // Recent events get boost\n const ageHours = (Date.now() / 1000 - event.ts) / 3600;\n if (ageHours < 1) score += 0.3;\n else if (ageHours < 6) score += 0.2;\n\n return Math.min(score, 1.0);\n }\n\n // Helper methods\n private getTask(taskId: string): Task | undefined {\n const row = this.db\n .prepare(`SELECT * FROM tasks WHERE task_id = ?`)\n .get(taskId) as any;\n return row ? this.hydrateTask(row) : undefined;\n }\n\n private getRelevantAnchors(\n frameIds: string[],\n _request: ContextRequest\n ): Anchor[] {\n if (frameIds.length === 0) return [];\n\n const placeholders = frameIds.map(() => '?').join(',');\n const rows = this.db\n .prepare(\n `\n SELECT * FROM anchors \n WHERE frame_id IN (${placeholders})\n ORDER BY priority DESC, created_at DESC\n LIMIT 20\n `\n )\n .all(...frameIds) as any[];\n\n return rows.map((row) => ({\n ...row,\n metadata: JSON.parse(row.metadata || '{}'),\n }));\n }\n\n private hydrateTasks(rows: any[]): Task[] {\n return rows.map(this.hydrateTask);\n }\n\n private hydrateTask = (row: any): Task => ({\n ...row,\n depends_on: JSON.parse(row.depends_on || '[]'),\n context_tags: JSON.parse(row.context_tags || '[]'),\n metadata: JSON.parse(row.metadata || '{}'),\n });\n\n private logContextAccess(data: {\n taskIds: string[];\n contextItems: string[];\n relevanceScores: Record<string, number>;\n totalTokens: number;\n query: string;\n }) {\n const requestId = `ctx_${Date.now()}_${Math.random().toString(36).substr(2, 6)}`;\n\n this.db\n .prepare(\n `\n INSERT INTO context_access_log (\n request_id, task_ids, context_items, relevance_scores, total_tokens, query_hash\n ) VALUES (?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n requestId,\n JSON.stringify(data.taskIds),\n JSON.stringify(data.contextItems),\n JSON.stringify(data.relevanceScores),\n data.totalTokens,\n this.hashString(data.query)\n );\n }\n\n private hashString(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash.toString(16);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import { SwarmRegistry } from "../../integrations/ralph/monitoring/swarm-registry.js";
|
|
2
6
|
import { execSync } from "child_process";
|
|
3
7
|
class SimpleSwarmMonitor {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/tui/simple-monitor.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Simple text-based swarm monitor for terminal compatibility\n * Fallback for terminals that can't handle blessed TUI\n */\n\nimport { SwarmRegistry } from '../../integrations/ralph/monitoring/swarm-registry.js';\nimport { execSync } from 'child_process';\n// Simple monitor for terminal compatibility\n\nexport class SimpleSwarmMonitor {\n private refreshInterval: NodeJS.Timeout | null = null;\n\n /**\n * Start simple text-based monitoring\n */\n start(): void {\n console.log('\uD83E\uDDBE Ralph Swarm Monitor (Text Mode)');\n console.log('=====================================');\n console.log('');\n console.log('Press Ctrl+C to quit');\n console.log('');\n\n // Show initial status\n this.displayStatus();\n\n // Set up refresh interval\n this.refreshInterval = setInterval(() => {\n this.displayStatus();\n }, 5000);\n\n // Handle graceful shutdown\n process.on('SIGINT', () => {\n this.stop();\n process.exit(0);\n });\n }\n\n /**\n * Stop monitoring\n */\n stop(): void {\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval);\n }\n console.log('\\n\uD83D\uDC4B Swarm monitoring stopped');\n }\n\n /**\n * Display current status\n */\n private displayStatus(): void {\n const timestamp = new Date().toLocaleTimeString();\n\n console.log(`\\n\u23F0 ${timestamp} - Swarm Status Update`);\n console.log('\u2500'.repeat(50));\n\n try {\n // Check registry\n const registry = SwarmRegistry.getInstance();\n const activeSwarms = registry.listActiveSwarms();\n const stats = registry.getStatistics();\n\n console.log(\n `\uD83D\uDCCA Registry Stats: ${stats.activeSwarms} active, ${stats.totalSwarms} total`\n );\n\n if (activeSwarms.length > 0) {\n console.log('\\n\uD83E\uDDBE Active Swarms:');\n for (const swarm of activeSwarms) {\n const uptime = this.formatDuration(Date.now() - swarm.startTime);\n console.log(\n ` \u2022 ${swarm.id.substring(0, 8)}: ${swarm.status} (${uptime})`\n );\n }\n } else {\n console.log('\u274C No active swarms in registry');\n }\n\n // Check for external processes\n try {\n const ralphProcesses = execSync(\n 'ps aux | grep \"ralph\" | grep -v grep',\n { encoding: 'utf8' }\n );\n if (ralphProcesses.trim()) {\n console.log('\\n\uD83D\uDD0D External Ralph Processes:');\n const processLines = ralphProcesses\n .split('\\n')\n .filter((line) => line.trim());\n processLines.slice(0, 3).forEach((line) => {\n const parts = line.split(/\\s+/);\n console.log(\n ` PID ${parts[1]}: ${parts.slice(10).join(' ').slice(0, 50)}...`\n );\n });\n if (processLines.length > 3) {\n console.log(` ... and ${processLines.length - 3} more processes`);\n }\n }\n } catch {\n // No external processes\n }\n\n // Show recent commits\n try {\n const recentCommits = execSync(\n 'git log --oneline --since=\"1 hour ago\" --pretty=format:\"%h %an %s\" | head -3',\n { encoding: 'utf8', cwd: process.cwd() }\n );\n\n if (recentCommits.trim()) {\n console.log('\\n\uD83D\uDCDD Recent Commits:');\n recentCommits\n .split('\\n')\n .filter((line) => line.trim())\n .forEach((line) => {\n console.log(` ${line}`);\n });\n }\n } catch {\n // No git or commits\n }\n } catch (error: unknown) {\n console.log(`\u274C Status error: ${(error as Error).message}`);\n }\n }\n\n /**\n * Format duration string\n */\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) return `${hours}h ${minutes % 60}m`;\n if (minutes > 0) return `${minutes}m ${seconds % 60}s`;\n return `${seconds}s`;\n }\n}\n\nexport default SimpleSwarmMonitor;\n"],
|
|
5
|
-
"mappings": "AAKA,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AAGlB,MAAM,mBAAmB;AAAA,EACtB,kBAAyC;AAAA;AAAA;AAAA;AAAA,EAKjD,QAAc;AACZ,YAAQ,IAAI,2CAAoC;AAChD,YAAQ,IAAI,uCAAuC;AACnD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,sBAAsB;AAClC,YAAQ,IAAI,EAAE;AAGd,SAAK,cAAc;AAGnB,SAAK,kBAAkB,YAAY,MAAM;AACvC,WAAK,cAAc;AAAA,IACrB,GAAG,GAAI;AAGP,YAAQ,GAAG,UAAU,MAAM;AACzB,WAAK,KAAK;AACV,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAa;AACX,QAAI,KAAK,iBAAiB;AACxB,oBAAc,KAAK,eAAe;AAAA,IACpC;AACA,YAAQ,IAAI,sCAA+B;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAsB;AAC5B,UAAM,aAAY,oBAAI,KAAK,GAAE,mBAAmB;AAEhD,YAAQ,IAAI;AAAA,SAAO,SAAS,wBAAwB;AACpD,YAAQ,IAAI,SAAI,OAAO,EAAE,CAAC;AAE1B,QAAI;AAEF,YAAM,WAAW,cAAc,YAAY;AAC3C,YAAM,eAAe,SAAS,iBAAiB;AAC/C,YAAM,QAAQ,SAAS,cAAc;AAErC,cAAQ;AAAA,QACN,6BAAsB,MAAM,YAAY,YAAY,MAAM,WAAW;AAAA,MACvE;AAEA,UAAI,aAAa,SAAS,GAAG;AAC3B,gBAAQ,IAAI,4BAAqB;AACjC,mBAAW,SAAS,cAAc;AAChC,gBAAM,SAAS,KAAK,eAAe,KAAK,IAAI,IAAI,MAAM,SAAS;AAC/D,kBAAQ;AAAA,YACN,aAAQ,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,KAAK,MAAM,MAAM,KAAK,MAAM;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,OAAO;AACL,gBAAQ,IAAI,qCAAgC;AAAA,MAC9C;AAGA,UAAI;AACF,cAAM,iBAAiB;AAAA,UACrB;AAAA,UACA,EAAE,UAAU,OAAO;AAAA,QACrB;AACA,YAAI,eAAe,KAAK,GAAG;AACzB,kBAAQ,IAAI,uCAAgC;AAC5C,gBAAM,eAAe,eAClB,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;AAC/B,uBAAa,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,SAAS;AACzC,kBAAM,QAAQ,KAAK,MAAM,KAAK;AAC9B,oBAAQ;AAAA,cACN,UAAU,MAAM,CAAC,CAAC,KAAK,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,YAC/D;AAAA,UACF,CAAC;AACD,cAAI,aAAa,SAAS,GAAG;AAC3B,oBAAQ,IAAI,cAAc,aAAa,SAAS,CAAC,iBAAiB;AAAA,UACpE;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAGA,UAAI;AACF,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA,EAAE,UAAU,QAAQ,KAAK,QAAQ,IAAI,EAAE;AAAA,QACzC;AAEA,YAAI,cAAc,KAAK,GAAG;AACxB,kBAAQ,IAAI,6BAAsB;AAClC,wBACG,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,EAC5B,QAAQ,CAAC,SAAS;AACjB,oBAAQ,IAAI,MAAM,IAAI,EAAE;AAAA,UAC1B,CAAC;AAAA,QACL;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF,SAAS,OAAgB;AACvB,cAAQ,IAAI,wBAAoB,MAAgB,OAAO,EAAE;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,IAAoB;AACzC,UAAM,UAAU,KAAK,MAAM,KAAK,GAAI;AACpC,UAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,UAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AAErC,QAAI,QAAQ,EAAG,QAAO,GAAG,KAAK,KAAK,UAAU,EAAE;AAC/C,QAAI,UAAU,EAAG,QAAO,GAAG,OAAO,KAAK,UAAU,EAAE;AACnD,WAAO,GAAG,OAAO;AAAA,EACnB;AACF;AAEA,IAAO,yBAAQ;",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import blessed from "blessed";
|
|
2
6
|
import { logger } from "../../core/monitoring/logger.js";
|
|
3
7
|
import { SwarmDashboard } from "../../integrations/ralph/monitoring/swarm-dashboard.js";
|