@stackmemoryai/stackmemory 0.5.58 → 0.5.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -1
- package/dist/scripts/benchmark-performance.js +48 -0
- package/dist/scripts/benchmark-performance.js.map +7 -0
- package/dist/scripts/check-redis.js +42 -0
- package/dist/scripts/check-redis.js.map +7 -0
- package/dist/scripts/initialize.js +116 -0
- package/dist/scripts/initialize.js.map +7 -0
- package/dist/scripts/list-linear-tasks.js +124 -0
- package/dist/scripts/list-linear-tasks.js.map +7 -0
- package/dist/scripts/measure-handoff-impact.js +340 -0
- package/dist/scripts/measure-handoff-impact.js.map +7 -0
- package/dist/scripts/query-chromadb.js +160 -0
- package/dist/scripts/query-chromadb.js.map +7 -0
- package/dist/scripts/show-linear-summary.js +119 -0
- package/dist/scripts/show-linear-summary.js.map +7 -0
- package/dist/scripts/simple-swarm-demo.js +90 -0
- package/dist/scripts/simple-swarm-demo.js.map +7 -0
- package/dist/scripts/status.js +155 -0
- package/dist/scripts/status.js.map +7 -0
- package/dist/scripts/test-chromadb-sync.js +192 -0
- package/dist/scripts/test-chromadb-sync.js.map +7 -0
- package/dist/scripts/test-ralph-iteration-fix.js +86 -0
- package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
- package/dist/scripts/test-ralph-iterations.js +121 -0
- package/dist/scripts/test-ralph-iterations.js.map +7 -0
- package/dist/scripts/test-redis-storage.js +389 -0
- package/dist/scripts/test-redis-storage.js.map +7 -0
- package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
- package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
- package/dist/scripts/test-swarm-fixes.js +125 -0
- package/dist/scripts/test-swarm-fixes.js.map +7 -0
- package/dist/scripts/test-swarm-tui.js +23 -0
- package/dist/scripts/test-swarm-tui.js.map +7 -0
- package/dist/scripts/test-tui-shortcuts.js +52 -0
- package/dist/scripts/test-tui-shortcuts.js.map +7 -0
- package/dist/scripts/validate-tui-shortcuts.js +60 -0
- package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
- package/dist/src/agents/core/agent-task-manager.js.map +7 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/src/cli/auto-detect.js.map +7 -0
- package/dist/src/cli/claude-sm-danger.js.map +7 -0
- package/dist/src/cli/claude-sm.js +1236 -0
- package/dist/src/cli/claude-sm.js.map +7 -0
- package/dist/src/cli/codex-sm-danger.js.map +7 -0
- package/dist/src/cli/codex-sm.js.map +7 -0
- package/dist/src/cli/commands/api.js.map +7 -0
- package/dist/src/cli/commands/auto-background.js.map +7 -0
- package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/src/cli/commands/clear.js.map +7 -0
- package/dist/src/cli/commands/config.js.map +7 -0
- package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
- package/dist/src/cli/commands/context.js.map +7 -0
- package/dist/src/cli/commands/daemon.js.map +7 -0
- package/dist/src/cli/commands/dashboard.js.map +7 -0
- package/dist/src/cli/commands/db.js.map +7 -0
- package/dist/src/cli/commands/decision.js.map +7 -0
- package/dist/src/cli/commands/discovery.js.map +7 -0
- package/dist/src/cli/commands/handoff.js.map +7 -0
- package/dist/src/cli/commands/hooks.js.map +7 -0
- package/dist/src/cli/commands/linear.js.map +7 -0
- package/dist/src/cli/commands/log.js.map +7 -0
- package/dist/src/cli/commands/login.js.map +7 -0
- package/dist/src/cli/commands/migrate.js.map +7 -0
- package/dist/src/cli/commands/model.js.map +7 -0
- package/dist/src/cli/commands/onboard.js.map +7 -0
- package/dist/src/cli/commands/projects.js.map +7 -0
- package/dist/src/cli/commands/ralph.js.map +7 -0
- package/dist/src/cli/commands/retrieval.js.map +7 -0
- package/dist/src/cli/commands/search.js +173 -0
- package/dist/src/cli/commands/search.js.map +7 -0
- package/dist/src/cli/commands/service.js.map +7 -0
- package/dist/src/cli/commands/session.js.map +7 -0
- package/dist/src/cli/commands/settings.js.map +7 -0
- package/dist/src/cli/commands/setup.js.map +7 -0
- package/dist/src/cli/commands/shell.js.map +7 -0
- package/dist/src/cli/commands/signup.js.map +7 -0
- package/dist/src/cli/commands/skills.js.map +7 -0
- package/dist/src/cli/commands/sms-notify.js.map +7 -0
- package/dist/src/cli/commands/storage-tier.js.map +7 -0
- package/dist/src/cli/commands/sweep.js.map +7 -0
- package/dist/src/cli/commands/tasks.js.map +7 -0
- package/dist/src/cli/commands/worktree.js.map +7 -0
- package/dist/src/cli/index.js +609 -0
- package/dist/src/cli/index.js.map +7 -0
- package/dist/src/cli/opencode-sm.js.map +7 -0
- package/dist/src/cli/utils/viewer.js.map +7 -0
- package/dist/src/core/config/config-manager.js.map +7 -0
- package/dist/src/core/config/feature-flags.js.map +7 -0
- package/dist/src/core/config/storage-config.js.map +7 -0
- package/dist/src/core/config/types.js.map +7 -0
- package/dist/src/core/context/auto-context.js.map +7 -0
- package/dist/src/core/context/dual-stack-manager.js.map +7 -0
- package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
- package/dist/src/core/context/frame-database.js.map +7 -0
- package/dist/src/core/context/frame-digest.js.map +7 -0
- package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
- package/dist/src/core/context/frame-recovery.js.map +7 -0
- package/dist/src/core/context/frame-stack.js.map +7 -0
- package/dist/src/core/context/index.js.map +7 -0
- package/dist/src/core/context/permission-manager.js.map +7 -0
- package/dist/src/core/context/recursive-context-manager.js.map +7 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/src/core/context/shared-context-layer.js.map +7 -0
- package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/src/core/context/validation.js.map +7 -0
- package/dist/src/core/database/batch-operations.js.map +7 -0
- package/dist/src/core/database/connection-pool.js.map +7 -0
- package/dist/src/core/database/database-adapter.js.map +7 -0
- package/dist/src/core/database/migration-manager.js.map +7 -0
- package/dist/src/core/database/query-cache.js.map +7 -0
- package/dist/src/core/database/query-router.js.map +7 -0
- package/dist/src/core/database/sqlite-adapter.js +738 -0
- package/dist/src/core/database/sqlite-adapter.js.map +7 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/src/core/digest/index.js.map +7 -0
- package/dist/src/core/digest/types.js.map +7 -0
- package/dist/src/core/errors/error-utils.js +208 -0
- package/dist/src/core/errors/error-utils.js.map +7 -0
- package/dist/src/core/errors/index.js +521 -0
- package/dist/src/core/errors/index.js.map +7 -0
- package/dist/src/core/errors/recovery.js.map +7 -0
- package/dist/src/core/execution/parallel-executor.js.map +7 -0
- package/dist/src/core/extensions/custom-tools.js +567 -0
- package/dist/src/core/extensions/custom-tools.js.map +7 -0
- package/dist/src/core/extensions/index.js +55 -0
- package/dist/src/core/extensions/index.js.map +7 -0
- package/dist/src/core/extensions/loader.js +709 -0
- package/dist/src/core/extensions/loader.js.map +7 -0
- package/dist/src/core/extensions/plugin-system.js +506 -0
- package/dist/src/core/extensions/plugin-system.js.map +7 -0
- package/dist/src/core/extensions/provider-adapter.js +617 -0
- package/dist/src/core/extensions/provider-adapter.js.map +7 -0
- package/dist/src/core/extensions/sandbox-runtime.js +664 -0
- package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
- package/dist/src/core/frame/workflow-templates.js.map +7 -0
- package/dist/src/core/merge/conflict-detector.js.map +7 -0
- package/dist/src/core/merge/index.js.map +7 -0
- package/dist/src/core/merge/resolution-engine.js.map +7 -0
- package/dist/src/core/merge/stack-diff.js.map +7 -0
- package/dist/src/core/merge/unified-merge-resolver.js +303 -0
- package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/src/core/models/fallback-monitor.js.map +7 -0
- package/dist/src/core/models/model-router.js.map +7 -0
- package/dist/src/core/monitoring/error-handler.js.map +7 -0
- package/dist/src/core/monitoring/logger.js +202 -0
- package/dist/src/core/monitoring/logger.js.map +7 -0
- package/dist/src/core/monitoring/metrics.js.map +7 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/src/core/monitoring/session-monitor.js.map +7 -0
- package/dist/src/core/performance/context-cache.js.map +7 -0
- package/dist/src/core/performance/index.js.map +7 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/src/core/performance/monitor.js.map +7 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/src/core/performance/performance-benchmark.js.map +7 -0
- package/dist/src/core/performance/performance-profiler.js.map +7 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/src/core/projects/project-isolation.js.map +7 -0
- package/dist/src/core/projects/project-manager.js.map +7 -0
- package/dist/src/core/query/query-parser.js.map +7 -0
- package/dist/src/core/query/query-templates.js.map +7 -0
- package/dist/src/core/retrieval/context-retriever.js.map +7 -0
- package/dist/src/core/retrieval/index.js.map +7 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/src/core/retrieval/llm-provider.js.map +7 -0
- package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
- package/dist/src/core/retrieval/summary-generator.js.map +7 -0
- package/dist/src/core/retrieval/types.js.map +7 -0
- package/dist/src/core/security/index.js +35 -0
- package/dist/src/core/security/index.js.map +7 -0
- package/dist/src/core/security/input-sanitizer.js +321 -0
- package/dist/src/core/security/input-sanitizer.js.map +7 -0
- package/dist/src/core/session/clear-survival.js.map +7 -0
- package/dist/src/core/session/enhanced-handoff.js.map +7 -0
- package/dist/src/core/session/handoff-generator.js.map +7 -0
- package/dist/src/core/session/index.js.map +7 -0
- package/dist/src/core/session/session-manager.js.map +7 -0
- package/dist/src/core/skills/index.js.map +7 -0
- package/dist/src/core/skills/skill-storage.js.map +7 -0
- package/dist/src/core/skills/types.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +380 -0
- package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
- package/dist/src/core/storage/infinite-storage.js.map +7 -0
- package/dist/src/core/storage/remote-storage.js.map +7 -0
- package/dist/src/core/storage/two-tier-storage.js.map +7 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/debug-trace.js.map +7 -0
- package/dist/src/core/trace/index.js.map +7 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/src/core/trace/trace-detector.js.map +7 -0
- package/dist/src/core/trace/trace-store.js.map +7 -0
- package/dist/src/core/trace/types.js.map +7 -0
- package/dist/src/core/utils/async-mutex.js.map +7 -0
- package/dist/src/core/utils/compression.js.map +7 -0
- package/dist/src/core/utils/update-checker.js.map +7 -0
- package/dist/src/core/worktree/worktree-manager.js.map +7 -0
- package/dist/src/daemon/daemon-config.js.map +7 -0
- package/dist/src/daemon/services/context-service.js.map +7 -0
- package/dist/src/daemon/services/linear-service.js.map +7 -0
- package/dist/src/daemon/session-daemon.js.map +7 -0
- package/dist/src/daemon/unified-daemon.js.map +7 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/src/features/analytics/index.js.map +7 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/src/features/browser/browser-mcp.js.map +7 -0
- package/dist/src/features/sweep/index.js.map +7 -0
- package/dist/src/features/sweep/prediction-client.js.map +7 -0
- package/dist/src/features/sweep/prompt-builder.js.map +7 -0
- package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
- package/dist/src/features/sweep/state-watcher.js.map +7 -0
- package/dist/src/features/sweep/status-bar.js.map +7 -0
- package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
- package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
- package/dist/src/features/sweep/types.js.map +7 -0
- package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
- package/dist/src/features/tasks/task-aware-context.js.map +7 -0
- package/dist/src/features/tui/simple-monitor.js.map +7 -0
- package/dist/src/features/tui/swarm-monitor.js.map +7 -0
- package/dist/src/features/web/client/stores/task-store.js.map +7 -0
- package/dist/src/features/web/server/index.js.map +7 -0
- package/dist/src/hooks/auto-background.js.map +7 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
- package/dist/src/hooks/config.js.map +7 -0
- package/dist/src/hooks/daemon.js.map +7 -0
- package/dist/src/hooks/events.js.map +7 -0
- package/dist/src/hooks/index.js.map +7 -0
- package/dist/src/hooks/linear-task-picker.js.map +7 -0
- package/dist/src/hooks/schemas.js.map +7 -0
- package/dist/src/hooks/secure-fs.js.map +7 -0
- package/dist/src/hooks/security-logger.js.map +7 -0
- package/dist/src/hooks/session-summary.js.map +7 -0
- package/dist/src/hooks/sms-action-runner.js.map +7 -0
- package/dist/src/hooks/sms-notify.js.map +7 -0
- package/dist/src/hooks/sms-watcher.js.map +7 -0
- package/dist/src/hooks/sms-webhook.js.map +7 -0
- package/dist/src/hooks/whatsapp-commands.js.map +7 -0
- package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
- package/dist/src/hooks/whatsapp-sync.js.map +7 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/integrations/anthropic/client.js.map +7 -0
- package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
- package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
- package/dist/src/integrations/linear/auth.js.map +7 -0
- package/dist/src/integrations/linear/auto-sync.js.map +7 -0
- package/dist/src/integrations/linear/client.js +634 -0
- package/dist/src/integrations/linear/client.js.map +7 -0
- package/dist/src/integrations/linear/config.js.map +7 -0
- package/dist/src/integrations/linear/migration.js.map +7 -0
- package/dist/src/integrations/linear/oauth-server.js.map +7 -0
- package/dist/src/integrations/linear/rest-client.js.map +7 -0
- package/dist/src/integrations/linear/sync-manager.js.map +7 -0
- package/dist/src/integrations/linear/sync-service.js.map +7 -0
- package/dist/src/integrations/linear/sync.js.map +7 -0
- package/dist/src/integrations/linear/unified-sync.js.map +7 -0
- package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/src/integrations/linear/webhook-server.js.map +7 -0
- package/dist/src/integrations/linear/webhook.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/index.js.map +7 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
- package/dist/src/integrations/mcp/remote-server.js +682 -0
- package/dist/src/integrations/mcp/remote-server.js.map +7 -0
- package/dist/src/integrations/mcp/schemas.js.map +7 -0
- package/dist/src/integrations/mcp/server.js +1975 -0
- package/dist/src/integrations/mcp/server.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
- package/dist/src/integrations/ralph/index.js.map +7 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
- package/dist/src/integrations/ralph/types.js +5 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/src/models/user.model.js.map +7 -0
- package/dist/src/servers/production/auth-middleware.js.map +7 -0
- package/dist/src/services/config-service.js.map +7 -0
- package/dist/src/services/context-service.js.map +7 -0
- package/dist/src/skills/api-discovery.js.map +7 -0
- package/dist/src/skills/api-skill.js.map +7 -0
- package/dist/src/skills/claude-skills.js.map +7 -0
- package/dist/src/skills/dashboard-launcher.js.map +7 -0
- package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
- package/dist/src/skills/repo-ingestion-skill.js +632 -0
- package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
- package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
- package/dist/src/types/task.js.map +7 -0
- package/dist/src/utils/env.js.map +7 -0
- package/dist/src/utils/formatting.js.map +7 -0
- package/dist/src/utils/process-cleanup.js.map +7 -0
- package/package.json +13 -9
- package/scripts/background-sync-manager.js +145 -83
- package/scripts/claude-sm-autostart.js +17 -12
- package/scripts/gepa/README.md +275 -0
- package/scripts/gepa/config.json +53 -0
- package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
- package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
- package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
- package/scripts/gepa/generations/gen-000/baseline.md +124 -0
- package/scripts/gepa/hooks/auto-optimize.js +494 -0
- package/scripts/gepa/hooks/eval-tracker.js +203 -0
- package/scripts/gepa/hooks/reflect.js +311 -0
- package/scripts/gepa/optimize.js +611 -0
- package/scripts/gepa/state.json +14 -0
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
- package/scripts/test-pre-publish-quick.sh +1 -1
- package/dist/agents/core/agent-task-manager.js.map +0 -7
- package/dist/agents/testing-agent.js +0 -614
- package/dist/agents/testing-agent.js.map +0 -7
- package/dist/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/cli/auto-detect.js.map +0 -7
- package/dist/cli/browser-test.js +0 -33
- package/dist/cli/browser-test.js.map +0 -7
- package/dist/cli/claude-sm-danger.js.map +0 -7
- package/dist/cli/claude-sm.js +0 -1156
- package/dist/cli/claude-sm.js.map +0 -7
- package/dist/cli/codex-sm-danger.js.map +0 -7
- package/dist/cli/codex-sm.js.map +0 -7
- package/dist/cli/commands/api.js.map +0 -7
- package/dist/cli/commands/auto-background.js.map +0 -7
- package/dist/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/cli/commands/clear.js.map +0 -7
- package/dist/cli/commands/config.js.map +0 -7
- package/dist/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/cli/commands/context.js.map +0 -7
- package/dist/cli/commands/daemon.js.map +0 -7
- package/dist/cli/commands/dashboard.js.map +0 -7
- package/dist/cli/commands/db.js.map +0 -7
- package/dist/cli/commands/decision.js.map +0 -7
- package/dist/cli/commands/discovery.js.map +0 -7
- package/dist/cli/commands/handoff.js.map +0 -7
- package/dist/cli/commands/hooks.js.map +0 -7
- package/dist/cli/commands/linear-unified.js +0 -353
- package/dist/cli/commands/linear-unified.js.map +0 -7
- package/dist/cli/commands/linear.js.map +0 -7
- package/dist/cli/commands/log.js.map +0 -7
- package/dist/cli/commands/login.js.map +0 -7
- package/dist/cli/commands/migrate.js.map +0 -7
- package/dist/cli/commands/model.js.map +0 -7
- package/dist/cli/commands/monitor.js +0 -313
- package/dist/cli/commands/monitor.js.map +0 -7
- package/dist/cli/commands/onboard.js.map +0 -7
- package/dist/cli/commands/projects.js.map +0 -7
- package/dist/cli/commands/quality.js +0 -413
- package/dist/cli/commands/quality.js.map +0 -7
- package/dist/cli/commands/ralph.js.map +0 -7
- package/dist/cli/commands/retrieval.js.map +0 -7
- package/dist/cli/commands/search.js +0 -156
- package/dist/cli/commands/search.js.map +0 -7
- package/dist/cli/commands/service.js.map +0 -7
- package/dist/cli/commands/session.js.map +0 -7
- package/dist/cli/commands/settings.js.map +0 -7
- package/dist/cli/commands/setup.js.map +0 -7
- package/dist/cli/commands/shell.js.map +0 -7
- package/dist/cli/commands/signup.js.map +0 -7
- package/dist/cli/commands/skills.js.map +0 -7
- package/dist/cli/commands/sms-notify.js.map +0 -7
- package/dist/cli/commands/storage-tier.js.map +0 -7
- package/dist/cli/commands/storage.js +0 -360
- package/dist/cli/commands/storage.js.map +0 -7
- package/dist/cli/commands/sweep.js.map +0 -7
- package/dist/cli/commands/tasks.js.map +0 -7
- package/dist/cli/commands/test.js +0 -286
- package/dist/cli/commands/test.js.map +0 -7
- package/dist/cli/commands/workflow.js +0 -142
- package/dist/cli/commands/workflow.js.map +0 -7
- package/dist/cli/commands/worktree.js.map +0 -7
- package/dist/cli/index.js +0 -594
- package/dist/cli/index.js.map +0 -7
- package/dist/cli/opencode-sm.js.map +0 -7
- package/dist/cli/utils/viewer.js.map +0 -7
- package/dist/core/analytics/team-analytics.js +0 -378
- package/dist/core/analytics/team-analytics.js.map +0 -7
- package/dist/core/config/config-manager.js.map +0 -7
- package/dist/core/config/feature-flags.js.map +0 -7
- package/dist/core/config/storage-config.js.map +0 -7
- package/dist/core/config/types.js.map +0 -7
- package/dist/core/context/auto-context.js.map +0 -7
- package/dist/core/context/dual-stack-manager.js.map +0 -7
- package/dist/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/core/context/frame-database.js.map +0 -7
- package/dist/core/context/frame-digest.js.map +0 -7
- package/dist/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
- package/dist/core/context/frame-manager.js +0 -1069
- package/dist/core/context/frame-manager.js.map +0 -7
- package/dist/core/context/frame-recovery.js.map +0 -7
- package/dist/core/context/frame-stack.js.map +0 -7
- package/dist/core/context/incremental-gc.js +0 -290
- package/dist/core/context/incremental-gc.js.map +0 -7
- package/dist/core/context/index.js.map +0 -7
- package/dist/core/context/model-aware-compaction.js +0 -623
- package/dist/core/context/model-aware-compaction.js.map +0 -7
- package/dist/core/context/permission-manager.js.map +0 -7
- package/dist/core/context/recursive-context-manager.js.map +0 -7
- package/dist/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/core/context/shared-context-layer.js.map +0 -7
- package/dist/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/core/context/validation.js.map +0 -7
- package/dist/core/database/batch-operations.js.map +0 -7
- package/dist/core/database/connection-pool.js.map +0 -7
- package/dist/core/database/database-adapter.js.map +0 -7
- package/dist/core/database/migration-manager.js.map +0 -7
- package/dist/core/database/paradedb-adapter.js +0 -990
- package/dist/core/database/paradedb-adapter.js.map +0 -7
- package/dist/core/database/query-cache.js.map +0 -7
- package/dist/core/database/query-router.js.map +0 -7
- package/dist/core/database/sqlite-adapter.js +0 -728
- package/dist/core/database/sqlite-adapter.js.map +0 -7
- package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/core/digest/index.js.map +0 -7
- package/dist/core/digest/types.js.map +0 -7
- package/dist/core/errors/index.js +0 -512
- package/dist/core/errors/index.js.map +0 -7
- package/dist/core/errors/recovery.js.map +0 -7
- package/dist/core/execution/parallel-executor.js.map +0 -7
- package/dist/core/frame/workflow-templates.js.map +0 -7
- package/dist/core/merge/conflict-detector.js.map +0 -7
- package/dist/core/merge/index.js.map +0 -7
- package/dist/core/merge/resolution-engine.js.map +0 -7
- package/dist/core/merge/stack-diff.js.map +0 -7
- package/dist/core/models/fallback-monitor.js.map +0 -7
- package/dist/core/models/model-router.js.map +0 -7
- package/dist/core/monitoring/error-handler.js.map +0 -7
- package/dist/core/monitoring/logger.js +0 -150
- package/dist/core/monitoring/logger.js.map +0 -7
- package/dist/core/monitoring/metrics.js.map +0 -7
- package/dist/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/core/monitoring/session-monitor.js.map +0 -7
- package/dist/core/performance/context-cache.js.map +0 -7
- package/dist/core/performance/index.js.map +0 -7
- package/dist/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/core/performance/monitor.js.map +0 -7
- package/dist/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/core/performance/performance-benchmark.js.map +0 -7
- package/dist/core/performance/performance-profiler.js.map +0 -7
- package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/core/projects/project-isolation.js.map +0 -7
- package/dist/core/projects/project-manager.js.map +0 -7
- package/dist/core/query/query-parser.js.map +0 -7
- package/dist/core/query/query-templates.js.map +0 -7
- package/dist/core/retrieval/context-retriever.js.map +0 -7
- package/dist/core/retrieval/graph-retrieval.js +0 -662
- package/dist/core/retrieval/graph-retrieval.js.map +0 -7
- package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
- package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
- package/dist/core/retrieval/index.js.map +0 -7
- package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/core/retrieval/llm-provider.js.map +0 -7
- package/dist/core/retrieval/retrieval-audit.js.map +0 -7
- package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
- package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
- package/dist/core/retrieval/summary-generator.js.map +0 -7
- package/dist/core/retrieval/types.js.map +0 -7
- package/dist/core/session/clear-survival.js.map +0 -7
- package/dist/core/session/enhanced-handoff.js.map +0 -7
- package/dist/core/session/handoff-generator.js.map +0 -7
- package/dist/core/session/index.js.map +0 -7
- package/dist/core/session/session-manager.js.map +0 -7
- package/dist/core/skills/index.js.map +0 -7
- package/dist/core/skills/skill-storage.js.map +0 -7
- package/dist/core/skills/types.js.map +0 -7
- package/dist/core/storage/chromadb-adapter.js +0 -354
- package/dist/core/storage/chromadb-adapter.js.map +0 -7
- package/dist/core/storage/infinite-storage.js.map +0 -7
- package/dist/core/storage/railway-optimized-storage.js +0 -591
- package/dist/core/storage/railway-optimized-storage.js.map +0 -7
- package/dist/core/storage/remote-storage.js.map +0 -7
- package/dist/core/storage/two-tier-storage.js.map +0 -7
- package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/core/trace/debug-trace.js.map +0 -7
- package/dist/core/trace/index.js.map +0 -7
- package/dist/core/trace/linear-api-wrapper.js.map +0 -7
- package/dist/core/trace/trace-demo.js +0 -154
- package/dist/core/trace/trace-demo.js.map +0 -7
- package/dist/core/trace/trace-detector.demo.js +0 -142
- package/dist/core/trace/trace-detector.demo.js.map +0 -7
- package/dist/core/trace/trace-detector.js.map +0 -7
- package/dist/core/trace/trace-store.js.map +0 -7
- package/dist/core/trace/types.js.map +0 -7
- package/dist/core/utils/async-mutex.js.map +0 -7
- package/dist/core/utils/compression.js.map +0 -7
- package/dist/core/utils/update-checker.js.map +0 -7
- package/dist/core/worktree/worktree-manager.js.map +0 -7
- package/dist/daemon/daemon-config.js.map +0 -7
- package/dist/daemon/services/context-service.js.map +0 -7
- package/dist/daemon/services/linear-service.js.map +0 -7
- package/dist/daemon/session-daemon.js.map +0 -7
- package/dist/daemon/unified-daemon.js.map +0 -7
- package/dist/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/features/analytics/index.js.map +0 -7
- package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/features/browser/browser-mcp.js.map +0 -7
- package/dist/features/sweep/index.js.map +0 -7
- package/dist/features/sweep/prediction-client.js.map +0 -7
- package/dist/features/sweep/prompt-builder.js.map +0 -7
- package/dist/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/features/sweep/state-watcher.js.map +0 -7
- package/dist/features/sweep/status-bar.js.map +0 -7
- package/dist/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/features/sweep/types.js.map +0 -7
- package/dist/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/features/tasks/task-aware-context.js.map +0 -7
- package/dist/features/tui/simple-monitor.js.map +0 -7
- package/dist/features/tui/swarm-monitor.js.map +0 -7
- package/dist/features/web/client/stores/task-store.js.map +0 -7
- package/dist/features/web/server/index.js.map +0 -7
- package/dist/hooks/auto-background.js.map +0 -7
- package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/hooks/config.js.map +0 -7
- package/dist/hooks/daemon.js.map +0 -7
- package/dist/hooks/events.js.map +0 -7
- package/dist/hooks/index.js.map +0 -7
- package/dist/hooks/linear-task-picker.js.map +0 -7
- package/dist/hooks/schemas.js.map +0 -7
- package/dist/hooks/secure-fs.js.map +0 -7
- package/dist/hooks/security-logger.js.map +0 -7
- package/dist/hooks/session-summary.js.map +0 -7
- package/dist/hooks/sms-action-runner.js.map +0 -7
- package/dist/hooks/sms-notify.js.map +0 -7
- package/dist/hooks/sms-watcher.js.map +0 -7
- package/dist/hooks/sms-webhook.js.map +0 -7
- package/dist/hooks/whatsapp-commands.js.map +0 -7
- package/dist/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/hooks/whatsapp-sync.js.map +0 -7
- package/dist/index.js.map +0 -7
- package/dist/integrations/anthropic/client.js.map +0 -7
- package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/integrations/linear/auth.js.map +0 -7
- package/dist/integrations/linear/auto-sync.js.map +0 -7
- package/dist/integrations/linear/client.js +0 -630
- package/dist/integrations/linear/client.js.map +0 -7
- package/dist/integrations/linear/config.js.map +0 -7
- package/dist/integrations/linear/migration.js.map +0 -7
- package/dist/integrations/linear/oauth-server.js.map +0 -7
- package/dist/integrations/linear/rest-client.js.map +0 -7
- package/dist/integrations/linear/sync-manager.js.map +0 -7
- package/dist/integrations/linear/sync-service.js.map +0 -7
- package/dist/integrations/linear/sync.js.map +0 -7
- package/dist/integrations/linear/unified-sync.js.map +0 -7
- package/dist/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/integrations/linear/webhook-server.js.map +0 -7
- package/dist/integrations/linear/webhook.js.map +0 -7
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/integrations/mcp/index.js.map +0 -7
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/integrations/mcp/remote-server.js +0 -691
- package/dist/integrations/mcp/remote-server.js.map +0 -7
- package/dist/integrations/mcp/schemas.js.map +0 -7
- package/dist/integrations/mcp/server.js +0 -1960
- package/dist/integrations/mcp/server.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions.js.map +0 -7
- package/dist/integrations/mcp/trace-test.js +0 -48
- package/dist/integrations/mcp/trace-test.js.map +0 -7
- package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
- package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
- package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
- package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/integrations/ralph/index.js.map +0 -7
- package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
- package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
- package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/models/user.model.js.map +0 -7
- package/dist/servers/production/auth-middleware.js.map +0 -7
- package/dist/servers/railway/config.js +0 -55
- package/dist/servers/railway/config.js.map +0 -7
- package/dist/servers/railway/index-enhanced.js +0 -160
- package/dist/servers/railway/index-enhanced.js.map +0 -7
- package/dist/servers/railway/index.js +0 -1349
- package/dist/servers/railway/index.js.map +0 -7
- package/dist/servers/railway/simple.js +0 -64
- package/dist/servers/railway/simple.js.map +0 -7
- package/dist/servers/railway/storage-test.js +0 -459
- package/dist/servers/railway/storage-test.js.map +0 -7
- package/dist/services/config-service.js.map +0 -7
- package/dist/services/context-service.js.map +0 -7
- package/dist/skills/api-discovery.js.map +0 -7
- package/dist/skills/api-skill.js.map +0 -7
- package/dist/skills/claude-skills.js.map +0 -7
- package/dist/skills/dashboard-launcher.js.map +0 -7
- package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
- package/dist/skills/repo-ingestion-skill.js +0 -609
- package/dist/skills/repo-ingestion-skill.js.map +0 -7
- package/dist/skills/security-secrets-scanner.js +0 -284
- package/dist/skills/security-secrets-scanner.js.map +0 -7
- package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/formatting.js.map +0 -7
- package/dist/utils/process-cleanup.js.map +0 -7
- package/dist/validation/schemas.js +0 -222
- package/dist/validation/schemas.js.map +0 -7
- /package/dist/{agents → src/agents}/core/agent-task-manager.js +0 -0
- /package/dist/{agents → src/agents}/verifiers/base-verifier.js +0 -0
- /package/dist/{agents → src/agents}/verifiers/formatter-verifier.js +0 -0
- /package/dist/{agents → src/agents}/verifiers/llm-judge.js +0 -0
- /package/dist/{cli → src/cli}/auto-detect.js +0 -0
- /package/dist/{cli → src/cli}/claude-sm-danger.js +0 -0
- /package/dist/{cli → src/cli}/codex-sm-danger.js +0 -0
- /package/dist/{cli → src/cli}/codex-sm.js +0 -0
- /package/dist/{cli → src/cli}/commands/api.js +0 -0
- /package/dist/{cli → src/cli}/commands/auto-background.js +0 -0
- /package/dist/{cli → src/cli}/commands/cleanup-processes.js +0 -0
- /package/dist/{cli → src/cli}/commands/clear.js +0 -0
- /package/dist/{cli → src/cli}/commands/config.js +0 -0
- /package/dist/{cli → src/cli}/commands/context-rehydrate.js +0 -0
- /package/dist/{cli → src/cli}/commands/context.js +0 -0
- /package/dist/{cli → src/cli}/commands/daemon.js +0 -0
- /package/dist/{cli → src/cli}/commands/dashboard.js +0 -0
- /package/dist/{cli → src/cli}/commands/db.js +0 -0
- /package/dist/{cli → src/cli}/commands/decision.js +0 -0
- /package/dist/{cli → src/cli}/commands/discovery.js +0 -0
- /package/dist/{cli → src/cli}/commands/handoff.js +0 -0
- /package/dist/{cli → src/cli}/commands/hooks.js +0 -0
- /package/dist/{cli → src/cli}/commands/linear.js +0 -0
- /package/dist/{cli → src/cli}/commands/log.js +0 -0
- /package/dist/{cli → src/cli}/commands/login.js +0 -0
- /package/dist/{cli → src/cli}/commands/migrate.js +0 -0
- /package/dist/{cli → src/cli}/commands/model.js +0 -0
- /package/dist/{cli → src/cli}/commands/onboard.js +0 -0
- /package/dist/{cli → src/cli}/commands/projects.js +0 -0
- /package/dist/{cli → src/cli}/commands/ralph.js +0 -0
- /package/dist/{cli → src/cli}/commands/retrieval.js +0 -0
- /package/dist/{cli → src/cli}/commands/service.js +0 -0
- /package/dist/{cli → src/cli}/commands/session.js +0 -0
- /package/dist/{cli → src/cli}/commands/settings.js +0 -0
- /package/dist/{cli → src/cli}/commands/setup.js +0 -0
- /package/dist/{cli → src/cli}/commands/shell.js +0 -0
- /package/dist/{cli → src/cli}/commands/signup.js +0 -0
- /package/dist/{cli → src/cli}/commands/skills.js +0 -0
- /package/dist/{cli → src/cli}/commands/sms-notify.js +0 -0
- /package/dist/{cli → src/cli}/commands/storage-tier.js +0 -0
- /package/dist/{cli → src/cli}/commands/sweep.js +0 -0
- /package/dist/{cli → src/cli}/commands/tasks.js +0 -0
- /package/dist/{cli → src/cli}/commands/worktree.js +0 -0
- /package/dist/{cli → src/cli}/opencode-sm.js +0 -0
- /package/dist/{cli → src/cli}/utils/viewer.js +0 -0
- /package/dist/{core → src/core}/config/config-manager.js +0 -0
- /package/dist/{core → src/core}/config/feature-flags.js +0 -0
- /package/dist/{core → src/core}/config/storage-config.js +0 -0
- /package/dist/{core → src/core}/config/types.js +0 -0
- /package/dist/{core → src/core}/context/auto-context.js +0 -0
- /package/dist/{core → src/core}/context/dual-stack-manager.js +0 -0
- /package/dist/{core → src/core}/context/enhanced-rehydration.js +0 -0
- /package/dist/{core → src/core}/context/frame-database.js +0 -0
- /package/dist/{core → src/core}/context/frame-digest.js +0 -0
- /package/dist/{core → src/core}/context/frame-handoff-manager.js +0 -0
- /package/dist/{core → src/core}/context/frame-lifecycle-hooks.js +0 -0
- /package/dist/{core → src/core}/context/frame-recovery.js +0 -0
- /package/dist/{core → src/core}/context/frame-stack.js +0 -0
- /package/dist/{core → src/core}/context/frame-types.js +0 -0
- /package/dist/{core → src/core}/context/frame-types.js.map +0 -0
- /package/dist/{core → src/core}/context/index.js +0 -0
- /package/dist/{core → src/core}/context/permission-manager.js +0 -0
- /package/dist/{core → src/core}/context/recursive-context-manager.js +0 -0
- /package/dist/{core → src/core}/context/refactored-frame-manager.js +0 -0
- /package/dist/{core → src/core}/context/shared-context-layer.js +0 -0
- /package/dist/{core → src/core}/context/stack-merge-resolver.js +0 -0
- /package/dist/{core → src/core}/context/validation.js +0 -0
- /package/dist/{core → src/core}/database/batch-operations.js +0 -0
- /package/dist/{core → src/core}/database/connection-pool.js +0 -0
- /package/dist/{core → src/core}/database/database-adapter.js +0 -0
- /package/dist/{core → src/core}/database/migration-manager.js +0 -0
- /package/dist/{core → src/core}/database/query-cache.js +0 -0
- /package/dist/{core → src/core}/database/query-router.js +0 -0
- /package/dist/{core → src/core}/digest/enhanced-hybrid-digest.js +0 -0
- /package/dist/{core → src/core}/digest/frame-digest-integration.js +0 -0
- /package/dist/{core → src/core}/digest/hybrid-digest-generator.js +0 -0
- /package/dist/{core → src/core}/digest/index.js +0 -0
- /package/dist/{core → src/core}/digest/types.js +0 -0
- /package/dist/{core → src/core}/errors/recovery.js +0 -0
- /package/dist/{core → src/core}/execution/parallel-executor.js +0 -0
- /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
- /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
- /package/dist/{core → src/core}/frame/workflow-templates.js +0 -0
- /package/dist/{core → src/core}/merge/conflict-detector.js +0 -0
- /package/dist/{core → src/core}/merge/index.js +0 -0
- /package/dist/{core → src/core}/merge/resolution-engine.js +0 -0
- /package/dist/{core → src/core}/merge/stack-diff.js +0 -0
- /package/dist/{core → src/core/merge}/types.js +0 -0
- /package/dist/{core → src/core/merge}/types.js.map +0 -0
- /package/dist/{core → src/core}/models/fallback-monitor.js +0 -0
- /package/dist/{core → src/core}/models/model-router.js +0 -0
- /package/dist/{core → src/core}/monitoring/error-handler.js +0 -0
- /package/dist/{core → src/core}/monitoring/metrics.js +0 -0
- /package/dist/{core → src/core}/monitoring/progress-tracker.js +0 -0
- /package/dist/{core → src/core}/monitoring/session-monitor.js +0 -0
- /package/dist/{core → src/core}/performance/context-cache.js +0 -0
- /package/dist/{core → src/core}/performance/index.js +0 -0
- /package/dist/{core → src/core}/performance/lazy-context-loader.js +0 -0
- /package/dist/{core → src/core}/performance/monitor.js +0 -0
- /package/dist/{core → src/core}/performance/optimized-frame-context.js +0 -0
- /package/dist/{core → src/core}/performance/performance-benchmark.js +0 -0
- /package/dist/{core → src/core}/performance/performance-profiler.js +0 -0
- /package/dist/{core → src/core}/performance/streaming-jsonl-parser.js +0 -0
- /package/dist/{core → src/core}/persistence/postgres-adapter.js +0 -0
- /package/dist/{core → src/core}/projects/project-isolation.js +0 -0
- /package/dist/{core → src/core}/projects/project-manager.js +0 -0
- /package/dist/{core → src/core}/query/query-parser.js +0 -0
- /package/dist/{core → src/core}/query/query-templates.js +0 -0
- /package/dist/{core → src/core}/retrieval/context-retriever.js +0 -0
- /package/dist/{core → src/core}/retrieval/index.js +0 -0
- /package/dist/{core → src/core}/retrieval/llm-context-retrieval.js +0 -0
- /package/dist/{core → src/core}/retrieval/llm-provider.js +0 -0
- /package/dist/{core → src/core}/retrieval/retrieval-audit.js +0 -0
- /package/dist/{core → src/core}/retrieval/summary-generator.js +0 -0
- /package/dist/{core → src/core}/retrieval/types.js +0 -0
- /package/dist/{core → src/core}/session/clear-survival.js +0 -0
- /package/dist/{core → src/core}/session/enhanced-handoff.js +0 -0
- /package/dist/{core → src/core}/session/handoff-generator.js +0 -0
- /package/dist/{core → src/core}/session/index.js +0 -0
- /package/dist/{core → src/core}/session/session-manager.js +0 -0
- /package/dist/{core → src/core}/skills/index.js +0 -0
- /package/dist/{core → src/core}/skills/skill-storage.js +0 -0
- /package/dist/{core → src/core}/skills/types.js +0 -0
- /package/dist/{core → src/core}/storage/infinite-storage.js +0 -0
- /package/dist/{core → src/core}/storage/remote-storage.js +0 -0
- /package/dist/{core → src/core}/storage/two-tier-storage.js +0 -0
- /package/dist/{core → src/core}/trace/cli-trace-wrapper.js +0 -0
- /package/dist/{core → src/core}/trace/db-trace-wrapper.js +0 -0
- /package/dist/{core → src/core}/trace/debug-trace.js +0 -0
- /package/dist/{core → src/core}/trace/index.js +0 -0
- /package/dist/{core → src/core}/trace/linear-api-wrapper.js +0 -0
- /package/dist/{core → src/core}/trace/trace-detector.js +0 -0
- /package/dist/{core → src/core}/trace/trace-store.js +0 -0
- /package/dist/{core → src/core}/trace/types.js +0 -0
- /package/dist/{integrations/linear → src/core}/types.js +0 -0
- /package/dist/{integrations/linear → src/core}/types.js.map +0 -0
- /package/dist/{core → src/core}/utils/async-mutex.js +0 -0
- /package/dist/{core → src/core}/utils/compression.js +0 -0
- /package/dist/{core → src/core}/utils/update-checker.js +0 -0
- /package/dist/{core → src/core}/worktree/worktree-manager.js +0 -0
- /package/dist/{daemon → src/daemon}/daemon-config.js +0 -0
- /package/dist/{daemon → src/daemon}/services/context-service.js +0 -0
- /package/dist/{daemon → src/daemon}/services/linear-service.js +0 -0
- /package/dist/{daemon → src/daemon}/session-daemon.js +0 -0
- /package/dist/{daemon → src/daemon}/unified-daemon.js +0 -0
- /package/dist/{features → src/features}/analytics/api/analytics-api.js +0 -0
- /package/dist/{features → src/features}/analytics/core/analytics-service.js +0 -0
- /package/dist/{features → src/features}/analytics/index.js +0 -0
- /package/dist/{features → src/features}/analytics/queries/metrics-queries.js +0 -0
- /package/dist/{features → src/features}/analytics/types/metrics.js +0 -0
- /package/dist/{features → src/features}/analytics/types/metrics.js.map +0 -0
- /package/dist/{features → src/features}/browser/browser-mcp.js +0 -0
- /package/dist/{features → src/features}/sweep/index.js +0 -0
- /package/dist/{features → src/features}/sweep/prediction-client.js +0 -0
- /package/dist/{features → src/features}/sweep/prompt-builder.js +0 -0
- /package/dist/{features → src/features}/sweep/pty-wrapper.js +0 -0
- /package/dist/{features → src/features}/sweep/state-watcher.js +0 -0
- /package/dist/{features → src/features}/sweep/status-bar.js +0 -0
- /package/dist/{features → src/features}/sweep/sweep-server-manager.js +0 -0
- /package/dist/{features → src/features}/sweep/tab-interceptor.js +0 -0
- /package/dist/{features → src/features}/sweep/types.js +0 -0
- /package/dist/{features → src/features}/tasks/linear-task-manager.js +0 -0
- /package/dist/{features → src/features}/tasks/task-aware-context.js +0 -0
- /package/dist/{features → src/features}/tui/simple-monitor.js +0 -0
- /package/dist/{features → src/features}/tui/swarm-monitor.js +0 -0
- /package/dist/{features → src/features}/web/client/stores/task-store.js +0 -0
- /package/dist/{features → src/features}/web/server/index.js +0 -0
- /package/dist/{hooks → src/hooks}/auto-background.js +0 -0
- /package/dist/{hooks → src/hooks}/claude-code-whatsapp-hook.js +0 -0
- /package/dist/{hooks → src/hooks}/config.js +0 -0
- /package/dist/{hooks → src/hooks}/daemon.js +0 -0
- /package/dist/{hooks → src/hooks}/events.js +0 -0
- /package/dist/{hooks → src/hooks}/index.js +0 -0
- /package/dist/{hooks → src/hooks}/linear-task-picker.js +0 -0
- /package/dist/{hooks → src/hooks}/schemas.js +0 -0
- /package/dist/{hooks → src/hooks}/secure-fs.js +0 -0
- /package/dist/{hooks → src/hooks}/security-logger.js +0 -0
- /package/dist/{hooks → src/hooks}/session-summary.js +0 -0
- /package/dist/{hooks → src/hooks}/sms-action-runner.js +0 -0
- /package/dist/{hooks → src/hooks}/sms-notify.js +0 -0
- /package/dist/{hooks → src/hooks}/sms-watcher.js +0 -0
- /package/dist/{hooks → src/hooks}/sms-webhook.js +0 -0
- /package/dist/{hooks → src/hooks}/whatsapp-commands.js +0 -0
- /package/dist/{hooks → src/hooks}/whatsapp-scheduler.js +0 -0
- /package/dist/{hooks → src/hooks}/whatsapp-sync.js +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{integrations → src/integrations}/anthropic/client.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/agent-bridge.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/enhanced-pre-clear-hooks.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/lifecycle-hooks.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/post-task-hooks.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/subagent-client-stub.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/subagent-client.js +0 -0
- /package/dist/{integrations → src/integrations}/claude-code/task-coordinator.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/auth.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/auto-sync.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/config.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/migration.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/oauth-server.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/rest-client.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/sync-manager.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/sync-service.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/sync.js +0 -0
- /package/dist/{integrations/ralph → src/integrations/linear}/types.js +0 -0
- /package/dist/{integrations/ralph → src/integrations/linear}/types.js.map +0 -0
- /package/dist/{integrations → src/integrations}/linear/unified-sync.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/webhook-handler.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/webhook-server.js +0 -0
- /package/dist/{integrations → src/integrations}/linear/webhook.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/code-execution-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/context-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/discovery-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/index.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/linear-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/skill-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/task-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/handlers/trace-handlers.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/index.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/middleware/tool-scoring.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/refactored-server.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/schemas.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/tool-definitions-code.js +0 -0
- /package/dist/{integrations → src/integrations}/mcp/tool-definitions.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/bridge/ralph-stackmemory-bridge.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/context/context-budget-manager.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/context/stackmemory-context-loader.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/coordination/enhanced-coordination.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/index.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/learning/pattern-learner.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/lifecycle/iteration-lifecycle.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/monitoring/swarm-dashboard.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/monitoring/swarm-registry.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/orchestration/multi-loop-orchestrator.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/patterns/compounding-engineering-pattern.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/patterns/extended-coherence-sessions.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/patterns/oracle-worker-pattern.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/performance/performance-optimizer.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/recovery/crash-recovery.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/state/state-reconciler.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/swarm/git-workflow-manager.js +0 -0
- /package/dist/{integrations → src/integrations}/ralph/swarm/swarm-coordinator.js +0 -0
- /package/dist/{types/task.js.map → src/integrations/ralph/types.js.map} +0 -0
- /package/dist/{integrations → src/integrations}/ralph/visualization/ralph-debugger.js +0 -0
- /package/dist/{mcp → src/mcp}/stackmemory-mcp-server.js +0 -0
- /package/dist/{middleware → src/middleware}/exponential-rate-limiter.js +0 -0
- /package/dist/{models → src/models}/user.model.js +0 -0
- /package/dist/{servers → src/servers}/production/auth-middleware.js +0 -0
- /package/dist/{services → src/services}/config-service.js +0 -0
- /package/dist/{services → src/services}/context-service.js +0 -0
- /package/dist/{skills → src/skills}/api-discovery.js +0 -0
- /package/dist/{skills → src/skills}/api-skill.js +0 -0
- /package/dist/{skills → src/skills}/claude-skills.js +0 -0
- /package/dist/{skills → src/skills}/dashboard-launcher.js +0 -0
- /package/dist/{skills → src/skills}/recursive-agent-orchestrator.js +0 -0
- /package/dist/{skills → src/skills}/unified-rlm-orchestrator.js +0 -0
- /package/dist/{types → src/types}/task.js +0 -0
- /package/dist/{utils → src/utils}/env.js +0 -0
- /package/dist/{utils → src/utils}/formatting.js +0 -0
- /package/dist/{utils → src/utils}/process-cleanup.js +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/model-aware-compaction.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Model-Aware Compaction Handler\n * Dynamically adjusts thresholds based on detected Claude model\n */\n\nimport { logger } from '../monitoring/logger.js';\n\nexport interface ModelProfile {\n name: string;\n contextWindow: number;\n outputLimit: number;\n // Compaction typically happens at 80-90% of context window\n warningThreshold: number; // 75% of context\n criticalThreshold: number; // 85% of context\n compactionZone: number; // 90% - actual compaction\n characteristics: {\n supportsLongContext: boolean;\n betaFeatures?: string[];\n costTier: 'low' | 'medium' | 'high' | 'premium';\n };\n}\n\nexport interface ModelDetectionResult {\n detectedModel: string;\n confidence: number;\n profile: ModelProfile;\n source: 'header' | 'behavior' | 'default';\n}\n\nexport class ModelAwareCompactionHandler {\n private static readonly MODEL_PROFILES: Record<string, ModelProfile> = {\n // === ANTHROPIC CLAUDE MODELS ===\n 'claude-3-haiku': {\n name: 'Claude 3 Haiku',\n contextWindow: 200000,\n outputLimit: 4096,\n warningThreshold: 150000, // 75%\n criticalThreshold: 170000, // 85%\n compactionZone: 180000, // 90%\n characteristics: {\n supportsLongContext: true,\n costTier: 'low',\n },\n },\n 'claude-3-5-haiku': {\n name: 'Claude 3.5 Haiku',\n contextWindow: 200000,\n outputLimit: 8192,\n warningThreshold: 150000,\n criticalThreshold: 170000,\n compactionZone: 180000,\n characteristics: {\n supportsLongContext: true,\n costTier: 'low',\n },\n },\n 'claude-3-sonnet': {\n name: 'Claude 3 Sonnet',\n contextWindow: 200000,\n outputLimit: 4096,\n warningThreshold: 150000,\n criticalThreshold: 170000,\n compactionZone: 180000,\n characteristics: {\n supportsLongContext: true,\n costTier: 'medium',\n },\n },\n 'claude-3-5-sonnet': {\n name: 'Claude 3.5 Sonnet',\n contextWindow: 200000,\n outputLimit: 8192, // With beta header\n warningThreshold: 150000,\n criticalThreshold: 170000,\n compactionZone: 180000,\n characteristics: {\n supportsLongContext: true,\n betaFeatures: ['max-tokens-3-5-sonnet-2024-07-15'],\n costTier: 'medium',\n },\n },\n 'claude-3-opus': {\n name: 'Claude 3 Opus',\n contextWindow: 200000, // Standard, can be 1M in beta\n outputLimit: 4096,\n warningThreshold: 150000,\n criticalThreshold: 170000,\n compactionZone: 180000,\n characteristics: {\n supportsLongContext: true,\n costTier: 'premium',\n },\n },\n 'claude-3-opus-beta-1m': {\n name: 'Claude 3 Opus (1M Beta)',\n contextWindow: 1000000,\n outputLimit: 4096,\n warningThreshold: 750000, // 75%\n criticalThreshold: 850000, // 85%\n compactionZone: 900000, // 90%\n characteristics: {\n supportsLongContext: true,\n betaFeatures: ['1m-context-window'],\n costTier: 'premium',\n },\n },\n 'claude-2': {\n name: 'Claude 2',\n contextWindow: 100000,\n outputLimit: 4096,\n warningThreshold: 75000, // 75%\n criticalThreshold: 85000, // 85%\n compactionZone: 90000, // 90%\n characteristics: {\n supportsLongContext: true,\n costTier: 'medium',\n },\n },\n 'claude-instant': {\n name: 'Claude Instant',\n contextWindow: 100000,\n outputLimit: 4096,\n warningThreshold: 75000,\n criticalThreshold: 85000,\n compactionZone: 90000,\n characteristics: {\n supportsLongContext: true,\n costTier: 'low',\n },\n },\n\n // === OPENAI GPT MODELS ===\n 'gpt-4o': {\n name: 'GPT-4o',\n contextWindow: 128000,\n outputLimit: 16384, // Can be 4096-16384\n warningThreshold: 96000, // 75%\n criticalThreshold: 108800, // 85%\n compactionZone: 115200, // 90%\n characteristics: {\n supportsLongContext: true,\n costTier: 'high',\n },\n },\n 'gpt-4-turbo': {\n name: 'GPT-4 Turbo',\n contextWindow: 128000,\n outputLimit: 4096,\n warningThreshold: 96000,\n criticalThreshold: 108800,\n compactionZone: 115200,\n characteristics: {\n supportsLongContext: true,\n costTier: 'high',\n },\n },\n 'gpt-4': {\n name: 'GPT-4',\n contextWindow: 8192, // Standard GPT-4\n outputLimit: 4096,\n warningThreshold: 6144, // 75%\n criticalThreshold: 6963, // 85%\n compactionZone: 7373, // 90%\n characteristics: {\n supportsLongContext: false,\n costTier: 'high',\n },\n },\n 'gpt-4-32k': {\n name: 'GPT-4 32K',\n contextWindow: 32768,\n outputLimit: 4096,\n warningThreshold: 24576, // 75%\n criticalThreshold: 27853, // 85%\n compactionZone: 29491, // 90%\n characteristics: {\n supportsLongContext: true,\n costTier: 'premium',\n },\n },\n 'gpt-3.5-turbo': {\n name: 'GPT-3.5 Turbo',\n contextWindow: 16385,\n outputLimit: 4096,\n warningThreshold: 12289, // 75%\n criticalThreshold: 13927, // 85%\n compactionZone: 14747, // 90%\n characteristics: {\n supportsLongContext: false,\n costTier: 'low',\n },\n },\n 'gpt-3.5-turbo-16k': {\n name: 'GPT-3.5 Turbo 16K',\n contextWindow: 16385,\n outputLimit: 4096,\n warningThreshold: 12289,\n criticalThreshold: 13927,\n compactionZone: 14747,\n characteristics: {\n supportsLongContext: false,\n costTier: 'low',\n },\n },\n\n // === GOOGLE GEMINI MODELS ===\n 'gemini-1.5-pro': {\n name: 'Gemini 1.5 Pro',\n contextWindow: 128000, // Standard, can be up to 2M\n outputLimit: 32768, // 32K output\n warningThreshold: 96000,\n criticalThreshold: 108800,\n compactionZone: 115200,\n characteristics: {\n supportsLongContext: true,\n costTier: 'medium',\n },\n },\n 'gemini-1.5-pro-1m': {\n name: 'Gemini 1.5 Pro (1M)',\n contextWindow: 1000000,\n outputLimit: 32768,\n warningThreshold: 750000, // 75%\n criticalThreshold: 850000, // 85%\n compactionZone: 900000, // 90%\n characteristics: {\n supportsLongContext: true,\n betaFeatures: ['1m-context'],\n costTier: 'high',\n },\n },\n 'gemini-1.5-pro-2m': {\n name: 'Gemini 1.5 Pro (2M)',\n contextWindow: 2000000,\n outputLimit: 32768,\n warningThreshold: 1500000, // 75%\n criticalThreshold: 1700000, // 85%\n compactionZone: 1800000, // 90%\n characteristics: {\n supportsLongContext: true,\n betaFeatures: ['2m-context'],\n costTier: 'premium',\n },\n },\n 'gemini-1.5-flash': {\n name: 'Gemini 1.5 Flash',\n contextWindow: 1000000,\n outputLimit: 32768,\n warningThreshold: 750000,\n criticalThreshold: 850000,\n compactionZone: 900000,\n characteristics: {\n supportsLongContext: true,\n costTier: 'low',\n },\n },\n 'gemini-2.0-flash': {\n name: 'Gemini 2.0 Flash',\n contextWindow: 1000000,\n outputLimit: 32768,\n warningThreshold: 750000,\n criticalThreshold: 850000,\n compactionZone: 900000,\n characteristics: {\n supportsLongContext: true,\n betaFeatures: ['native-tools'],\n costTier: 'low',\n },\n },\n 'gemini-1.0-pro': {\n name: 'Gemini 1.0 Pro',\n contextWindow: 32768,\n outputLimit: 8192,\n warningThreshold: 24576,\n criticalThreshold: 27853,\n compactionZone: 29491,\n characteristics: {\n supportsLongContext: false,\n costTier: 'medium',\n },\n },\n\n // === MISTRAL MODELS ===\n 'mistral-large': {\n name: 'Mistral Large',\n contextWindow: 128000,\n outputLimit: 4096,\n warningThreshold: 96000,\n criticalThreshold: 108800,\n compactionZone: 115200,\n characteristics: {\n supportsLongContext: true,\n costTier: 'medium',\n },\n },\n 'mistral-medium': {\n name: 'Mistral Medium',\n contextWindow: 32768,\n outputLimit: 4096,\n warningThreshold: 24576,\n criticalThreshold: 27853,\n compactionZone: 29491,\n characteristics: {\n supportsLongContext: false,\n costTier: 'low',\n },\n },\n };\n\n private currentModel: ModelProfile;\n private detectionHistory: ModelDetectionResult[] = [];\n private tokenEstimate: number = 0;\n\n constructor() {\n // Default to Claude 3.5 Sonnet (most common in Claude Code)\n this.currentModel =\n ModelAwareCompactionHandler.MODEL_PROFILES['claude-3-5-sonnet'];\n }\n\n /**\n * Detect model from various signals\n */\n detectModel(signals: {\n headers?: Record<string, string>;\n responsePatterns?: string;\n tokenCount?: number;\n outputLength?: number;\n }): ModelDetectionResult {\n let detectedModel = 'claude-3-5-sonnet'; // Default\n let confidence = 0.5;\n let source: ModelDetectionResult['source'] = 'default';\n\n // 1. Check headers for model information\n if (signals.headers) {\n const modelHeader =\n signals.headers['x-anthropic-model'] ||\n signals.headers['anthropic-model'] ||\n signals.headers['model'];\n\n if (modelHeader) {\n const normalized = this.normalizeModelName(modelHeader);\n if (ModelAwareCompactionHandler.MODEL_PROFILES[normalized]) {\n detectedModel = normalized;\n confidence = 0.95;\n source = 'header';\n }\n }\n\n // Check for beta features\n const betaHeader = signals.headers['anthropic-beta'];\n if (betaHeader) {\n if (betaHeader.includes('max-tokens-3-5-sonnet')) {\n detectedModel = 'claude-3-5-sonnet';\n confidence = Math.max(confidence, 0.9);\n } else if (betaHeader.includes('1m-context')) {\n detectedModel = 'claude-3-opus-beta-1m';\n confidence = 0.95;\n source = 'header';\n }\n }\n }\n\n // 2. Behavioral detection based on output length\n if (signals.outputLength && confidence < 0.9) {\n if (signals.outputLength > 4096 && signals.outputLength <= 8192) {\n // Likely 3.5 models with extended output\n detectedModel = detectedModel.includes('haiku')\n ? 'claude-3-5-haiku'\n : 'claude-3-5-sonnet';\n confidence = Math.max(confidence, 0.7);\n source = source === 'default' ? 'behavior' : source;\n }\n }\n\n // 3. Token count detection for 1M context\n if (signals.tokenCount && signals.tokenCount > 200000) {\n detectedModel = 'claude-3-opus-beta-1m';\n confidence = 0.8;\n source = 'behavior';\n }\n\n // 4. Response pattern detection\n if (signals.responsePatterns && confidence < 0.8) {\n const patterns = signals.responsePatterns.toLowerCase();\n\n // Model self-identification patterns\n if (patterns.includes('claude 3.5 sonnet')) {\n detectedModel = 'claude-3-5-sonnet';\n confidence = 0.85;\n source = 'behavior';\n } else if (patterns.includes('claude 3 opus')) {\n detectedModel = 'claude-3-opus';\n confidence = 0.85;\n source = 'behavior';\n } else if (patterns.includes('claude 3.5 haiku')) {\n detectedModel = 'claude-3-5-haiku';\n confidence = 0.85;\n source = 'behavior';\n }\n }\n\n const profile = ModelAwareCompactionHandler.MODEL_PROFILES[detectedModel];\n const result: ModelDetectionResult = {\n detectedModel,\n confidence,\n profile,\n source,\n };\n\n this.detectionHistory.push(result);\n this.currentModel = profile;\n\n logger.info(\n `Model detected: ${profile.name} (confidence: ${confidence}, source: ${source})`\n );\n\n return result;\n }\n\n /**\n * Normalize model name to match our profiles\n */\n private normalizeModelName(modelName: string): string {\n const normalized = modelName\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n\n // Map variations to our standard names\n const mappings: Record<string, string> = {\n // Claude models\n 'claude-3-haiku': 'claude-3-haiku',\n 'claude-3-5-haiku': 'claude-3-5-haiku',\n 'claude-haiku': 'claude-3-haiku',\n 'claude-3-sonnet': 'claude-3-sonnet',\n 'claude-3-5-sonnet': 'claude-3-5-sonnet',\n 'claude-sonnet': 'claude-3-sonnet',\n 'claude-3-opus': 'claude-3-opus',\n 'claude-opus': 'claude-3-opus',\n 'claude-2': 'claude-2',\n 'claude-instant': 'claude-instant',\n 'claude-instant-1': 'claude-instant',\n\n // OpenAI models\n 'gpt-4o': 'gpt-4o',\n 'gpt-4o-mini': 'gpt-4o',\n 'gpt-4-turbo': 'gpt-4-turbo',\n 'gpt-4-turbo-preview': 'gpt-4-turbo',\n 'gpt-4': 'gpt-4',\n 'gpt-4-32k': 'gpt-4-32k',\n 'gpt-3-5-turbo': 'gpt-3.5-turbo',\n 'gpt-35-turbo': 'gpt-3.5-turbo',\n 'gpt-3-5-turbo-16k': 'gpt-3.5-turbo-16k',\n\n // Google models\n 'gemini-pro': 'gemini-1.0-pro',\n 'gemini-1-5-pro': 'gemini-1.5-pro',\n 'gemini-1-5-flash': 'gemini-1.5-flash',\n 'gemini-2-0-flash': 'gemini-2.0-flash',\n 'gemini-pro-1-5': 'gemini-1.5-pro',\n 'gemini-flash': 'gemini-1.5-flash',\n\n // Mistral models\n 'mistral-large': 'mistral-large',\n 'mistral-large-latest': 'mistral-large',\n 'mistral-medium': 'mistral-medium',\n 'mistral-medium-latest': 'mistral-medium',\n };\n\n return mappings[normalized] || normalized;\n }\n\n /**\n * Get adaptive thresholds based on current model\n */\n getAdaptiveThresholds(): {\n warning: number;\n critical: number;\n compaction: number;\n } {\n return {\n warning: this.currentModel.warningThreshold,\n critical: this.currentModel.criticalThreshold,\n compaction: this.currentModel.compactionZone,\n };\n }\n\n /**\n * Calculate preservation strategy based on model\n */\n getPreservationStrategy(): {\n aggressiveness: 'minimal' | 'balanced' | 'aggressive';\n preserveRatio: number;\n compressionLevel: 'light' | 'moderate' | 'heavy';\n } {\n const costTier = this.currentModel.characteristics.costTier;\n const contextSize = this.currentModel.contextWindow;\n\n // High-cost models: preserve more aggressively\n // Large context models: can be more relaxed\n\n if (costTier === 'premium') {\n return {\n aggressiveness: 'aggressive',\n preserveRatio: 0.3, // Preserve 30% of context\n compressionLevel: 'light',\n };\n } else if (costTier === 'medium') {\n return {\n aggressiveness: 'balanced',\n preserveRatio: 0.2, // Preserve 20% of context\n compressionLevel: 'moderate',\n };\n } else {\n return {\n aggressiveness: 'minimal',\n preserveRatio: 0.1, // Preserve 10% of context\n compressionLevel: 'heavy',\n };\n }\n }\n\n /**\n * Estimate tokens more accurately based on model\n */\n estimateTokens(text: string): number {\n // Claude models use a similar tokenization to GPT models\n // But Claude tends to be slightly more efficient\n\n // Basic heuristic: ~3.5 characters per token for Claude\n // (vs 4 characters for GPT models)\n let baseEstimate = Math.ceil(text.length / 3.5);\n\n // Adjust for code content (more tokens)\n const codeIndicators = [\n '{',\n '}',\n '(',\n ')',\n ';',\n 'function',\n 'const',\n 'let',\n ];\n const codeScore = codeIndicators.reduce(\n (score, indicator) => score + (text.split(indicator).length - 1),\n 0\n );\n\n if (codeScore > 50) {\n baseEstimate *= 1.2; // Code typically uses 20% more tokens\n }\n\n // Adjust for natural language (fewer tokens)\n const avgWordLength =\n text.split(/\\s+/).reduce((sum, word) => sum + word.length, 0) /\n Math.max(1, text.split(/\\s+/).length);\n\n if (avgWordLength > 6) {\n baseEstimate *= 0.9; // Longer words = more efficient tokenization\n }\n\n this.tokenEstimate += baseEstimate;\n return Math.round(baseEstimate);\n }\n\n /**\n * Check if approaching any threshold\n */\n checkThresholds(currentTokens: number): {\n status: 'safe' | 'warning' | 'critical' | 'compaction';\n percentage: number;\n tokensRemaining: number;\n recommendation: string;\n } {\n const thresholds = this.getAdaptiveThresholds();\n const percentage = (currentTokens / this.currentModel.contextWindow) * 100;\n const tokensRemaining = this.currentModel.contextWindow - currentTokens;\n\n let status: 'safe' | 'warning' | 'critical' | 'compaction';\n let recommendation: string;\n\n if (currentTokens >= thresholds.compaction) {\n status = 'compaction';\n recommendation =\n 'Compaction imminent or occurred. Restore critical context immediately.';\n } else if (currentTokens >= thresholds.critical) {\n status = 'critical';\n recommendation =\n 'Create full context preservation. Prepare for compaction.';\n } else if (currentTokens >= thresholds.warning) {\n status = 'warning';\n recommendation =\n 'Begin selective context preservation. Monitor token usage closely.';\n } else {\n status = 'safe';\n recommendation =\n 'Token usage within safe limits. Continue normal operation.';\n }\n\n return {\n status,\n percentage,\n tokensRemaining,\n recommendation,\n };\n }\n\n /**\n * Get model-specific compaction hints\n */\n getCompactionHints(): string[] {\n const hints: string[] = [];\n\n if (this.currentModel.contextWindow >= 1000000) {\n hints.push(\n '1M context model detected - compaction less likely but still possible'\n );\n hints.push(\n 'Consider chunking very large operations to stay under 900K tokens'\n );\n } else if (this.currentModel.contextWindow >= 200000) {\n hints.push(\n 'Standard 200K context - expect compaction around 180K tokens'\n );\n hints.push('Preserve critical context every 50K tokens for safety');\n } else {\n hints.push('Limited context model - be aggressive with preservation');\n hints.push('Consider breaking work into smaller sessions');\n }\n\n if (this.currentModel.characteristics.betaFeatures) {\n hints.push(\n `Beta features available: ${this.currentModel.characteristics.betaFeatures.join(', ')}`\n );\n }\n\n if (this.currentModel.characteristics.costTier === 'premium') {\n hints.push(\n 'Premium model - maximize context preservation to avoid re-processing'\n );\n } else if (this.currentModel.characteristics.costTier === 'low') {\n hints.push(\n 'Cost-effective model - can be more aggressive with resets if needed'\n );\n }\n\n return hints;\n }\n\n /**\n * Suggest optimal preservation points based on model\n */\n getSuggestedPreservationPoints(): number[] {\n const contextWindow = this.currentModel.contextWindow;\n const points: number[] = [];\n\n // Suggest preservation at regular intervals\n // More frequent for smaller contexts\n const interval =\n contextWindow >= 500000\n ? 100000\n : contextWindow >= 200000\n ? 50000\n : 25000;\n\n for (let point = interval; point < contextWindow * 0.9; point += interval) {\n points.push(point);\n }\n\n // Always include warning and critical thresholds\n points.push(this.currentModel.warningThreshold);\n points.push(this.currentModel.criticalThreshold);\n\n return [...new Set(points)].sort((a, b) => a - b);\n }\n\n /**\n * Get current model profile\n */\n getCurrentModel(): ModelProfile {\n return this.currentModel;\n }\n\n /**\n * Get detection history for diagnostics\n */\n getDetectionHistory(): ModelDetectionResult[] {\n return this.detectionHistory;\n }\n\n /**\n * Update model manually (for testing or override)\n */\n setModel(modelKey: string): boolean {\n const profile = ModelAwareCompactionHandler.MODEL_PROFILES[modelKey];\n if (profile) {\n this.currentModel = profile;\n logger.info(`Model manually set to: ${profile.name}`);\n return true;\n }\n return false;\n }\n\n /**\n * Export model profiles for reference\n */\n static getAvailableModels(): string[] {\n return Object.keys(ModelAwareCompactionHandler.MODEL_PROFILES);\n }\n\n /**\n * Get specific model profile\n */\n static getModelProfile(modelKey: string): ModelProfile | undefined {\n return ModelAwareCompactionHandler.MODEL_PROFILES[modelKey];\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/permission-manager.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Permission Management for Collaboration Layer\n */\n\nimport { ValidationError, ErrorCode } from '../errors/index.js';\nimport type { StackPermissions, StackContext } from './dual-stack-manager.js';\nimport { logger } from '../monitoring/logger.js';\n// Type-safe environment variable access\n\nexport type Operation = 'read' | 'write' | 'handoff' | 'merge' | 'administer';\n\nexport interface PermissionContext {\n userId: string;\n operation: Operation;\n resourceType: 'stack' | 'frame' | 'handoff' | 'merge';\n resourceId: string;\n stackContext?: StackContext;\n}\n\nexport class PermissionManager {\n private userPermissions = new Map<string, Map<string, StackPermissions>>();\n private adminUsers = new Set<string>();\n\n constructor() {\n this.initializeDefaultPermissions();\n }\n\n /**\n * Check if user has permission for specific operation\n */\n async checkPermission(context: PermissionContext): Promise<boolean> {\n try {\n // Super admin always has access\n if (this.adminUsers.has(context.userId)) {\n return true;\n }\n\n // Get stack permissions for user\n const stackPermissions = this.getStackPermissions(\n context.userId,\n context.stackContext?.stackId || context.resourceId\n );\n\n if (!stackPermissions) {\n logger.warn('No permissions found for user', {\n userId: context.userId,\n stackId: context.stackContext?.stackId,\n operation: context.operation,\n });\n return false;\n }\n\n // Check operation-specific permissions\n switch (context.operation) {\n case 'read':\n return stackPermissions.canRead;\n\n case 'write':\n return stackPermissions.canWrite;\n\n case 'handoff':\n return stackPermissions.canHandoff;\n\n case 'merge':\n return stackPermissions.canMerge;\n\n case 'administer':\n return stackPermissions.canAdminister;\n\n default:\n logger.error('Unknown operation type', {\n operation: context.operation,\n });\n return false;\n }\n } catch (error: unknown) {\n logger.error('Permission check failed', error);\n return false;\n }\n }\n\n /**\n * Enforce permission check - throws if access denied\n */\n async enforcePermission(context: PermissionContext): Promise<void> {\n const hasPermission = await this.checkPermission(context);\n\n if (!hasPermission) {\n throw new ValidationError(\n `Access denied: User ${context.userId} lacks ${context.operation} permission for ${context.resourceType} ${context.resourceId}`,\n ErrorCode.PERMISSION_VIOLATION,\n {\n userId: context.userId,\n operation: context.operation,\n resourceType: context.resourceType,\n resourceId: context.resourceId,\n }\n );\n }\n\n logger.debug('Permission granted', {\n userId: context.userId,\n operation: context.operation,\n resourceType: context.resourceType,\n resourceId: context.resourceId,\n });\n }\n\n /**\n * Set permissions for user on specific stack\n */\n setStackPermissions(\n userId: string,\n stackId: string,\n permissions: StackPermissions\n ): void {\n if (!this.userPermissions.has(userId)) {\n this.userPermissions.set(userId, new Map());\n }\n\n this.userPermissions.get(userId)!.set(stackId, permissions);\n\n logger.info('Updated stack permissions', {\n userId,\n stackId,\n permissions,\n });\n }\n\n /**\n * Get permissions for user on specific stack\n */\n getStackPermissions(\n userId: string,\n stackId: string\n ): StackPermissions | null {\n const userPerms = this.userPermissions.get(userId);\n if (!userPerms) return null;\n\n return userPerms.get(stackId) || null;\n }\n\n /**\n * Grant admin privileges to user\n */\n grantAdminAccess(userId: string): void {\n this.adminUsers.add(userId);\n logger.info('Granted admin access', { userId });\n }\n\n /**\n * Revoke admin privileges from user\n */\n revokeAdminAccess(userId: string): void {\n this.adminUsers.delete(userId);\n logger.info('Revoked admin access', { userId });\n }\n\n /**\n * Check if user is admin\n */\n isAdmin(userId: string): boolean {\n return this.adminUsers.has(userId);\n }\n\n /**\n * Get all permissions for user\n */\n getUserPermissions(userId: string): Map<string, StackPermissions> {\n return this.userPermissions.get(userId) || new Map();\n }\n\n /**\n * Remove all permissions for user\n */\n removeUserPermissions(userId: string): void {\n this.userPermissions.delete(userId);\n this.adminUsers.delete(userId);\n logger.info('Removed all permissions for user', { userId });\n }\n\n /**\n * Initialize default permissions\n */\n private initializeDefaultPermissions(): void {\n // Set up default admin user if needed\n const defaultAdmin = process.env['STACKMEMORY_DEFAULT_ADMIN'];\n if (defaultAdmin) {\n this.grantAdminAccess(defaultAdmin);\n }\n }\n\n /**\n * Create permission context helper\n */\n createContext(\n userId: string,\n operation: Operation,\n resourceType: PermissionContext['resourceType'],\n resourceId: string,\n stackContext?: StackContext\n ): PermissionContext {\n return {\n userId,\n operation,\n resourceType,\n resourceId,\n stackContext,\n };\n }\n\n /**\n * Bulk permission update for multiple stacks\n */\n setBulkStackPermissions(\n userId: string,\n stackPermissions: Record<string, StackPermissions>\n ): void {\n if (!this.userPermissions.has(userId)) {\n this.userPermissions.set(userId, new Map());\n }\n\n const userPerms = this.userPermissions.get(userId)!;\n\n Object.entries(stackPermissions).forEach(([stackId, permissions]) => {\n userPerms.set(stackId, permissions);\n });\n\n logger.info('Updated bulk stack permissions', {\n userId,\n stackCount: Object.keys(stackPermissions).length,\n });\n }\n\n /**\n * Get permission summary for debugging\n */\n getPermissionSummary(userId: string): {\n isAdmin: boolean;\n stackPermissions: Record<string, StackPermissions>;\n } {\n return {\n isAdmin: this.isAdmin(userId),\n stackPermissions: Object.fromEntries(this.getUserPermissions(userId)),\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/recursive-context-manager.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Recursive Context Manager for RLM\n *\n * Handles context chunking, decomposition, and distribution\n * for recursive agent execution\n */\n\nimport { DualStackManager } from './dual-stack-manager.js';\nimport { ContextRetriever } from '../retrieval/context-retriever.js';\nimport { logger } from '../monitoring/logger.js';\nimport { ValidationError, ErrorCode } from '../errors/index.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { SubagentType } from '../../skills/recursive-agent-orchestrator.js';\n\nexport interface ContextChunk {\n id: string;\n type: 'code' | 'frame' | 'documentation' | 'test' | 'config';\n content: string;\n metadata: {\n filePath?: string;\n frameId?: string;\n language?: string;\n size: number;\n score: number;\n timestamp?: Date;\n };\n boundaries: {\n start?: number;\n end?: number;\n overlap?: number;\n };\n}\n\nexport interface ChunkingStrategy {\n type: 'file' | 'semantic' | 'size' | 'time';\n maxChunkSize: number;\n overlapSize: number;\n priorityThreshold: number;\n}\n\nexport interface AgentContextConfig {\n agent: SubagentType;\n _maxTokens: number;\n priorityWeights: {\n recent: number;\n relevant: number;\n dependency: number;\n error: number;\n test: number;\n };\n includeTypes: string[];\n excludeTypes: string[];\n}\n\n/**\n * Manages context for recursive agent execution\n */\nexport class RecursiveContextManager {\n private dualStackManager: DualStackManager;\n private contextRetriever: ContextRetriever;\n\n // Context cache for sharing between agents\n private sharedContextCache: Map<string, ContextChunk[]> = new Map();\n\n // Agent-specific configurations\n private agentConfigs: Map<SubagentType, AgentContextConfig>;\n\n constructor(\n dualStackManager: DualStackManager,\n contextRetriever: ContextRetriever\n ) {\n this.dualStackManager = dualStackManager;\n this.contextRetriever = contextRetriever;\n this.agentConfigs = this.initializeAgentConfigs();\n }\n\n /**\n * Initialize agent-specific context configurations\n */\n private initializeAgentConfigs(): Map<SubagentType, AgentContextConfig> {\n const configs = new Map<SubagentType, AgentContextConfig>();\n\n // Planning agent needs broad context\n configs.set('planning', {\n agent: 'planning',\n maxTokens: 20000,\n priorityWeights: {\n recent: 0.3,\n relevant: 0.4,\n dependency: 0.2,\n error: 0.05,\n test: 0.05,\n },\n includeTypes: ['frame', 'documentation', 'config'],\n excludeTypes: [],\n });\n\n // Code agent needs implementation context\n configs.set('code', {\n agent: 'code',\n maxTokens: 30000,\n priorityWeights: {\n recent: 0.2,\n relevant: 0.5,\n dependency: 0.2,\n error: 0.05,\n test: 0.05,\n },\n includeTypes: ['code', 'frame', 'test'],\n excludeTypes: ['documentation'],\n });\n\n // Testing agent needs code and existing tests\n configs.set('testing', {\n agent: 'testing',\n maxTokens: 25000,\n priorityWeights: {\n recent: 0.1,\n relevant: 0.3,\n dependency: 0.1,\n error: 0.1,\n test: 0.4,\n },\n includeTypes: ['code', 'test', 'frame'],\n excludeTypes: ['documentation', 'config'],\n });\n\n // Linting agent needs code and config\n configs.set('linting', {\n agent: 'linting',\n maxTokens: 15000,\n priorityWeights: {\n recent: 0.2,\n relevant: 0.4,\n dependency: 0.1,\n error: 0.2,\n test: 0.1,\n },\n includeTypes: ['code', 'config'],\n excludeTypes: ['documentation', 'test'],\n });\n\n // Review agent needs comprehensive context\n configs.set('review', {\n agent: 'review',\n maxTokens: 25000,\n priorityWeights: {\n recent: 0.3,\n relevant: 0.3,\n dependency: 0.1,\n error: 0.2,\n test: 0.1,\n },\n includeTypes: ['code', 'test', 'frame', 'documentation'],\n excludeTypes: [],\n });\n\n // Context agent for searching\n configs.set('context', {\n agent: 'context',\n maxTokens: 10000,\n priorityWeights: {\n recent: 0.1,\n relevant: 0.6,\n dependency: 0.2,\n error: 0.05,\n test: 0.05,\n },\n includeTypes: ['frame', 'documentation'],\n excludeTypes: [],\n });\n\n // Improvement agent needs review context\n configs.set('improve', {\n agent: 'improve',\n maxTokens: 30000,\n priorityWeights: {\n recent: 0.3,\n relevant: 0.4,\n dependency: 0.1,\n error: 0.15,\n test: 0.05,\n },\n includeTypes: ['code', 'test', 'frame'],\n excludeTypes: ['documentation'],\n });\n\n // Publish agent needs build/config context\n configs.set('publish', {\n agent: 'publish',\n maxTokens: 15000,\n priorityWeights: {\n recent: 0.4,\n relevant: 0.2,\n dependency: 0.1,\n error: 0.2,\n test: 0.1,\n },\n includeTypes: ['config', 'frame'],\n excludeTypes: ['code', 'test'],\n });\n\n return configs;\n }\n\n /**\n * Prepare context for a specific agent type\n */\n async prepareAgentContext(\n agentType: SubagentType,\n baseContext: Record<string, any>,\n _maxTokens: number\n ): Promise<Record<string, any>> {\n const config = this.agentConfigs.get(agentType);\n if (!config) {\n throw new ValidationError(\n `Unknown agent type: ${agentType}`,\n ErrorCode.VALIDATION_FAILED,\n { agentType }\n );\n }\n\n logger.debug(`Preparing context for ${agentType} agent`, { maxTokens });\n\n // Collect relevant chunks\n const chunks = await this.collectRelevantChunks(\n baseContext,\n config,\n maxTokens\n );\n\n // Sort by priority\n const sortedChunks = this.prioritizeChunks(chunks, config.priorityWeights);\n\n // Fit within token budget\n const selectedChunks = this.fitChunksToTokenBudget(sortedChunks, maxTokens);\n\n // Build agent context\n const agentContext: Record<string, any> = {\n ...baseContext,\n chunks: selectedChunks.map((c) => ({\n type: c.type,\n content: c.content,\n metadata: c.metadata,\n })),\n };\n\n // Cache for potential reuse\n this.sharedContextCache.set(`${agentType}-${Date.now()}`, selectedChunks);\n\n logger.debug(`Prepared context for ${agentType}`, {\n chunksSelected: selectedChunks.length,\n totalSize: selectedChunks.reduce((sum, c) => sum + c.metadata.size, 0),\n });\n\n return agentContext;\n }\n\n /**\n * Chunk large codebase for processing\n */\n async chunkCodebase(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n logger.info('Chunking codebase', { rootPath, strategy: strategy.type });\n\n switch (strategy.type) {\n case 'file':\n chunks.push(...(await this.chunkByFile(rootPath, strategy)));\n break;\n\n case 'semantic':\n chunks.push(...(await this.chunkBySemantic(rootPath, strategy)));\n break;\n\n case 'size':\n chunks.push(...(await this.chunkBySize(rootPath, strategy)));\n break;\n\n default:\n throw new ValidationError(\n `Unknown chunking strategy: ${strategy.type}`,\n ErrorCode.VALIDATION_FAILED,\n { strategyType: strategy.type }\n );\n }\n\n logger.info('Codebase chunked', {\n totalChunks: chunks.length,\n totalSize: chunks.reduce((sum, c) => sum + c.metadata.size, 0),\n });\n\n return chunks;\n }\n\n /**\n * Chunk by file boundaries\n */\n private async chunkByFile(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n const files = await this.walkDirectory(rootPath);\n\n for (const file of files) {\n const content = await fs.promises.readFile(file, 'utf-8');\n\n // Skip files larger than max chunk size\n if (content.length > strategy.maxChunkSize) {\n // Split large files\n const fileChunks = this.splitLargeFile(file, content, strategy);\n chunks.push(...fileChunks);\n } else {\n chunks.push({\n id: `file-${path.basename(file)}`,\n type: 'code',\n content,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: content.length,\n score: 0.5,\n },\n boundaries: {\n start: 0,\n end: content.length,\n },\n });\n }\n }\n\n return chunks;\n }\n\n /**\n * Chunk by semantic boundaries (classes, functions)\n */\n private async chunkBySemantic(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n const files = await this.walkDirectory(rootPath);\n\n for (const file of files) {\n const content = await fs.promises.readFile(file, 'utf-8');\n const language = this.detectLanguage(file);\n\n // Extract semantic units based on language\n const semanticUnits = this.extractSemanticUnits(content, language);\n\n for (const unit of semanticUnits) {\n if (unit.content.length <= strategy.maxChunkSize) {\n chunks.push({\n id: `semantic-${file}-${unit.name}`,\n type: 'code',\n content: unit.content,\n metadata: {\n filePath: file,\n language,\n size: unit.content.length,\n score: unit.importance,\n },\n boundaries: {\n start: unit.start,\n end: unit.end,\n },\n });\n }\n }\n }\n\n return chunks;\n }\n\n /**\n * Chunk by fixed size with overlap\n */\n private async chunkBySize(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n const files = await this.walkDirectory(rootPath);\n\n for (const file of files) {\n const content = await fs.promises.readFile(file, 'utf-8');\n const lines = content.split('\\n');\n\n let currentChunk = '';\n let startLine = 0;\n\n for (let i = 0; i < lines.length; i++) {\n currentChunk += lines[i] + '\\n';\n\n if (currentChunk.length >= strategy.maxChunkSize) {\n chunks.push({\n id: `size-${file}-${startLine}`,\n type: 'code',\n content: currentChunk,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: currentChunk.length,\n score: 0.5,\n },\n boundaries: {\n start: startLine,\n end: i,\n overlap: strategy.overlapSize,\n },\n });\n\n // Move window with overlap\n const overlapLines = Math.floor(strategy.overlapSize / 50); // Estimate lines\n startLine = Math.max(0, i - overlapLines);\n currentChunk = lines.slice(startLine, i + 1).join('\\n');\n }\n }\n\n // Add remaining chunk\n if (currentChunk.trim()) {\n chunks.push({\n id: `size-${file}-${startLine}`,\n type: 'code',\n content: currentChunk,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: currentChunk.length,\n score: 0.5,\n },\n boundaries: {\n start: startLine,\n end: lines.length - 1,\n },\n });\n }\n }\n\n return chunks;\n }\n\n /**\n * Collect relevant chunks for agent context\n */\n private async collectRelevantChunks(\n baseContext: Record<string, any>,\n config: AgentContextConfig,\n _maxTokens: number\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n // Get recent frames\n if (config.includeTypes.includes('frame')) {\n const recentFrames = await this.getRecentFrameChunks(10);\n chunks.push(...recentFrames);\n }\n\n // Get relevant code files\n if (config.includeTypes.includes('code') && baseContext.files) {\n const codeChunks = await this.getCodeChunks(baseContext.files);\n chunks.push(...codeChunks);\n }\n\n // Get test files\n if (config.includeTypes.includes('test') && baseContext.testFiles) {\n const testChunks = await this.getTestChunks(baseContext.testFiles);\n chunks.push(...testChunks);\n }\n\n // Search for relevant context\n if (baseContext.query) {\n const searchResults = await this.contextRetriever.retrieve({\n query: baseContext.query,\n limit: 20,\n });\n\n for (const result of searchResults) {\n chunks.push({\n id: `search-${result.frameId}`,\n type: 'frame',\n content: result.content,\n metadata: {\n frameId: result.frameId,\n size: result.content.length,\n score: result.score,\n timestamp: new Date(result.timestamp),\n },\n boundaries: {},\n });\n }\n }\n\n // Check shared cache for relevant chunks\n const cachedChunks = this.getRelevantCachedChunks(config.agent);\n chunks.push(...cachedChunks);\n\n return chunks;\n }\n\n /**\n * Prioritize chunks based on agent weights\n */\n private prioritizeChunks(\n chunks: ContextChunk[],\n weights: AgentContextConfig['priorityWeights']\n ): ContextChunk[] {\n return chunks\n .map((chunk) => {\n let priority = 0;\n\n // Recent weight\n if (chunk.metadata.timestamp) {\n const age = Date.now() - chunk.metadata.timestamp.getTime();\n const recentScore = Math.max(0, 1 - age / (24 * 60 * 60 * 1000)); // Decay over 24h\n priority += recentScore * weights.recent;\n }\n\n // Relevance weight\n priority += (chunk.metadata.score || 0.5) * weights.relevant;\n\n // Type-specific weights\n if (chunk.type === 'test') {\n priority += weights.test;\n }\n if (chunk.metadata.filePath?.includes('error')) {\n priority += weights.error;\n }\n\n return { ...chunk, priority };\n })\n .sort((a, b) => (b as any).priority - (a as any).priority);\n }\n\n /**\n * Fit chunks within token budget\n */\n private fitChunksToTokenBudget(\n chunks: ContextChunk[],\n _maxTokens: number\n ): ContextChunk[] {\n const selected: ContextChunk[] = [];\n let totalTokens = 0;\n\n // Rough token estimation (1 token \u2248 4 chars)\n const estimateTokens = (text: string) => Math.ceil(text.length / 4);\n\n for (const chunk of chunks) {\n const chunkTokens = estimateTokens(chunk.content);\n\n if (totalTokens + chunkTokens <= maxTokens) {\n selected.push(chunk);\n totalTokens += chunkTokens;\n } else if (selected.length === 0) {\n // Always include at least one chunk, truncated if necessary\n const truncatedContent = chunk.content.slice(0, maxTokens * 4);\n selected.push({\n ...chunk,\n content: truncatedContent,\n metadata: {\n ...chunk.metadata,\n size: truncatedContent.length,\n },\n });\n break;\n } else {\n break;\n }\n }\n\n return selected;\n }\n\n /**\n * Helper methods\n */\n\n private async walkDirectory(dir: string): Promise<string[]> {\n const files: string[] = [];\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Skip node_modules, .git, etc\n if (!['node_modules', '.git', 'dist', 'build'].includes(entry.name)) {\n files.push(...(await this.walkDirectory(fullPath)));\n }\n } else if (entry.isFile()) {\n // Include code files\n if (/\\.(ts|tsx|js|jsx|py|java|go|rs|cpp|c|h)$/.test(entry.name)) {\n files.push(fullPath);\n }\n }\n }\n\n return files;\n }\n\n private detectLanguage(filePath: string): string {\n const ext = path.extname(filePath);\n const langMap: Record<string, string> = {\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.js': 'javascript',\n '.jsx': 'javascript',\n '.py': 'python',\n '.java': 'java',\n '.go': 'go',\n '.rs': 'rust',\n '.cpp': 'cpp',\n '.c': 'c',\n '.h': 'c',\n };\n return langMap[ext] || 'unknown';\n }\n\n private splitLargeFile(\n filePath: string,\n content: string,\n strategy: ChunkingStrategy\n ): ContextChunk[] {\n const chunks: ContextChunk[] = [];\n const lines = content.split('\\n');\n const linesPerChunk = Math.ceil(strategy.maxChunkSize / 50); // Estimate\n\n for (let i = 0; i < lines.length; i += linesPerChunk) {\n const chunkLines = lines.slice(i, i + linesPerChunk);\n const chunkContent = chunkLines.join('\\n');\n\n chunks.push({\n id: `file-${path.basename(filePath)}-part-${i}`,\n type: 'code',\n content: chunkContent,\n metadata: {\n filePath,\n language: this.detectLanguage(filePath),\n size: chunkContent.length,\n score: 0.5,\n },\n boundaries: {\n start: i,\n end: Math.min(i + linesPerChunk, lines.length),\n overlap: strategy.overlapSize,\n },\n });\n }\n\n return chunks;\n }\n\n private extractSemanticUnits(\n content: string,\n language: string\n ): Array<{\n name: string;\n content: string;\n start: number;\n end: number;\n importance: number;\n }> {\n const units: Array<{\n name: string;\n content: string;\n start: number;\n end: number;\n importance: number;\n }> = [];\n\n // Simple regex-based extraction (would need proper AST parsing for production)\n if (language === 'typescript' || language === 'javascript') {\n // Extract classes\n const classRegex = /class\\s+(\\w+)[^{]*\\{[^}]+\\}/g;\n let match;\n while ((match = classRegex.exec(content)) !== null) {\n units.push({\n name: match[1],\n content: match[0],\n start: match.index,\n end: match.index + match[0].length,\n importance: 0.8,\n });\n }\n\n // Extract functions\n const funcRegex =\n /(?:function|const|let)\\s+(\\w+)\\s*=?\\s*(?:\\([^)]*\\)|\\w+)\\s*(?:=>|{)[^}]+}/g;\n while ((match = funcRegex.exec(content)) !== null) {\n units.push({\n name: match[1],\n content: match[0],\n start: match.index,\n end: match.index + match[0].length,\n importance: 0.6,\n });\n }\n }\n\n return units;\n }\n\n private async getRecentFrameChunks(limit: number): Promise<ContextChunk[]> {\n const activeStack = this.dualStackManager.getActiveStack();\n const frames = await activeStack.getAllFrames();\n\n return frames.slice(-limit).map((frame) => ({\n id: `frame-${frame.frameId}`,\n type: 'frame',\n content: JSON.stringify(frame, null, 2),\n metadata: {\n frameId: frame.frameId,\n size: JSON.stringify(frame).length,\n score: 0.7,\n timestamp: new Date(frame.timestamp),\n },\n boundaries: {},\n }));\n }\n\n private async getCodeChunks(files: string[]): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n for (const file of files) {\n if (fs.existsSync(file)) {\n const content = await fs.promises.readFile(file, 'utf-8');\n chunks.push({\n id: `code-${path.basename(file)}`,\n type: 'code',\n content,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: content.length,\n score: 0.8,\n },\n boundaries: {},\n });\n }\n }\n\n return chunks;\n }\n\n private async getTestChunks(testFiles: string[]): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n for (const file of testFiles) {\n if (fs.existsSync(file)) {\n const content = await fs.promises.readFile(file, 'utf-8');\n chunks.push({\n id: `test-${path.basename(file)}`,\n type: 'test',\n content,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: content.length,\n score: 0.7,\n },\n boundaries: {},\n });\n }\n }\n\n return chunks;\n }\n\n private getRelevantCachedChunks(agentType: SubagentType): ContextChunk[] {\n const relevantChunks: ContextChunk[] = [];\n\n // Get chunks from cache that might be relevant\n for (const [key, chunks] of this.sharedContextCache.entries()) {\n // Skip very old cache entries\n const timestamp = parseInt(key.split('-').pop() || '0');\n if (Date.now() - timestamp > 5 * 60 * 1000) {\n // 5 minutes\n continue;\n }\n\n // Add relevant chunks based on agent type\n if (agentType === 'review' || agentType === 'improve') {\n relevantChunks.push(...chunks.filter((c) => c.type === 'code'));\n }\n }\n\n return relevantChunks;\n }\n\n /**\n * Clear context cache\n */\n clearCache(): void {\n this.sharedContextCache.clear();\n logger.debug('Context cache cleared');\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats() {\n const stats = {\n cacheSize: this.sharedContextCache.size,\n totalChunks: 0,\n totalBytes: 0,\n };\n\n for (const chunks of this.sharedContextCache.values()) {\n stats.totalChunks += chunks.length;\n stats.totalBytes += chunks.reduce((sum, c) => sum + c.metadata.size, 0);\n }\n\n return stats;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/refactored-frame-manager.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Refactored Frame Manager - Modular Implementation\n * Main orchestrator that uses focused modules for frame management\n */\n\nimport Database from 'better-sqlite3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { logger } from '../monitoring/logger.js';\nimport { trace } from '../trace/index.js';\nimport {\n FrameError,\n SystemError,\n ErrorCode,\n wrapError,\n createErrorHandler,\n} from '../errors/index.js';\nimport { retry, withTimeout } from '../errors/recovery.js';\nimport { sessionManager, FrameQueryMode } from '../session/index.js';\nimport { frameLifecycleHooks } from './frame-lifecycle-hooks.js';\n\n// Constants for frame validation\nconst MAX_FRAME_DEPTH = 100; // Maximum allowed frame depth\nconst DEFAULT_MAX_DEPTH = 100; // Default if not configured\n\n// Import refactored modules\nimport {\n Frame,\n FrameContext,\n Anchor,\n Event,\n FrameType,\n FrameState,\n FrameCreationOptions,\n FrameManagerConfig,\n DigestResult,\n} from './frame-types.js';\nimport { FrameDatabase } from './frame-database.js';\nimport { FrameStack } from './frame-stack.js';\nimport { FrameDigestGenerator } from './frame-digest.js';\nimport { FrameRecovery, type RecoveryReport } from './frame-recovery.js';\n\nexport class RefactoredFrameManager {\n private frameDb: FrameDatabase;\n private frameStack: FrameStack;\n private digestGenerator: FrameDigestGenerator;\n private frameRecovery: FrameRecovery;\n private db: Database.Database;\n\n private currentRunId: string;\n private sessionId: string;\n private projectId: string;\n private queryMode: FrameQueryMode = FrameQueryMode.PROJECT_ACTIVE;\n private config: FrameManagerConfig;\n private maxFrameDepth: number = DEFAULT_MAX_DEPTH;\n private lastRecoveryReport: RecoveryReport | null = null;\n\n constructor(\n db: Database.Database,\n projectId: string,\n config?: Partial<FrameManagerConfig>\n ) {\n this.projectId = projectId;\n this.db = db;\n this.config = {\n projectId,\n runId: config?.runId || uuidv4(),\n sessionId: config?.sessionId || uuidv4(),\n maxStackDepth: config?.maxStackDepth || 50,\n };\n\n // Set max frame depth from config if provided\n this.maxFrameDepth = config?.maxStackDepth || DEFAULT_MAX_DEPTH;\n\n this.currentRunId = this.config.runId!;\n this.sessionId = this.config.sessionId!;\n\n // Initialize modules\n this.frameDb = new FrameDatabase(db);\n this.frameStack = new FrameStack(\n this.frameDb,\n projectId,\n this.currentRunId\n );\n this.digestGenerator = new FrameDigestGenerator(this.frameDb);\n this.frameRecovery = new FrameRecovery(db);\n this.frameRecovery.setCurrentRunId(this.currentRunId);\n\n // Initialize database schema\n this.frameDb.initSchema();\n\n logger.info('RefactoredFrameManager initialized', {\n projectId: this.projectId,\n runId: this.currentRunId,\n sessionId: this.sessionId,\n });\n }\n\n /**\n * Initialize the frame manager\n */\n async initialize(): Promise<void> {\n try {\n // Run crash recovery first\n this.lastRecoveryReport = await this.frameRecovery.recoverOnStartup();\n\n if (!this.lastRecoveryReport.recovered) {\n logger.warn('Recovery completed with issues', {\n errors: this.lastRecoveryReport.errors,\n orphansFound: this.lastRecoveryReport.orphanedFrames.detected,\n integrityPassed: this.lastRecoveryReport.integrityCheck.passed,\n });\n }\n\n await this.frameStack.initialize();\n\n logger.info('Frame manager initialization completed', {\n stackDepth: this.frameStack.getDepth(),\n recoveryRan: true,\n orphansClosed: this.lastRecoveryReport.orphanedFrames.closed,\n });\n } catch (error: unknown) {\n throw new SystemError(\n 'Failed to initialize frame manager',\n ErrorCode.SYSTEM_INIT_FAILED,\n { projectId: this.projectId },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n /**\n * Create a new frame\n */\n createFrame(options: FrameCreationOptions): string;\n createFrame(\n type: FrameType,\n name: string,\n inputs?: Record<string, any>,\n parentFrameId?: string\n ): string;\n createFrame(\n typeOrOptions: FrameType | FrameCreationOptions,\n name?: string,\n inputs?: Record<string, any>,\n parentFrameId?: string\n ): string {\n return trace.traceSync(\n 'function',\n 'FrameManager.createFrame',\n { typeOrOptions, name },\n () => this._createFrame(typeOrOptions, name, inputs, parentFrameId)\n );\n }\n\n private _createFrame(\n typeOrOptions: FrameType | FrameCreationOptions,\n name?: string,\n inputs?: Record<string, any>,\n parentFrameId?: string\n ): string {\n let frameOptions: FrameCreationOptions;\n\n // Handle both function signatures\n if (typeof typeOrOptions === 'string') {\n frameOptions = {\n type: typeOrOptions,\n name: name!,\n inputs: inputs || {},\n parentFrameId,\n };\n } else {\n frameOptions = typeOrOptions;\n }\n\n // Validate inputs\n if (!frameOptions.name || frameOptions.name.trim().length === 0) {\n throw new FrameError(\n 'Frame name is required',\n ErrorCode.FRAME_INVALID_INPUT,\n { frameOptions }\n );\n }\n\n // Check stack depth limit\n if (this.frameStack.getDepth() >= this.config.maxStackDepth!) {\n throw new FrameError(\n `Maximum stack depth reached: ${this.config.maxStackDepth}`,\n ErrorCode.FRAME_STACK_OVERFLOW,\n { currentDepth: this.frameStack.getDepth() }\n );\n }\n\n // Determine parent frame\n const resolvedParentId =\n frameOptions.parentFrameId || this.frameStack.getCurrentFrameId();\n\n // Get depth from parent frame, not from stack position\n let depth = 0;\n if (resolvedParentId) {\n const parentFrame = this.frameDb.getFrame(resolvedParentId);\n depth = parentFrame ? parentFrame.depth + 1 : 0;\n }\n\n // Check for depth limit\n if (depth > this.maxFrameDepth) {\n throw new FrameError(\n `Maximum frame depth exceeded: ${depth} > ${this.maxFrameDepth}`,\n ErrorCode.FRAME_STACK_OVERFLOW,\n {\n currentDepth: depth,\n maxDepth: this.maxFrameDepth,\n frameName: frameOptions.name,\n parentFrameId: resolvedParentId,\n }\n );\n }\n\n // Check for circular reference before creating frame\n if (resolvedParentId) {\n const cycle = this.detectCycle(uuidv4(), resolvedParentId);\n if (cycle) {\n throw new FrameError(\n `Circular reference detected in frame hierarchy`,\n ErrorCode.FRAME_CYCLE_DETECTED,\n {\n parentFrameId: resolvedParentId,\n cycle,\n frameName: frameOptions.name,\n }\n );\n }\n }\n\n // Create frame data\n const frameId = uuidv4();\n const frame: Omit<Frame, 'created_at' | 'closed_at'> = {\n frame_id: frameId,\n run_id: this.currentRunId,\n project_id: this.projectId,\n parent_frame_id: resolvedParentId,\n depth,\n type: frameOptions.type,\n name: frameOptions.name,\n state: 'active',\n inputs: frameOptions.inputs || {},\n outputs: {},\n digest_json: {},\n };\n\n // Insert into database\n const createdFrame = this.frameDb.insertFrame(frame);\n\n // Add to stack\n this.frameStack.pushFrame(frameId);\n\n logger.info('Created frame', {\n frameId,\n name: frameOptions.name,\n type: frameOptions.type,\n parentFrameId: resolvedParentId,\n stackDepth: this.frameStack.getDepth(),\n });\n\n return frameId;\n }\n\n /**\n * Close a frame and generate digest\n */\n closeFrame(frameId?: string, outputs?: Record<string, any>): void {\n trace.traceSync(\n 'function',\n 'FrameManager.closeFrame',\n { frameId, outputs },\n () => this._closeFrame(frameId, outputs)\n );\n }\n\n private _closeFrame(frameId?: string, outputs?: Record<string, any>): void {\n const targetFrameId = frameId || this.frameStack.getCurrentFrameId();\n if (!targetFrameId) {\n throw new FrameError(\n 'No active frame to close',\n ErrorCode.FRAME_INVALID_STATE,\n {\n operation: 'closeFrame',\n stackDepth: this.frameStack.getDepth(),\n }\n );\n }\n\n // Get frame details\n const frame = this.frameDb.getFrame(targetFrameId);\n if (!frame) {\n throw new FrameError(\n `Frame not found: ${targetFrameId}`,\n ErrorCode.FRAME_NOT_FOUND,\n {\n frameId: targetFrameId,\n operation: 'closeFrame',\n runId: this.currentRunId,\n }\n );\n }\n\n if (frame.state === 'closed') {\n logger.warn('Attempted to close already closed frame', {\n frameId: targetFrameId,\n });\n return;\n }\n\n // Generate digest before closing\n const digest = this.digestGenerator.generateDigest(targetFrameId);\n const finalOutputs = { ...outputs, ...digest.structured };\n\n // Update frame to closed state\n this.frameDb.updateFrame(targetFrameId, {\n state: 'closed',\n outputs: finalOutputs,\n digest_text: digest.text,\n digest_json: digest.structured,\n closed_at: Math.floor(Date.now() / 1000),\n });\n\n // Remove from stack (this will also remove any child frames)\n this.frameStack.popFrame(targetFrameId);\n\n // Close all child frames recursively\n this.closeChildFrames(targetFrameId);\n\n // Trigger lifecycle hooks (fire and forget)\n const events = this.frameDb.getFrameEvents(targetFrameId);\n const anchors = this.frameDb.getFrameAnchors(targetFrameId);\n frameLifecycleHooks\n .triggerClose({ frame: { ...frame, state: 'closed' }, events, anchors })\n .catch(() => {\n // Silently ignore errors - hooks are non-critical\n });\n\n logger.info('Closed frame', {\n frameId: targetFrameId,\n name: frame.name,\n duration: Math.floor(Date.now() / 1000) - frame.created_at,\n digestLength: digest.text.length,\n stackDepth: this.frameStack.getDepth(),\n });\n }\n\n /**\n * Add an event to the current frame\n */\n addEvent(\n eventType: Event['event_type'],\n payload: Record<string, any>,\n frameId?: string\n ): string {\n return trace.traceSync(\n 'function',\n 'FrameManager.addEvent',\n { eventType, frameId },\n () => this._addEvent(eventType, payload, frameId)\n );\n }\n\n private _addEvent(\n eventType: Event['event_type'],\n payload: Record<string, any>,\n frameId?: string\n ): string {\n const targetFrameId = frameId || this.frameStack.getCurrentFrameId();\n if (!targetFrameId) {\n throw new FrameError(\n 'No active frame for event',\n ErrorCode.FRAME_INVALID_STATE,\n {\n eventType,\n operation: 'addEvent',\n }\n );\n }\n\n const eventId = uuidv4();\n const sequence = this.frameDb.getNextEventSequence(targetFrameId);\n\n const event: Omit<Event, 'ts'> = {\n event_id: eventId,\n frame_id: targetFrameId,\n run_id: this.currentRunId,\n seq: sequence,\n event_type: eventType,\n payload,\n };\n\n const createdEvent = this.frameDb.insertEvent(event);\n\n logger.debug('Added event', {\n eventId,\n frameId: targetFrameId,\n eventType,\n sequence,\n });\n\n return eventId;\n }\n\n /**\n * Add an anchor (important fact) to current frame\n */\n addAnchor(\n type: Anchor['type'],\n text: string,\n priority: number = 5,\n metadata: Record<string, any> = {},\n frameId?: string\n ): string {\n return trace.traceSync(\n 'function',\n 'FrameManager.addAnchor',\n { type, frameId },\n () => this._addAnchor(type, text, priority, metadata, frameId)\n );\n }\n\n private _addAnchor(\n type: Anchor['type'],\n text: string,\n priority: number,\n metadata: Record<string, any>,\n frameId?: string\n ): string {\n const targetFrameId = frameId || this.frameStack.getCurrentFrameId();\n if (!targetFrameId) {\n throw new FrameError(\n 'No active frame for anchor',\n ErrorCode.FRAME_INVALID_STATE,\n {\n anchorType: type,\n operation: 'addAnchor',\n }\n );\n }\n\n const anchorId = uuidv4();\n const anchor: Omit<Anchor, 'created_at'> = {\n anchor_id: anchorId,\n frame_id: targetFrameId,\n type,\n text,\n priority,\n metadata,\n };\n\n const createdAnchor = this.frameDb.insertAnchor(anchor);\n\n logger.debug('Added anchor', {\n anchorId,\n frameId: targetFrameId,\n type,\n priority,\n });\n\n return anchorId;\n }\n\n /**\n * Get hot stack context\n */\n getHotStackContext(maxEvents: number = 20): FrameContext[] {\n return this.frameStack.getHotStackContext(maxEvents);\n }\n\n /**\n * Get active frame path (root to current)\n */\n getActiveFramePath(): Frame[] {\n return this.frameStack.getStackFrames();\n }\n\n /**\n * Get current frame ID\n */\n getCurrentFrameId(): string | undefined {\n return this.frameStack.getCurrentFrameId();\n }\n\n /**\n * Get stack depth\n */\n getStackDepth(): number {\n return this.frameStack.getDepth();\n }\n\n /**\n * Get frame by ID\n */\n getFrame(frameId: string): Frame | undefined {\n return this.frameDb.getFrame(frameId);\n }\n\n /**\n * Get frame events\n */\n getFrameEvents(frameId: string, limit?: number): Event[] {\n return this.frameDb.getFrameEvents(frameId, limit);\n }\n\n /**\n * Get frame anchors\n */\n getFrameAnchors(frameId: string): Anchor[] {\n return this.frameDb.getFrameAnchors(frameId);\n }\n\n /**\n * Generate digest for a frame\n */\n generateDigest(frameId: string): DigestResult {\n return this.digestGenerator.generateDigest(frameId);\n }\n\n /**\n * Validate stack consistency\n */\n validateStack(): { isValid: boolean; errors: string[] } {\n return this.frameStack.validateStack();\n }\n\n /**\n * Get database statistics\n */\n getStatistics(): Record<string, number> {\n return this.frameDb.getStatistics();\n }\n\n /**\n * Get the last recovery report from initialization\n */\n getRecoveryReport(): RecoveryReport | null {\n return this.lastRecoveryReport;\n }\n\n /**\n * Manually trigger recovery (e.g., after detecting issues)\n */\n async runRecovery(): Promise<RecoveryReport> {\n this.lastRecoveryReport = await this.frameRecovery.recoverOnStartup();\n return this.lastRecoveryReport;\n }\n\n /**\n * Validate project data integrity\n */\n validateProjectIntegrity(): { valid: boolean; issues: string[] } {\n return this.frameRecovery.validateProjectIntegrity(this.projectId);\n }\n\n /**\n * Close all child frames recursively with depth limit to prevent stack overflow\n */\n private closeChildFrames(parentFrameId: string, depth: number = 0): void {\n // Prevent stack overflow with depth limit\n if (depth > this.maxFrameDepth) {\n logger.warn('closeChildFrames depth limit exceeded', {\n parentFrameId,\n depth,\n maxDepth: this.maxFrameDepth,\n });\n return;\n }\n\n try {\n const activeFrames = this.frameDb.getFramesByProject(\n this.projectId,\n 'active'\n );\n const childFrames = activeFrames.filter(\n (f) => f.parent_frame_id === parentFrameId\n );\n\n for (const childFrame of childFrames) {\n if (this.frameStack.isFrameActive(childFrame.frame_id)) {\n // Close child's children first (depth-first)\n this.closeChildFrames(childFrame.frame_id, depth + 1);\n // Then close the child frame directly without recursing through closeFrame\n this.closeFrameDirectly(childFrame.frame_id);\n }\n }\n } catch (error: unknown) {\n logger.warn('Failed to close child frames', { parentFrameId, error });\n }\n }\n\n /**\n * Close a frame directly without triggering child frame closure\n * Used by closeChildFrames to avoid double recursion\n */\n private closeFrameDirectly(frameId: string): void {\n const frame = this.frameDb.getFrame(frameId);\n if (!frame || frame.state === 'closed') return;\n\n const digest = this.digestGenerator.generateDigest(frameId);\n\n this.frameDb.updateFrame(frameId, {\n state: 'closed',\n outputs: digest.structured,\n digest_text: digest.text,\n digest_json: digest.structured,\n closed_at: Math.floor(Date.now() / 1000),\n });\n\n this.frameStack.popFrame(frameId);\n\n logger.debug('Closed child frame directly', { frameId });\n }\n\n /**\n * Extract active artifacts from frame events\n */\n getActiveArtifacts(frameId: string): string[] {\n const events = this.frameDb.getFrameEvents(frameId);\n const artifacts: string[] = [];\n\n for (const event of events) {\n if (event.event_type === 'artifact' && event.payload.path) {\n artifacts.push(event.payload.path);\n }\n }\n\n return [...new Set(artifacts)];\n }\n\n /**\n * Extract constraints from frame inputs\n */\n extractConstraints(inputs: Record<string, unknown>): string[] {\n const constraints: string[] = [];\n\n if (inputs.constraints && Array.isArray(inputs.constraints)) {\n constraints.push(...(inputs.constraints as string[]));\n }\n\n if (inputs.requirements && Array.isArray(inputs.requirements)) {\n constraints.push(...(inputs.requirements as string[]));\n }\n\n if (inputs.limitations && Array.isArray(inputs.limitations)) {\n constraints.push(...(inputs.limitations as string[]));\n }\n\n return constraints;\n }\n\n /**\n * Detect if setting a parent frame would create a cycle in the frame hierarchy.\n * Returns the cycle path if detected, or null if no cycle.\n * @param childFrameId - The frame that would be the child\n * @param parentFrameId - The proposed parent frame\n * @returns Array of frame IDs forming the cycle, or null if no cycle\n */\n private detectCycle(\n childFrameId: string,\n parentFrameId: string\n ): string[] | null {\n const visited = new Set<string>();\n const path: string[] = [];\n\n // Start from the proposed parent and traverse up the hierarchy\n let currentId: string | undefined = parentFrameId;\n\n while (currentId) {\n // If we've seen this frame before, we have a cycle\n if (visited.has(currentId)) {\n // Build the cycle path\n const cycleStart = path.indexOf(currentId);\n return path.slice(cycleStart).concat(currentId);\n }\n\n // If the current frame is the child we're trying to add, it's a cycle\n if (currentId === childFrameId) {\n return path.concat([currentId, childFrameId]);\n }\n\n visited.add(currentId);\n path.push(currentId);\n\n // Move to the parent of current frame\n const frame = this.frameDb.getFrame(currentId);\n if (!frame) {\n // Frame not found, no cycle possible through this path\n break;\n }\n currentId = frame.parent_frame_id;\n\n // Safety check: if we've traversed too many levels, something is wrong\n if (path.length > this.maxFrameDepth) {\n throw new FrameError(\n `Frame hierarchy traversal exceeded maximum depth during cycle detection`,\n ErrorCode.FRAME_STACK_OVERFLOW,\n {\n depth: path.length,\n maxDepth: this.maxFrameDepth,\n path,\n }\n );\n }\n }\n\n return null; // No cycle detected\n }\n\n /**\n * Update parent frame of an existing frame (with cycle detection)\n * @param frameId - The frame to update\n * @param newParentFrameId - The new parent frame ID (null to make it a root frame)\n */\n public updateParentFrame(\n frameId: string,\n newParentFrameId: string | null\n ): void {\n // Check if frame exists\n const frame = this.frameDb.getFrame(frameId);\n if (!frame) {\n throw new FrameError(\n `Frame not found: ${frameId}`,\n ErrorCode.FRAME_NOT_FOUND,\n { frameId }\n );\n }\n\n // If setting a parent, validate and check for cycles\n if (newParentFrameId) {\n // Verify the new parent exists\n const newParentFrame = this.frameDb.getFrame(newParentFrameId);\n if (!newParentFrame) {\n throw new FrameError(\n `Parent frame not found: ${newParentFrameId}`,\n ErrorCode.FRAME_NOT_FOUND,\n { frameId, newParentFrameId }\n );\n }\n\n const cycle = this.detectCycle(frameId, newParentFrameId);\n if (cycle) {\n throw new FrameError(\n `Cannot set parent: would create circular reference`,\n ErrorCode.FRAME_CYCLE_DETECTED,\n {\n frameId,\n newParentFrameId,\n cycle,\n currentParentId: frame.parent_frame_id,\n }\n );\n }\n\n // Check depth after parent change\n const newDepth = newParentFrame.depth + 1;\n if (newDepth > this.maxFrameDepth) {\n throw new FrameError(\n `Cannot set parent: would exceed maximum frame depth`,\n ErrorCode.FRAME_STACK_OVERFLOW,\n {\n frameId,\n newParentFrameId,\n newDepth,\n maxDepth: this.maxFrameDepth,\n }\n );\n }\n }\n\n // Calculate new depth based on parent\n let newDepth = 0;\n if (newParentFrameId) {\n const newParentFrame = this.frameDb.getFrame(newParentFrameId);\n if (newParentFrame) {\n newDepth = newParentFrame.depth + 1;\n }\n }\n\n // Update the frame's parent and depth\n this.frameDb.updateFrame(frameId, {\n parent_frame_id: newParentFrameId,\n depth: newDepth,\n });\n\n logger.info('Updated parent frame', {\n frameId,\n oldParentId: frame.parent_frame_id,\n newParentId: newParentFrameId,\n });\n }\n\n /**\n * Validate the entire frame hierarchy for cycles and depth violations\n * @returns Validation result with any detected issues\n */\n public validateFrameHierarchy(): {\n isValid: boolean;\n errors: string[];\n warnings: string[];\n } {\n const errors: string[] = [];\n const warnings: string[] = [];\n const allFrames = this.frameDb.getFramesByProject(this.projectId);\n\n // Check each frame for depth violations\n for (const frame of allFrames) {\n if (frame.depth > this.maxFrameDepth) {\n errors.push(\n `Frame ${frame.frame_id} exceeds max depth: ${frame.depth} > ${this.maxFrameDepth}`\n );\n }\n\n // Warn about deep frames approaching the limit\n if (frame.depth > this.maxFrameDepth * 0.8) {\n warnings.push(\n `Frame ${frame.frame_id} is deep in hierarchy: ${frame.depth}/${this.maxFrameDepth}`\n );\n }\n }\n\n // Check for cycles by traversing from each root\n const rootFrames = allFrames.filter((f) => !f.parent_frame_id);\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const checkForCycle = (frameId: string): boolean => {\n if (visiting.has(frameId)) {\n errors.push(`Cycle detected involving frame ${frameId}`);\n return true;\n }\n\n if (visited.has(frameId)) {\n return false;\n }\n\n visiting.add(frameId);\n\n // Check all children\n const children = allFrames.filter((f) => f.parent_frame_id === frameId);\n for (const child of children) {\n if (checkForCycle(child.frame_id)) {\n return true;\n }\n }\n\n visiting.delete(frameId);\n visited.add(frameId);\n return false;\n };\n\n // Check from each root\n for (const root of rootFrames) {\n checkForCycle(root.frame_id);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n };\n }\n\n /**\n * Set query mode for frame retrieval\n */\n setQueryMode(mode: FrameQueryMode): void {\n this.queryMode = mode;\n // Reinitialize stack with new query mode\n this.frameStack.setQueryMode(mode);\n }\n\n /**\n * Get recent frames for context sharing\n */\n async getRecentFrames(limit: number = 100): Promise<Frame[]> {\n try {\n const frames = this.frameDb.getFramesByProject(this.projectId);\n\n // Sort by created_at descending and limit\n return frames\n .sort((a, b) => (b.created_at || 0) - (a.created_at || 0))\n .slice(0, limit)\n .map((frame) => ({\n ...frame,\n // Add compatibility fields\n frameId: frame.frame_id,\n runId: frame.run_id,\n projectId: frame.project_id,\n parentFrameId: frame.parent_frame_id,\n title: frame.name,\n timestamp: frame.created_at,\n metadata: {\n tags: this.extractTagsFromFrame(frame),\n importance: this.calculateFrameImportance(frame),\n },\n data: {\n inputs: frame.inputs,\n outputs: frame.outputs,\n digest: frame.digest_json,\n },\n }));\n } catch (error: unknown) {\n logger.error('Failed to get recent frames', error as Error);\n return [];\n }\n }\n\n /**\n * Add context metadata to the current frame\n */\n async addContext(key: string, value: any): Promise<void> {\n const currentFrameId = this.frameStack.getCurrentFrameId();\n if (!currentFrameId) return;\n\n try {\n const frame = this.frameDb.getFrame(currentFrameId);\n if (!frame) return;\n\n const metadata = frame.outputs || {};\n metadata[key] = value;\n\n this.frameDb.updateFrame(currentFrameId, {\n outputs: metadata,\n });\n } catch (error: unknown) {\n logger.warn('Failed to add context to frame', { error, key });\n }\n }\n\n /**\n * Delete a frame completely from the database (used in handoffs)\n */\n deleteFrame(frameId: string): void {\n try {\n // Remove from active stack if present\n this.frameStack.removeFrame(frameId);\n\n // Delete the frame and related data (cascades via FrameDatabase)\n this.frameDb.deleteFrame(frameId);\n\n logger.debug('Deleted frame completely', { frameId });\n } catch (error: unknown) {\n logger.error('Failed to delete frame', { frameId, error });\n throw error;\n }\n }\n\n /**\n * Extract tags from frame for categorization\n */\n private extractTagsFromFrame(frame: Frame): string[] {\n const tags: string[] = [];\n\n if (frame.type) tags.push(frame.type);\n\n if (frame.name) {\n const nameLower = frame.name.toLowerCase();\n if (nameLower.includes('error')) tags.push('error');\n if (nameLower.includes('fix')) tags.push('resolution');\n if (nameLower.includes('decision')) tags.push('decision');\n if (nameLower.includes('milestone')) tags.push('milestone');\n }\n\n try {\n if (frame.digest_json && typeof frame.digest_json === 'object') {\n const digest = frame.digest_json as Record<string, unknown>;\n if (Array.isArray(digest.tags)) {\n tags.push(...(digest.tags as string[]));\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n return [...new Set(tags)];\n }\n\n /**\n * Calculate frame importance for prioritization\n */\n private calculateFrameImportance(frame: Frame): 'high' | 'medium' | 'low' {\n if (frame.type === 'milestone' || frame.name?.includes('decision')) {\n return 'high';\n }\n\n if (frame.type === 'error' || frame.type === 'resolution') {\n return 'medium';\n }\n\n if (frame.closed_at && frame.created_at) {\n const duration = frame.closed_at - frame.created_at;\n if (duration > 300) return 'medium';\n }\n\n return 'low';\n }\n}\n\n// Re-export types for compatibility (type-only, no runtime value)\nexport type {\n Frame,\n FrameContext,\n Anchor,\n Event,\n FrameType,\n FrameState,\n FrameCreationOptions,\n FrameManagerConfig,\n DigestResult,\n} from './frame-types.js';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["newDepth"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/shared-context-layer.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Shared Context Layer for Cross-Session Reference\n *\n * This layer maintains a lightweight shared context across sessions while\n * preserving run_id isolation for write operations. It enables:\n * - Read access to frames from other sessions\n * - Automatic context inheritance\n * - Efficient caching and indexing\n * - Safe concurrent access\n *\n * Also includes ContextBridge for automatic synchronization between sessions\n * and shared context.\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { sessionManager } from '../session/session-manager.js';\nimport type { Frame } from './frame-types.js';\nimport type { FrameManager } from './index.js';\nimport { logger } from '../monitoring/logger.js';\n\n// Type-safe environment variable access\n\nexport interface SharedContext {\n projectId: string;\n branch?: string;\n lastUpdated: number;\n sessions: SharedSessionContext[];\n globalPatterns: ContextPattern[];\n decisionLog: Decision[];\n referenceIndex: ReferenceIndex;\n}\n\nexport interface SharedSessionContext {\n sessionId: string;\n runId: string;\n summary: string;\n keyFrames: FrameSummary[];\n createdAt: number;\n lastActiveAt: number;\n metadata: Record<string, any>;\n}\n\nexport interface FrameSummary {\n frameId: string;\n title: string;\n type: string;\n score: number;\n tags: string[];\n summary?: string;\n createdAt: number;\n}\n\nexport interface ContextPattern {\n pattern: string;\n type: 'error' | 'success' | 'decision' | 'learning';\n frequency: number;\n lastSeen: number;\n resolution?: string;\n}\n\nexport interface Decision {\n id: string;\n decision: string;\n reasoning: string;\n timestamp: number;\n sessionId: string;\n outcome?: 'success' | 'failure' | 'pending';\n}\n\nexport interface ReferenceIndex {\n byTag: Map<string, string[]>;\n byType: Map<string, string[]>;\n byScore: string[];\n recentlyAccessed: string[];\n}\n\nexport class SharedContextLayer {\n private static instance: SharedContextLayer;\n private contextDir: string;\n private cache: Map<string, SharedContext> = new Map();\n private readonly MAX_CACHE_SIZE = 100;\n private readonly CACHE_TTL = 5 * 60 * 1000; // 5 minutes\n private lastCacheClean = Date.now();\n\n private constructor() {\n const homeDir = process.env['HOME'] || process.env['USERPROFILE'] || '';\n this.contextDir = path.join(homeDir, '.stackmemory', 'shared-context');\n }\n\n static getInstance(): SharedContextLayer {\n if (!SharedContextLayer.instance) {\n SharedContextLayer.instance = new SharedContextLayer();\n }\n return SharedContextLayer.instance;\n }\n\n async initialize(): Promise<void> {\n await fs.mkdir(this.contextDir, { recursive: true });\n await fs.mkdir(path.join(this.contextDir, 'projects'), { recursive: true });\n await fs.mkdir(path.join(this.contextDir, 'patterns'), { recursive: true });\n await fs.mkdir(path.join(this.contextDir, 'decisions'), {\n recursive: true,\n });\n }\n\n /**\n * Get or create shared context for current project/branch\n */\n async getSharedContext(options?: {\n projectId?: string;\n branch?: string;\n includeOtherBranches?: boolean;\n }): Promise<SharedContext> {\n const session = sessionManager.getCurrentSession();\n const projectId = options?.projectId || session?.projectId || 'global';\n const branch = options?.branch || session?.branch;\n\n const cacheKey = `${projectId}:${branch || 'main'}`;\n\n // Check cache first\n if (this.cache.has(cacheKey)) {\n const cached = this.cache.get(cacheKey)!;\n if (Date.now() - cached.lastUpdated < this.CACHE_TTL) {\n return cached;\n }\n }\n\n // Load from disk\n const context = await this.loadProjectContext(projectId, branch);\n\n // Include other branches if requested\n if (options?.includeOtherBranches) {\n const otherBranches = await this.loadOtherBranchContexts(\n projectId,\n branch\n );\n context.sessions.push(...otherBranches);\n }\n\n // Update cache\n this.cache.set(cacheKey, context);\n this.cleanCache();\n\n return context;\n }\n\n /**\n * Add current session's important frames to shared context\n */\n async addToSharedContext(\n frames: Frame[],\n options?: {\n minScore?: number;\n tags?: string[];\n }\n ): Promise<void> {\n const session = sessionManager.getCurrentSession();\n if (!session) return;\n\n const context = await this.getSharedContext();\n const minScore = options?.minScore || 0.7;\n\n // Filter important frames\n const importantFrames = frames.filter((f) => {\n const score = this.calculateFrameScore(f);\n return score >= minScore;\n });\n\n // Create session context\n const sessionContext: SharedSessionContext = {\n sessionId: session.sessionId,\n runId: session.runId,\n summary: this.generateSessionSummary(importantFrames),\n keyFrames: importantFrames.map((f) => this.summarizeFrame(f)),\n createdAt: session.startedAt,\n lastActiveAt: Date.now(),\n metadata: session.metadata,\n };\n\n // Update or add session context\n const existingIndex = context.sessions.findIndex(\n (s) => s.sessionId === session.sessionId\n );\n if (existingIndex >= 0) {\n context.sessions[existingIndex] = sessionContext;\n } else {\n context.sessions.push(sessionContext);\n }\n\n // Update patterns\n this.updatePatterns(context, importantFrames);\n\n // Update reference index\n this.updateReferenceIndex(context, importantFrames);\n\n // Save context\n await this.saveProjectContext(context);\n }\n\n /**\n * Query shared context for relevant frames\n */\n async querySharedContext(query: {\n tags?: string[];\n type?: string;\n minScore?: number;\n sessionId?: string;\n limit?: number;\n }): Promise<FrameSummary[]> {\n const context = await this.getSharedContext({ includeOtherBranches: true });\n let results: FrameSummary[] = [];\n\n // Collect all frames from all sessions\n for (const session of context.sessions) {\n if (query.sessionId && session.sessionId !== query.sessionId) continue;\n\n // Skip sessions without keyFrames\n if (!session.keyFrames || !Array.isArray(session.keyFrames)) continue;\n\n const filtered = session.keyFrames.filter((f) => {\n if (query.tags && !query.tags.some((tag) => f.tags.includes(tag)))\n return false;\n if (query.type && f.type !== query.type) return false;\n if (query.minScore && f.score < query.minScore) return false;\n return true;\n });\n\n results.push(...filtered);\n }\n\n // Sort by score and recency\n results.sort((a, b) => {\n const scoreWeight = 0.7;\n const recencyWeight = 0.3;\n\n const aScore =\n a.score * scoreWeight +\n (1 - (Date.now() - a.createdAt) / (30 * 24 * 60 * 60 * 1000)) *\n recencyWeight;\n const bScore =\n b.score * scoreWeight +\n (1 - (Date.now() - b.createdAt) / (30 * 24 * 60 * 60 * 1000)) *\n recencyWeight;\n\n return bScore - aScore;\n });\n\n // Apply limit\n if (query.limit) {\n results = results.slice(0, query.limit);\n }\n\n // Update recently accessed\n const index = context.referenceIndex;\n if (!index.recentlyAccessed) {\n index.recentlyAccessed = [];\n }\n\n // Add frameIds to recently accessed, removing duplicates\n if (results.length > 0) {\n const frameIds = results.map((r) => r.frameId);\n index.recentlyAccessed = [\n ...frameIds,\n ...index.recentlyAccessed.filter((id: any) => !frameIds.includes(id)),\n ].slice(0, 100);\n\n // Save the updated context with recently accessed frames\n await this.saveProjectContext(context);\n }\n\n return results;\n }\n\n /**\n * Get relevant patterns from shared context\n */\n async getPatterns(type?: ContextPattern['type']): Promise<ContextPattern[]> {\n const context = await this.getSharedContext();\n\n if (type) {\n return context.globalPatterns.filter((p) => p.type === type);\n }\n\n return context.globalPatterns;\n }\n\n /**\n * Add a decision to the shared context\n */\n async addDecision(\n decision: Omit<Decision, 'id' | 'timestamp' | 'sessionId'>\n ): Promise<void> {\n const session = sessionManager.getCurrentSession();\n if (!session) return;\n\n const context = await this.getSharedContext();\n\n const newDecision: Decision = {\n id: uuidv4(),\n timestamp: Date.now(),\n sessionId: session.sessionId,\n outcome: 'pending',\n ...decision,\n };\n\n context.decisionLog.push(newDecision);\n\n // Keep only last 100 decisions\n if (context.decisionLog.length > 100) {\n context.decisionLog = context.decisionLog.slice(-100);\n }\n\n await this.saveProjectContext(context);\n }\n\n /**\n * Get recent decisions from shared context\n */\n async getDecisions(limit: number = 10): Promise<Decision[]> {\n const context = await this.getSharedContext();\n return context.decisionLog.slice(-limit);\n }\n\n /**\n * Automatic context discovery on CLI startup\n */\n async autoDiscoverContext(): Promise<{\n hasSharedContext: boolean;\n sessionCount: number;\n recentPatterns: ContextPattern[];\n lastDecisions: Decision[];\n suggestedFrames: FrameSummary[];\n }> {\n const context = await this.getSharedContext({\n includeOtherBranches: false,\n });\n\n // Get recent patterns (last 7 days)\n const recentPatterns = context.globalPatterns\n .filter((p) => Date.now() - p.lastSeen < 7 * 24 * 60 * 60 * 1000)\n .sort((a, b) => b.frequency - a.frequency)\n .slice(0, 5);\n\n // Get last 5 decisions\n const lastDecisions = context.decisionLog.slice(-5);\n\n // Get suggested frames based on recent access and score\n const suggestedFrames = await this.querySharedContext({\n minScore: 0.8,\n limit: 5,\n });\n\n return {\n hasSharedContext: context.sessions.length > 0,\n sessionCount: context.sessions.length,\n recentPatterns,\n lastDecisions,\n suggestedFrames,\n };\n }\n\n private async loadProjectContext(\n projectId: string,\n branch?: string\n ): Promise<SharedContext> {\n const contextFile = path.join(\n this.contextDir,\n 'projects',\n `${projectId}_${branch || 'main'}.json`\n );\n\n try {\n const data = await fs.readFile(contextFile, 'utf-8');\n const context = JSON.parse(data);\n\n // Reconstruct Maps\n context.referenceIndex.byTag = new Map(\n Object.entries(context.referenceIndex.byTag || {})\n );\n context.referenceIndex.byType = new Map(\n Object.entries(context.referenceIndex.byType || {})\n );\n\n return context;\n } catch {\n // Return empty context if file doesn't exist\n return {\n projectId,\n branch,\n lastUpdated: Date.now(),\n sessions: [],\n globalPatterns: [],\n decisionLog: [],\n referenceIndex: {\n byTag: new Map(),\n byType: new Map(),\n byScore: [],\n recentlyAccessed: [],\n },\n };\n }\n }\n\n private async saveProjectContext(context: SharedContext): Promise<void> {\n const contextFile = path.join(\n this.contextDir,\n 'projects',\n `${context.projectId}_${context.branch || 'main'}.json`\n );\n\n // Convert Maps to objects for JSON serialization\n const serializable = {\n ...context,\n lastUpdated: Date.now(),\n referenceIndex: {\n ...context.referenceIndex,\n byTag: Object.fromEntries(context.referenceIndex.byTag),\n byType: Object.fromEntries(context.referenceIndex.byType),\n },\n };\n\n await fs.writeFile(contextFile, JSON.stringify(serializable, null, 2));\n }\n\n private async loadOtherBranchContexts(\n projectId: string,\n currentBranch?: string\n ): Promise<SharedSessionContext[]> {\n const projectsDir = path.join(this.contextDir, 'projects');\n const files = await fs.readdir(projectsDir);\n const sessions: SharedSessionContext[] = [];\n\n for (const file of files) {\n if (\n file.startsWith(`${projectId}_`) &&\n !file.includes(currentBranch || 'main')\n ) {\n try {\n const data = await fs.readFile(path.join(projectsDir, file), 'utf-8');\n const context = JSON.parse(data);\n sessions.push(...context.sessions);\n } catch {\n // Skip invalid files\n }\n }\n }\n\n return sessions;\n }\n\n private calculateFrameScore(frame: Frame): number {\n // Simple scoring algorithm\n let score = 0.5;\n\n // Boost for certain types\n if (frame.type === 'task' || frame.type === 'review') score += 0.2;\n if (frame.type === 'debug' || frame.type === 'write') score += 0.15;\n if (frame.type === 'error') score += 0.15; // Error frames are important for pattern extraction\n\n // Check for data property (used in tests)\n const frameWithData = frame as any;\n if (frameWithData.data) score += 0.2;\n\n // Boost for having outputs (indicates completion/results)\n if (frame.outputs && Object.keys(frame.outputs).length > 0) score += 0.2;\n if (\n frame.digest_text ||\n (frame.digest_json && Object.keys(frame.digest_json).length > 0)\n )\n score += 0.1;\n\n // Time decay (reduce score for older frames) - but handle missing created_at\n if (frame.created_at) {\n const age = Date.now() - frame.created_at;\n const daysSinceCreation = age / (24 * 60 * 60 * 1000);\n score *= Math.max(0.3, 1 - daysSinceCreation / 30);\n }\n\n return Math.min(1, score);\n }\n\n private summarizeFrame(frame: Frame): FrameSummary {\n return {\n frameId: frame.frame_id,\n title: frame.name,\n type: frame.type,\n score: this.calculateFrameScore(frame),\n tags: [],\n summary: this.generateFrameSummary(frame),\n createdAt: frame.created_at,\n };\n }\n\n private generateFrameSummary(frame: Frame): string {\n // Generate a brief summary of the frame\n const parts = [];\n const frameWithData = frame as any;\n\n if (frame.type) parts.push(`[${frame.type}]`);\n if (frame.name) parts.push(frame.name);\n if (frameWithData.title) parts.push(frameWithData.title);\n if (frameWithData.data?.error)\n parts.push(`Error: ${frameWithData.data.error}`);\n if (frameWithData.data?.resolution)\n parts.push(`Resolution: ${frameWithData.data.resolution}`);\n\n return parts.join(' - ').slice(0, 200);\n }\n\n private generateSessionSummary(frames: Frame[]): string {\n const types = [...new Set(frames.map((f) => f.type))];\n return `Session with ${frames.length} key frames: ${types.join(', ')}`;\n }\n\n private updatePatterns(context: SharedContext, frames: Frame[]): void {\n for (const frame of frames) {\n // Extract patterns from frame data\n // Handle frames with a data property (used in tests)\n const frameWithData = frame as any;\n if (frameWithData.data?.error) {\n this.addPattern(\n context,\n frameWithData.data.error,\n 'error',\n frameWithData.data?.resolution\n );\n } else if (frame.type === 'error' && frame.name) {\n // Only extract from name/outputs if no data.error property\n const errorText = frame.outputs?.error || frame.name;\n const resolution = frame.outputs?.resolution;\n if (errorText) {\n this.addPattern(context, errorText, 'error', resolution);\n }\n }\n\n if (frame.type === 'decision' && frameWithData.data?.decision) {\n this.addPattern(context, frameWithData.data.decision, 'decision');\n } else if (frame.digest_json?.decision) {\n // Only extract from digest_json if no data.decision\n this.addPattern(context, frame.digest_json.decision, 'decision');\n }\n }\n }\n\n private addPattern(\n context: SharedContext,\n pattern: string,\n type: ContextPattern['type'],\n resolution?: string\n ): void {\n const existing = context.globalPatterns.find(\n (p) => p.pattern === pattern && p.type === type\n );\n\n if (existing) {\n existing.frequency++;\n existing.lastSeen = Date.now();\n if (resolution) existing.resolution = resolution;\n } else {\n context.globalPatterns.push({\n pattern,\n type,\n frequency: 1,\n lastSeen: Date.now(),\n resolution,\n });\n }\n\n // Keep only top 100 patterns\n if (context.globalPatterns.length > 100) {\n context.globalPatterns.sort((a, b) => b.frequency - a.frequency);\n context.globalPatterns = context.globalPatterns.slice(0, 100);\n }\n }\n\n private updateReferenceIndex(context: SharedContext, frames: Frame[]): void {\n for (const frame of frames) {\n const summary = this.summarizeFrame(frame);\n\n // Index by tags\n for (const tag of summary.tags) {\n if (!context.referenceIndex.byTag.has(tag)) {\n context.referenceIndex.byTag.set(tag, []);\n }\n context.referenceIndex.byTag.get(tag)!.push(frame.frameId);\n }\n\n // Index by type\n if (!context.referenceIndex.byType.has(frame.type)) {\n context.referenceIndex.byType.set(frame.type, []);\n }\n context.referenceIndex.byType.get(frame.type)!.push(frame.frameId);\n\n // Update score index\n const scoreIndex = context.referenceIndex.byScore;\n const insertIndex = scoreIndex.findIndex((id) => {\n const otherFrame = context.sessions\n .flatMap((s) => s.keyFrames)\n .find((f) => f.frameId === id);\n return otherFrame && otherFrame.score < summary.score;\n });\n\n if (insertIndex >= 0) {\n scoreIndex.splice(insertIndex, 0, frame.frameId);\n } else {\n scoreIndex.push(frame.frameId);\n }\n\n // Keep only top 1000 by score\n context.referenceIndex.byScore = scoreIndex.slice(0, 1000);\n }\n }\n\n private cleanCache(): void {\n if (Date.now() - this.lastCacheClean < 60000) return; // Clean every minute\n\n if (this.cache.size > this.MAX_CACHE_SIZE) {\n const entries = Array.from(this.cache.entries()).sort(\n (a, b) => b[1].lastUpdated - a[1].lastUpdated\n );\n\n this.cache = new Map(entries.slice(0, this.MAX_CACHE_SIZE / 2));\n }\n\n this.lastCacheClean = Date.now();\n }\n}\n\nexport const sharedContextLayer = SharedContextLayer.getInstance();\n\n// ============================================================================\n// Context Bridge - Automatic synchronization between sessions and shared context\n// ============================================================================\n\nexport interface BridgeOptions {\n autoSync: boolean;\n syncInterval: number;\n minFrameScore: number;\n importantTags: string[];\n}\n\nexport class ContextBridge {\n private static instance: ContextBridge;\n private frameManager: FrameManager | null = null;\n private syncTimer: NodeJS.Timeout | null = null;\n private lastSyncTime: number = 0;\n private options: BridgeOptions = {\n autoSync: true,\n syncInterval: 60000, // 1 minute\n minFrameScore: 0.5, // Include frames with score above 0.5\n importantTags: ['decision', 'error', 'milestone', 'learning'],\n };\n\n private constructor() {}\n\n static getInstance(): ContextBridge {\n if (!ContextBridge.instance) {\n ContextBridge.instance = new ContextBridge();\n }\n return ContextBridge.instance;\n }\n\n /**\n * Initialize the bridge with a frame manager\n */\n async initialize(\n frameManager: FrameManager,\n options?: Partial<BridgeOptions>\n ): Promise<void> {\n this.frameManager = frameManager;\n this.options = { ...this.options, ...options };\n\n // Load shared context on initialization\n await this.loadSharedContext();\n\n // Start auto-sync if enabled\n if (this.options.autoSync) {\n this.startAutoSync();\n }\n\n logger.info('Context bridge initialized', {\n autoSync: this.options.autoSync,\n syncInterval: this.options.syncInterval,\n });\n }\n\n /**\n * Load relevant shared context into current session\n */\n async loadSharedContext(): Promise<void> {\n try {\n const session = sessionManager.getCurrentSession();\n if (!session) return;\n\n // Get context discovery\n const discovery = await sharedContextLayer.autoDiscoverContext();\n\n if (!discovery.hasSharedContext) {\n logger.info('No shared context available to load');\n return;\n }\n\n // Load recent patterns as metadata\n if (discovery.recentPatterns.length > 0) {\n logger.info('Loaded recent patterns from shared context', {\n patternCount: discovery.recentPatterns.length,\n });\n }\n\n // Load last decisions for reference\n if (discovery.lastDecisions.length > 0) {\n logger.info('Loaded recent decisions from shared context', {\n decisionCount: discovery.lastDecisions.length,\n });\n }\n\n // Store suggested frames in metadata for quick reference\n if (discovery.suggestedFrames.length > 0) {\n const metadata = {\n suggestedFrames: discovery.suggestedFrames,\n loadedAt: Date.now(),\n };\n\n // Store in frame manager's context\n if (this.frameManager) {\n await this.frameManager.addContext(\n 'shared-context-suggestions',\n metadata\n );\n }\n\n logger.info('Loaded suggested frames from shared context', {\n frameCount: discovery.suggestedFrames.length,\n });\n }\n } catch (error: unknown) {\n logger.error('Failed to load shared context', error as Error);\n }\n }\n\n /**\n * Sync current session's important frames to shared context\n */\n async syncToSharedContext(): Promise<void> {\n try {\n if (!this.frameManager) return;\n\n const session = sessionManager.getCurrentSession();\n if (!session) return;\n\n // Get all active frames (filter out any nulls from missing frames)\n const activeFrames = this.frameManager\n .getActiveFramePath()\n .filter(Boolean);\n\n // Get recent closed frames (last 100)\n const recentFrames = await this.frameManager.getRecentFrames(100);\n\n // Combine and filter important frames\n const allFrames = [...activeFrames, ...recentFrames].filter(Boolean);\n const importantFrames = this.filterImportantFrames(allFrames);\n\n if (importantFrames.length === 0) {\n logger.debug('No important frames to sync');\n return;\n }\n\n // Add to shared context\n await sharedContextLayer.addToSharedContext(importantFrames, {\n minScore: this.options.minFrameScore,\n tags: this.options.importantTags,\n });\n\n this.lastSyncTime = Date.now();\n\n logger.info('Synced frames to shared context', {\n frameCount: importantFrames.length,\n sessionId: session.sessionId,\n });\n } catch (error: unknown) {\n logger.error('Failed to sync to shared context', error as Error);\n }\n }\n\n /**\n * Query shared context for relevant frames\n */\n async querySharedFrames(query: {\n tags?: string[];\n type?: string;\n limit?: number;\n }): Promise<FrameSummary[]> {\n try {\n const results = await sharedContextLayer.querySharedContext({\n ...query,\n minScore: this.options.minFrameScore,\n });\n\n logger.info('Queried shared context', {\n query,\n resultCount: results.length,\n });\n\n return results;\n } catch (error: unknown) {\n logger.error('Failed to query shared context', error as Error);\n return [];\n }\n }\n\n /**\n * Add a decision to shared context\n */\n async addDecision(decision: string, reasoning: string): Promise<void> {\n try {\n await sharedContextLayer.addDecision({\n decision,\n reasoning,\n outcome: 'pending',\n });\n\n logger.info('Added decision to shared context', { decision });\n } catch (error: unknown) {\n logger.error('Failed to add decision', error as Error);\n }\n }\n\n /**\n * Start automatic synchronization\n */\n private startAutoSync(): void {\n if (this.syncTimer) {\n clearInterval(this.syncTimer);\n }\n\n this.syncTimer = setInterval(() => {\n this.syncToSharedContext().catch((error) => {\n logger.error('Auto-sync failed', error as Error);\n });\n }, this.options.syncInterval);\n\n // Also sync on important events\n this.setupEventListeners();\n }\n\n /**\n * Stop automatic synchronization\n */\n stopAutoSync(): void {\n if (this.syncTimer) {\n clearInterval(this.syncTimer);\n this.syncTimer = null;\n }\n }\n\n /**\n * Filter frames that are important enough to share\n */\n private filterImportantFrames(frames: Frame[]): Frame[] {\n return frames.filter((frame) => {\n // Check if frame has important tags\n const hasImportantTag = this.options.importantTags.some((tag) =>\n frame.metadata?.tags?.includes(tag)\n );\n\n // Check frame type importance\n const isImportantType = [\n 'task',\n 'milestone',\n 'error',\n 'resolution',\n 'decision',\n ].includes(frame.type);\n\n // Check metadata importance flag\n const markedImportant = frame.metadata?.importance === 'high';\n\n return hasImportantTag || isImportantType || markedImportant;\n });\n }\n\n /**\n * Setup event listeners for automatic syncing\n */\n private setupEventListeners(): void {\n if (!this.frameManager) return;\n\n // Sync when a frame is closed\n const originalClose = this.frameManager.closeFrame.bind(this.frameManager);\n this.frameManager.closeFrame = async (frameId: string, metadata?: any) => {\n const result = await originalClose(frameId, metadata);\n\n // Sync if it was an important frame\n const frame = await this.frameManager!.getFrame(frameId);\n if (frame && this.filterImportantFrames([frame]).length > 0) {\n await this.syncToSharedContext();\n }\n\n return result;\n };\n\n // Sync when a milestone is reached\n const originalMilestone = this.frameManager.createFrame.bind(\n this.frameManager\n );\n this.frameManager.createFrame = async (params: any) => {\n const result = await originalMilestone(params);\n\n if (params.type === 'milestone') {\n await this.syncToSharedContext();\n }\n\n return result;\n };\n }\n\n /**\n * Get sync statistics\n */\n getSyncStats(): {\n lastSyncTime: number;\n autoSyncEnabled: boolean;\n syncInterval: number;\n } {\n return {\n lastSyncTime: this.lastSyncTime,\n autoSyncEnabled: this.options.autoSync,\n syncInterval: this.options.syncInterval,\n };\n }\n\n /**\n * Manual trigger for immediate sync\n */\n async forceSyncNow(): Promise<void> {\n logger.info('Force sync triggered');\n await this.syncToSharedContext();\n }\n}\n\nexport const contextBridge = ContextBridge.getInstance();\n\n// Export for testing\nexport {\n SharedContext,\n SharedSessionContext,\n FrameSummary,\n ContextPattern,\n Decision,\n ReferenceIndex,\n BridgeOptions,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/stack-merge-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Stack Merge Conflict Resolution - STA-101\n * Advanced conflict resolution for frame merging between individual and shared stacks\n */\n\nimport type { Frame, Anchor } from './frame-types.js';\nimport {\n DualStackManager,\n type StackSyncResult,\n} from './dual-stack-manager.js';\nimport { logger } from '../monitoring/logger.js';\nimport { ValidationError, DatabaseError, ErrorCode } from '../errors/index.js';\nimport {\n validateInput,\n StartMergeSessionSchema,\n CreateMergePolicySchema,\n ConflictResolutionSchema,\n} from './validation.js';\n\nexport interface MergeConflict {\n frameId: string;\n conflictType:\n | 'content'\n | 'metadata'\n | 'sequence'\n | 'dependency'\n | 'permission';\n sourceFrame: Frame;\n targetFrame: Frame;\n conflictDetails: {\n field: string;\n sourceValue: any;\n targetValue: any;\n lastModified: {\n source: Date;\n target: Date;\n };\n }[];\n severity: 'low' | 'medium' | 'high' | 'critical';\n autoResolvable: boolean;\n}\n\nexport interface MergeResolution {\n conflictId: string;\n strategy: 'source_wins' | 'target_wins' | 'merge_both' | 'manual' | 'skip';\n resolutionData?: Record<string, any>;\n resolvedBy: string;\n resolvedAt: Date;\n notes?: string;\n}\n\nexport interface MergePolicy {\n name: string;\n description: string;\n rules: Array<{\n condition: string; // JSONPath expression\n action: 'source_wins' | 'target_wins' | 'merge_both' | 'require_manual';\n priority: number;\n }>;\n autoApplyThreshold: 'low' | 'medium' | 'high' | 'never';\n}\n\nexport interface MergeSession {\n sessionId: string;\n sourceStackId: string;\n targetStackId: string;\n conflicts: MergeConflict[];\n resolutions: MergeResolution[];\n policy: MergePolicy;\n status: 'analyzing' | 'resolving' | 'completed' | 'failed' | 'manual_review';\n startedAt: Date;\n completedAt?: Date;\n metadata: {\n totalFrames: number;\n conflictFrames: number;\n autoResolvedConflicts: number;\n manualResolvedConflicts: number;\n };\n}\n\nexport class StackMergeResolver {\n private dualStackManager: DualStackManager;\n private activeSessions: Map<string, MergeSession> = new Map();\n private mergePolicies: Map<string, MergePolicy> = new Map();\n\n constructor(dualStackManager: DualStackManager) {\n this.dualStackManager = dualStackManager;\n this.initializeDefaultPolicies();\n logger.debug('StackMergeResolver initialized', {\n policies: Array.from(this.mergePolicies.keys()),\n });\n }\n\n /**\n * Start a merge session with conflict analysis\n */\n async startMergeSession(\n sourceStackId: string,\n targetStackId: string,\n frameIds?: string[],\n policyName: string = 'default'\n ): Promise<string> {\n // Validate input parameters\n const input = validateInput(StartMergeSessionSchema, {\n sourceStackId,\n targetStackId,\n frameIds,\n policyName,\n });\n const sessionId = `merge-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n logger.debug('Looking for merge policy', {\n policyName: input.policyName,\n availablePolicies: Array.from(this.mergePolicies.keys()),\n });\n const policy = this.mergePolicies.get(input.policyName);\n if (!policy) {\n logger.error('Merge policy not found', {\n requested: input.policyName,\n available: Array.from(this.mergePolicies.keys()),\n });\n throw new ValidationError(\n `Merge policy not found: ${input.policyName}`,\n ErrorCode.RESOURCE_NOT_FOUND\n );\n }\n\n try {\n // Check merge permissions on both stacks\n const currentUserId =\n this.dualStackManager.getCurrentContext().ownerId || 'unknown';\n await this.dualStackManager\n .getPermissionManager()\n .enforcePermission(\n this.dualStackManager\n .getPermissionManager()\n .createContext(currentUserId, 'merge', 'stack', input.sourceStackId)\n );\n\n await this.dualStackManager\n .getPermissionManager()\n .enforcePermission(\n this.dualStackManager\n .getPermissionManager()\n .createContext(currentUserId, 'merge', 'stack', input.targetStackId)\n );\n\n // Create merge session\n const session: MergeSession = {\n sessionId,\n sourceStackId: input.sourceStackId,\n targetStackId: input.targetStackId,\n conflicts: [],\n resolutions: [],\n policy,\n status: 'analyzing',\n startedAt: new Date(),\n metadata: {\n totalFrames: 0,\n conflictFrames: 0,\n autoResolvedConflicts: 0,\n manualResolvedConflicts: 0,\n },\n };\n\n this.activeSessions.set(sessionId, session);\n\n // Analyze conflicts\n await this.analyzeConflicts(sessionId, frameIds);\n\n // Auto-resolve conflicts where possible\n await this.autoResolveConflicts(sessionId);\n\n logger.info(`Merge session started: ${sessionId}`, {\n sourceStack: sourceStackId,\n targetStack: targetStackId,\n conflicts: session.conflicts.length,\n policy: policyName,\n });\n\n return sessionId;\n } catch (error: unknown) {\n logger.error('Failed to start merge session', {\n error: error instanceof Error ? error.message : error,\n sourceStackId: input.sourceStackId,\n targetStackId: input.targetStackId,\n policyName: input.policyName,\n });\n throw new DatabaseError(\n 'Failed to start merge session',\n ErrorCode.OPERATION_FAILED,\n { sourceStackId, targetStackId },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n /**\n * Analyze conflicts between source and target stacks\n */\n private async analyzeConflicts(\n sessionId: string,\n frameIds?: string[]\n ): Promise<void> {\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new DatabaseError(\n `Merge session not found: ${sessionId}`,\n ErrorCode.RESOURCE_NOT_FOUND\n );\n }\n\n try {\n const sourceStack = this.getStackManager(session.sourceStackId);\n const targetStack = this.getStackManager(session.targetStackId);\n\n // Get frames to analyze\n const framesToAnalyze =\n frameIds ||\n (await sourceStack.getActiveFrames()).map((f) => f.frame_id);\n\n session.metadata.totalFrames = framesToAnalyze.length;\n\n for (const frameId of framesToAnalyze) {\n const sourceFrame = await sourceStack.getFrame(frameId);\n if (!sourceFrame) continue;\n\n const targetFrame = await targetStack.getFrame(frameId);\n if (!targetFrame) continue; // No conflict if target doesn't exist\n\n // Analyze frame-level conflicts\n const conflicts = await this.analyzeFrameConflicts(\n sourceFrame,\n targetFrame\n );\n session.conflicts.push(...conflicts);\n }\n\n session.metadata.conflictFrames = new Set(\n session.conflicts.map((c) => c.frameId)\n ).size;\n session.status = 'resolving';\n\n this.activeSessions.set(sessionId, session);\n\n logger.info(`Conflict analysis completed: ${sessionId}`, {\n totalConflicts: session.conflicts.length,\n conflictFrames: session.metadata.conflictFrames,\n });\n } catch (error: unknown) {\n session.status = 'failed';\n this.activeSessions.set(sessionId, session);\n throw error;\n }\n }\n\n /**\n * Analyze conflicts within a single frame\n */\n private async analyzeFrameConflicts(\n sourceFrame: Frame,\n targetFrame: Frame\n ): Promise<MergeConflict[]> {\n const conflicts: MergeConflict[] = [];\n\n // Content conflicts\n if (sourceFrame.name !== targetFrame.name) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'name',\n sourceValue: sourceFrame.name,\n targetValue: targetFrame.name,\n lastModified: {\n source: new Date(sourceFrame.created_at * 1000),\n target: new Date(targetFrame.created_at * 1000),\n },\n },\n ],\n severity: 'medium',\n autoResolvable: false,\n });\n }\n\n // State conflicts\n if (sourceFrame.state !== targetFrame.state) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'metadata',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'state',\n sourceValue: sourceFrame.state,\n targetValue: targetFrame.state,\n lastModified: {\n source: new Date(sourceFrame.created_at * 1000),\n target: new Date(targetFrame.created_at * 1000),\n },\n },\n ],\n severity: 'high',\n autoResolvable: true, // Can auto-resolve based on timestamps\n });\n }\n\n // Input/Output conflicts\n if (\n JSON.stringify(sourceFrame.inputs) !== JSON.stringify(targetFrame.inputs)\n ) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'inputs',\n sourceValue: sourceFrame.inputs,\n targetValue: targetFrame.inputs,\n lastModified: {\n source: new Date(sourceFrame.created_at * 1000),\n target: new Date(targetFrame.created_at * 1000),\n },\n },\n ],\n severity: 'medium',\n autoResolvable: false,\n });\n }\n\n // Analyze event conflicts\n const eventConflicts = await this.analyzeEventConflicts(\n sourceFrame,\n targetFrame\n );\n conflicts.push(...eventConflicts);\n\n // Analyze anchor conflicts\n const anchorConflicts = await this.analyzeAnchorConflicts(\n sourceFrame,\n targetFrame\n );\n conflicts.push(...anchorConflicts);\n\n return conflicts;\n }\n\n /**\n * Analyze conflicts in frame events\n */\n private async analyzeEventConflicts(\n sourceFrame: Frame,\n targetFrame: Frame\n ): Promise<MergeConflict[]> {\n const conflicts: MergeConflict[] = [];\n\n try {\n const sourceStack = this.getStackManager(sourceFrame.project_id);\n const targetStack = this.getStackManager(targetFrame.project_id);\n\n const sourceEvents = await sourceStack.getFrameEvents(\n sourceFrame.frame_id\n );\n const targetEvents = await targetStack.getFrameEvents(\n targetFrame.frame_id\n );\n\n // Check for sequence conflicts\n if (sourceEvents.length !== targetEvents.length) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'sequence',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'event_count',\n sourceValue: sourceEvents.length,\n targetValue: targetEvents.length,\n lastModified: {\n source: new Date(),\n target: new Date(),\n },\n },\n ],\n severity: 'high',\n autoResolvable: true, // Can merge events\n });\n }\n\n // Check for content conflicts in matching events\n const minLength = Math.min(sourceEvents.length, targetEvents.length);\n for (let i = 0; i < minLength; i++) {\n const sourceEvent = sourceEvents[i];\n const targetEvent = targetEvents[i];\n\n if (\n sourceEvent.text !== targetEvent.text ||\n JSON.stringify(sourceEvent.metadata) !==\n JSON.stringify(targetEvent.metadata)\n ) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: `event_${i}`,\n sourceValue: {\n text: sourceEvent.text,\n metadata: sourceEvent.metadata,\n },\n targetValue: {\n text: targetEvent.text,\n metadata: targetEvent.metadata,\n },\n lastModified: {\n source: new Date(),\n target: new Date(),\n },\n },\n ],\n severity: 'medium',\n autoResolvable: false,\n });\n }\n }\n } catch (error: unknown) {\n logger.warn(\n `Failed to analyze event conflicts for frame: ${sourceFrame.frame_id}`,\n error\n );\n }\n\n return conflicts;\n }\n\n /**\n * Analyze conflicts in frame anchors\n */\n private async analyzeAnchorConflicts(\n sourceFrame: Frame,\n targetFrame: Frame\n ): Promise<MergeConflict[]> {\n const conflicts: MergeConflict[] = [];\n\n try {\n const sourceStack = this.getStackManager(sourceFrame.project_id);\n const targetStack = this.getStackManager(targetFrame.project_id);\n\n const sourceAnchors = await sourceStack.getFrameAnchors(\n sourceFrame.frame_id\n );\n const targetAnchors = await targetStack.getFrameAnchors(\n targetFrame.frame_id\n );\n\n // Group anchors by type for comparison\n const sourceAnchorsByType = this.groupAnchorsByType(sourceAnchors);\n const targetAnchorsByType = this.groupAnchorsByType(targetAnchors);\n\n const allTypes = new Set([\n ...Object.keys(sourceAnchorsByType),\n ...Object.keys(targetAnchorsByType),\n ]);\n\n for (const type of allTypes) {\n const sourceTypeAnchors = sourceAnchorsByType[type] || [];\n const targetTypeAnchors = targetAnchorsByType[type] || [];\n\n if (\n sourceTypeAnchors.length !== targetTypeAnchors.length ||\n !this.anchorsEqual(sourceTypeAnchors, targetTypeAnchors)\n ) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: `anchors_${type}`,\n sourceValue: sourceTypeAnchors,\n targetValue: targetTypeAnchors,\n lastModified: {\n source: new Date(),\n target: new Date(),\n },\n },\n ],\n severity: 'low',\n autoResolvable: true, // Can merge anchors\n });\n }\n }\n } catch (error: unknown) {\n logger.warn(\n `Failed to analyze anchor conflicts for frame: ${sourceFrame.frame_id}`,\n error\n );\n }\n\n return conflicts;\n }\n\n /**\n * Auto-resolve conflicts based on merge policy\n */\n private async autoResolveConflicts(sessionId: string): Promise<void> {\n const session = this.activeSessions.get(sessionId);\n if (!session) return;\n\n const autoResolvableConflicts = session.conflicts.filter(\n (c) => c.autoResolvable\n );\n\n for (const conflict of autoResolvableConflicts) {\n const resolution = await this.applyMergePolicy(conflict, session.policy);\n if (resolution) {\n session.resolutions.push(resolution);\n session.metadata.autoResolvedConflicts++;\n\n logger.debug(`Auto-resolved conflict: ${conflict.frameId}`, {\n type: conflict.conflictType,\n strategy: resolution.strategy,\n });\n }\n }\n\n // Update session status\n const remainingConflicts = session.conflicts.filter(\n (c) => !session.resolutions.find((r) => r.conflictId === c.frameId)\n );\n\n if (remainingConflicts.length === 0) {\n session.status = 'completed';\n session.completedAt = new Date();\n } else if (remainingConflicts.every((c) => !c.autoResolvable)) {\n session.status = 'manual_review';\n }\n\n this.activeSessions.set(sessionId, session);\n }\n\n /**\n * Apply merge policy to resolve conflicts automatically\n */\n private async applyMergePolicy(\n conflict: MergeConflict,\n policy: MergePolicy\n ): Promise<MergeResolution | null> {\n // Sort rules by priority\n const sortedRules = policy.rules.sort((a, b) => b.priority - a.priority);\n\n for (const rule of sortedRules) {\n if (this.evaluateRuleCondition(conflict, rule.condition)) {\n return {\n conflictId: conflict.frameId,\n strategy:\n rule.action === 'require_manual' ? 'manual' : (rule.action as any),\n resolvedBy: 'system',\n resolvedAt: new Date(),\n notes: `Auto-resolved by policy: ${policy.name}`,\n };\n }\n }\n\n return null;\n }\n\n /**\n * Manually resolve a specific conflict\n */\n async resolveConflict(\n sessionId: string,\n conflictId: string,\n resolution: Omit<MergeResolution, 'conflictId' | 'resolvedAt'>\n ): Promise<void> {\n // Validate input parameters\n const input = validateInput(ConflictResolutionSchema, {\n strategy: resolution.strategy,\n resolvedBy: resolution.resolvedBy,\n notes: resolution.notes,\n });\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new ValidationError(\n `Merge session not found: ${sessionId}`,\n ErrorCode.MERGE_SESSION_INVALID\n );\n }\n\n const conflict = session.conflicts.find((c) => c.frameId === conflictId);\n if (!conflict) {\n throw new ValidationError(\n `Conflict not found: ${conflictId}`,\n ErrorCode.MERGE_CONFLICT_UNRESOLVABLE\n );\n }\n\n const fullResolution: MergeResolution = {\n ...input,\n conflictId,\n resolvedAt: new Date(),\n };\n\n session.resolutions.push(fullResolution);\n session.metadata.manualResolvedConflicts++;\n\n // Check if all conflicts are resolved\n const resolvedConflictIds = new Set(\n session.resolutions.map((r) => r.conflictId)\n );\n const allResolved = session.conflicts.every((c) =>\n resolvedConflictIds.has(c.frameId)\n );\n\n if (allResolved) {\n session.status = 'completed';\n session.completedAt = new Date();\n }\n\n this.activeSessions.set(sessionId, session);\n\n logger.info(`Conflict manually resolved: ${conflictId}`, {\n strategy: resolution.strategy,\n resolvedBy: resolution.resolvedBy,\n });\n }\n\n /**\n * Execute merge with resolved conflicts\n */\n async executeMerge(sessionId: string): Promise<StackSyncResult> {\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new DatabaseError(\n `Merge session not found: ${sessionId}`,\n ErrorCode.RESOURCE_NOT_FOUND\n );\n }\n\n if (session.status !== 'completed') {\n throw new DatabaseError(\n `Merge session not ready for execution: ${session.status}`,\n ErrorCode.INVALID_STATE\n );\n }\n\n try {\n const resolutionMap = new Map(\n session.resolutions.map((r) => [r.conflictId, r])\n );\n\n const result: StackSyncResult = {\n success: true,\n conflictFrames: [],\n mergedFrames: [],\n errors: [],\n };\n\n const sourceStack = this.getStackManager(session.sourceStackId);\n const targetStack = this.getStackManager(session.targetStackId);\n\n // Group conflicts by frameId\n const conflictsByFrame = new Map<string, MergeConflict[]>();\n for (const conflict of session.conflicts) {\n const existing = conflictsByFrame.get(conflict.frameId) || [];\n existing.push(conflict);\n conflictsByFrame.set(conflict.frameId, existing);\n }\n\n // Process each frame according to its resolution\n for (const [frameId] of conflictsByFrame) {\n try {\n const resolution = resolutionMap.get(frameId);\n if (!resolution) {\n result.errors.push({\n frameId,\n error: 'No resolution found',\n resolution: 'skipped',\n });\n result.conflictFrames.push(frameId);\n continue;\n }\n\n const sourceFrame = await sourceStack.getFrame(frameId);\n const targetFrame = await targetStack.getFrame(frameId);\n\n if (!sourceFrame) {\n result.errors.push({\n frameId,\n error: 'Source frame not found',\n resolution: 'skipped',\n });\n continue;\n }\n\n switch (resolution.strategy) {\n case 'source_wins':\n if (targetFrame) await targetStack.deleteFrame(frameId);\n await this.copyFrameToStack(\n sourceFrame,\n sourceStack,\n targetStack\n );\n result.mergedFrames.push(frameId);\n break;\n\n case 'target_wins':\n result.mergedFrames.push(frameId);\n break;\n\n case 'merge_both':\n if (targetFrame) {\n await this.mergeFrameContents(\n sourceFrame,\n targetFrame,\n sourceStack,\n targetStack\n );\n } else {\n await this.copyFrameToStack(\n sourceFrame,\n sourceStack,\n targetStack\n );\n }\n result.mergedFrames.push(frameId);\n break;\n\n case 'skip':\n result.conflictFrames.push(frameId);\n break;\n\n case 'manual':\n result.errors.push({\n frameId,\n error: 'Manual resolution not applied',\n resolution: 'skipped',\n });\n result.conflictFrames.push(frameId);\n break;\n }\n } catch (error: unknown) {\n result.errors.push({\n frameId,\n error: error instanceof Error ? error.message : String(error),\n resolution: 'skipped',\n });\n result.success = false;\n }\n }\n\n logger.info(`Merge executed: ${sessionId}`, {\n mergedFrames: result.mergedFrames.length,\n conflicts: result.conflictFrames.length,\n errors: result.errors.length,\n });\n\n return result;\n } catch (error: unknown) {\n throw new DatabaseError(\n 'Failed to execute merge',\n ErrorCode.OPERATION_FAILED,\n { sessionId },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n private async copyFrameToStack(\n frame: Frame,\n sourceStack: any,\n targetStack: any\n ): Promise<void> {\n await targetStack.createFrame({\n frame_id: frame.frame_id,\n name: frame.name,\n type: frame.type,\n parent_frame_id: frame.parent_frame_id,\n inputs: frame.inputs,\n outputs: frame.outputs,\n });\n\n const events = await sourceStack.getFrameEvents(frame.frame_id);\n for (const event of events) {\n await targetStack.addEvent(frame.frame_id, {\n type: event.type,\n text: event.text,\n metadata: event.metadata,\n });\n }\n\n const anchors = await sourceStack.getFrameAnchors(frame.frame_id);\n for (const anchor of anchors) {\n await targetStack.addAnchor(frame.frame_id, {\n type: anchor.type,\n text: anchor.text,\n priority: anchor.priority,\n metadata: anchor.metadata,\n });\n }\n }\n\n private async mergeFrameContents(\n sourceFrame: Frame,\n targetFrame: Frame,\n sourceStack: any,\n targetStack: any\n ): Promise<void> {\n // Merge events with deduplication\n const sourceEvents = await sourceStack.getFrameEvents(sourceFrame.frame_id);\n const targetEvents = await targetStack.getFrameEvents(targetFrame.frame_id);\n\n const existingSignatures = new Set(\n targetEvents.map((e: any) => `${e.type}:${e.text}`)\n );\n\n for (const event of sourceEvents) {\n const sig = `${event.type}:${event.text}`;\n if (!existingSignatures.has(sig)) {\n await targetStack.addEvent(targetFrame.frame_id, {\n type: event.type,\n text: event.text,\n metadata: { ...event.metadata, merged: true },\n });\n existingSignatures.add(sig);\n }\n }\n\n // Merge anchors with deduplication\n const sourceAnchors = await sourceStack.getFrameAnchors(\n sourceFrame.frame_id\n );\n const targetAnchors = await targetStack.getFrameAnchors(\n targetFrame.frame_id\n );\n\n const existingAnchorSigs = new Set(\n targetAnchors.map((a: any) => `${a.type}:${a.text}:${a.priority}`)\n );\n\n for (const anchor of sourceAnchors) {\n const sig = `${anchor.type}:${anchor.text}:${anchor.priority}`;\n if (!existingAnchorSigs.has(sig)) {\n await targetStack.addAnchor(targetFrame.frame_id, {\n type: anchor.type,\n text: anchor.text,\n priority: anchor.priority,\n metadata: { ...anchor.metadata, merged: true },\n });\n existingAnchorSigs.add(sig);\n }\n }\n\n logger.debug(`Merged frame contents: ${sourceFrame.frame_id}`);\n }\n\n /**\n * Get merge session details\n */\n async getMergeSession(sessionId: string): Promise<MergeSession | null> {\n return this.activeSessions.get(sessionId) || null;\n }\n\n /**\n * Create custom merge policy\n */\n async createMergePolicy(policy: MergePolicy): Promise<void> {\n // Validate input parameters\n const input = validateInput(CreateMergePolicySchema, policy);\n\n this.mergePolicies.set(input.name, input);\n logger.info(`Created merge policy: ${input.name}`, {\n rules: input.rules.length,\n autoApplyThreshold: input.autoApplyThreshold,\n });\n }\n\n /**\n * Initialize default merge policies\n */\n private initializeDefaultPolicies(): void {\n // Conservative policy - prefer manual resolution\n this.mergePolicies.set('conservative', {\n name: 'conservative',\n description: 'Prefer manual resolution for most conflicts',\n rules: [\n {\n condition: '$.conflictType == \"metadata\" && $.severity == \"low\"',\n action: 'target_wins',\n priority: 1,\n },\n {\n condition: '$.severity == \"critical\"',\n action: 'require_manual',\n priority: 10,\n },\n ],\n autoApplyThreshold: 'never',\n });\n\n // Aggressive policy - auto-resolve when possible\n this.mergePolicies.set('aggressive', {\n name: 'aggressive',\n description: 'Auto-resolve conflicts when safe',\n rules: [\n {\n condition: '$.conflictType == \"sequence\"',\n action: 'merge_both',\n priority: 5,\n },\n {\n condition: '$.severity == \"low\"',\n action: 'source_wins',\n priority: 2,\n },\n {\n condition: '$.severity == \"medium\" && $.autoResolvable',\n action: 'merge_both',\n priority: 4,\n },\n ],\n autoApplyThreshold: 'medium',\n });\n\n // Default policy - balanced approach\n this.mergePolicies.set('default', {\n name: 'default',\n description: 'Balanced conflict resolution',\n rules: [\n {\n condition: '$.conflictType == \"sequence\" && $.severity == \"low\"',\n action: 'merge_both',\n priority: 3,\n },\n {\n condition: '$.conflictType == \"metadata\" && $.autoResolvable',\n action: 'target_wins',\n priority: 2,\n },\n {\n condition: '$.severity == \"critical\"',\n action: 'require_manual',\n priority: 10,\n },\n ],\n autoApplyThreshold: 'low',\n });\n }\n\n // Helper methods\n private getStackManager(stackId: string): any {\n // Use DualStackManager's getStackManager method to get the right stack\n return this.dualStackManager.getStackManager(stackId);\n }\n\n private groupAnchorsByType(anchors: Anchor[]): Record<string, Anchor[]> {\n return anchors.reduce(\n (groups, anchor) => {\n if (!groups[anchor.type]) groups[anchor.type] = [];\n groups[anchor.type].push(anchor);\n return groups;\n },\n {} as Record<string, Anchor[]>\n );\n }\n\n private anchorsEqual(anchors1: Anchor[], anchors2: Anchor[]): boolean {\n if (anchors1.length !== anchors2.length) return false;\n\n // Sort by text for comparison\n const sorted1 = [...anchors1].sort((a, b) => a.text.localeCompare(b.text));\n const sorted2 = [...anchors2].sort((a, b) => a.text.localeCompare(b.text));\n\n return sorted1.every(\n (anchor, i) =>\n anchor.text === sorted2[i].text &&\n anchor.priority === sorted2[i].priority\n );\n }\n\n private evaluateRuleCondition(\n conflict: MergeConflict,\n condition: string\n ): boolean {\n // Simple condition evaluation - in real implementation would use JSONPath\n return (\n condition.includes(conflict.conflictType) ||\n condition.includes(conflict.severity)\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/validation.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Input validation schemas for collaboration layer\n */\n\nimport { z } from 'zod';\nimport { ValidationError, ErrorCode } from '../errors/index.js';\n\n// Permission validation\nexport const StackPermissionsSchema = z.object({\n canRead: z.boolean(),\n canWrite: z.boolean(),\n canHandoff: z.boolean(),\n canMerge: z.boolean(),\n canAdminister: z.boolean(),\n});\n\n// Common string validations\nconst stackIdSchema = z.string().min(1).max(200);\nconst userIdSchema = z.string().min(1).max(100);\nconst frameIdSchema = z.string().min(1).max(100);\nconst teamIdSchema = z.string().min(1).max(100);\n\n// Dual Stack Manager validation\nexport const CreateSharedStackSchema = z.object({\n teamId: teamIdSchema,\n name: z.string().min(1).max(200),\n ownerId: userIdSchema,\n permissions: StackPermissionsSchema.optional(),\n});\n\nexport const SwitchStackSchema = z.object({\n stackId: stackIdSchema,\n});\n\n// Frame Handoff validation\nexport const FrameContextSchema = z.object({\n totalFrames: z.number().min(1).max(10000),\n frameTypes: z.array(z.string()).min(1).max(50),\n estimatedSize: z.number().min(0).max(1000000), // Max 1MB\n dependencies: z.array(z.string()).max(100),\n});\n\nexport const BusinessContextSchema = z.object({\n milestone: z.string().max(100).optional(),\n priority: z.enum(['low', 'medium', 'high', 'critical']).optional(),\n deadline: z.date().optional(),\n stakeholders: z.array(userIdSchema).max(20).optional(),\n});\n\nexport const HandoffRequestSchema = z.object({\n initiatedAt: z.date(),\n initiatorId: userIdSchema,\n frameContext: FrameContextSchema,\n businessContext: BusinessContextSchema.optional(),\n});\n\nexport const InitiateHandoffSchema = z.object({\n targetStackId: stackIdSchema,\n frameIds: z.array(frameIdSchema).min(1).max(1000),\n handoffRequest: HandoffRequestSchema,\n reviewerId: userIdSchema.optional(),\n description: z.string().max(1000).optional(),\n});\n\nexport const HandoffApprovalSchema = z.object({\n reviewerId: userIdSchema,\n decision: z.enum(['approved', 'rejected', 'needs_changes']),\n feedback: z.string().max(2000).optional(),\n suggestedChanges: z\n .array(\n z.object({\n frameId: frameIdSchema,\n suggestion: z.string().max(500),\n reason: z.string().max(300).optional(),\n })\n )\n .max(50)\n .optional(),\n});\n\n// Merge Resolution validation\nexport const ConflictResolutionSchema = z.object({\n strategy: z.enum(['source_wins', 'target_wins', 'merge_both', 'manual']),\n resolvedBy: userIdSchema,\n notes: z.string().max(1000).optional(),\n});\n\nexport const MergePolicyRuleSchema = z.object({\n condition: z.string().min(1).max(500),\n action: z.enum(['source_wins', 'target_wins', 'merge_both', 'manual_review']),\n priority: z.number().min(1).max(10),\n});\n\nexport const CreateMergePolicySchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n rules: z.array(MergePolicyRuleSchema).min(1).max(20),\n autoApplyThreshold: z.enum(['low', 'medium', 'high']),\n});\n\nexport const StartMergeSessionSchema = z.object({\n sourceStackId: stackIdSchema,\n targetStackId: stackIdSchema,\n frameIds: z.array(frameIdSchema).max(1000).optional(),\n policyName: z.string().max(100).optional(),\n});\n\n// Type exports for use in implementation\nexport type StackPermissions = z.infer<typeof StackPermissionsSchema>;\nexport type CreateSharedStackInput = z.infer<typeof CreateSharedStackSchema>;\nexport type SwitchStackInput = z.infer<typeof SwitchStackSchema>;\nexport type FrameContext = z.infer<typeof FrameContextSchema>;\nexport type BusinessContext = z.infer<typeof BusinessContextSchema>;\nexport type HandoffRequest = z.infer<typeof HandoffRequestSchema>;\nexport type InitiateHandoffInput = z.infer<typeof InitiateHandoffSchema>;\nexport type HandoffApprovalInput = z.infer<typeof HandoffApprovalSchema>;\nexport type ConflictResolutionInput = z.infer<typeof ConflictResolutionSchema>;\nexport type MergePolicyRule = z.infer<typeof MergePolicyRuleSchema>;\nexport type CreateMergePolicyInput = z.infer<typeof CreateMergePolicySchema>;\nexport type StartMergeSessionInput = z.infer<typeof StartMergeSessionSchema>;\n\n// Validation helper functions\nexport function validateInput<T>(schema: z.ZodSchema<T>, input: unknown): T {\n try {\n return schema.parse(input);\n } catch (error: unknown) {\n if (error instanceof z.ZodError) {\n const details = error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join(', ');\n throw new ValidationError(\n `Validation failed: ${details}`,\n ErrorCode.VALIDATION_FAILED,\n { errors: error.errors }\n );\n }\n throw error;\n }\n}\n\nexport function validateInputSafe<T>(\n schema: z.ZodSchema<T>,\n input: unknown\n): { success: true; data: T } | { success: false; error: string } {\n try {\n const data = schema.parse(input);\n return { success: true, data };\n } catch (error: unknown) {\n if (error instanceof z.ZodError) {\n const details = error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join(', ');\n return { success: false, error: `Validation failed: ${details}` };\n }\n return { success: false, error: 'Unknown validation error' };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|