@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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/errors/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Custom error classes for StackMemory\n * Provides a hierarchy of error types for better error handling and debugging\n */\n\nexport enum ErrorCode {\n // Database errors (1000-1999)\n DB_CONNECTION_FAILED = 'DB_001',\n DB_QUERY_FAILED = 'DB_002',\n DB_TRANSACTION_FAILED = 'DB_003',\n DB_MIGRATION_FAILED = 'DB_004',\n DB_CONSTRAINT_VIOLATION = 'DB_005',\n DB_SCHEMA_ERROR = 'DB_006',\n DB_INSERT_FAILED = 'DB_007',\n DB_UPDATE_FAILED = 'DB_008',\n DB_DELETE_FAILED = 'DB_009',\n\n // Frame errors (2000-2999)\n FRAME_NOT_FOUND = 'FRAME_001',\n FRAME_INVALID_STATE = 'FRAME_002',\n FRAME_PARENT_NOT_FOUND = 'FRAME_003',\n FRAME_CYCLE_DETECTED = 'FRAME_004',\n FRAME_ALREADY_CLOSED = 'FRAME_005',\n FRAME_INIT_FAILED = 'FRAME_006',\n FRAME_INVALID_INPUT = 'FRAME_007',\n FRAME_STACK_OVERFLOW = 'FRAME_008',\n\n // Task errors (3000-3999)\n TASK_NOT_FOUND = 'TASK_001',\n TASK_INVALID_STATE = 'TASK_002',\n TASK_DEPENDENCY_CONFLICT = 'TASK_003',\n TASK_CIRCULAR_DEPENDENCY = 'TASK_004',\n\n // Integration errors (4000-4999)\n LINEAR_AUTH_FAILED = 'LINEAR_001',\n LINEAR_API_ERROR = 'LINEAR_002',\n LINEAR_SYNC_FAILED = 'LINEAR_003',\n LINEAR_WEBHOOK_FAILED = 'LINEAR_004',\n\n // MCP errors (5000-5999)\n MCP_TOOL_NOT_FOUND = 'MCP_001',\n MCP_INVALID_PARAMS = 'MCP_002',\n MCP_EXECUTION_FAILED = 'MCP_003',\n MCP_RATE_LIMITED = 'MCP_004',\n\n // Project errors (6000-6999)\n PROJECT_NOT_FOUND = 'PROJECT_001',\n PROJECT_INVALID_PATH = 'PROJECT_002',\n PROJECT_GIT_ERROR = 'PROJECT_003',\n\n // Validation errors (7000-7999)\n VALIDATION_FAILED = 'VAL_001',\n INVALID_INPUT = 'VAL_002',\n MISSING_REQUIRED_FIELD = 'VAL_003',\n TYPE_MISMATCH = 'VAL_004',\n\n // System errors (8000-8999)\n INITIALIZATION_ERROR = 'SYS_001',\n NOT_FOUND = 'SYS_002',\n INTERNAL_ERROR = 'SYS_003',\n CONFIGURATION_ERROR = 'SYS_004',\n PERMISSION_DENIED = 'SYS_005',\n RESOURCE_EXHAUSTED = 'SYS_006',\n SERVICE_UNAVAILABLE = 'SYS_007',\n SYSTEM_INIT_FAILED = 'SYS_008',\n}\n\nexport interface ErrorContext {\n [key: string]: unknown;\n}\n\nexport interface StackMemoryErrorOptions {\n code: ErrorCode;\n message: string;\n context?: ErrorContext;\n cause?: Error;\n isRetryable?: boolean;\n httpStatus?: number;\n}\n\n/**\n * Base error class for all StackMemory errors\n */\nexport class StackMemoryError extends Error {\n public readonly code: ErrorCode;\n public readonly context?: ErrorContext;\n public readonly cause?: Error;\n public readonly isRetryable: boolean;\n public readonly httpStatus: number;\n public readonly timestamp: Date;\n\n constructor(options: StackMemoryErrorOptions) {\n super(options.message);\n this.name = this.constructor.name;\n this.code = options.code;\n this.context = options.context;\n this.cause = options.cause;\n this.isRetryable = options.isRetryable ?? false;\n this.httpStatus = options.httpStatus ?? 500;\n this.timestamp = new Date();\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n context: this.context,\n isRetryable: this.isRetryable,\n httpStatus: this.httpStatus,\n timestamp: this.timestamp.toISOString(),\n stack: this.stack,\n cause: this.cause?.message,\n };\n }\n}\n\n/**\n * Database-related errors\n */\nexport class DatabaseError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.DB_QUERY_FAILED,\n context?: ErrorContext,\n cause?: Error\n ) {\n super({\n code,\n message,\n context,\n cause,\n isRetryable: code === ErrorCode.DB_CONNECTION_FAILED,\n httpStatus: 503,\n });\n }\n}\n\n/**\n * Frame-related errors\n */\nexport class FrameError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.FRAME_INVALID_STATE,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 400,\n });\n }\n}\n\n/**\n * Task-related errors\n */\nexport class TaskError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.TASK_INVALID_STATE,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 400,\n });\n }\n}\n\n/**\n * Integration errors (Linear, etc.)\n */\nexport class IntegrationError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.LINEAR_API_ERROR,\n context?: ErrorContext,\n cause?: Error\n ) {\n super({\n code,\n message,\n context,\n cause,\n isRetryable: true,\n httpStatus: 502,\n });\n }\n}\n\n/**\n * MCP-related errors\n */\nexport class MCPError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.MCP_EXECUTION_FAILED,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: code === ErrorCode.MCP_RATE_LIMITED,\n httpStatus: code === ErrorCode.MCP_RATE_LIMITED ? 429 : 400,\n });\n }\n}\n\n/**\n * Validation errors\n */\nexport class ValidationError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.VALIDATION_FAILED,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 400,\n });\n }\n}\n\n/**\n * Project-related errors\n */\nexport class ProjectError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.PROJECT_NOT_FOUND,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 404,\n });\n }\n}\n\n/**\n * System/Internal errors\n */\nexport class SystemError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.INTERNAL_ERROR,\n context?: ErrorContext,\n cause?: Error\n ) {\n super({\n code,\n message,\n context,\n cause,\n isRetryable: code === ErrorCode.SERVICE_UNAVAILABLE,\n httpStatus: 500,\n });\n }\n}\n\n/**\n * Helper function to determine if an error is retryable\n */\nexport function isRetryableError(error: unknown): boolean {\n if (error instanceof StackMemoryError) {\n return error.isRetryable;\n }\n // Check for common retryable error patterns\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n return (\n message.includes('econnrefused') ||\n message.includes('timeout') ||\n message.includes('enotfound') ||\n message.includes('socket hang up')\n );\n }\n return false;\n}\n\n/**\n * Helper function to safely extract error message\n */\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message);\n }\n return 'An unknown error occurred';\n}\n\n/**\n * Helper function to wrap unknown errors in StackMemoryError\n */\nexport function wrapError(\n error: unknown,\n defaultMessage: string,\n code: ErrorCode = ErrorCode.INTERNAL_ERROR,\n context?: ErrorContext\n): StackMemoryError {\n if (error instanceof StackMemoryError) {\n return error;\n }\n\n const cause = error instanceof Error ? error : undefined;\n const message = error instanceof Error ? error.message : defaultMessage;\n\n return new SystemError(message, code, context, cause);\n}\n\n/**\n * Type guard to check if error is a StackMemoryError\n */\nexport function isStackMemoryError(error: unknown): error is StackMemoryError {\n return error instanceof StackMemoryError;\n}\n\n/**\n * Create context-aware error handler\n */\nexport function createErrorHandler(defaultContext: ErrorContext) {\n return (error: unknown, additionalContext?: ErrorContext) => {\n const context = { ...defaultContext, ...additionalContext };\n
|
|
5
|
-
"mappings": "AAKO,IAAK,YAAL,kBAAKA,eAAL;AAEL,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,2BAAwB;AACxB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,6BAA0B;AAC1B,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,sBAAmB;AAGnB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,4BAAyB;AACzB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,0BAAuB;AAGvB,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,8BAA2B;AAC3B,EAAAA,WAAA,8BAA2B;AAG3B,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,2BAAwB;AAGxB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,sBAAmB;AAGnB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,uBAAoB;AAGpB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,4BAAyB;AACzB,EAAAA,WAAA,mBAAgB;AAGhB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,wBAAqB;
|
|
4
|
+
"sourcesContent": ["/**\n * Custom error classes for StackMemory\n * Provides a hierarchy of error types for better error handling and debugging\n */\n\nexport enum ErrorCode {\n // Database errors (1000-1999)\n DB_CONNECTION_FAILED = 'DB_001',\n DB_QUERY_FAILED = 'DB_002',\n DB_TRANSACTION_FAILED = 'DB_003',\n DB_MIGRATION_FAILED = 'DB_004',\n DB_CONSTRAINT_VIOLATION = 'DB_005',\n DB_SCHEMA_ERROR = 'DB_006',\n DB_INSERT_FAILED = 'DB_007',\n DB_UPDATE_FAILED = 'DB_008',\n DB_DELETE_FAILED = 'DB_009',\n\n // Frame errors (2000-2999)\n FRAME_NOT_FOUND = 'FRAME_001',\n FRAME_INVALID_STATE = 'FRAME_002',\n FRAME_PARENT_NOT_FOUND = 'FRAME_003',\n FRAME_CYCLE_DETECTED = 'FRAME_004',\n FRAME_ALREADY_CLOSED = 'FRAME_005',\n FRAME_INIT_FAILED = 'FRAME_006',\n FRAME_INVALID_INPUT = 'FRAME_007',\n FRAME_STACK_OVERFLOW = 'FRAME_008',\n\n // Task errors (3000-3999)\n TASK_NOT_FOUND = 'TASK_001',\n TASK_INVALID_STATE = 'TASK_002',\n TASK_DEPENDENCY_CONFLICT = 'TASK_003',\n TASK_CIRCULAR_DEPENDENCY = 'TASK_004',\n\n // Integration errors (4000-4999)\n LINEAR_AUTH_FAILED = 'LINEAR_001',\n LINEAR_API_ERROR = 'LINEAR_002',\n LINEAR_SYNC_FAILED = 'LINEAR_003',\n LINEAR_WEBHOOK_FAILED = 'LINEAR_004',\n\n // MCP errors (5000-5999)\n MCP_TOOL_NOT_FOUND = 'MCP_001',\n MCP_INVALID_PARAMS = 'MCP_002',\n MCP_EXECUTION_FAILED = 'MCP_003',\n MCP_RATE_LIMITED = 'MCP_004',\n\n // Project errors (6000-6999)\n PROJECT_NOT_FOUND = 'PROJECT_001',\n PROJECT_INVALID_PATH = 'PROJECT_002',\n PROJECT_GIT_ERROR = 'PROJECT_003',\n\n // Validation errors (7000-7999)\n VALIDATION_FAILED = 'VAL_001',\n INVALID_INPUT = 'VAL_002',\n MISSING_REQUIRED_FIELD = 'VAL_003',\n TYPE_MISMATCH = 'VAL_004',\n\n // System errors (8000-8999)\n INITIALIZATION_ERROR = 'SYS_001',\n NOT_FOUND = 'SYS_002',\n INTERNAL_ERROR = 'SYS_003',\n CONFIGURATION_ERROR = 'SYS_004',\n PERMISSION_DENIED = 'SYS_005',\n RESOURCE_EXHAUSTED = 'SYS_006',\n SERVICE_UNAVAILABLE = 'SYS_007',\n SYSTEM_INIT_FAILED = 'SYS_008',\n\n // Collaboration errors (9000-9999)\n STACK_CONTEXT_NOT_FOUND = 'COLLAB_001',\n HANDOFF_REQUEST_EXPIRED = 'COLLAB_002',\n MERGE_CONFLICT_UNRESOLVABLE = 'COLLAB_003',\n PERMISSION_VIOLATION = 'COLLAB_004',\n OPERATION_FAILED = 'COLLAB_005',\n OPERATION_EXPIRED = 'COLLAB_006',\n INVALID_STATE = 'COLLAB_007',\n RESOURCE_NOT_FOUND = 'COLLAB_008',\n HANDOFF_ALREADY_EXISTS = 'COLLAB_009',\n MERGE_SESSION_INVALID = 'COLLAB_010',\n STACK_SWITCH_FAILED = 'COLLAB_011',\n APPROVAL_TIMEOUT = 'COLLAB_012',\n CONFLICT_RESOLUTION_FAILED = 'COLLAB_013',\n TEAM_ACCESS_DENIED = 'COLLAB_014',\n STACK_LIMIT_EXCEEDED = 'COLLAB_015',\n}\n\nexport interface ErrorContext {\n [key: string]: unknown;\n}\n\nexport interface StackMemoryErrorOptions {\n code: ErrorCode;\n message: string;\n context?: ErrorContext;\n cause?: Error;\n isRetryable?: boolean;\n httpStatus?: number;\n}\n\n/**\n * Base error class for all StackMemory errors\n */\nexport class StackMemoryError extends Error {\n public readonly code: ErrorCode;\n public readonly context?: ErrorContext;\n public readonly cause?: Error;\n public readonly isRetryable: boolean;\n public readonly httpStatus: number;\n public readonly timestamp: Date;\n\n constructor(options: StackMemoryErrorOptions) {\n super(options.message);\n this.name = this.constructor.name;\n this.code = options.code;\n this.context = options.context;\n this.cause = options.cause;\n this.isRetryable = options.isRetryable ?? false;\n this.httpStatus = options.httpStatus ?? 500;\n this.timestamp = new Date();\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n context: this.context,\n isRetryable: this.isRetryable,\n httpStatus: this.httpStatus,\n timestamp: this.timestamp.toISOString(),\n stack: this.stack,\n cause: this.cause?.message,\n };\n }\n}\n\n/**\n * Database-related errors\n */\nexport class DatabaseError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.DB_QUERY_FAILED,\n context?: ErrorContext,\n cause?: Error\n ) {\n super({\n code,\n message,\n context,\n cause,\n isRetryable: code === ErrorCode.DB_CONNECTION_FAILED,\n httpStatus: 503,\n });\n }\n}\n\n/**\n * Frame-related errors\n */\nexport class FrameError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.FRAME_INVALID_STATE,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 400,\n });\n }\n}\n\n/**\n * Task-related errors\n */\nexport class TaskError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.TASK_INVALID_STATE,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 400,\n });\n }\n}\n\n/**\n * Integration errors (Linear, etc.)\n */\nexport class IntegrationError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.LINEAR_API_ERROR,\n context?: ErrorContext,\n cause?: Error\n ) {\n super({\n code,\n message,\n context,\n cause,\n isRetryable: true,\n httpStatus: 502,\n });\n }\n}\n\n/**\n * MCP-related errors\n */\nexport class MCPError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.MCP_EXECUTION_FAILED,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: code === ErrorCode.MCP_RATE_LIMITED,\n httpStatus: code === ErrorCode.MCP_RATE_LIMITED ? 429 : 400,\n });\n }\n}\n\n/**\n * Validation errors\n */\nexport class ValidationError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.VALIDATION_FAILED,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 400,\n });\n }\n}\n\n/**\n * Project-related errors\n */\nexport class ProjectError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.PROJECT_NOT_FOUND,\n context?: ErrorContext\n ) {\n super({\n code,\n message,\n context,\n isRetryable: false,\n httpStatus: 404,\n });\n }\n}\n\n/**\n * System/Internal errors\n */\nexport class SystemError extends StackMemoryError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.INTERNAL_ERROR,\n context?: ErrorContext,\n cause?: Error\n ) {\n super({\n code,\n message,\n context,\n cause,\n isRetryable: code === ErrorCode.SERVICE_UNAVAILABLE,\n httpStatus: 500,\n });\n }\n}\n\n/**\n * Helper function to determine if an error is retryable\n */\nexport function isRetryableError(error: unknown): boolean {\n if (error instanceof StackMemoryError) {\n return error.isRetryable;\n }\n // Check for common retryable error patterns\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n return (\n message.includes('econnrefused') ||\n message.includes('timeout') ||\n message.includes('enotfound') ||\n message.includes('socket hang up')\n );\n }\n return false;\n}\n\n/**\n * Helper function to safely extract error message\n */\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message);\n }\n return 'An unknown error occurred';\n}\n\n/**\n * Helper function to wrap unknown errors in StackMemoryError\n */\nexport function wrapError(\n error: unknown,\n defaultMessage: string,\n code: ErrorCode = ErrorCode.INTERNAL_ERROR,\n context?: ErrorContext\n): StackMemoryError {\n if (error instanceof StackMemoryError) {\n return error;\n }\n\n const cause = error instanceof Error ? error : undefined;\n const message = error instanceof Error ? error.message : defaultMessage;\n\n return new SystemError(message, code, context, cause);\n}\n\n/**\n * Type guard to check if error is a StackMemoryError\n */\nexport function isStackMemoryError(error: unknown): error is StackMemoryError {\n return error instanceof StackMemoryError;\n}\n\n/**\n * Create context-aware error handler\n */\nexport function createErrorHandler(defaultContext: ErrorContext) {\n return (error: unknown, additionalContext?: ErrorContext) => {\n const context = { ...defaultContext, ...additionalContext };\n\n if (error instanceof StackMemoryError) {\n // Create a new error with merged context since context is readonly\n return new StackMemoryError({\n code: error.code,\n message: error.message,\n context: { ...error.context, ...context },\n cause: error.cause,\n isRetryable: error.isRetryable,\n httpStatus: error.httpStatus,\n });\n }\n\n return wrapError(\n error,\n getErrorMessage(error),\n ErrorCode.INTERNAL_ERROR,\n context\n );\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ErrorCode"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const workflowTemplates = {
|
|
2
|
+
tdd: {
|
|
3
|
+
name: "Test-Driven Development",
|
|
4
|
+
description: "Write tests first, then implement",
|
|
5
|
+
phases: [
|
|
6
|
+
{ name: "write-failing-tests", description: "Write tests that fail" },
|
|
7
|
+
{ name: "implement-code", description: "Make tests pass" },
|
|
8
|
+
{ name: "refactor", description: "Clean up code" }
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
feature: {
|
|
12
|
+
name: "Feature Development",
|
|
13
|
+
description: "Develop a new feature",
|
|
14
|
+
phases: [
|
|
15
|
+
{ name: "design", description: "Design the feature" },
|
|
16
|
+
{ name: "implement", description: "Build the feature" },
|
|
17
|
+
{ name: "test", description: "Test the feature" }
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
bugfix: {
|
|
21
|
+
name: "Bug Fix",
|
|
22
|
+
description: "Fix a reported bug",
|
|
23
|
+
phases: [
|
|
24
|
+
{ name: "reproduce", description: "Reproduce the bug" },
|
|
25
|
+
{ name: "fix", description: "Fix the bug" },
|
|
26
|
+
{ name: "verify", description: "Verify the fix" }
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
refactor: {
|
|
30
|
+
name: "Refactoring",
|
|
31
|
+
description: "Improve code structure",
|
|
32
|
+
phases: [
|
|
33
|
+
{ name: "analyze", description: "Analyze current code" },
|
|
34
|
+
{ name: "refactor", description: "Refactor code" },
|
|
35
|
+
{ name: "test", description: "Ensure no regressions" }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
workflowTemplates
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=workflow-templates-stub.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/frame/workflow-templates-stub.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Stub workflow templates for testing\n */\n\nexport const workflowTemplates = {\n tdd: {\n name: 'Test-Driven Development',\n description: 'Write tests first, then implement',\n phases: [\n { name: 'write-failing-tests', description: 'Write tests that fail' },\n { name: 'implement-code', description: 'Make tests pass' },\n { name: 'refactor', description: 'Clean up code' }\n ]\n },\n feature: {\n name: 'Feature Development',\n description: 'Develop a new feature',\n phases: [\n { name: 'design', description: 'Design the feature' },\n { name: 'implement', description: 'Build the feature' },\n { name: 'test', description: 'Test the feature' }\n ]\n },\n bugfix: {\n name: 'Bug Fix',\n description: 'Fix a reported bug',\n phases: [\n { name: 'reproduce', description: 'Reproduce the bug' },\n { name: 'fix', description: 'Fix the bug' },\n { name: 'verify', description: 'Verify the fix' }\n ]\n },\n refactor: {\n name: 'Refactoring',\n description: 'Improve code structure',\n phases: [\n { name: 'analyze', description: 'Analyze current code' },\n { name: 'refactor', description: 'Refactor code' },\n { name: 'test', description: 'Ensure no regressions' }\n ]\n }\n};"],
|
|
5
|
+
"mappings": "AAIO,MAAM,oBAAoB;AAAA,EAC/B,KAAK;AAAA,IACH,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACN,EAAE,MAAM,uBAAuB,aAAa,wBAAwB;AAAA,MACpE,EAAE,MAAM,kBAAkB,aAAa,kBAAkB;AAAA,MACzD,EAAE,MAAM,YAAY,aAAa,gBAAgB;AAAA,IACnD;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACN,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,MACpD,EAAE,MAAM,aAAa,aAAa,oBAAoB;AAAA,MACtD,EAAE,MAAM,QAAQ,aAAa,mBAAmB;AAAA,IAClD;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACN,EAAE,MAAM,aAAa,aAAa,oBAAoB;AAAA,MACtD,EAAE,MAAM,OAAO,aAAa,cAAc;AAAA,MAC1C,EAAE,MAAM,UAAU,aAAa,iBAAiB;AAAA,IAClD;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,aAAa,uBAAuB;AAAA,MACvD,EAAE,MAAM,YAAY,aAAa,gBAAgB;AAAA,MACjD,EAAE,MAAM,QAAQ,aAAa,wBAAwB;AAAA,IACvD;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
class WorkflowTemplates {
|
|
2
|
+
frameManager;
|
|
3
|
+
constructor(frameManager) {
|
|
4
|
+
this.frameManager = frameManager;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* TDD Workflow: Red → Green → Refactor
|
|
8
|
+
*/
|
|
9
|
+
static TDD = {
|
|
10
|
+
name: "tdd",
|
|
11
|
+
description: "Test-Driven Development workflow",
|
|
12
|
+
phases: [
|
|
13
|
+
{
|
|
14
|
+
name: "write-failing-tests",
|
|
15
|
+
requiredOutputs: ["test_file", "test_count"],
|
|
16
|
+
validationRules: [(frame) => frame.metadata?.tests_failing === true]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "implement-minimal",
|
|
20
|
+
requiredOutputs: ["implementation_file"],
|
|
21
|
+
validationRules: [(frame) => frame.metadata?.tests_passing === true]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "refactor",
|
|
25
|
+
requiredOutputs: ["refactored_files"],
|
|
26
|
+
validationRules: [
|
|
27
|
+
(frame) => frame.metadata?.tests_passing === true,
|
|
28
|
+
(frame) => frame.metadata?.complexity_reduced === true
|
|
29
|
+
],
|
|
30
|
+
autoTransition: true
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Feature Development Workflow
|
|
36
|
+
*/
|
|
37
|
+
static FEATURE = {
|
|
38
|
+
name: "feature",
|
|
39
|
+
description: "Feature development workflow",
|
|
40
|
+
phases: [
|
|
41
|
+
{
|
|
42
|
+
name: "research",
|
|
43
|
+
requiredOutputs: ["requirements", "constraints", "dependencies"],
|
|
44
|
+
validationRules: [
|
|
45
|
+
(frame) => frame.metadata?.research_complete === true
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "design",
|
|
50
|
+
requiredOutputs: ["architecture_decision", "api_design"],
|
|
51
|
+
validationRules: [(frame) => frame.metadata?.design_reviewed === true]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "implement",
|
|
55
|
+
requiredOutputs: ["implementation_files", "tests"],
|
|
56
|
+
validationRules: [
|
|
57
|
+
(frame) => frame.metadata?.tests_passing === true,
|
|
58
|
+
(frame) => frame.metadata?.lint_passing === true
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "validate",
|
|
63
|
+
requiredOutputs: ["test_results", "performance_metrics"],
|
|
64
|
+
validationRules: [
|
|
65
|
+
(frame) => frame.metadata?.validation_complete === true
|
|
66
|
+
],
|
|
67
|
+
autoTransition: true
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Bug Fix Workflow
|
|
73
|
+
*/
|
|
74
|
+
static BUGFIX = {
|
|
75
|
+
name: "bugfix",
|
|
76
|
+
description: "Bug fixing workflow",
|
|
77
|
+
phases: [
|
|
78
|
+
{
|
|
79
|
+
name: "reproduce",
|
|
80
|
+
requiredOutputs: ["reproduction_steps", "failing_test"],
|
|
81
|
+
validationRules: [(frame) => frame.metadata?.bug_reproduced === true]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "diagnose",
|
|
85
|
+
requiredOutputs: ["root_cause", "affected_code"],
|
|
86
|
+
validationRules: [(frame) => frame.metadata?.cause_identified === true]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "fix",
|
|
90
|
+
requiredOutputs: ["fix_commits", "updated_tests"],
|
|
91
|
+
validationRules: [(frame) => frame.metadata?.fix_applied === true]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "verify",
|
|
95
|
+
requiredOutputs: ["verification_results", "regression_tests"],
|
|
96
|
+
validationRules: [
|
|
97
|
+
(frame) => frame.metadata?.bug_fixed === true,
|
|
98
|
+
(frame) => frame.metadata?.no_regressions === true
|
|
99
|
+
],
|
|
100
|
+
autoTransition: true
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Refactoring Workflow
|
|
106
|
+
*/
|
|
107
|
+
static REFACTOR = {
|
|
108
|
+
name: "refactor",
|
|
109
|
+
description: "Code refactoring workflow",
|
|
110
|
+
phases: [
|
|
111
|
+
{
|
|
112
|
+
name: "analyze",
|
|
113
|
+
requiredOutputs: [
|
|
114
|
+
"code_metrics",
|
|
115
|
+
"smell_detection",
|
|
116
|
+
"complexity_report"
|
|
117
|
+
],
|
|
118
|
+
validationRules: [
|
|
119
|
+
(frame) => frame.metadata?.analysis_complete === true
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "plan",
|
|
124
|
+
requiredOutputs: ["refactor_plan", "risk_assessment"],
|
|
125
|
+
validationRules: [(frame) => frame.metadata?.plan_approved === true]
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: "refactor",
|
|
129
|
+
requiredOutputs: ["refactored_code", "preserved_tests"],
|
|
130
|
+
validationRules: [(frame) => frame.metadata?.tests_passing === true]
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: "validate",
|
|
134
|
+
requiredOutputs: ["before_after_metrics", "performance_comparison"],
|
|
135
|
+
validationRules: [
|
|
136
|
+
(frame) => frame.metadata?.metrics_improved === true,
|
|
137
|
+
(frame) => frame.metadata?.behavior_preserved === true
|
|
138
|
+
],
|
|
139
|
+
autoTransition: true
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Start a workflow, creating the parent frame and first phase frame
|
|
145
|
+
*/
|
|
146
|
+
async startWorkflow(template, parentFrameId) {
|
|
147
|
+
const workflowFrame = await this.frameManager.push(
|
|
148
|
+
{
|
|
149
|
+
type: "workflow",
|
|
150
|
+
description: `${template.name} workflow`,
|
|
151
|
+
metadata: {
|
|
152
|
+
workflow: template.name,
|
|
153
|
+
current_phase: 0,
|
|
154
|
+
phases: template.phases.map((p) => p.name),
|
|
155
|
+
started_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
parentFrameId
|
|
159
|
+
);
|
|
160
|
+
await this.startPhase(workflowFrame.id, 0);
|
|
161
|
+
return workflowFrame;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Transition to next phase if current phase is complete
|
|
165
|
+
*/
|
|
166
|
+
async transitionPhase(frameId) {
|
|
167
|
+
const frame = await this.frameManager.getFrame(frameId);
|
|
168
|
+
if (!frame || frame.type !== "workflow") return false;
|
|
169
|
+
const currentPhase = frame.metadata?.current_phase || 0;
|
|
170
|
+
const template = this.getTemplate(frame.metadata?.workflow);
|
|
171
|
+
if (!template) return false;
|
|
172
|
+
const phaseFrame = await this.getCurrentPhaseFrame(frameId);
|
|
173
|
+
if (!phaseFrame) return false;
|
|
174
|
+
const phase = template.phases[currentPhase];
|
|
175
|
+
const isComplete = await this.validatePhase(phaseFrame, phase);
|
|
176
|
+
if (!isComplete) {
|
|
177
|
+
console.log(`Phase ${phase.name} validation failed`);
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
await this.frameManager.close(phaseFrame.id, {
|
|
181
|
+
completed: true,
|
|
182
|
+
phase: phase.name
|
|
183
|
+
});
|
|
184
|
+
if (currentPhase >= template.phases.length - 1) {
|
|
185
|
+
await this.frameManager.close(frameId, {
|
|
186
|
+
workflow_complete: true,
|
|
187
|
+
completed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
188
|
+
});
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
await this.frameManager.updateMetadata(frameId, {
|
|
192
|
+
current_phase: currentPhase + 1
|
|
193
|
+
});
|
|
194
|
+
await this.startPhase(frameId, currentPhase + 1);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Start a specific phase within a workflow
|
|
199
|
+
*/
|
|
200
|
+
async startPhase(workflowFrameId, phaseIndex) {
|
|
201
|
+
const frame = await this.frameManager.getFrame(workflowFrameId);
|
|
202
|
+
const template = this.getTemplate(frame?.metadata?.workflow);
|
|
203
|
+
if (!template || phaseIndex >= template.phases.length) {
|
|
204
|
+
throw new Error("Invalid phase index");
|
|
205
|
+
}
|
|
206
|
+
const phase = template.phases[phaseIndex];
|
|
207
|
+
return await this.frameManager.push(
|
|
208
|
+
{
|
|
209
|
+
type: "phase",
|
|
210
|
+
description: `Phase: ${phase.name}`,
|
|
211
|
+
metadata: {
|
|
212
|
+
phase_name: phase.name,
|
|
213
|
+
phase_index: phaseIndex,
|
|
214
|
+
required_outputs: phase.requiredOutputs,
|
|
215
|
+
started_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
workflowFrameId
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Validate a phase frame against its requirements
|
|
223
|
+
*/
|
|
224
|
+
async validatePhase(frame, phase) {
|
|
225
|
+
if (phase.requiredOutputs) {
|
|
226
|
+
for (const output of phase.requiredOutputs) {
|
|
227
|
+
if (!frame.metadata?.[output]) {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (phase.validationRules) {
|
|
233
|
+
for (const rule of phase.validationRules) {
|
|
234
|
+
if (!rule(frame)) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get current phase frame for a workflow
|
|
243
|
+
*/
|
|
244
|
+
async getCurrentPhaseFrame(workflowFrameId) {
|
|
245
|
+
const children = await this.frameManager.getChildren(workflowFrameId);
|
|
246
|
+
return children.find((f) => f.type === "phase" && f.status === "open") || null;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get template by name
|
|
250
|
+
*/
|
|
251
|
+
getTemplate(name) {
|
|
252
|
+
if (!name) return null;
|
|
253
|
+
const templates = {
|
|
254
|
+
tdd: WorkflowTemplates.TDD,
|
|
255
|
+
feature: WorkflowTemplates.FEATURE,
|
|
256
|
+
bugfix: WorkflowTemplates.BUGFIX,
|
|
257
|
+
refactor: WorkflowTemplates.REFACTOR
|
|
258
|
+
};
|
|
259
|
+
return templates[name] || null;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* List available workflow templates
|
|
263
|
+
*/
|
|
264
|
+
static listTemplates() {
|
|
265
|
+
return [
|
|
266
|
+
WorkflowTemplates.TDD,
|
|
267
|
+
WorkflowTemplates.FEATURE,
|
|
268
|
+
WorkflowTemplates.BUGFIX,
|
|
269
|
+
WorkflowTemplates.REFACTOR
|
|
270
|
+
];
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
export {
|
|
274
|
+
WorkflowTemplates
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=workflow-templates.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/frame/workflow-templates.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflow Templates for StackMemory\n * Inspired by Continuous-Claude's structured approach\n *\n * Each workflow auto-creates child frames for phases\n * and enforces completion gates between transitions\n */\n\nimport { Frame } from '../types';\nimport { FrameManager } from './frame-manager';\n\nexport interface WorkflowPhase {\n name: string;\n requiredOutputs?: string[];\n validationRules?: ((frame: Frame) => boolean)[];\n autoTransition?: boolean;\n}\n\nexport interface WorkflowTemplate {\n name: string;\n description: string;\n phases: WorkflowPhase[];\n metadata?: Record<string, any>;\n}\n\nexport class WorkflowTemplates {\n private frameManager: FrameManager;\n\n constructor(frameManager: FrameManager) {\n this.frameManager = frameManager;\n }\n\n /**\n * TDD Workflow: Red \u2192 Green \u2192 Refactor\n */\n static TDD: WorkflowTemplate = {\n name: 'tdd',\n description: 'Test-Driven Development workflow',\n phases: [\n {\n name: 'write-failing-tests',\n requiredOutputs: ['test_file', 'test_count'],\n validationRules: [(frame) => frame.metadata?.tests_failing === true],\n },\n {\n name: 'implement-minimal',\n requiredOutputs: ['implementation_file'],\n validationRules: [(frame) => frame.metadata?.tests_passing === true],\n },\n {\n name: 'refactor',\n requiredOutputs: ['refactored_files'],\n validationRules: [\n (frame) => frame.metadata?.tests_passing === true,\n (frame) => frame.metadata?.complexity_reduced === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Feature Development Workflow\n */\n static FEATURE: WorkflowTemplate = {\n name: 'feature',\n description: 'Feature development workflow',\n phases: [\n {\n name: 'research',\n requiredOutputs: ['requirements', 'constraints', 'dependencies'],\n validationRules: [\n (frame) => frame.metadata?.research_complete === true,\n ],\n },\n {\n name: 'design',\n requiredOutputs: ['architecture_decision', 'api_design'],\n validationRules: [(frame) => frame.metadata?.design_reviewed === true],\n },\n {\n name: 'implement',\n requiredOutputs: ['implementation_files', 'tests'],\n validationRules: [\n (frame) => frame.metadata?.tests_passing === true,\n (frame) => frame.metadata?.lint_passing === true,\n ],\n },\n {\n name: 'validate',\n requiredOutputs: ['test_results', 'performance_metrics'],\n validationRules: [\n (frame) => frame.metadata?.validation_complete === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Bug Fix Workflow\n */\n static BUGFIX: WorkflowTemplate = {\n name: 'bugfix',\n description: 'Bug fixing workflow',\n phases: [\n {\n name: 'reproduce',\n requiredOutputs: ['reproduction_steps', 'failing_test'],\n validationRules: [(frame) => frame.metadata?.bug_reproduced === true],\n },\n {\n name: 'diagnose',\n requiredOutputs: ['root_cause', 'affected_code'],\n validationRules: [(frame) => frame.metadata?.cause_identified === true],\n },\n {\n name: 'fix',\n requiredOutputs: ['fix_commits', 'updated_tests'],\n validationRules: [(frame) => frame.metadata?.fix_applied === true],\n },\n {\n name: 'verify',\n requiredOutputs: ['verification_results', 'regression_tests'],\n validationRules: [\n (frame) => frame.metadata?.bug_fixed === true,\n (frame) => frame.metadata?.no_regressions === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Refactoring Workflow\n */\n static REFACTOR: WorkflowTemplate = {\n name: 'refactor',\n description: 'Code refactoring workflow',\n phases: [\n {\n name: 'analyze',\n requiredOutputs: [\n 'code_metrics',\n 'smell_detection',\n 'complexity_report',\n ],\n validationRules: [\n (frame) => frame.metadata?.analysis_complete === true,\n ],\n },\n {\n name: 'plan',\n requiredOutputs: ['refactor_plan', 'risk_assessment'],\n validationRules: [(frame) => frame.metadata?.plan_approved === true],\n },\n {\n name: 'refactor',\n requiredOutputs: ['refactored_code', 'preserved_tests'],\n validationRules: [(frame) => frame.metadata?.tests_passing === true],\n },\n {\n name: 'validate',\n requiredOutputs: ['before_after_metrics', 'performance_comparison'],\n validationRules: [\n (frame) => frame.metadata?.metrics_improved === true,\n (frame) => frame.metadata?.behavior_preserved === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Start a workflow, creating the parent frame and first phase frame\n */\n async startWorkflow(\n template: WorkflowTemplate,\n parentFrameId?: string\n ): Promise<Frame> {\n // Create parent workflow frame\n const workflowFrame = await this.frameManager.push(\n {\n type: 'workflow',\n description: `${template.name} workflow`,\n metadata: {\n workflow: template.name,\n current_phase: 0,\n phases: template.phases.map((p) => p.name),\n started_at: new Date().toISOString(),\n },\n },\n parentFrameId\n );\n\n // Auto-create first phase frame\n await this.startPhase(workflowFrame.id, 0);\n\n return workflowFrame;\n }\n\n /**\n * Transition to next phase if current phase is complete\n */\n async transitionPhase(frameId: string): Promise<boolean> {\n const frame = await this.frameManager.getFrame(frameId);\n if (!frame || frame.type !== 'workflow') return false;\n\n const currentPhase = frame.metadata?.current_phase || 0;\n const template = this.getTemplate(frame.metadata?.workflow);\n if (!template) return false;\n\n // Validate current phase completion\n const phaseFrame = await this.getCurrentPhaseFrame(frameId);\n if (!phaseFrame) return false;\n\n const phase = template.phases[currentPhase];\n const isComplete = await this.validatePhase(phaseFrame, phase);\n\n if (!isComplete) {\n console.log(`Phase ${phase.name} validation failed`);\n return false;\n }\n\n // Close current phase frame\n await this.frameManager.close(phaseFrame.id, {\n completed: true,\n phase: phase.name,\n });\n\n // Check if workflow is complete\n if (currentPhase >= template.phases.length - 1) {\n await this.frameManager.close(frameId, {\n workflow_complete: true,\n completed_at: new Date().toISOString(),\n });\n return true;\n }\n\n // Start next phase\n await this.frameManager.updateMetadata(frameId, {\n current_phase: currentPhase + 1,\n });\n await this.startPhase(frameId, currentPhase + 1);\n\n return true;\n }\n\n /**\n * Start a specific phase within a workflow\n */\n private async startPhase(\n workflowFrameId: string,\n phaseIndex: number\n ): Promise<Frame> {\n const frame = await this.frameManager.getFrame(workflowFrameId);\n const template = this.getTemplate(frame?.metadata?.workflow);\n if (!template || phaseIndex >= template.phases.length) {\n throw new Error('Invalid phase index');\n }\n\n const phase = template.phases[phaseIndex];\n return await this.frameManager.push(\n {\n type: 'phase',\n description: `Phase: ${phase.name}`,\n metadata: {\n phase_name: phase.name,\n phase_index: phaseIndex,\n required_outputs: phase.requiredOutputs,\n started_at: new Date().toISOString(),\n },\n },\n workflowFrameId\n );\n }\n\n /**\n * Validate a phase frame against its requirements\n */\n private async validatePhase(\n frame: Frame,\n phase: WorkflowPhase\n ): Promise<boolean> {\n // Check required outputs\n if (phase.requiredOutputs) {\n for (const output of phase.requiredOutputs) {\n if (!frame.metadata?.[output]) {\n return false;\n }\n }\n }\n\n // Run validation rules\n if (phase.validationRules) {\n for (const rule of phase.validationRules) {\n if (!rule(frame)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Get current phase frame for a workflow\n */\n private async getCurrentPhaseFrame(\n workflowFrameId: string\n ): Promise<Frame | null> {\n const children = await this.frameManager.getChildren(workflowFrameId);\n return (\n children.find((f) => f.type === 'phase' && f.status === 'open') || null\n );\n }\n\n /**\n * Get template by name\n */\n private getTemplate(name?: string): WorkflowTemplate | null {\n if (!name) return null;\n\n const templates: Record<string, WorkflowTemplate> = {\n tdd: WorkflowTemplates.TDD,\n feature: WorkflowTemplates.FEATURE,\n bugfix: WorkflowTemplates.BUGFIX,\n refactor: WorkflowTemplates.REFACTOR,\n };\n\n return templates[name] || null;\n }\n\n /**\n * List available workflow templates\n */\n static listTemplates(): WorkflowTemplate[] {\n return [\n WorkflowTemplates.TDD,\n WorkflowTemplates.FEATURE,\n WorkflowTemplates.BUGFIX,\n WorkflowTemplates.REFACTOR,\n ];\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -286,7 +286,10 @@ class ConflictDetector {
|
|
|
286
286
|
if (!tree.has(frame.parent_frame_id)) {
|
|
287
287
|
tree.set(frame.parent_frame_id, /* @__PURE__ */ new Set());
|
|
288
288
|
}
|
|
289
|
-
tree.get(frame.parent_frame_id)
|
|
289
|
+
const parentSet = tree.get(frame.parent_frame_id);
|
|
290
|
+
if (parentSet) {
|
|
291
|
+
parentSet.add(frame.frame_id);
|
|
292
|
+
}
|
|
290
293
|
}
|
|
291
294
|
}
|
|
292
295
|
return tree;
|
|
@@ -299,7 +302,7 @@ class ConflictDetector {
|
|
|
299
302
|
for (const [node, children1] of tree1) {
|
|
300
303
|
if (tree2.has(node)) {
|
|
301
304
|
const children2 = tree2.get(node);
|
|
302
|
-
if (!this.setsEqual(children1, children2)) {
|
|
305
|
+
if (children2 && !this.setsEqual(children1, children2)) {
|
|
303
306
|
divergences.push({
|
|
304
307
|
node1: node,
|
|
305
308
|
node2: node,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/merge/conflict-detector.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Conflict Detection Engine\n * Detects paradoxes in parallel frame timelines\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n MergeConflict,\n FrameStack,\n ParallelSolution,\n DecisionConflict,\n} from './types.js';\nimport { Frame, Event } from '../context/frame-manager.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport class ConflictDetector {\n private readonly SIMILARITY_THRESHOLD = 0.8;\n\n /**\n * Detect all types of conflicts between two frame stacks\n */\n detectConflicts(stack1: FrameStack, stack2: FrameStack): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Detect parallel solution conflicts\n const parallelConflicts = this.detectParallelSolutions(stack1, stack2);\n conflicts.push(...parallelConflicts);\n\n // Detect conflicting decisions\n const decisionConflicts = this.detectConflictingDecisions(\n stack1.events,\n stack2.events\n );\n conflicts.push(...decisionConflicts);\n\n // Detect structural divergence\n const structuralConflicts = this.detectStructuralDivergence(\n stack1.frames,\n stack2.frames\n );\n conflicts.push(...structuralConflicts);\n\n logger.info(`Detected ${conflicts.length} conflicts between stacks`, {\n stack1Id: stack1.id,\n stack2Id: stack2.id,\n conflictTypes: this.summarizeConflictTypes(conflicts),\n });\n\n return conflicts;\n }\n\n /**\n * Analyze frames to find parallel solutions to the same problem\n */\n analyzeParallelSolutions(frames: Frame[]): ParallelSolution[] {\n const solutions: ParallelSolution[] = [];\n\n // Group frames by similar purpose/name\n const groupedFrames = this.groupSimilarFrames(frames);\n\n for (const group of groupedFrames) {\n if (group.length > 1) {\n // Multiple frames solving similar problems\n group.forEach((frame) => {\n solutions.push({\n frameId: frame.frame_id,\n solution: this.extractSolution(frame),\n approach: this.analyzeApproach(frame),\n author: frame.inputs?.author || 'unknown',\n timestamp: frame.created_at,\n effectiveness: this.calculateEffectiveness(frame),\n });\n });\n }\n }\n\n return solutions;\n }\n\n /**\n * Identify conflicting decisions in event streams\n */\n identifyConflictingDecisions(events: Event[]): DecisionConflict[] {\n const conflicts: DecisionConflict[] = [];\n const decisions = this.extractDecisions(events);\n\n for (let i = 0; i < decisions.length; i++) {\n for (let j = i + 1; j < decisions.length; j++) {\n if (this.decisionsConflict(decisions[i], decisions[j])) {\n conflicts.push({\n decision1: decisions[i].payload?.decision || '',\n decision2: decisions[j].payload?.decision || '',\n impact: this.assessImpact(decisions[i], decisions[j]),\n canCoexist: this.canCoexist(decisions[i], decisions[j]),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect parallel solutions between two stacks\n */\n private detectParallelSolutions(\n stack1: FrameStack,\n stack2: FrameStack\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Find frames that appear to solve the same problem\n for (const frame1 of stack1.frames) {\n for (const frame2 of stack2.frames) {\n if (\n this.framesAreSimilar(frame1, frame2) &&\n !this.framesAreIdentical(frame1, frame2)\n ) {\n conflicts.push({\n id: uuidv4(),\n type: 'parallel_solution',\n frameId1: frame1.frame_id,\n frameId2: frame2.frame_id,\n severity: this.calculateParallelSeverity(frame1, frame2),\n description: `Parallel solutions detected: \"${frame1.name}\" vs \"${frame2.name}\"`,\n detectedAt: Date.now(),\n conflictingPaths: this.extractPaths(frame1, frame2),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect conflicting decisions between event streams\n */\n private detectConflictingDecisions(\n events1: Event[],\n events2: Event[]\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n const decisions1 = this.extractDecisions(events1);\n const decisions2 = this.extractDecisions(events2);\n\n for (const d1 of decisions1) {\n for (const d2 of decisions2) {\n if (this.decisionsConflict(d1, d2)) {\n conflicts.push({\n id: uuidv4(),\n type: 'conflicting_decision',\n frameId1: d1.frame_id,\n frameId2: d2.frame_id,\n severity: this.assessImpact(d1, d2) as\n | 'low'\n | 'medium'\n | 'high'\n | 'critical',\n description: `Conflicting decisions: \"${d1.payload?.decision}\" vs \"${d2.payload?.decision}\"`,\n detectedAt: Date.now(),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect structural divergence in frame hierarchies\n */\n private detectStructuralDivergence(\n frames1: Frame[],\n frames2: Frame[]\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Build frame trees\n const tree1 = this.buildFrameTree(frames1);\n const tree2 = this.buildFrameTree(frames2);\n\n // Find divergence points\n const divergences = this.findDivergences(tree1, tree2);\n\n for (const divergence of divergences) {\n conflicts.push({\n id: uuidv4(),\n type: 'structural_divergence',\n frameId1: divergence.node1,\n frameId2: divergence.node2,\n severity: this.calculateDivergenceSeverity(divergence),\n description: `Structural divergence at depth ${divergence.depth}`,\n detectedAt: Date.now(),\n });\n }\n\n return conflicts;\n }\n\n /**\n * Helper: Check if two frames are similar (solving same problem)\n */\n private framesAreSimilar(frame1: Frame, frame2: Frame): boolean {\n // Check name similarity\n const nameSimilarity = this.calculateSimilarity(frame1.name, frame2.name);\n if (nameSimilarity > this.SIMILARITY_THRESHOLD) return true;\n\n // Check type and parent\n if (\n frame1.type === frame2.type &&\n frame1.parent_frame_id === frame2.parent_frame_id\n ) {\n return true;\n }\n\n // Check inputs similarity\n const inputSimilarity = this.compareInputs(frame1.inputs, frame2.inputs);\n return inputSimilarity > this.SIMILARITY_THRESHOLD;\n }\n\n /**\n * Helper: Check if frames are identical\n */\n private framesAreIdentical(frame1: Frame, frame2: Frame): boolean {\n return frame1.frame_id === frame2.frame_id;\n }\n\n /**\n * Helper: Calculate string similarity (Levenshtein-based)\n */\n private calculateSimilarity(str1: string, str2: string): number {\n const maxLen = Math.max(str1.length, str2.length);\n if (maxLen === 0) return 1;\n\n const distance = this.levenshteinDistance(str1, str2);\n return 1 - distance / maxLen;\n }\n\n /**\n * Helper: Levenshtein distance implementation\n */\n private levenshteinDistance(str1: string, str2: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= str2.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= str1.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= str2.length; i++) {\n for (let j = 1; j <= str1.length; j++) {\n if (str2.charAt(i - 1) === str1.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[str2.length][str1.length];\n }\n\n /**\n * Helper: Compare frame inputs\n */\n private compareInputs(\n inputs1: Record<string, any>,\n inputs2: Record<string, any>\n ): number {\n const keys1 = Object.keys(inputs1 || {});\n const keys2 = Object.keys(inputs2 || {});\n const allKeys = new Set([...keys1, ...keys2]);\n\n if (allKeys.size === 0) return 1;\n\n let matches = 0;\n for (const key of allKeys) {\n if (JSON.stringify(inputs1[key]) === JSON.stringify(inputs2[key])) {\n matches++;\n }\n }\n\n return matches / allKeys.size;\n }\n\n /**\n * Helper: Calculate severity for parallel solutions\n */\n private calculateParallelSeverity(\n frame1: Frame,\n frame2: Frame\n ): 'low' | 'medium' | 'high' | 'critical' {\n // Critical if both are completed and have different outputs\n if (frame1.state === 'closed' && frame2.state === 'closed') {\n const outputSimilarity = this.compareInputs(\n frame1.outputs,\n frame2.outputs\n );\n if (outputSimilarity < 0.5) return 'critical';\n if (outputSimilarity < 0.7) return 'high';\n }\n\n // High if different approaches to same parent task\n if (frame1.parent_frame_id === frame2.parent_frame_id) {\n return 'high';\n }\n\n return 'medium';\n }\n\n /**\n * Helper: Extract decision events\n */\n private extractDecisions(events: Event[]): Event[] {\n return events.filter(\n (e) =>\n e.event_type === 'decision' ||\n e.payload?.type === 'decision' ||\n e.payload?.decision !== undefined\n );\n }\n\n /**\n * Helper: Check if two decisions conflict\n */\n private decisionsConflict(d1: Event, d2: Event): boolean {\n // Check if decisions affect same resource/path\n const resource1 = d1.payload?.resource || d1.payload?.path;\n const resource2 = d2.payload?.resource || d2.payload?.path;\n\n if (resource1 && resource2 && resource1 === resource2) {\n // Different decisions on same resource\n return d1.payload?.decision !== d2.payload?.decision;\n }\n\n // Check for logical conflicts\n return this.hasLogicalConflict(d1.payload, d2.payload);\n }\n\n /**\n * Helper: Check for logical conflicts in payloads\n */\n private hasLogicalConflict(payload1: any, payload2: any): boolean {\n // Architecture decisions\n if (payload1?.architecture && payload2?.architecture) {\n return payload1.architecture !== payload2.architecture;\n }\n\n // Technology choices\n if (payload1?.technology && payload2?.technology) {\n return payload1.technology !== payload2.technology;\n }\n\n return false;\n }\n\n /**\n * Helper: Assess impact of conflicting decisions\n */\n private assessImpact(d1: Event, d2: Event): 'low' | 'medium' | 'high' {\n // High impact for architecture/design decisions\n if (\n d1.payload?.type === 'architecture' ||\n d2.payload?.type === 'architecture'\n ) {\n return 'high';\n }\n\n // Medium for implementation decisions\n if (\n d1.payload?.scope === 'implementation' ||\n d2.payload?.scope === 'implementation'\n ) {\n return 'medium';\n }\n\n return 'low';\n }\n\n /**\n * Helper: Check if decisions can coexist\n */\n private canCoexist(d1: Event, d2: Event): boolean {\n // Different scopes can coexist\n if (d1.payload?.scope !== d2.payload?.scope) {\n return true;\n }\n\n // Non-conflicting resources can coexist\n const resource1 = d1.payload?.resource;\n const resource2 = d2.payload?.resource;\n\n return resource1 !== resource2;\n }\n\n /**\n * Helper: Build frame tree structure\n */\n private buildFrameTree(frames: Frame[]): Map<string, Set<string>> {\n const tree = new Map<string, Set<string>>();\n\n for (const frame of frames) {\n if (frame.parent_frame_id) {\n if (!tree.has(frame.parent_frame_id)) {\n tree.set(frame.parent_frame_id, new Set());\n }\n tree.get(frame.parent_frame_id)!.add(frame.frame_id);\n }\n }\n\n return tree;\n }\n\n /**\n * Helper: Find divergence points in trees\n */\n private findDivergences(\n tree1: Map<string, Set<string>>,\n tree2: Map<string, Set<string>>\n ): Array<{ node1: string; node2: string; depth: number }> {\n const divergences: Array<{ node1: string; node2: string; depth: number }> =\n [];\n\n // Find nodes that exist in both but have different children\n for (const [node, children1] of tree1) {\n if (tree2.has(node)) {\n const children2 = tree2.get(node)!;\n if (!this.setsEqual(children1, children2)) {\n divergences.push({\n node1: node,\n node2: node,\n depth: this.calculateDepth(node, tree1),\n });\n }\n }\n }\n\n return divergences;\n }\n\n /**\n * Helper: Check if two sets are equal\n */\n private setsEqual<T>(set1: Set<T>, set2: Set<T>): boolean {\n if (set1.size !== set2.size) return false;\n for (const item of set1) {\n if (!set2.has(item)) return false;\n }\n return true;\n }\n\n /**\n * Helper: Calculate node depth in tree\n */\n private calculateDepth(node: string, tree: Map<string, Set<string>>): number {\n let depth = 0;\n let current = node;\n\n // Find parent of current node\n for (const [parent, children] of tree) {\n if (children.has(current)) {\n depth++;\n current = parent;\n }\n }\n\n return depth;\n }\n\n /**\n * Helper: Calculate divergence severity\n */\n private calculateDivergenceSeverity(\n divergence: any\n ): 'low' | 'medium' | 'high' | 'critical' {\n if (divergence.depth === 0) return 'critical'; // Root divergence\n if (divergence.depth === 1) return 'high';\n if (divergence.depth === 2) return 'medium';\n return 'low';\n }\n\n /**\n * Helper: Extract paths from frames\n */\n private extractPaths(frame1: Frame, frame2: Frame): string[] {\n const paths: string[] = [];\n\n if (frame1.inputs?.path) paths.push(frame1.inputs.path);\n if (frame2.inputs?.path) paths.push(frame2.inputs.path);\n if (frame1.outputs?.files) paths.push(...frame1.outputs.files);\n if (frame2.outputs?.files) paths.push(...frame2.outputs.files);\n\n return [...new Set(paths)];\n }\n\n /**\n * Helper: Extract solution from frame\n */\n private extractSolution(frame: Frame): string {\n return (\n frame.outputs?.solution || frame.digest_text || 'No solution description'\n );\n }\n\n /**\n * Helper: Analyze approach taken\n */\n private analyzeApproach(frame: Frame): string {\n if (frame.outputs?.approach) return frame.outputs.approach;\n if (frame.type === 'debug') return 'Debug approach';\n if (frame.type === 'review') return 'Review approach';\n return 'Standard approach';\n }\n\n /**\n * Helper: Calculate solution effectiveness\n */\n private calculateEffectiveness(frame: Frame): number {\n let score = 0.5; // Base score\n\n // Completed frames are more effective\n if (frame.state === 'closed') score += 0.2;\n\n // Frames with outputs are more effective\n if (frame.outputs && Object.keys(frame.outputs).length > 0) score += 0.1;\n\n // Frames with digests are more effective\n if (frame.digest_text) score += 0.1;\n\n // Quick completion is more effective\n if (frame.closed_at && frame.created_at) {\n const duration = frame.closed_at - frame.created_at;\n if (duration < 300000) score += 0.1; // Less than 5 minutes\n }\n\n return Math.min(score, 1);\n }\n\n /**\n * Helper: Group similar frames together\n */\n private groupSimilarFrames(frames: Frame[]): Frame[][] {\n const groups: Frame[][] = [];\n const processed = new Set<string>();\n\n for (const frame of frames) {\n if (processed.has(frame.frame_id)) continue;\n\n const group = [frame];\n processed.add(frame.frame_id);\n\n for (const other of frames) {\n if (\n !processed.has(other.frame_id) &&\n this.framesAreSimilar(frame, other)\n ) {\n group.push(other);\n processed.add(other.frame_id);\n }\n }\n\n groups.push(group);\n }\n\n return groups;\n }\n\n /**\n * Helper: Summarize conflict types\n */\n private summarizeConflictTypes(\n conflicts: MergeConflict[]\n ): Record<string, number> {\n const summary: Record<string, number> = {\n parallel_solution: 0,\n conflicting_decision: 0,\n structural_divergence: 0,\n };\n\n for (const conflict of conflicts) {\n summary[conflict.type]++;\n }\n\n return summary;\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * Conflict Detection Engine\n * Detects paradoxes in parallel frame timelines\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n MergeConflict,\n FrameStack,\n ParallelSolution,\n DecisionConflict,\n} from './types.js';\nimport { Frame, Event } from '../context/frame-manager.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport class ConflictDetector {\n private readonly SIMILARITY_THRESHOLD = 0.8;\n\n /**\n * Detect all types of conflicts between two frame stacks\n */\n detectConflicts(stack1: FrameStack, stack2: FrameStack): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Detect parallel solution conflicts\n const parallelConflicts = this.detectParallelSolutions(stack1, stack2);\n conflicts.push(...parallelConflicts);\n\n // Detect conflicting decisions\n const decisionConflicts = this.detectConflictingDecisions(\n stack1.events,\n stack2.events\n );\n conflicts.push(...decisionConflicts);\n\n // Detect structural divergence\n const structuralConflicts = this.detectStructuralDivergence(\n stack1.frames,\n stack2.frames\n );\n conflicts.push(...structuralConflicts);\n\n logger.info(`Detected ${conflicts.length} conflicts between stacks`, {\n stack1Id: stack1.id,\n stack2Id: stack2.id,\n conflictTypes: this.summarizeConflictTypes(conflicts),\n });\n\n return conflicts;\n }\n\n /**\n * Analyze frames to find parallel solutions to the same problem\n */\n analyzeParallelSolutions(frames: Frame[]): ParallelSolution[] {\n const solutions: ParallelSolution[] = [];\n\n // Group frames by similar purpose/name\n const groupedFrames = this.groupSimilarFrames(frames);\n\n for (const group of groupedFrames) {\n if (group.length > 1) {\n // Multiple frames solving similar problems\n group.forEach((frame) => {\n solutions.push({\n frameId: frame.frame_id,\n solution: this.extractSolution(frame),\n approach: this.analyzeApproach(frame),\n author: frame.inputs?.author || 'unknown',\n timestamp: frame.created_at,\n effectiveness: this.calculateEffectiveness(frame),\n });\n });\n }\n }\n\n return solutions;\n }\n\n /**\n * Identify conflicting decisions in event streams\n */\n identifyConflictingDecisions(events: Event[]): DecisionConflict[] {\n const conflicts: DecisionConflict[] = [];\n const decisions = this.extractDecisions(events);\n\n for (let i = 0; i < decisions.length; i++) {\n for (let j = i + 1; j < decisions.length; j++) {\n if (this.decisionsConflict(decisions[i], decisions[j])) {\n conflicts.push({\n decision1: decisions[i].payload?.decision || '',\n decision2: decisions[j].payload?.decision || '',\n impact: this.assessImpact(decisions[i], decisions[j]),\n canCoexist: this.canCoexist(decisions[i], decisions[j]),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect parallel solutions between two stacks\n */\n private detectParallelSolutions(\n stack1: FrameStack,\n stack2: FrameStack\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Find frames that appear to solve the same problem\n for (const frame1 of stack1.frames) {\n for (const frame2 of stack2.frames) {\n if (\n this.framesAreSimilar(frame1, frame2) &&\n !this.framesAreIdentical(frame1, frame2)\n ) {\n conflicts.push({\n id: uuidv4(),\n type: 'parallel_solution',\n frameId1: frame1.frame_id,\n frameId2: frame2.frame_id,\n severity: this.calculateParallelSeverity(frame1, frame2),\n description: `Parallel solutions detected: \"${frame1.name}\" vs \"${frame2.name}\"`,\n detectedAt: Date.now(),\n conflictingPaths: this.extractPaths(frame1, frame2),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect conflicting decisions between event streams\n */\n private detectConflictingDecisions(\n events1: Event[],\n events2: Event[]\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n const decisions1 = this.extractDecisions(events1);\n const decisions2 = this.extractDecisions(events2);\n\n for (const d1 of decisions1) {\n for (const d2 of decisions2) {\n if (this.decisionsConflict(d1, d2)) {\n conflicts.push({\n id: uuidv4(),\n type: 'conflicting_decision',\n frameId1: d1.frame_id,\n frameId2: d2.frame_id,\n severity: this.assessImpact(d1, d2) as\n | 'low'\n | 'medium'\n | 'high'\n | 'critical',\n description: `Conflicting decisions: \"${d1.payload?.decision}\" vs \"${d2.payload?.decision}\"`,\n detectedAt: Date.now(),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect structural divergence in frame hierarchies\n */\n private detectStructuralDivergence(\n frames1: Frame[],\n frames2: Frame[]\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Build frame trees\n const tree1 = this.buildFrameTree(frames1);\n const tree2 = this.buildFrameTree(frames2);\n\n // Find divergence points\n const divergences = this.findDivergences(tree1, tree2);\n\n for (const divergence of divergences) {\n conflicts.push({\n id: uuidv4(),\n type: 'structural_divergence',\n frameId1: divergence.node1,\n frameId2: divergence.node2,\n severity: this.calculateDivergenceSeverity(divergence),\n description: `Structural divergence at depth ${divergence.depth}`,\n detectedAt: Date.now(),\n });\n }\n\n return conflicts;\n }\n\n /**\n * Helper: Check if two frames are similar (solving same problem)\n */\n private framesAreSimilar(frame1: Frame, frame2: Frame): boolean {\n // Check name similarity\n const nameSimilarity = this.calculateSimilarity(frame1.name, frame2.name);\n if (nameSimilarity > this.SIMILARITY_THRESHOLD) return true;\n\n // Check type and parent\n if (\n frame1.type === frame2.type &&\n frame1.parent_frame_id === frame2.parent_frame_id\n ) {\n return true;\n }\n\n // Check inputs similarity\n const inputSimilarity = this.compareInputs(frame1.inputs, frame2.inputs);\n return inputSimilarity > this.SIMILARITY_THRESHOLD;\n }\n\n /**\n * Helper: Check if frames are identical\n */\n private framesAreIdentical(frame1: Frame, frame2: Frame): boolean {\n return frame1.frame_id === frame2.frame_id;\n }\n\n /**\n * Helper: Calculate string similarity (Levenshtein-based)\n */\n private calculateSimilarity(str1: string, str2: string): number {\n const maxLen = Math.max(str1.length, str2.length);\n if (maxLen === 0) return 1;\n\n const distance = this.levenshteinDistance(str1, str2);\n return 1 - distance / maxLen;\n }\n\n /**\n * Helper: Levenshtein distance implementation\n */\n private levenshteinDistance(str1: string, str2: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= str2.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= str1.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= str2.length; i++) {\n for (let j = 1; j <= str1.length; j++) {\n if (str2.charAt(i - 1) === str1.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[str2.length][str1.length];\n }\n\n /**\n * Helper: Compare frame inputs\n */\n private compareInputs(\n inputs1: Record<string, unknown>,\n inputs2: Record<string, unknown>\n ): number {\n const keys1 = Object.keys(inputs1 || {});\n const keys2 = Object.keys(inputs2 || {});\n const allKeys = new Set([...keys1, ...keys2]);\n\n if (allKeys.size === 0) return 1;\n\n let matches = 0;\n for (const key of allKeys) {\n if (JSON.stringify(inputs1[key]) === JSON.stringify(inputs2[key])) {\n matches++;\n }\n }\n\n return matches / allKeys.size;\n }\n\n /**\n * Helper: Calculate severity for parallel solutions\n */\n private calculateParallelSeverity(\n frame1: Frame,\n frame2: Frame\n ): 'low' | 'medium' | 'high' | 'critical' {\n // Critical if both are completed and have different outputs\n if (frame1.state === 'closed' && frame2.state === 'closed') {\n const outputSimilarity = this.compareInputs(\n frame1.outputs,\n frame2.outputs\n );\n if (outputSimilarity < 0.5) return 'critical';\n if (outputSimilarity < 0.7) return 'high';\n }\n\n // High if different approaches to same parent task\n if (frame1.parent_frame_id === frame2.parent_frame_id) {\n return 'high';\n }\n\n return 'medium';\n }\n\n /**\n * Helper: Extract decision events\n */\n private extractDecisions(events: Event[]): Event[] {\n return events.filter(\n (e) =>\n e.event_type === 'decision' ||\n e.payload?.type === 'decision' ||\n e.payload?.decision !== undefined\n );\n }\n\n /**\n * Helper: Check if two decisions conflict\n */\n private decisionsConflict(d1: Event, d2: Event): boolean {\n // Check if decisions affect same resource/path\n const resource1 = d1.payload?.resource || d1.payload?.path;\n const resource2 = d2.payload?.resource || d2.payload?.path;\n\n if (resource1 && resource2 && resource1 === resource2) {\n // Different decisions on same resource\n return d1.payload?.decision !== d2.payload?.decision;\n }\n\n // Check for logical conflicts\n return this.hasLogicalConflict(d1.payload, d2.payload);\n }\n\n /**\n * Helper: Check for logical conflicts in payloads\n */\n private hasLogicalConflict(payload1: unknown, payload2: unknown): boolean {\n // Architecture decisions\n if (payload1?.architecture && payload2?.architecture) {\n return payload1.architecture !== payload2.architecture;\n }\n\n // Technology choices\n if (payload1?.technology && payload2?.technology) {\n return payload1.technology !== payload2.technology;\n }\n\n return false;\n }\n\n /**\n * Helper: Assess impact of conflicting decisions\n */\n private assessImpact(d1: Event, d2: Event): 'low' | 'medium' | 'high' {\n // High impact for architecture/design decisions\n if (\n d1.payload?.type === 'architecture' ||\n d2.payload?.type === 'architecture'\n ) {\n return 'high';\n }\n\n // Medium for implementation decisions\n if (\n d1.payload?.scope === 'implementation' ||\n d2.payload?.scope === 'implementation'\n ) {\n return 'medium';\n }\n\n return 'low';\n }\n\n /**\n * Helper: Check if decisions can coexist\n */\n private canCoexist(d1: Event, d2: Event): boolean {\n // Different scopes can coexist\n if (d1.payload?.scope !== d2.payload?.scope) {\n return true;\n }\n\n // Non-conflicting resources can coexist\n const resource1 = d1.payload?.resource;\n const resource2 = d2.payload?.resource;\n\n return resource1 !== resource2;\n }\n\n /**\n * Helper: Build frame tree structure\n */\n private buildFrameTree(frames: Frame[]): Map<string, Set<string>> {\n const tree = new Map<string, Set<string>>();\n\n for (const frame of frames) {\n if (frame.parent_frame_id) {\n if (!tree.has(frame.parent_frame_id)) {\n tree.set(frame.parent_frame_id, new Set());\n }\n const parentSet = tree.get(frame.parent_frame_id);\n if (parentSet) {\n parentSet.add(frame.frame_id);\n }\n }\n }\n\n return tree;\n }\n\n /**\n * Helper: Find divergence points in trees\n */\n private findDivergences(\n tree1: Map<string, Set<string>>,\n tree2: Map<string, Set<string>>\n ): Array<{ node1: string; node2: string; depth: number }> {\n const divergences: Array<{ node1: string; node2: string; depth: number }> =\n [];\n\n // Find nodes that exist in both but have different children\n for (const [node, children1] of tree1) {\n if (tree2.has(node)) {\n const children2 = tree2.get(node);\n if (children2 && !this.setsEqual(children1, children2)) {\n divergences.push({\n node1: node,\n node2: node,\n depth: this.calculateDepth(node, tree1),\n });\n }\n }\n }\n\n return divergences;\n }\n\n /**\n * Helper: Check if two sets are equal\n */\n private setsEqual<T>(set1: Set<T>, set2: Set<T>): boolean {\n if (set1.size !== set2.size) return false;\n for (const item of set1) {\n if (!set2.has(item)) return false;\n }\n return true;\n }\n\n /**\n * Helper: Calculate node depth in tree\n */\n private calculateDepth(node: string, tree: Map<string, Set<string>>): number {\n let depth = 0;\n let current = node;\n\n // Find parent of current node\n for (const [parent, children] of tree) {\n if (children.has(current)) {\n depth++;\n current = parent;\n }\n }\n\n return depth;\n }\n\n /**\n * Helper: Calculate divergence severity\n */\n private calculateDivergenceSeverity(divergence: {\n depth: number;\n }): 'low' | 'medium' | 'high' | 'critical' {\n if (divergence.depth === 0) return 'critical'; // Root divergence\n if (divergence.depth === 1) return 'high';\n if (divergence.depth === 2) return 'medium';\n return 'low';\n }\n\n /**\n * Helper: Extract paths from frames\n */\n private extractPaths(frame1: Frame, frame2: Frame): string[] {\n const paths: string[] = [];\n\n if (frame1.inputs?.path) paths.push(frame1.inputs.path);\n if (frame2.inputs?.path) paths.push(frame2.inputs.path);\n if (frame1.outputs?.files) paths.push(...frame1.outputs.files);\n if (frame2.outputs?.files) paths.push(...frame2.outputs.files);\n\n return [...new Set(paths)];\n }\n\n /**\n * Helper: Extract solution from frame\n */\n private extractSolution(frame: Frame): string {\n return (\n frame.outputs?.solution || frame.digest_text || 'No solution description'\n );\n }\n\n /**\n * Helper: Analyze approach taken\n */\n private analyzeApproach(frame: Frame): string {\n if (frame.outputs?.approach) return frame.outputs.approach;\n if (frame.type === 'debug') return 'Debug approach';\n if (frame.type === 'review') return 'Review approach';\n return 'Standard approach';\n }\n\n /**\n * Helper: Calculate solution effectiveness\n */\n private calculateEffectiveness(frame: Frame): number {\n let score = 0.5; // Base score\n\n // Completed frames are more effective\n if (frame.state === 'closed') score += 0.2;\n\n // Frames with outputs are more effective\n if (frame.outputs && Object.keys(frame.outputs).length > 0) score += 0.1;\n\n // Frames with digests are more effective\n if (frame.digest_text) score += 0.1;\n\n // Quick completion is more effective\n if (frame.closed_at && frame.created_at) {\n const duration = frame.closed_at - frame.created_at;\n if (duration < 300000) score += 0.1; // Less than 5 minutes\n }\n\n return Math.min(score, 1);\n }\n\n /**\n * Helper: Group similar frames together\n */\n private groupSimilarFrames(frames: Frame[]): Frame[][] {\n const groups: Frame[][] = [];\n const processed = new Set<string>();\n\n for (const frame of frames) {\n if (processed.has(frame.frame_id)) continue;\n\n const group = [frame];\n processed.add(frame.frame_id);\n\n for (const other of frames) {\n if (\n !processed.has(other.frame_id) &&\n this.framesAreSimilar(frame, other)\n ) {\n group.push(other);\n processed.add(other.frame_id);\n }\n }\n\n groups.push(group);\n }\n\n return groups;\n }\n\n /**\n * Helper: Summarize conflict types\n */\n private summarizeConflictTypes(\n conflicts: MergeConflict[]\n ): Record<string, number> {\n const summary: Record<string, number> = {\n parallel_solution: 0,\n conflicting_decision: 0,\n structural_divergence: 0,\n };\n\n for (const conflict of conflicts) {\n summary[conflict.type]++;\n }\n\n return summary;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -119,7 +119,6 @@ class ResolutionEngine {
|
|
|
119
119
|
votes: context.teamVotes
|
|
120
120
|
};
|
|
121
121
|
for (const conflict of conflicts) {
|
|
122
|
-
const winner = this.determineVoteWinner(conflict, voteResults);
|
|
123
122
|
conflict.resolution = {
|
|
124
123
|
strategy,
|
|
125
124
|
resolvedBy: "team_consensus",
|
|
@@ -143,11 +142,7 @@ class ResolutionEngine {
|
|
|
143
142
|
if (context.userRole !== "senior" && context.userRole !== "lead") {
|
|
144
143
|
throw new Error("Senior override requires senior or lead role");
|
|
145
144
|
}
|
|
146
|
-
|
|
147
|
-
stack1,
|
|
148
|
-
stack2,
|
|
149
|
-
context
|
|
150
|
-
);
|
|
145
|
+
this.determinePreferredStack(stack1, stack2, context);
|
|
151
146
|
const strategy = {
|
|
152
147
|
type: "senior_override",
|
|
153
148
|
confidence: 0.95,
|
|
@@ -408,7 +403,7 @@ class ResolutionEngine {
|
|
|
408
403
|
/**
|
|
409
404
|
* Get AI recommendation for specific conflict
|
|
410
405
|
*/
|
|
411
|
-
getAIRecommendation(conflict
|
|
406
|
+
getAIRecommendation(conflict) {
|
|
412
407
|
switch (conflict.type) {
|
|
413
408
|
case "parallel_solution":
|
|
414
409
|
return "Recommend keeping both solutions for A/B testing";
|
|
@@ -423,14 +418,8 @@ class ResolutionEngine {
|
|
|
423
418
|
/**
|
|
424
419
|
* Create rollback point before merge
|
|
425
420
|
*/
|
|
426
|
-
createRollbackPoint(
|
|
421
|
+
createRollbackPoint(_stack1, _stack2) {
|
|
427
422
|
const rollbackId = uuidv4();
|
|
428
|
-
const rollbackData = {
|
|
429
|
-
id: rollbackId,
|
|
430
|
-
timestamp: Date.now(),
|
|
431
|
-
stack1: JSON.parse(JSON.stringify(stack1)),
|
|
432
|
-
stack2: JSON.parse(JSON.stringify(stack2))
|
|
433
|
-
};
|
|
434
423
|
logger.info("Created rollback point", { rollbackId });
|
|
435
424
|
return rollbackId;
|
|
436
425
|
}
|