@stackmemoryai/stackmemory 0.3.0 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -272
- package/dist/cli/codex-sm.js +48 -19
- package/dist/cli/codex-sm.js.map +2 -2
- package/dist/cli/commands/clear.js +191 -0
- package/dist/cli/commands/clear.js.map +7 -0
- package/dist/cli/commands/config.js +152 -1
- package/dist/cli/commands/config.js.map +2 -2
- package/dist/cli/commands/dashboard.js +178 -0
- package/dist/cli/commands/dashboard.js.map +7 -0
- package/dist/cli/commands/handoff.js +125 -8
- package/dist/cli/commands/handoff.js.map +2 -2
- package/dist/cli/commands/linear-create.js +132 -0
- package/dist/cli/commands/linear-create.js.map +7 -0
- package/dist/cli/commands/linear-list.js +69 -0
- package/dist/cli/commands/linear-list.js.map +7 -0
- package/dist/cli/commands/linear-migrate.js +40 -0
- package/dist/cli/commands/linear-migrate.js.map +7 -0
- package/dist/cli/commands/linear.js +185 -36
- package/dist/cli/commands/linear.js.map +2 -2
- package/dist/cli/commands/monitor.js +309 -0
- package/dist/cli/commands/monitor.js.map +7 -0
- package/dist/cli/commands/quality.js +414 -0
- package/dist/cli/commands/quality.js.map +7 -0
- package/dist/cli/commands/storage.js +275 -0
- package/dist/cli/commands/storage.js.map +7 -0
- package/dist/cli/commands/tui.js +66 -0
- package/dist/cli/commands/tui.js.map +7 -0
- package/dist/cli/commands/workflow.js +134 -0
- package/dist/cli/commands/workflow.js.map +7 -0
- package/dist/cli/index.js +105 -9
- package/dist/cli/index.js.map +3 -3
- package/dist/core/analytics/team-analytics.js +374 -0
- package/dist/core/analytics/team-analytics.js.map +7 -0
- package/dist/core/context/context-bridge.js +234 -0
- package/dist/core/context/context-bridge.js.map +7 -0
- package/dist/core/context/dual-stack-manager.js +850 -0
- package/dist/core/context/dual-stack-manager.js.map +7 -0
- package/dist/core/context/frame-handoff-manager.js +384 -0
- package/dist/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/core/context/frame-manager.js +132 -12
- package/dist/core/context/frame-manager.js.map +2 -2
- package/dist/core/context/permission-manager.js +181 -0
- package/dist/core/context/permission-manager.js.map +7 -0
- package/dist/core/context/shared-context-layer.js +386 -0
- package/dist/core/context/shared-context-layer.js.map +7 -0
- package/dist/core/context/stack-merge-resolver.js +600 -0
- package/dist/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/core/context/validation.js +121 -0
- package/dist/core/context/validation.js.map +7 -0
- package/dist/core/database/connection-pool.js +266 -175
- package/dist/core/database/connection-pool.js.map +2 -2
- package/dist/core/database/database-adapter.js +51 -0
- package/dist/core/database/database-adapter.js.map +7 -0
- package/dist/core/database/migration-manager.js +514 -0
- package/dist/core/database/migration-manager.js.map +7 -0
- package/dist/core/database/paradedb-adapter.js +970 -0
- package/dist/core/database/paradedb-adapter.js.map +7 -0
- package/dist/core/database/query-router.js +421 -0
- package/dist/core/database/query-router.js.map +7 -0
- package/dist/core/database/sqlite-adapter.js +547 -0
- package/dist/core/database/sqlite-adapter.js.map +7 -0
- package/dist/core/errors/index.js +21 -1
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/frame/workflow-templates-stub.js +42 -0
- package/dist/core/frame/workflow-templates-stub.js.map +7 -0
- package/dist/core/frame/workflow-templates.js +276 -0
- package/dist/core/frame/workflow-templates.js.map +7 -0
- package/dist/core/merge/conflict-detector.js +5 -2
- package/dist/core/merge/conflict-detector.js.map +2 -2
- package/dist/core/merge/resolution-engine.js +3 -14
- package/dist/core/merge/resolution-engine.js.map +2 -2
- package/dist/core/merge/stack-diff.js.map +2 -2
- package/dist/core/monitoring/logger.js +18 -3
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/monitoring/session-monitor.js +296 -0
- package/dist/core/monitoring/session-monitor.js.map +7 -0
- package/dist/core/retrieval/context-retriever.js +475 -0
- package/dist/core/retrieval/context-retriever.js.map +7 -0
- package/dist/core/retrieval/graph-retrieval.js +658 -0
- package/dist/core/retrieval/graph-retrieval.js.map +7 -0
- package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
- package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
- package/dist/core/session/clear-survival-stub.js +49 -0
- package/dist/core/session/clear-survival-stub.js.map +7 -0
- package/dist/core/session/clear-survival.js +426 -0
- package/dist/core/session/clear-survival.js.map +7 -0
- package/dist/core/session/handoff-generator.js +339 -0
- package/dist/core/session/handoff-generator.js.map +7 -0
- package/dist/core/session/session-manager.js +61 -26
- package/dist/core/session/session-manager.js.map +3 -3
- package/dist/core/skills/index.js +3 -0
- package/dist/core/skills/index.js.map +7 -0
- package/dist/core/skills/skill-storage.js +749 -0
- package/dist/core/skills/skill-storage.js.map +7 -0
- package/dist/core/skills/types.js +189 -0
- package/dist/core/skills/types.js.map +7 -0
- package/dist/core/storage/railway-optimized-storage.js +550 -0
- package/dist/core/storage/railway-optimized-storage.js.map +7 -0
- package/dist/core/storage/remote-storage.js +456 -0
- package/dist/core/storage/remote-storage.js.map +7 -0
- package/dist/core/trace/trace-detector.js +136 -5
- package/dist/core/trace/trace-detector.js.map +2 -2
- package/dist/core/trace/trace-store.js.map +2 -2
- package/dist/features/tui/components/analytics-panel.js +136 -0
- package/dist/features/tui/components/analytics-panel.js.map +7 -0
- package/dist/features/tui/components/frame-visualizer.js +377 -0
- package/dist/features/tui/components/frame-visualizer.js.map +7 -0
- package/dist/features/tui/components/pr-tracker.js +123 -0
- package/dist/features/tui/components/pr-tracker.js.map +7 -0
- package/dist/features/tui/components/session-monitor.js +286 -0
- package/dist/features/tui/components/session-monitor.js.map +7 -0
- package/dist/features/tui/components/subagent-fleet.js +388 -0
- package/dist/features/tui/components/subagent-fleet.js.map +7 -0
- package/dist/features/tui/components/task-board.js +475 -0
- package/dist/features/tui/components/task-board.js.map +7 -0
- package/dist/features/tui/index.js +397 -0
- package/dist/features/tui/index.js.map +7 -0
- package/dist/features/tui/services/data-service.js +654 -0
- package/dist/features/tui/services/data-service.js.map +7 -0
- package/dist/features/tui/services/websocket-client.js +149 -0
- package/dist/features/tui/services/websocket-client.js.map +7 -0
- package/dist/features/tui/terminal-compat.js +205 -0
- package/dist/features/tui/terminal-compat.js.map +7 -0
- package/dist/features/tui/types.js +1 -0
- package/dist/features/tui/types.js.map +7 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/integrations/claude-code/post-task-hooks.js +541 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/integrations/linear/client.js +22 -4
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/linear/migration.js +299 -0
- package/dist/integrations/linear/migration.js.map +7 -0
- package/dist/integrations/linear/oauth-server.js +396 -0
- package/dist/integrations/linear/oauth-server.js.map +7 -0
- package/dist/integrations/linear/rest-client.js +199 -0
- package/dist/integrations/linear/rest-client.js.map +7 -0
- package/dist/integrations/linear/sync.js +14 -2
- package/dist/integrations/linear/sync.js.map +2 -2
- package/dist/integrations/linear/webhook-handler.js +200 -0
- package/dist/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/integrations/mcp/refactored-server.js +31 -3
- package/dist/integrations/mcp/refactored-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +25 -7
- package/dist/integrations/mcp/server.js.map +2 -2
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/models/user.model.js +3 -0
- package/dist/models/user.model.js.map +2 -2
- package/dist/services/context-service.js.map +2 -2
- package/dist/utils/formatting.js +58 -0
- package/dist/utils/formatting.js.map +7 -0
- package/package.json +24 -5
- package/dist/cli/__tests__/index.test.js +0 -290
- package/dist/cli/__tests__/index.test.js.map +0 -7
- package/dist/core/config/__tests__/config-manager.test.js +0 -248
- package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
- package/dist/core/context/__tests__/frame-manager.test.js +0 -879
- package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
- package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
- package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
- package/dist/core/errors/__tests__/error-handling.test.js +0 -270
- package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
- package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
- package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
- package/dist/core/query/__tests__/query-parser.test.js +0 -301
- package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
- package/dist/core/query/__tests__/query-templates.test.js +0 -210
- package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
- package/dist/core/trace/trace-detector.test.js +0 -401
- package/dist/core/trace/trace-detector.test.js.map +0 -7
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/auth.test.js +0 -558
- package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
- package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
- package/dist/integrations/mcp/__tests__/server.test.js +0 -798
- package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
- package/dist/scripts/benchmark-performance.d.ts +0 -7
- package/dist/scripts/benchmark-performance.d.ts.map +0 -1
- package/dist/scripts/benchmark-performance.js +0 -44
- package/dist/scripts/benchmark-performance.js.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
- package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.js +0 -172
- package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
- package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
- package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
- package/dist/scripts/initialize.d.ts +0 -6
- package/dist/scripts/initialize.d.ts.map +0 -1
- package/dist/scripts/initialize.js +0 -93
- package/dist/scripts/initialize.js.map +0 -1
- package/dist/scripts/list-linear-tasks.d.ts +0 -6
- package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
- package/dist/scripts/list-linear-tasks.js +0 -121
- package/dist/scripts/list-linear-tasks.js.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
- package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
- package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
- package/dist/scripts/show-linear-summary.d.ts +0 -6
- package/dist/scripts/show-linear-summary.d.ts.map +0 -1
- package/dist/scripts/show-linear-summary.js +0 -120
- package/dist/scripts/show-linear-summary.js.map +0 -1
- package/dist/scripts/status.d.ts +0 -6
- package/dist/scripts/status.d.ts.map +0 -1
- package/dist/scripts/status.js +0 -101
- package/dist/scripts/status.js.map +0 -1
- package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
- package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
- package/dist/src/agents/core/agent-task-manager.js +0 -504
- package/dist/src/agents/core/agent-task-manager.js.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
- package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.js +0 -130
- package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
- package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
- package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
- package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.js +0 -248
- package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
- package/dist/src/cli/auto-detect.d.ts +0 -61
- package/dist/src/cli/auto-detect.d.ts.map +0 -1
- package/dist/src/cli/auto-detect.js +0 -350
- package/dist/src/cli/auto-detect.js.map +0 -1
- package/dist/src/cli/browser-test.d.ts +0 -6
- package/dist/src/cli/browser-test.d.ts.map +0 -1
- package/dist/src/cli/browser-test.js +0 -32
- package/dist/src/cli/browser-test.js.map +0 -1
- package/dist/src/cli/claude-sm.d.ts +0 -7
- package/dist/src/cli/claude-sm.d.ts.map +0 -1
- package/dist/src/cli/claude-sm.js +0 -412
- package/dist/src/cli/claude-sm.js.map +0 -1
- package/dist/src/cli/commands/agent.d.ts +0 -9
- package/dist/src/cli/commands/agent.d.ts.map +0 -1
- package/dist/src/cli/commands/agent.js +0 -303
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/config.d.ts +0 -6
- package/dist/src/cli/commands/config.d.ts.map +0 -1
- package/dist/src/cli/commands/config.js +0 -224
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/context.d.ts +0 -7
- package/dist/src/cli/commands/context.d.ts.map +0 -1
- package/dist/src/cli/commands/context.js +0 -365
- package/dist/src/cli/commands/context.js.map +0 -1
- package/dist/src/cli/commands/handoff.d.ts +0 -6
- package/dist/src/cli/commands/handoff.d.ts.map +0 -1
- package/dist/src/cli/commands/handoff.js +0 -212
- package/dist/src/cli/commands/handoff.js.map +0 -1
- package/dist/src/cli/commands/linear-test.d.ts +0 -6
- package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
- package/dist/src/cli/commands/linear-test.js +0 -123
- package/dist/src/cli/commands/linear-test.js.map +0 -1
- package/dist/src/cli/commands/linear.d.ts +0 -6
- package/dist/src/cli/commands/linear.d.ts.map +0 -1
- package/dist/src/cli/commands/linear.js +0 -393
- package/dist/src/cli/commands/linear.js.map +0 -1
- package/dist/src/cli/commands/log.d.ts +0 -7
- package/dist/src/cli/commands/log.d.ts.map +0 -1
- package/dist/src/cli/commands/log.js +0 -168
- package/dist/src/cli/commands/log.js.map +0 -1
- package/dist/src/cli/commands/onboard.d.ts +0 -8
- package/dist/src/cli/commands/onboard.d.ts.map +0 -1
- package/dist/src/cli/commands/onboard.js +0 -363
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/projects.d.ts +0 -8
- package/dist/src/cli/commands/projects.d.ts.map +0 -1
- package/dist/src/cli/commands/projects.js +0 -220
- package/dist/src/cli/commands/projects.js.map +0 -1
- package/dist/src/cli/commands/search.d.ts +0 -7
- package/dist/src/cli/commands/search.d.ts.map +0 -1
- package/dist/src/cli/commands/search.js +0 -162
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session.d.ts +0 -7
- package/dist/src/cli/commands/session.d.ts.map +0 -1
- package/dist/src/cli/commands/session.js +0 -222
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/tasks.d.ts +0 -7
- package/dist/src/cli/commands/tasks.d.ts.map +0 -1
- package/dist/src/cli/commands/tasks.js +0 -229
- package/dist/src/cli/commands/tasks.js.map +0 -1
- package/dist/src/cli/commands/webhook.d.ts +0 -3
- package/dist/src/cli/commands/webhook.d.ts.map +0 -1
- package/dist/src/cli/commands/webhook.js +0 -157
- package/dist/src/cli/commands/webhook.js.map +0 -1
- package/dist/src/cli/commands/worktree.d.ts +0 -8
- package/dist/src/cli/commands/worktree.d.ts.map +0 -1
- package/dist/src/cli/commands/worktree.js +0 -339
- package/dist/src/cli/commands/worktree.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -995
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/utils/viewer.d.ts +0 -3
- package/dist/src/cli/utils/viewer.d.ts.map +0 -1
- package/dist/src/cli/utils/viewer.js +0 -91
- package/dist/src/cli/utils/viewer.js.map +0 -1
- package/dist/src/core/config/config-manager.d.ts +0 -95
- package/dist/src/core/config/config-manager.d.ts.map +0 -1
- package/dist/src/core/config/config-manager.js +0 -359
- package/dist/src/core/config/config-manager.js.map +0 -1
- package/dist/src/core/config/types.d.ts +0 -72
- package/dist/src/core/config/types.d.ts.map +0 -1
- package/dist/src/core/config/types.js +0 -127
- package/dist/src/core/config/types.js.map +0 -1
- package/dist/src/core/context/auto-context.d.ts +0 -22
- package/dist/src/core/context/auto-context.d.ts.map +0 -1
- package/dist/src/core/context/auto-context.js +0 -77
- package/dist/src/core/context/auto-context.js.map +0 -1
- package/dist/src/core/context/compaction-handler.d.ts +0 -119
- package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
- package/dist/src/core/context/compaction-handler.js +0 -306
- package/dist/src/core/context/compaction-handler.js.map +0 -1
- package/dist/src/core/context/frame-database.d.ts +0 -59
- package/dist/src/core/context/frame-database.d.ts.map +0 -1
- package/dist/src/core/context/frame-database.js +0 -333
- package/dist/src/core/context/frame-database.js.map +0 -1
- package/dist/src/core/context/frame-digest.d.ts +0 -59
- package/dist/src/core/context/frame-digest.d.ts.map +0 -1
- package/dist/src/core/context/frame-digest.js +0 -264
- package/dist/src/core/context/frame-digest.js.map +0 -1
- package/dist/src/core/context/frame-manager.d.ts +0 -112
- package/dist/src/core/context/frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/frame-manager.js +0 -600
- package/dist/src/core/context/frame-manager.js.map +0 -1
- package/dist/src/core/context/frame-stack.d.ts +0 -85
- package/dist/src/core/context/frame-stack.d.ts.map +0 -1
- package/dist/src/core/context/frame-stack.js +0 -287
- package/dist/src/core/context/frame-stack.js.map +0 -1
- package/dist/src/core/context/frame-types.d.ts +0 -67
- package/dist/src/core/context/frame-types.d.ts.map +0 -1
- package/dist/src/core/context/frame-types.js +0 -6
- package/dist/src/core/context/frame-types.js.map +0 -1
- package/dist/src/core/context/index.d.ts +0 -11
- package/dist/src/core/context/index.d.ts.map +0 -1
- package/dist/src/core/context/index.js +0 -14
- package/dist/src/core/context/index.js.map +0 -1
- package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
- package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
- package/dist/src/core/context/model-aware-compaction.js +0 -616
- package/dist/src/core/context/model-aware-compaction.js.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
- package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.js +0 -340
- package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
- package/dist/src/core/database/batch-operations.d.ts +0 -118
- package/dist/src/core/database/batch-operations.d.ts.map +0 -1
- package/dist/src/core/database/batch-operations.js +0 -339
- package/dist/src/core/database/batch-operations.js.map +0 -1
- package/dist/src/core/database/connection-pool.d.ts +0 -79
- package/dist/src/core/database/connection-pool.d.ts.map +0 -1
- package/dist/src/core/database/connection-pool.js +0 -236
- package/dist/src/core/database/connection-pool.js.map +0 -1
- package/dist/src/core/database/query-cache.d.ts +0 -135
- package/dist/src/core/database/query-cache.d.ts.map +0 -1
- package/dist/src/core/database/query-cache.js +0 -294
- package/dist/src/core/database/query-cache.js.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
- package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.js +0 -198
- package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
- package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
- package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
- package/dist/src/core/digest/index.d.ts +0 -9
- package/dist/src/core/digest/index.d.ts.map +0 -1
- package/dist/src/core/digest/index.js +0 -9
- package/dist/src/core/digest/index.js.map +0 -1
- package/dist/src/core/digest/types.d.ts +0 -154
- package/dist/src/core/digest/types.d.ts.map +0 -1
- package/dist/src/core/digest/types.js +0 -18
- package/dist/src/core/digest/types.js.map +0 -1
- package/dist/src/core/errors/index.d.ts +0 -143
- package/dist/src/core/errors/index.d.ts.map +0 -1
- package/dist/src/core/errors/index.js +0 -282
- package/dist/src/core/errors/index.js.map +0 -1
- package/dist/src/core/errors/recovery.d.ts +0 -86
- package/dist/src/core/errors/recovery.d.ts.map +0 -1
- package/dist/src/core/errors/recovery.js +0 -274
- package/dist/src/core/errors/recovery.js.map +0 -1
- package/dist/src/core/merge/conflict-detector.d.ts +0 -122
- package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
- package/dist/src/core/merge/conflict-detector.js +0 -468
- package/dist/src/core/merge/conflict-detector.js.map +0 -1
- package/dist/src/core/merge/index.d.ts +0 -9
- package/dist/src/core/merge/index.d.ts.map +0 -1
- package/dist/src/core/merge/index.js +0 -9
- package/dist/src/core/merge/index.js.map +0 -1
- package/dist/src/core/merge/resolution-engine.d.ts +0 -120
- package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
- package/dist/src/core/merge/resolution-engine.js +0 -573
- package/dist/src/core/merge/resolution-engine.js.map +0 -1
- package/dist/src/core/merge/stack-diff.d.ts +0 -97
- package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
- package/dist/src/core/merge/stack-diff.js +0 -516
- package/dist/src/core/merge/stack-diff.js.map +0 -1
- package/dist/src/core/merge/types.d.ts +0 -110
- package/dist/src/core/merge/types.d.ts.map +0 -1
- package/dist/src/core/merge/types.js +0 -6
- package/dist/src/core/merge/types.js.map +0 -1
- package/dist/src/core/monitoring/error-handler.d.ts +0 -46
- package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
- package/dist/src/core/monitoring/error-handler.js +0 -212
- package/dist/src/core/monitoring/error-handler.js.map +0 -1
- package/dist/src/core/monitoring/logger.d.ts +0 -24
- package/dist/src/core/monitoring/logger.d.ts.map +0 -1
- package/dist/src/core/monitoring/logger.js +0 -126
- package/dist/src/core/monitoring/logger.js.map +0 -1
- package/dist/src/core/monitoring/metrics.d.ts +0 -10
- package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
- package/dist/src/core/monitoring/metrics.js +0 -152
- package/dist/src/core/monitoring/metrics.js.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
- package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.js +0 -178
- package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
- package/dist/src/core/performance/context-cache.d.ts +0 -109
- package/dist/src/core/performance/context-cache.d.ts.map +0 -1
- package/dist/src/core/performance/context-cache.js +0 -280
- package/dist/src/core/performance/context-cache.js.map +0 -1
- package/dist/src/core/performance/index.d.ts +0 -3
- package/dist/src/core/performance/index.d.ts.map +0 -1
- package/dist/src/core/performance/index.js +0 -3
- package/dist/src/core/performance/index.js.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
- package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.js +0 -332
- package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
- package/dist/src/core/performance/monitor.d.ts +0 -48
- package/dist/src/core/performance/monitor.d.ts.map +0 -1
- package/dist/src/core/performance/monitor.js +0 -226
- package/dist/src/core/performance/monitor.js.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
- package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.js +0 -330
- package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
- package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
- package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
- package/dist/src/core/performance/performance-benchmark.js +0 -290
- package/dist/src/core/performance/performance-benchmark.js.map +0 -1
- package/dist/src/core/performance/performance-profiler.d.ts +0 -151
- package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
- package/dist/src/core/performance/performance-profiler.js +0 -346
- package/dist/src/core/performance/performance-profiler.js.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
- package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.js +0 -330
- package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
- package/dist/src/core/projects/project-manager.d.ts +0 -130
- package/dist/src/core/projects/project-manager.d.ts.map +0 -1
- package/dist/src/core/projects/project-manager.js +0 -709
- package/dist/src/core/projects/project-manager.js.map +0 -1
- package/dist/src/core/query/query-parser.d.ts +0 -109
- package/dist/src/core/query/query-parser.d.ts.map +0 -1
- package/dist/src/core/query/query-parser.js +0 -415
- package/dist/src/core/query/query-parser.js.map +0 -1
- package/dist/src/core/query/query-templates.d.ts +0 -44
- package/dist/src/core/query/query-templates.d.ts.map +0 -1
- package/dist/src/core/query/query-templates.js +0 -326
- package/dist/src/core/query/query-templates.js.map +0 -1
- package/dist/src/core/retrieval/index.d.ts +0 -8
- package/dist/src/core/retrieval/index.d.ts.map +0 -1
- package/dist/src/core/retrieval/index.js +0 -8
- package/dist/src/core/retrieval/index.js.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
- package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
- package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
- package/dist/src/core/retrieval/summary-generator.js +0 -622
- package/dist/src/core/retrieval/summary-generator.js.map +0 -1
- package/dist/src/core/retrieval/types.d.ts +0 -257
- package/dist/src/core/retrieval/types.d.ts.map +0 -1
- package/dist/src/core/retrieval/types.js +0 -18
- package/dist/src/core/retrieval/types.js.map +0 -1
- package/dist/src/core/session/index.d.ts +0 -2
- package/dist/src/core/session/index.d.ts.map +0 -1
- package/dist/src/core/session/index.js +0 -2
- package/dist/src/core/session/index.js.map +0 -1
- package/dist/src/core/session/session-manager.d.ts +0 -69
- package/dist/src/core/session/session-manager.d.ts.map +0 -1
- package/dist/src/core/session/session-manager.js +0 -311
- package/dist/src/core/session/session-manager.js.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
- package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
- package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
- package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.js +0 -252
- package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/debug-trace.d.ts +0 -84
- package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
- package/dist/src/core/trace/debug-trace.js +0 -402
- package/dist/src/core/trace/debug-trace.js.map +0 -1
- package/dist/src/core/trace/error-test.d.ts +0 -6
- package/dist/src/core/trace/error-test.d.ts.map +0 -1
- package/dist/src/core/trace/error-test.js +0 -128
- package/dist/src/core/trace/error-test.js.map +0 -1
- package/dist/src/core/trace/index.d.ts +0 -25
- package/dist/src/core/trace/index.d.ts.map +0 -1
- package/dist/src/core/trace/index.js +0 -121
- package/dist/src/core/trace/index.js.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
- package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.js +0 -205
- package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
- package/dist/src/core/trace/performance-test.d.ts +0 -6
- package/dist/src/core/trace/performance-test.d.ts.map +0 -1
- package/dist/src/core/trace/performance-test.js +0 -111
- package/dist/src/core/trace/performance-test.js.map +0 -1
- package/dist/src/core/trace/trace-demo.d.ts +0 -8
- package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-demo.js +0 -154
- package/dist/src/core/trace/trace-demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.d.ts +0 -108
- package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
- package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.js +0 -145
- package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.js +0 -425
- package/dist/src/core/trace/trace-detector.js.map +0 -1
- package/dist/src/core/trace/trace-store.d.ts +0 -60
- package/dist/src/core/trace/trace-store.d.ts.map +0 -1
- package/dist/src/core/trace/trace-store.js +0 -323
- package/dist/src/core/trace/trace-store.js.map +0 -1
- package/dist/src/core/trace/types.d.ts +0 -81
- package/dist/src/core/trace/types.d.ts.map +0 -1
- package/dist/src/core/trace/types.js +0 -70
- package/dist/src/core/trace/types.js.map +0 -1
- package/dist/src/core/types.d.ts +0 -35
- package/dist/src/core/types.d.ts.map +0 -1
- package/dist/src/core/types.js +0 -2
- package/dist/src/core/types.js.map +0 -1
- package/dist/src/core/utils/update-checker.d.ts +0 -38
- package/dist/src/core/utils/update-checker.d.ts.map +0 -1
- package/dist/src/core/utils/update-checker.js +0 -213
- package/dist/src/core/utils/update-checker.js.map +0 -1
- package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
- package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
- package/dist/src/core/worktree/worktree-manager.js +0 -456
- package/dist/src/core/worktree/worktree-manager.js.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
- package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.js +0 -289
- package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
- package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.js +0 -275
- package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
- package/dist/src/features/analytics/index.d.ts +0 -12
- package/dist/src/features/analytics/index.d.ts.map +0 -1
- package/dist/src/features/analytics/index.js +0 -11
- package/dist/src/features/analytics/index.js.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
- package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
- package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
- package/dist/src/features/analytics/types/metrics.d.ts +0 -60
- package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
- package/dist/src/features/analytics/types/metrics.js +0 -2
- package/dist/src/features/analytics/types/metrics.js.map +0 -1
- package/dist/src/features/browser/browser-mcp.d.ts +0 -94
- package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
- package/dist/src/features/browser/browser-mcp.js +0 -459
- package/dist/src/features/browser/browser-mcp.js.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.js +0 -572
- package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
- package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
- package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
- package/dist/src/features/tasks/task-aware-context.js +0 -412
- package/dist/src/features/tasks/task-aware-context.js.map +0 -1
- package/dist/src/index.d.ts +0 -21
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -9
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/linear/auth.d.ts +0 -99
- package/dist/src/integrations/linear/auth.d.ts.map +0 -1
- package/dist/src/integrations/linear/auth.js +0 -319
- package/dist/src/integrations/linear/auth.js.map +0 -1
- package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
- package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/auto-sync.js +0 -268
- package/dist/src/integrations/linear/auto-sync.js.map +0 -1
- package/dist/src/integrations/linear/client.d.ts +0 -127
- package/dist/src/integrations/linear/client.d.ts.map +0 -1
- package/dist/src/integrations/linear/client.js +0 -446
- package/dist/src/integrations/linear/client.js.map +0 -1
- package/dist/src/integrations/linear/config.d.ts +0 -51
- package/dist/src/integrations/linear/config.d.ts.map +0 -1
- package/dist/src/integrations/linear/config.js +0 -103
- package/dist/src/integrations/linear/config.js.map +0 -1
- package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
- package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-manager.js +0 -235
- package/dist/src/integrations/linear/sync-manager.js.map +0 -1
- package/dist/src/integrations/linear/sync-service.d.ts +0 -46
- package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-service.js +0 -217
- package/dist/src/integrations/linear/sync-service.js.map +0 -1
- package/dist/src/integrations/linear/sync.d.ts +0 -125
- package/dist/src/integrations/linear/sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync.js +0 -563
- package/dist/src/integrations/linear/sync.js.map +0 -1
- package/dist/src/integrations/linear/types.d.ts +0 -90
- package/dist/src/integrations/linear/types.d.ts.map +0 -1
- package/dist/src/integrations/linear/types.js +0 -2
- package/dist/src/integrations/linear/types.js.map +0 -1
- package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
- package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook-server.js +0 -190
- package/dist/src/integrations/linear/webhook-server.js.map +0 -1
- package/dist/src/integrations/linear/webhook.d.ts +0 -108
- package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook.js +0 -291
- package/dist/src/integrations/linear/webhook.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
- package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.js +0 -134
- package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/index.d.ts +0 -13
- package/dist/src/integrations/mcp/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/index.js +0 -17
- package/dist/src/integrations/mcp/index.js.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
- package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.js +0 -351
- package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
- package/dist/src/integrations/mcp/server.d.ts +0 -54
- package/dist/src/integrations/mcp/server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/server.js +0 -1616
- package/dist/src/integrations/mcp/server.js.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
- package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.js +0 -563
- package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
- package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
- package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
- package/dist/src/integrations/mcp/trace-test.js +0 -54
- package/dist/src/integrations/mcp/trace-test.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
- package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
- package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
- package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
- package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
- package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.js +0 -293
- package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
- package/dist/src/models/user.model.d.ts +0 -62
- package/dist/src/models/user.model.d.ts.map +0 -1
- package/dist/src/models/user.model.js +0 -311
- package/dist/src/models/user.model.js.map +0 -1
- package/dist/src/servers/production/auth-middleware.d.ts +0 -76
- package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
- package/dist/src/servers/production/auth-middleware.js +0 -558
- package/dist/src/servers/production/auth-middleware.js.map +0 -1
- package/dist/src/servers/railway/index.d.ts +0 -7
- package/dist/src/servers/railway/index.d.ts.map +0 -1
- package/dist/src/servers/railway/index.js +0 -401
- package/dist/src/servers/railway/index.js.map +0 -1
- package/dist/src/services/config-service.d.ts +0 -44
- package/dist/src/services/config-service.d.ts.map +0 -1
- package/dist/src/services/config-service.js +0 -61
- package/dist/src/services/config-service.js.map +0 -1
- package/dist/src/services/context-service.d.ts +0 -17
- package/dist/src/services/context-service.d.ts.map +0 -1
- package/dist/src/services/context-service.js +0 -173
- package/dist/src/services/context-service.js.map +0 -1
- package/dist/src/types/task.d.ts +0 -27
- package/dist/src/types/task.d.ts.map +0 -1
- package/dist/src/types/task.js +0 -2
- package/dist/src/types/task.js.map +0 -1
- package/dist/src/utils/logger.d.ts +0 -13
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/utils/logger.js +0 -52
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/validation/schemas.d.ts +0 -633
- package/dist/src/validation/schemas.d.ts.map +0 -1
- package/dist/src/validation/schemas.js +0 -347
- package/dist/src/validation/schemas.js.map +0 -1
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Linear Bi-directional Sync Engine
|
|
3
|
-
* Handles syncing tasks between StackMemory and Linear
|
|
4
|
-
*/
|
|
5
|
-
import { PebblesTaskStore } from '../../features/tasks/pebbles-task-store.js';
|
|
6
|
-
import { LinearAuthManager } from './auth.js';
|
|
7
|
-
export interface SyncConfig {
|
|
8
|
-
enabled: boolean;
|
|
9
|
-
direction: 'bidirectional' | 'to_linear' | 'from_linear';
|
|
10
|
-
defaultTeamId?: string;
|
|
11
|
-
autoSync: boolean;
|
|
12
|
-
conflictResolution: 'linear_wins' | 'stackmemory_wins' | 'manual' | 'newest_wins';
|
|
13
|
-
syncInterval?: number;
|
|
14
|
-
maxBatchSize?: number;
|
|
15
|
-
rateLimitDelay?: number;
|
|
16
|
-
}
|
|
17
|
-
export interface SyncResult {
|
|
18
|
-
success: boolean;
|
|
19
|
-
synced: {
|
|
20
|
-
toLinear: number;
|
|
21
|
-
fromLinear: number;
|
|
22
|
-
updated: number;
|
|
23
|
-
};
|
|
24
|
-
conflicts: Array<{
|
|
25
|
-
taskId: string;
|
|
26
|
-
linearId: string;
|
|
27
|
-
reason: string;
|
|
28
|
-
}>;
|
|
29
|
-
errors: string[];
|
|
30
|
-
}
|
|
31
|
-
export interface TaskMapping {
|
|
32
|
-
stackmemoryId: string;
|
|
33
|
-
linearId: string;
|
|
34
|
-
linearIdentifier: string;
|
|
35
|
-
lastSyncTimestamp: number;
|
|
36
|
-
lastLinearUpdate: string;
|
|
37
|
-
lastStackMemoryUpdate: number;
|
|
38
|
-
}
|
|
39
|
-
export declare class LinearSyncEngine {
|
|
40
|
-
private taskStore;
|
|
41
|
-
private linearClient;
|
|
42
|
-
private authManager;
|
|
43
|
-
private config;
|
|
44
|
-
private mappings;
|
|
45
|
-
private projectRoot;
|
|
46
|
-
private mappingsPath;
|
|
47
|
-
constructor(taskStore: PebblesTaskStore, authManager: LinearAuthManager, config: SyncConfig, projectRoot?: string);
|
|
48
|
-
/**
|
|
49
|
-
* Update sync configuration
|
|
50
|
-
*/
|
|
51
|
-
updateConfig(newConfig: Partial<SyncConfig>): void;
|
|
52
|
-
/**
|
|
53
|
-
* Perform bi-directional sync
|
|
54
|
-
*/
|
|
55
|
-
sync(): Promise<SyncResult>;
|
|
56
|
-
/**
|
|
57
|
-
* Delay helper for rate limiting
|
|
58
|
-
*/
|
|
59
|
-
private delay;
|
|
60
|
-
/**
|
|
61
|
-
* Sync tasks from StackMemory to Linear
|
|
62
|
-
*/
|
|
63
|
-
private syncToLinear;
|
|
64
|
-
/**
|
|
65
|
-
* Sync tasks from Linear to StackMemory
|
|
66
|
-
*/
|
|
67
|
-
private syncFromLinear;
|
|
68
|
-
/**
|
|
69
|
-
* Create Linear issue from StackMemory task
|
|
70
|
-
*/
|
|
71
|
-
private createLinearIssueFromTask;
|
|
72
|
-
/**
|
|
73
|
-
* Update Linear issue from StackMemory task
|
|
74
|
-
*/
|
|
75
|
-
private updateLinearIssueFromTask;
|
|
76
|
-
/**
|
|
77
|
-
* Update StackMemory task from Linear issue
|
|
78
|
-
*/
|
|
79
|
-
private updateTaskFromLinearIssue;
|
|
80
|
-
/**
|
|
81
|
-
* Check if task should be updated from Linear based on conflict resolution strategy
|
|
82
|
-
*/
|
|
83
|
-
private shouldUpdateFromLinear;
|
|
84
|
-
/**
|
|
85
|
-
* Get tasks that haven't been synced to Linear yet
|
|
86
|
-
*/
|
|
87
|
-
private getUnsyncedTasks;
|
|
88
|
-
/**
|
|
89
|
-
* Get tasks that have been modified since last sync
|
|
90
|
-
*/
|
|
91
|
-
private getModifiedTasks;
|
|
92
|
-
/**
|
|
93
|
-
* Update task with Linear reference
|
|
94
|
-
*/
|
|
95
|
-
private updateTaskWithLinearRef;
|
|
96
|
-
private formatDescriptionForLinear;
|
|
97
|
-
private mapPriorityToLinear;
|
|
98
|
-
private mapTagsToLinear;
|
|
99
|
-
private mapLinearStateToStatus;
|
|
100
|
-
private mapStatusToLinearState;
|
|
101
|
-
private getLinearStateTypeFromStatus;
|
|
102
|
-
private loadMappings;
|
|
103
|
-
private saveMappings;
|
|
104
|
-
/**
|
|
105
|
-
* Import all issues from Linear to local task store
|
|
106
|
-
*/
|
|
107
|
-
importFromLinear(): Promise<{
|
|
108
|
-
imported: number;
|
|
109
|
-
skipped: number;
|
|
110
|
-
errors: string[];
|
|
111
|
-
}>;
|
|
112
|
-
/**
|
|
113
|
-
* Create a local task from a Linear issue
|
|
114
|
-
*/
|
|
115
|
-
private createTaskFromLinearIssue;
|
|
116
|
-
/**
|
|
117
|
-
* Map Linear priority (0-4) to local TaskPriority
|
|
118
|
-
*/
|
|
119
|
-
private mapLinearPriorityToLocal;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Default sync configuration
|
|
123
|
-
*/
|
|
124
|
-
export declare const DEFAULT_SYNC_CONFIG: SyncConfig;
|
|
125
|
-
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/integrations/linear/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAEL,gBAAgB,EAGjB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,eAAe,GAAG,WAAW,GAAG,aAAa,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EACd,aAAa,GACb,kBAAkB,GAClB,QAAQ,GACR,aAAa,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;gBAG3B,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,UAAU,EAClB,WAAW,CAAC,EAAE,MAAM;IAqCtB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAIlD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAgEjC;;OAEG;YACW,KAAK;IAInB;;OAEG;YACW,YAAY;IA+F1B;;OAEG;YACW,cAAc;IA+F5B;;OAEG;YACW,yBAAyB;IAiBvC;;OAEG;YACW,yBAAyB;IAiBvC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmBjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,sBAAsB;YAgBhB,sBAAsB;IAyBpC,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC;QAChC,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IAmEF;;OAEG;YACW,yBAAyB;IA+CvC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAcjC;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAQjC,CAAC"}
|
|
@@ -1,563 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Linear Bi-directional Sync Engine
|
|
3
|
-
* Handles syncing tasks between StackMemory and Linear
|
|
4
|
-
*/
|
|
5
|
-
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { logger } from '../../core/monitoring/logger.js';
|
|
8
|
-
import { LinearClient } from './client.js';
|
|
9
|
-
export class LinearSyncEngine {
|
|
10
|
-
taskStore;
|
|
11
|
-
linearClient;
|
|
12
|
-
authManager;
|
|
13
|
-
config;
|
|
14
|
-
mappings = new Map();
|
|
15
|
-
projectRoot;
|
|
16
|
-
mappingsPath;
|
|
17
|
-
constructor(taskStore, authManager, config, projectRoot) {
|
|
18
|
-
this.taskStore = taskStore;
|
|
19
|
-
this.authManager = authManager;
|
|
20
|
-
this.config = config;
|
|
21
|
-
this.projectRoot = projectRoot || process.cwd();
|
|
22
|
-
this.mappingsPath = join(this.projectRoot, '.stackmemory', 'linear-mappings.json');
|
|
23
|
-
// Check for API key from environment variable first
|
|
24
|
-
const apiKey = process.env.LINEAR_API_KEY;
|
|
25
|
-
if (apiKey) {
|
|
26
|
-
// Use API key from environment
|
|
27
|
-
this.linearClient = new LinearClient({
|
|
28
|
-
apiKey: apiKey,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
// Fall back to OAuth tokens
|
|
33
|
-
const tokens = this.authManager.loadTokens();
|
|
34
|
-
if (!tokens) {
|
|
35
|
-
throw new Error('Linear API key or authentication tokens not found. Set LINEAR_API_KEY environment variable or run "stackmemory linear setup" first.');
|
|
36
|
-
}
|
|
37
|
-
this.linearClient = new LinearClient({
|
|
38
|
-
apiKey: tokens.accessToken,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
this.loadMappings();
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Update sync configuration
|
|
45
|
-
*/
|
|
46
|
-
updateConfig(newConfig) {
|
|
47
|
-
this.config = { ...this.config, ...newConfig };
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Perform bi-directional sync
|
|
51
|
-
*/
|
|
52
|
-
async sync() {
|
|
53
|
-
if (!this.config.enabled) {
|
|
54
|
-
return {
|
|
55
|
-
success: false,
|
|
56
|
-
synced: { toLinear: 0, fromLinear: 0, updated: 0 },
|
|
57
|
-
conflicts: [],
|
|
58
|
-
errors: ['Sync is disabled'],
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
const result = {
|
|
62
|
-
success: true,
|
|
63
|
-
synced: { toLinear: 0, fromLinear: 0, updated: 0 },
|
|
64
|
-
conflicts: [],
|
|
65
|
-
errors: [],
|
|
66
|
-
};
|
|
67
|
-
try {
|
|
68
|
-
// Update client with valid token if not using environment API key
|
|
69
|
-
const apiKey = process.env.LINEAR_API_KEY;
|
|
70
|
-
if (!apiKey) {
|
|
71
|
-
const token = await this.authManager.getValidToken();
|
|
72
|
-
this.linearClient = new LinearClient({ apiKey: token });
|
|
73
|
-
}
|
|
74
|
-
// Get team info if not configured
|
|
75
|
-
if (!this.config.defaultTeamId) {
|
|
76
|
-
const team = await this.linearClient.getTeam();
|
|
77
|
-
this.config.defaultTeamId = team.id;
|
|
78
|
-
logger.info(`Using Linear team: ${team.name} (${team.key})`);
|
|
79
|
-
}
|
|
80
|
-
// Sync in both directions based on configuration
|
|
81
|
-
if (this.config.direction === 'bidirectional' ||
|
|
82
|
-
this.config.direction === 'to_linear') {
|
|
83
|
-
const toLinearResult = await this.syncToLinear();
|
|
84
|
-
result.synced.toLinear = toLinearResult.created;
|
|
85
|
-
result.synced.updated += toLinearResult.updated;
|
|
86
|
-
result.errors.push(...toLinearResult.errors);
|
|
87
|
-
}
|
|
88
|
-
if (this.config.direction === 'bidirectional' ||
|
|
89
|
-
this.config.direction === 'from_linear') {
|
|
90
|
-
const fromLinearResult = await this.syncFromLinear();
|
|
91
|
-
result.synced.fromLinear = fromLinearResult.created;
|
|
92
|
-
result.synced.updated += fromLinearResult.updated;
|
|
93
|
-
result.conflicts.push(...fromLinearResult.conflicts);
|
|
94
|
-
result.errors.push(...fromLinearResult.errors);
|
|
95
|
-
}
|
|
96
|
-
this.saveMappings();
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
result.success = false;
|
|
100
|
-
result.errors.push(`Sync failed: ${String(error)}`);
|
|
101
|
-
logger.error('Linear sync failed:', error);
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Delay helper for rate limiting
|
|
107
|
-
*/
|
|
108
|
-
async delay(ms) {
|
|
109
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Sync tasks from StackMemory to Linear
|
|
113
|
-
*/
|
|
114
|
-
async syncToLinear() {
|
|
115
|
-
const result = { created: 0, updated: 0, errors: [] };
|
|
116
|
-
const maxBatchSize = this.config.maxBatchSize || 10;
|
|
117
|
-
const rateLimitDelay = this.config.rateLimitDelay || 500;
|
|
118
|
-
// Get unsynced tasks from StackMemory
|
|
119
|
-
const unsyncedTasks = this.getUnsyncedTasks();
|
|
120
|
-
// Limit batch size to avoid rate limits
|
|
121
|
-
const tasksToSync = unsyncedTasks.slice(0, maxBatchSize);
|
|
122
|
-
if (unsyncedTasks.length > maxBatchSize) {
|
|
123
|
-
logger.info(`Syncing ${tasksToSync.length} of ${unsyncedTasks.length} unsynced tasks (batch limit)`);
|
|
124
|
-
}
|
|
125
|
-
for (const task of tasksToSync) {
|
|
126
|
-
try {
|
|
127
|
-
const linearIssue = await this.createLinearIssueFromTask(task);
|
|
128
|
-
// Create mapping
|
|
129
|
-
const mapping = {
|
|
130
|
-
stackmemoryId: task.id,
|
|
131
|
-
linearId: linearIssue.id,
|
|
132
|
-
linearIdentifier: linearIssue.identifier,
|
|
133
|
-
lastSyncTimestamp: Date.now(),
|
|
134
|
-
lastLinearUpdate: linearIssue.updatedAt,
|
|
135
|
-
lastStackMemoryUpdate: task.timestamp * 1000,
|
|
136
|
-
};
|
|
137
|
-
this.mappings.set(task.id, mapping);
|
|
138
|
-
// Update task with Linear reference
|
|
139
|
-
this.updateTaskWithLinearRef(task.id, linearIssue);
|
|
140
|
-
result.created++;
|
|
141
|
-
logger.info(`Synced task to Linear: ${task.title} → ${linearIssue.identifier}`);
|
|
142
|
-
// Rate limit delay between creates
|
|
143
|
-
await this.delay(rateLimitDelay);
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
const errorMsg = String(error);
|
|
147
|
-
// Stop syncing on rate limit errors
|
|
148
|
-
if (errorMsg.includes('rate limit') ||
|
|
149
|
-
errorMsg.includes('usage limit')) {
|
|
150
|
-
logger.warn('Rate limit hit, stopping sync batch');
|
|
151
|
-
result.errors.push('Rate limit reached - sync paused');
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
result.errors.push(`Failed to sync task ${task.id}: ${errorMsg}`);
|
|
155
|
-
logger.error(`Failed to sync task ${task.id} to Linear:`, error);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
// Update existing Linear issues for modified StackMemory tasks
|
|
159
|
-
const modifiedTasks = this.getModifiedTasks();
|
|
160
|
-
for (const task of modifiedTasks) {
|
|
161
|
-
try {
|
|
162
|
-
const mapping = this.mappings.get(task.id);
|
|
163
|
-
if (!mapping)
|
|
164
|
-
continue;
|
|
165
|
-
await this.updateLinearIssueFromTask(task, mapping);
|
|
166
|
-
mapping.lastSyncTimestamp = Date.now();
|
|
167
|
-
mapping.lastStackMemoryUpdate = task.timestamp * 1000;
|
|
168
|
-
result.updated++;
|
|
169
|
-
logger.info(`Updated Linear issue: ${mapping.linearIdentifier}`);
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
result.errors.push(`Failed to update Linear issue for task ${task.id}: ${String(error)}`);
|
|
173
|
-
logger.error(`Failed to update Linear issue for task ${task.id}:`, error);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return result;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Sync tasks from Linear to StackMemory
|
|
180
|
-
*/
|
|
181
|
-
async syncFromLinear() {
|
|
182
|
-
const result = {
|
|
183
|
-
created: 0,
|
|
184
|
-
updated: 0,
|
|
185
|
-
conflicts: [],
|
|
186
|
-
errors: [],
|
|
187
|
-
};
|
|
188
|
-
// First, import any new issues from Linear that aren't mapped yet
|
|
189
|
-
const importResult = await this.importFromLinear();
|
|
190
|
-
result.created = importResult.imported;
|
|
191
|
-
result.errors.push(...importResult.errors);
|
|
192
|
-
// Then update existing mapped tasks
|
|
193
|
-
for (const [taskId, mapping] of this.mappings) {
|
|
194
|
-
try {
|
|
195
|
-
const linearIssue = await this.linearClient.getIssue(mapping.linearId);
|
|
196
|
-
if (!linearIssue) {
|
|
197
|
-
result.errors.push(`Linear issue ${mapping.linearId} not found`);
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
// Check if Linear issue was updated since last sync
|
|
201
|
-
const linearUpdateTime = new Date(linearIssue.updatedAt).getTime();
|
|
202
|
-
if (linearUpdateTime <= mapping.lastSyncTimestamp) {
|
|
203
|
-
continue; // No changes in Linear
|
|
204
|
-
}
|
|
205
|
-
// Check for conflicts
|
|
206
|
-
const task = this.taskStore.getTask(taskId);
|
|
207
|
-
if (!task) {
|
|
208
|
-
result.errors.push(`StackMemory task ${taskId} not found`);
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
const stackMemoryUpdateTime = task.timestamp * 1000;
|
|
212
|
-
if (stackMemoryUpdateTime > mapping.lastSyncTimestamp &&
|
|
213
|
-
linearUpdateTime > mapping.lastSyncTimestamp) {
|
|
214
|
-
// Conflict: both sides updated since last sync
|
|
215
|
-
result.conflicts.push({
|
|
216
|
-
taskId,
|
|
217
|
-
linearId: mapping.linearId,
|
|
218
|
-
reason: 'Both StackMemory and Linear were updated since last sync',
|
|
219
|
-
});
|
|
220
|
-
if (this.config.conflictResolution === 'manual') {
|
|
221
|
-
continue; // Skip, let user resolve manually
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
// Apply conflict resolution
|
|
225
|
-
const shouldUpdateFromLinear = this.shouldUpdateFromLinear(task, linearIssue, mapping, stackMemoryUpdateTime, linearUpdateTime);
|
|
226
|
-
if (shouldUpdateFromLinear) {
|
|
227
|
-
this.updateTaskFromLinearIssue(task, linearIssue);
|
|
228
|
-
mapping.lastSyncTimestamp = Date.now();
|
|
229
|
-
mapping.lastLinearUpdate = linearIssue.updatedAt;
|
|
230
|
-
result.updated++;
|
|
231
|
-
logger.info(`Updated StackMemory task from Linear: ${task.title}`);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
result.errors.push(`Failed to sync from Linear for task ${taskId}: ${String(error)}`);
|
|
236
|
-
logger.error(`Failed to sync from Linear for task ${taskId}:`, error);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return result;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Create Linear issue from StackMemory task
|
|
243
|
-
*/
|
|
244
|
-
async createLinearIssueFromTask(task) {
|
|
245
|
-
const input = {
|
|
246
|
-
title: task.title,
|
|
247
|
-
description: this.formatDescriptionForLinear(task),
|
|
248
|
-
teamId: this.config.defaultTeamId,
|
|
249
|
-
priority: this.mapPriorityToLinear(task.priority),
|
|
250
|
-
estimate: task.estimated_effort
|
|
251
|
-
? Math.ceil(task.estimated_effort / 60)
|
|
252
|
-
: undefined, // Convert minutes to hours
|
|
253
|
-
labelIds: this.mapTagsToLinear(task.tags),
|
|
254
|
-
};
|
|
255
|
-
return await this.linearClient.createIssue(input);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Update Linear issue from StackMemory task
|
|
259
|
-
*/
|
|
260
|
-
async updateLinearIssueFromTask(task, mapping) {
|
|
261
|
-
const updates = {
|
|
262
|
-
title: task.title,
|
|
263
|
-
description: this.formatDescriptionForLinear(task),
|
|
264
|
-
priority: this.mapPriorityToLinear(task.priority),
|
|
265
|
-
estimate: task.estimated_effort
|
|
266
|
-
? Math.ceil(task.estimated_effort / 60)
|
|
267
|
-
: undefined,
|
|
268
|
-
stateId: await this.mapStatusToLinearState(task.status),
|
|
269
|
-
};
|
|
270
|
-
await this.linearClient.updateIssue(mapping.linearId, updates);
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Update StackMemory task from Linear issue
|
|
274
|
-
*/
|
|
275
|
-
updateTaskFromLinearIssue(task, linearIssue) {
|
|
276
|
-
// Map Linear state to StackMemory status
|
|
277
|
-
const newStatus = this.mapLinearStateToStatus(linearIssue.state.type);
|
|
278
|
-
if (newStatus !== task.status) {
|
|
279
|
-
this.taskStore.updateTaskStatus(task.id, newStatus, 'Updated from Linear');
|
|
280
|
-
}
|
|
281
|
-
// Note: Other fields like title, description could be updated here
|
|
282
|
-
// but require careful consideration of conflict resolution
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Check if task should be updated from Linear based on conflict resolution strategy
|
|
286
|
-
*/
|
|
287
|
-
shouldUpdateFromLinear(task, linearIssue, mapping, stackMemoryUpdateTime, linearUpdateTime) {
|
|
288
|
-
switch (this.config.conflictResolution) {
|
|
289
|
-
case 'linear_wins':
|
|
290
|
-
return true;
|
|
291
|
-
case 'stackmemory_wins':
|
|
292
|
-
return false;
|
|
293
|
-
case 'newest_wins':
|
|
294
|
-
return linearUpdateTime > stackMemoryUpdateTime;
|
|
295
|
-
case 'manual':
|
|
296
|
-
return false;
|
|
297
|
-
default:
|
|
298
|
-
return false;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Get tasks that haven't been synced to Linear yet
|
|
303
|
-
*/
|
|
304
|
-
getUnsyncedTasks() {
|
|
305
|
-
const activeTasks = this.taskStore.getActiveTasks();
|
|
306
|
-
return activeTasks.filter((task) => !this.mappings.has(task.id) && !task.external_refs?.linear);
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Get tasks that have been modified since last sync
|
|
310
|
-
*/
|
|
311
|
-
getModifiedTasks() {
|
|
312
|
-
const tasks = [];
|
|
313
|
-
for (const [taskId, mapping] of this.mappings) {
|
|
314
|
-
const task = this.taskStore.getTask(taskId);
|
|
315
|
-
if (task && task.timestamp * 1000 > mapping.lastSyncTimestamp) {
|
|
316
|
-
tasks.push(task);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return tasks;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Update task with Linear reference
|
|
323
|
-
*/
|
|
324
|
-
updateTaskWithLinearRef(taskId, linearIssue) {
|
|
325
|
-
const task = this.taskStore.getTask(taskId);
|
|
326
|
-
if (!task)
|
|
327
|
-
return;
|
|
328
|
-
// This would need a method in PebblesTaskStore to update external_refs
|
|
329
|
-
// For now, we'll track this in our mappings
|
|
330
|
-
logger.info(`Task ${taskId} mapped to Linear ${linearIssue.identifier}`);
|
|
331
|
-
}
|
|
332
|
-
// Mapping utilities
|
|
333
|
-
formatDescriptionForLinear(task) {
|
|
334
|
-
let description = task.description || '';
|
|
335
|
-
description += `\n\n---\n**StackMemory Context:**\n`;
|
|
336
|
-
description += `- Task ID: ${task.id}\n`;
|
|
337
|
-
description += `- Frame: ${task.frame_id}\n`;
|
|
338
|
-
description += `- Created: ${new Date(task.created_at * 1000).toISOString()}\n`;
|
|
339
|
-
if (task.tags.length > 0) {
|
|
340
|
-
description += `- Tags: ${task.tags.join(', ')}\n`;
|
|
341
|
-
}
|
|
342
|
-
if (task.depends_on.length > 0) {
|
|
343
|
-
description += `- Dependencies: ${task.depends_on.join(', ')}\n`;
|
|
344
|
-
}
|
|
345
|
-
return description;
|
|
346
|
-
}
|
|
347
|
-
mapPriorityToLinear(priority) {
|
|
348
|
-
const map = {
|
|
349
|
-
low: 1, // Low priority in Linear
|
|
350
|
-
medium: 2, // Medium priority in Linear
|
|
351
|
-
high: 3, // High priority in Linear
|
|
352
|
-
urgent: 4, // Urgent priority in Linear
|
|
353
|
-
};
|
|
354
|
-
return map[priority] || 2;
|
|
355
|
-
}
|
|
356
|
-
mapTagsToLinear(_tags) {
|
|
357
|
-
// In a full implementation, this would map StackMemory tags to Linear label IDs
|
|
358
|
-
// For now, return undefined to skip label assignment
|
|
359
|
-
return undefined;
|
|
360
|
-
}
|
|
361
|
-
mapLinearStateToStatus(linearStateType) {
|
|
362
|
-
switch (linearStateType) {
|
|
363
|
-
case 'backlog':
|
|
364
|
-
case 'unstarted':
|
|
365
|
-
return 'pending';
|
|
366
|
-
case 'started':
|
|
367
|
-
return 'in_progress';
|
|
368
|
-
case 'completed':
|
|
369
|
-
return 'completed';
|
|
370
|
-
case 'cancelled':
|
|
371
|
-
return 'cancelled';
|
|
372
|
-
default:
|
|
373
|
-
return 'pending';
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
async mapStatusToLinearState(status) {
|
|
377
|
-
// Get available states for the team
|
|
378
|
-
try {
|
|
379
|
-
const team = await this.linearClient.getTeam();
|
|
380
|
-
const states = await this.linearClient.getWorkflowStates(team.id);
|
|
381
|
-
// Map StackMemory status to Linear state types
|
|
382
|
-
const targetStateType = this.getLinearStateTypeFromStatus(status);
|
|
383
|
-
// Find the first state that matches the target type
|
|
384
|
-
const matchingState = states.find((state) => state.type === targetStateType);
|
|
385
|
-
return matchingState?.id;
|
|
386
|
-
}
|
|
387
|
-
catch (error) {
|
|
388
|
-
logger.warn('Failed to map status to Linear state:', error instanceof Error ? { error } : undefined);
|
|
389
|
-
return undefined;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
getLinearStateTypeFromStatus(status) {
|
|
393
|
-
switch (status) {
|
|
394
|
-
case 'pending':
|
|
395
|
-
return 'unstarted';
|
|
396
|
-
case 'in_progress':
|
|
397
|
-
return 'started';
|
|
398
|
-
case 'completed':
|
|
399
|
-
return 'completed';
|
|
400
|
-
case 'cancelled':
|
|
401
|
-
return 'cancelled';
|
|
402
|
-
case 'blocked':
|
|
403
|
-
return 'unstarted'; // Map blocked to unstarted in Linear
|
|
404
|
-
default:
|
|
405
|
-
return 'unstarted';
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
// Persistence for mappings
|
|
409
|
-
loadMappings() {
|
|
410
|
-
this.mappings.clear();
|
|
411
|
-
if (existsSync(this.mappingsPath)) {
|
|
412
|
-
try {
|
|
413
|
-
const data = readFileSync(this.mappingsPath, 'utf8');
|
|
414
|
-
const mappingsArray = JSON.parse(data);
|
|
415
|
-
for (const mapping of mappingsArray) {
|
|
416
|
-
this.mappings.set(mapping.stackmemoryId, mapping);
|
|
417
|
-
}
|
|
418
|
-
logger.info(`Loaded ${this.mappings.size} task mappings from disk`);
|
|
419
|
-
}
|
|
420
|
-
catch (error) {
|
|
421
|
-
logger.warn('Failed to load mappings, starting fresh');
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
saveMappings() {
|
|
426
|
-
try {
|
|
427
|
-
const mappingsArray = Array.from(this.mappings.values());
|
|
428
|
-
writeFileSync(this.mappingsPath, JSON.stringify(mappingsArray, null, 2));
|
|
429
|
-
logger.info(`Saved ${this.mappings.size} task mappings to disk`);
|
|
430
|
-
}
|
|
431
|
-
catch (error) {
|
|
432
|
-
logger.error('Failed to save mappings:', error);
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* Import all issues from Linear to local task store
|
|
437
|
-
*/
|
|
438
|
-
async importFromLinear() {
|
|
439
|
-
const result = { imported: 0, skipped: 0, errors: [] };
|
|
440
|
-
try {
|
|
441
|
-
// Get team info
|
|
442
|
-
if (!this.config.defaultTeamId) {
|
|
443
|
-
const team = await this.linearClient.getTeam();
|
|
444
|
-
this.config.defaultTeamId = team.id;
|
|
445
|
-
logger.info(`Using Linear team: ${team.name} (${team.key})`);
|
|
446
|
-
}
|
|
447
|
-
// Fetch all issues from Linear (excluding completed/cancelled)
|
|
448
|
-
const issues = await this.linearClient.getIssues({
|
|
449
|
-
teamId: this.config.defaultTeamId,
|
|
450
|
-
limit: 100,
|
|
451
|
-
});
|
|
452
|
-
logger.info(`Found ${issues.length} issues in Linear`);
|
|
453
|
-
// Build reverse mapping (linearId -> stackmemoryId)
|
|
454
|
-
const linearIdToTaskId = new Map();
|
|
455
|
-
for (const [taskId, mapping] of this.mappings) {
|
|
456
|
-
linearIdToTaskId.set(mapping.linearId, taskId);
|
|
457
|
-
}
|
|
458
|
-
for (const issue of issues) {
|
|
459
|
-
try {
|
|
460
|
-
// Skip if already mapped
|
|
461
|
-
if (linearIdToTaskId.has(issue.id)) {
|
|
462
|
-
result.skipped++;
|
|
463
|
-
continue;
|
|
464
|
-
}
|
|
465
|
-
// Create local task from Linear issue
|
|
466
|
-
const taskId = await this.createTaskFromLinearIssue(issue);
|
|
467
|
-
if (taskId) {
|
|
468
|
-
// Create mapping
|
|
469
|
-
const mapping = {
|
|
470
|
-
stackmemoryId: taskId,
|
|
471
|
-
linearId: issue.id,
|
|
472
|
-
linearIdentifier: issue.identifier,
|
|
473
|
-
lastSyncTimestamp: Date.now(),
|
|
474
|
-
lastLinearUpdate: issue.updatedAt,
|
|
475
|
-
lastStackMemoryUpdate: Date.now(),
|
|
476
|
-
};
|
|
477
|
-
this.mappings.set(taskId, mapping);
|
|
478
|
-
result.imported++;
|
|
479
|
-
logger.info(`Imported ${issue.identifier}: ${issue.title}`);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
catch (error) {
|
|
483
|
-
result.errors.push(`Failed to import ${issue.identifier}: ${String(error)}`);
|
|
484
|
-
logger.error(`Failed to import ${issue.identifier}:`, error);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
this.saveMappings();
|
|
488
|
-
}
|
|
489
|
-
catch (error) {
|
|
490
|
-
result.errors.push(`Import failed: ${String(error)}`);
|
|
491
|
-
logger.error('Linear import failed:', error);
|
|
492
|
-
}
|
|
493
|
-
return result;
|
|
494
|
-
}
|
|
495
|
-
/**
|
|
496
|
-
* Create a local task from a Linear issue
|
|
497
|
-
*/
|
|
498
|
-
async createTaskFromLinearIssue(issue) {
|
|
499
|
-
try {
|
|
500
|
-
const priority = this.mapLinearPriorityToLocal(issue.priority);
|
|
501
|
-
// Build description with Linear context
|
|
502
|
-
let description = issue.description || '';
|
|
503
|
-
description += `\n\n---\n**Linear:** ${issue.identifier} | ${issue.url}`;
|
|
504
|
-
// Extract labels (handle both array and {nodes: [...]} formats)
|
|
505
|
-
const labels = Array.isArray(issue.labels)
|
|
506
|
-
? issue.labels
|
|
507
|
-
: issue.labels
|
|
508
|
-
?.nodes || [];
|
|
509
|
-
const tags = labels.map((l) => l.name);
|
|
510
|
-
if (tags.length === 0)
|
|
511
|
-
tags.push('linear');
|
|
512
|
-
// Create the task via the task store
|
|
513
|
-
const taskId = this.taskStore.createTask({
|
|
514
|
-
title: `[${issue.identifier}] ${issue.title}`,
|
|
515
|
-
description,
|
|
516
|
-
priority,
|
|
517
|
-
frameId: 'linear-import',
|
|
518
|
-
tags,
|
|
519
|
-
estimatedEffort: issue.estimate ? issue.estimate * 60 : undefined,
|
|
520
|
-
});
|
|
521
|
-
// Update status if not pending
|
|
522
|
-
const status = this.mapLinearStateToStatus(issue.state.type);
|
|
523
|
-
if (status !== 'pending') {
|
|
524
|
-
this.taskStore.updateTaskStatus(taskId, status, `Imported from Linear as ${status}`);
|
|
525
|
-
}
|
|
526
|
-
return taskId;
|
|
527
|
-
}
|
|
528
|
-
catch (error) {
|
|
529
|
-
logger.error(`Failed to create task from Linear issue ${issue.identifier}: ${String(error)}`);
|
|
530
|
-
return null;
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Map Linear priority (0-4) to local TaskPriority
|
|
535
|
-
*/
|
|
536
|
-
mapLinearPriorityToLocal(priority) {
|
|
537
|
-
switch (priority) {
|
|
538
|
-
case 1:
|
|
539
|
-
return 'urgent';
|
|
540
|
-
case 2:
|
|
541
|
-
return 'high';
|
|
542
|
-
case 3:
|
|
543
|
-
return 'medium';
|
|
544
|
-
case 4:
|
|
545
|
-
return 'low';
|
|
546
|
-
default:
|
|
547
|
-
return 'medium';
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
/**
|
|
552
|
-
* Default sync configuration
|
|
553
|
-
*/
|
|
554
|
-
export const DEFAULT_SYNC_CONFIG = {
|
|
555
|
-
enabled: false,
|
|
556
|
-
direction: 'bidirectional',
|
|
557
|
-
autoSync: true,
|
|
558
|
-
conflictResolution: 'newest_wins',
|
|
559
|
-
syncInterval: 15, // minutes
|
|
560
|
-
maxBatchSize: 10, // max tasks per sync batch
|
|
561
|
-
rateLimitDelay: 500, // 500ms between API calls
|
|
562
|
-
};
|
|
563
|
-
//# sourceMappingURL=sync.js.map
|