@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/integrations/pg-aiguide/embedding-provider.ts"],
|
|
4
|
-
"sourcesContent": ["import { logger } from '../../core/monitoring/logger.js';\nimport crypto from 'crypto';\n// Type-safe environment variable access\nfunction getEnv(key: string, defaultValue?: string): string {\n const value = process.env[key];\n if (value === undefined) {\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Environment variable ${key} is required`);\n }\n return value;\n}\n\nfunction getOptionalEnv(key: string): string | undefined {\n return process.env[key];\n}\n\n\nexport interface EmbeddingProvider {\n createEmbedding(text: string): Promise<number[]>;\n getDimensions(): number;\n getName(): string;\n}\n\n/**\n * OpenAI Embeddings Provider\n * Requires OPENAI_API_KEY environment variable\n */\nexport class OpenAIEmbeddingProvider implements EmbeddingProvider {\n private apiKey: string | undefined;\n private model: string;\n private dimensions: number;\n\n constructor(model = 'text-embedding-ada-002') {\n this.apiKey = process.env['OPENAI_API_KEY'];\n this.model = model;\n this.dimensions = model === 'text-embedding-ada-002' ? 1536 : 3072; // ada-002 vs text-embedding-3-small\n }\n\n async createEmbedding(text: string): Promise<number[]> {\n if (!this.apiKey) {\n throw new Error('OPENAI_API_KEY environment variable is not set');\n }\n\n try {\n const response = await fetch('https://api.openai.com/v1/embeddings', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n input: text,\n model: this.model,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`OpenAI API error: ${response.statusText}`);\n }\n\n const data = (await response.json()) as {\n data: Array<{ embedding: number[] }>;\n };\n return data.data[0].embedding;\n } catch (error: unknown) {\n logger.error(\n 'Failed to create OpenAI embedding',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n\n getDimensions(): number {\n return this.dimensions;\n }\n\n getName(): string {\n return `OpenAI-${this.model}`;\n }\n}\n\n/**\n * Local Embeddings Provider using simple TF-IDF-like approach\n * Deterministic and doesn't require external APIs\n */\nexport class LocalEmbeddingProvider implements EmbeddingProvider {\n private dimensions: number;\n private vocabulary: Map<string, number> = new Map();\n private idf: Map<string, number> = new Map();\n private documentCount = 0;\n\n constructor(dimensions = 384) {\n this.dimensions = dimensions;\n }\n\n private tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s]/g, ' ')\n .split(/\\s+/)\n .filter((token) => token.length > 2);\n }\n\n private getWordVector(word: string): number[] {\n // Use deterministic hashing to create a vector for each word\n const hash = crypto.createHash('sha256').update(word).digest();\n const vector = new Array(this.dimensions).fill(0);\n\n // Use hash bytes to set vector components\n for (let i = 0; i < Math.min(hash.length, this.dimensions); i++) {\n const value = (hash[i] - 128) / 128; // Normalize to [-1, 1]\n vector[i] = value;\n }\n\n return vector;\n }\n\n async createEmbedding(text: string): Promise<number[]> {\n const tokens = this.tokenize(text);\n const vector = new Array(this.dimensions).fill(0);\n\n if (tokens.length === 0) {\n return vector;\n }\n\n // Calculate TF-IDF weighted average of word vectors\n const termFreq = new Map<string, number>();\n\n // Count term frequencies\n for (const token of tokens) {\n termFreq.set(token, (termFreq.get(token) || 0) + 1);\n }\n\n // Build vocabulary and update document frequency\n this.documentCount++;\n for (const token of new Set(tokens)) {\n if (!this.vocabulary.has(token)) {\n this.vocabulary.set(token, this.vocabulary.size);\n }\n this.idf.set(token, (this.idf.get(token) || 0) + 1);\n }\n\n // Calculate weighted vector\n let totalWeight = 0;\n\n for (const [token, freq] of termFreq.entries()) {\n const tf = freq / tokens.length;\n const docFreq = this.idf.get(token) || 1;\n const idf = Math.log((this.documentCount + 1) / (docFreq + 1));\n const weight = tf * idf;\n\n const wordVector = this.getWordVector(token);\n for (let i = 0; i < this.dimensions; i++) {\n vector[i] += wordVector[i] * weight;\n }\n totalWeight += weight;\n }\n\n // Normalize the vector\n if (totalWeight > 0) {\n const magnitude = Math.sqrt(\n vector.reduce((sum, val) => sum + val * val, 0)\n );\n if (magnitude > 0) {\n for (let i = 0; i < this.dimensions; i++) {\n vector[i] /= magnitude;\n }\n }\n }\n\n return vector;\n }\n\n getDimensions(): number {\n return this.dimensions;\n }\n\n getName(): string {\n return 'Local-TFIDF';\n }\n}\n\n/**\n * Hybrid provider that tries OpenAI first, falls back to local\n */\nexport class HybridEmbeddingProvider implements EmbeddingProvider {\n private openai: OpenAIEmbeddingProvider;\n private local: LocalEmbeddingProvider;\n private useOpenAI: boolean;\n\n constructor(dimensions = 1536) {\n this.openai = new OpenAIEmbeddingProvider();\n this.local = new LocalEmbeddingProvider(dimensions);\n this.useOpenAI = !!process.env['OPENAI_API_KEY'];\n\n if (!this.useOpenAI) {\n logger.warn('OPENAI_API_KEY not set, using local embeddings');\n }\n }\n\n async createEmbedding(text: string): Promise<number[]> {\n if (this.useOpenAI) {\n try {\n return await this.openai.createEmbedding(text);\n } catch (error: unknown) {\n logger.warn(\n 'OpenAI embedding failed, falling back to local',\n error instanceof Error ? error : undefined\n );\n this.useOpenAI = false; // Disable for future calls\n }\n }\n\n const localEmbedding = await this.local.createEmbedding(text);\n\n // Pad or truncate to match expected dimensions\n const targetDimensions = this.getDimensions();\n if (localEmbedding.length < targetDimensions) {\n return [\n ...localEmbedding,\n ...new Array(targetDimensions - localEmbedding.length).fill(0),\n ];\n }\n return localEmbedding.slice(0, targetDimensions);\n }\n\n getDimensions(): number {\n return this.useOpenAI\n ? this.openai.getDimensions()\n : this.local.getDimensions();\n }\n\n getName(): string {\n return this.useOpenAI\n ? this.openai.getName()\n : `Hybrid-${this.local.getName()}`;\n }\n}\n\n// Factory function\nexport function createEmbeddingProvider(\n type?: 'openai' | 'local' | 'hybrid'\n): EmbeddingProvider {\n switch (type) {\n case 'openai':\n return new OpenAIEmbeddingProvider();\n case 'local':\n return new LocalEmbeddingProvider();\n case 'hybrid':\n default:\n return new HybridEmbeddingProvider();\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { logger } from "../../core/monitoring/logger.js";
|
|
6
|
-
import {
|
|
7
|
-
createEmbeddingProvider
|
|
8
|
-
} from "./embedding-provider.js";
|
|
9
|
-
import { sanitizeSQLIdentifier } from "../../validation/schemas.js";
|
|
10
|
-
class SemanticSearch {
|
|
11
|
-
pool;
|
|
12
|
-
config;
|
|
13
|
-
embeddingProvider;
|
|
14
|
-
constructor(config) {
|
|
15
|
-
this.pool = config.pool;
|
|
16
|
-
this.config = config;
|
|
17
|
-
this.embeddingProvider = config.embeddingProvider || createEmbeddingProvider("hybrid");
|
|
18
|
-
if (this.embeddingProvider.getDimensions() !== config.vectorDimensions) {
|
|
19
|
-
logger.warn(
|
|
20
|
-
`Embedding provider dimensions (${this.embeddingProvider.getDimensions()}) don't match config (${config.vectorDimensions}). Using provider dimensions.`
|
|
21
|
-
);
|
|
22
|
-
this.config.vectorDimensions = this.embeddingProvider.getDimensions();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
async createEmbedding(text) {
|
|
26
|
-
return this.embeddingProvider.createEmbedding(text);
|
|
27
|
-
}
|
|
28
|
-
async indexContent(id, content, metadata) {
|
|
29
|
-
const embedding = await this.createEmbedding(content);
|
|
30
|
-
const query = `
|
|
31
|
-
INSERT INTO ${this.config.tableName} (id, ${this.config.contentColumn}, ${this.config.embeddingColumn}, metadata)
|
|
32
|
-
VALUES ($1, $2, $3, $4)
|
|
33
|
-
ON CONFLICT (id) DO UPDATE
|
|
34
|
-
SET ${this.config.contentColumn} = $2,
|
|
35
|
-
${this.config.embeddingColumn} = $3,
|
|
36
|
-
metadata = $4
|
|
37
|
-
`;
|
|
38
|
-
await this.pool.query(query, [
|
|
39
|
-
id,
|
|
40
|
-
content,
|
|
41
|
-
`[${embedding.join(",")}]`,
|
|
42
|
-
metadata ? JSON.stringify(metadata) : null
|
|
43
|
-
]);
|
|
44
|
-
}
|
|
45
|
-
async search(query, limit = 10, threshold = 0.7) {
|
|
46
|
-
const queryEmbedding = await this.createEmbedding(query);
|
|
47
|
-
const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);
|
|
48
|
-
const sanitizedContent = sanitizeSQLIdentifier(this.config.contentColumn);
|
|
49
|
-
const sanitizedEmbedding = sanitizeSQLIdentifier(
|
|
50
|
-
this.config.embeddingColumn
|
|
51
|
-
);
|
|
52
|
-
const searchQuery = `
|
|
53
|
-
SELECT
|
|
54
|
-
id,
|
|
55
|
-
${sanitizedContent} as content,
|
|
56
|
-
metadata,
|
|
57
|
-
1 - (${sanitizedEmbedding} <=> $1::vector) as similarity
|
|
58
|
-
FROM ${sanitizedTable}
|
|
59
|
-
WHERE 1 - (${sanitizedEmbedding} <=> $1::vector) > $2
|
|
60
|
-
ORDER BY ${sanitizedEmbedding} <=> $1::vector
|
|
61
|
-
LIMIT $3
|
|
62
|
-
`;
|
|
63
|
-
const result = await this.pool.query(searchQuery, [
|
|
64
|
-
`[${queryEmbedding.join(",")}]`,
|
|
65
|
-
threshold,
|
|
66
|
-
limit
|
|
67
|
-
]);
|
|
68
|
-
return result.rows.map((row) => ({
|
|
69
|
-
id: row.id,
|
|
70
|
-
content: row.content,
|
|
71
|
-
similarity: row.similarity,
|
|
72
|
-
metadata: row.metadata
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
async findSimilar(id, limit = 10) {
|
|
76
|
-
const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);
|
|
77
|
-
const sanitizedContent = sanitizeSQLIdentifier(this.config.contentColumn);
|
|
78
|
-
const sanitizedEmbedding = sanitizeSQLIdentifier(
|
|
79
|
-
this.config.embeddingColumn
|
|
80
|
-
);
|
|
81
|
-
const query = `
|
|
82
|
-
WITH target AS (
|
|
83
|
-
SELECT ${sanitizedEmbedding} as embedding
|
|
84
|
-
FROM ${sanitizedTable}
|
|
85
|
-
WHERE id = $1
|
|
86
|
-
)
|
|
87
|
-
SELECT
|
|
88
|
-
t.id,
|
|
89
|
-
t.${sanitizedContent} as content,
|
|
90
|
-
t.metadata,
|
|
91
|
-
1 - (t.${sanitizedEmbedding} <=> target.embedding) as similarity
|
|
92
|
-
FROM ${sanitizedTable} t, target
|
|
93
|
-
WHERE t.id != $1
|
|
94
|
-
ORDER BY t.${this.config.embeddingColumn} <=> target.embedding
|
|
95
|
-
LIMIT $2
|
|
96
|
-
`;
|
|
97
|
-
const result = await this.pool.query(query, [id, limit]);
|
|
98
|
-
return result.rows.map((row) => ({
|
|
99
|
-
id: row.id,
|
|
100
|
-
content: row.content,
|
|
101
|
-
similarity: row.similarity,
|
|
102
|
-
metadata: row.metadata
|
|
103
|
-
}));
|
|
104
|
-
}
|
|
105
|
-
async cluster(k, maxIterations = 10) {
|
|
106
|
-
const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);
|
|
107
|
-
const sanitizedContent = sanitizeSQLIdentifier(this.config.contentColumn);
|
|
108
|
-
const sanitizedEmbedding = sanitizeSQLIdentifier(
|
|
109
|
-
this.config.embeddingColumn
|
|
110
|
-
);
|
|
111
|
-
const query = `
|
|
112
|
-
WITH clusters AS (
|
|
113
|
-
SELECT
|
|
114
|
-
id,
|
|
115
|
-
${sanitizedContent} as content,
|
|
116
|
-
metadata,
|
|
117
|
-
kmeans(${sanitizedEmbedding}, $1, $2) OVER () as cluster_id
|
|
118
|
-
FROM ${sanitizedTable}
|
|
119
|
-
)
|
|
120
|
-
SELECT * FROM clusters ORDER BY cluster_id
|
|
121
|
-
`;
|
|
122
|
-
const result = await this.pool.query(query, [k, maxIterations]);
|
|
123
|
-
const clusterMap = /* @__PURE__ */ new Map();
|
|
124
|
-
for (const row of result.rows) {
|
|
125
|
-
const clusterId = row.cluster_id;
|
|
126
|
-
if (!clusterMap.has(clusterId)) {
|
|
127
|
-
clusterMap.set(clusterId, []);
|
|
128
|
-
}
|
|
129
|
-
clusterMap.get(clusterId).push({
|
|
130
|
-
id: row.id,
|
|
131
|
-
content: row.content,
|
|
132
|
-
similarity: 1,
|
|
133
|
-
// Cluster membership
|
|
134
|
-
metadata: row.metadata
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
return clusterMap;
|
|
138
|
-
}
|
|
139
|
-
async reindex() {
|
|
140
|
-
const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);
|
|
141
|
-
const indexName = `idx_${sanitizedTable}_embedding`;
|
|
142
|
-
const sanitizedIndex = sanitizeSQLIdentifier(indexName);
|
|
143
|
-
const query = `REINDEX INDEX CONCURRENTLY ${sanitizedIndex}`;
|
|
144
|
-
try {
|
|
145
|
-
await this.pool.query(query);
|
|
146
|
-
logger.info(`Reindexed ${sanitizedTable} embeddings`);
|
|
147
|
-
} catch (error) {
|
|
148
|
-
logger.error(
|
|
149
|
-
"Failed to reindex embeddings",
|
|
150
|
-
error instanceof Error ? error : void 0
|
|
151
|
-
);
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
async getStats() {
|
|
156
|
-
const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);
|
|
157
|
-
const sanitizedEmbedding = sanitizeSQLIdentifier(
|
|
158
|
-
this.config.embeddingColumn
|
|
159
|
-
);
|
|
160
|
-
const indexName = `idx_${sanitizedTable}_embedding`;
|
|
161
|
-
const statsQuery = `
|
|
162
|
-
SELECT
|
|
163
|
-
COUNT(*) as total,
|
|
164
|
-
AVG(
|
|
165
|
-
1 - (${sanitizedEmbedding} <=> (
|
|
166
|
-
SELECT AVG(${sanitizedEmbedding})::vector
|
|
167
|
-
FROM ${sanitizedTable}
|
|
168
|
-
))
|
|
169
|
-
) as avg_similarity,
|
|
170
|
-
pg_size_pretty(
|
|
171
|
-
pg_relation_size($1::regclass)
|
|
172
|
-
) as index_size
|
|
173
|
-
FROM ${sanitizedTable}
|
|
174
|
-
`;
|
|
175
|
-
const result = await this.pool.query(statsQuery, [indexName]);
|
|
176
|
-
const row = result.rows[0];
|
|
177
|
-
return {
|
|
178
|
-
totalDocuments: parseInt(row.total),
|
|
179
|
-
avgSimilarity: parseFloat(row.avg_similarity) || 0,
|
|
180
|
-
indexSize: row.index_size || "0 bytes"
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
export {
|
|
185
|
-
SemanticSearch
|
|
186
|
-
};
|
|
187
|
-
//# sourceMappingURL=semantic-search.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/integrations/pg-aiguide/semantic-search.ts"],
|
|
4
|
-
"sourcesContent": ["import { Pool } from 'pg';\nimport { logger } from '../../core/monitoring/logger.js';\nimport {\n EmbeddingProvider,\n createEmbeddingProvider,\n} from './embedding-provider.js';\nimport { sanitizeSQLIdentifier } from '../../validation/schemas.js';\n\nexport interface SemanticSearchConfig {\n pool: Pool;\n tableName: string;\n embeddingColumn: string;\n contentColumn: string;\n vectorDimensions: number;\n embeddingProvider?: EmbeddingProvider;\n}\n\nexport interface SearchResult {\n id: string;\n content: string;\n similarity: number;\n metadata?: Record<string, any>;\n}\n\nexport class SemanticSearch {\n private pool: Pool;\n private config: SemanticSearchConfig;\n private embeddingProvider: EmbeddingProvider;\n\n constructor(config: SemanticSearchConfig) {\n this.pool = config.pool;\n this.config = config;\n this.embeddingProvider =\n config.embeddingProvider || createEmbeddingProvider('hybrid');\n\n // Verify dimensions match\n if (this.embeddingProvider.getDimensions() !== config.vectorDimensions) {\n logger.warn(\n `Embedding provider dimensions (${this.embeddingProvider.getDimensions()}) ` +\n `don't match config (${config.vectorDimensions}). Using provider dimensions.`\n );\n this.config.vectorDimensions = this.embeddingProvider.getDimensions();\n }\n }\n\n async createEmbedding(text: string): Promise<number[]> {\n return this.embeddingProvider.createEmbedding(text);\n }\n\n async indexContent(\n id: string,\n content: string,\n metadata?: Record<string, any>\n ): Promise<void> {\n const embedding = await this.createEmbedding(content);\n\n const query = `\n INSERT INTO ${this.config.tableName} (id, ${this.config.contentColumn}, ${this.config.embeddingColumn}, metadata)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (id) DO UPDATE\n SET ${this.config.contentColumn} = $2,\n ${this.config.embeddingColumn} = $3,\n metadata = $4\n `;\n\n await this.pool.query(query, [\n id,\n content,\n `[${embedding.join(',')}]`,\n metadata ? JSON.stringify(metadata) : null,\n ]);\n }\n\n async search(\n query: string,\n limit = 10,\n threshold = 0.7\n ): Promise<SearchResult[]> {\n const queryEmbedding = await this.createEmbedding(query);\n\n // Sanitize all identifiers to prevent SQL injection\n const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);\n const sanitizedContent = sanitizeSQLIdentifier(this.config.contentColumn);\n const sanitizedEmbedding = sanitizeSQLIdentifier(\n this.config.embeddingColumn\n );\n\n const searchQuery = `\n SELECT \n id,\n ${sanitizedContent} as content,\n metadata,\n 1 - (${sanitizedEmbedding} <=> $1::vector) as similarity\n FROM ${sanitizedTable}\n WHERE 1 - (${sanitizedEmbedding} <=> $1::vector) > $2\n ORDER BY ${sanitizedEmbedding} <=> $1::vector\n LIMIT $3\n `;\n\n const result = await this.pool.query(searchQuery, [\n `[${queryEmbedding.join(',')}]`,\n threshold,\n limit,\n ]);\n\n return result.rows.map((row: any) => ({\n id: row.id,\n content: row.content,\n similarity: row.similarity,\n metadata: row.metadata,\n }));\n }\n\n async findSimilar(id: string, limit = 10): Promise<SearchResult[]> {\n // Sanitize all identifiers to prevent SQL injection\n const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);\n const sanitizedContent = sanitizeSQLIdentifier(this.config.contentColumn);\n const sanitizedEmbedding = sanitizeSQLIdentifier(\n this.config.embeddingColumn\n );\n\n const query = `\n WITH target AS (\n SELECT ${sanitizedEmbedding} as embedding\n FROM ${sanitizedTable}\n WHERE id = $1\n )\n SELECT \n t.id,\n t.${sanitizedContent} as content,\n t.metadata,\n 1 - (t.${sanitizedEmbedding} <=> target.embedding) as similarity\n FROM ${sanitizedTable} t, target\n WHERE t.id != $1\n ORDER BY t.${this.config.embeddingColumn} <=> target.embedding\n LIMIT $2\n `;\n\n const result = await this.pool.query(query, [id, limit]);\n\n return result.rows.map((row: any) => ({\n id: row.id,\n content: row.content,\n similarity: row.similarity,\n metadata: row.metadata,\n }));\n }\n\n async cluster(\n k: number,\n maxIterations = 10\n ): Promise<Map<number, SearchResult[]>> {\n // Sanitize all identifiers to prevent SQL injection\n const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);\n const sanitizedContent = sanitizeSQLIdentifier(this.config.contentColumn);\n const sanitizedEmbedding = sanitizeSQLIdentifier(\n this.config.embeddingColumn\n );\n\n // K-means clustering using pgvector\n const query = `\n WITH clusters AS (\n SELECT \n id,\n ${sanitizedContent} as content,\n metadata,\n kmeans(${sanitizedEmbedding}, $1, $2) OVER () as cluster_id\n FROM ${sanitizedTable}\n )\n SELECT * FROM clusters ORDER BY cluster_id\n `;\n\n const result = await this.pool.query(query, [k, maxIterations]);\n\n const clusterMap = new Map<number, SearchResult[]>();\n\n for (const row of result.rows) {\n const clusterId = row.cluster_id;\n if (!clusterMap.has(clusterId)) {\n clusterMap.set(clusterId, []);\n }\n\n clusterMap.get(clusterId)!.push({\n id: row.id,\n content: row.content,\n similarity: 1.0, // Cluster membership\n metadata: row.metadata,\n });\n }\n\n return clusterMap;\n }\n\n async reindex(): Promise<void> {\n // Sanitize table name to prevent SQL injection\n const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);\n\n // Rebuild the IVFFlat index for better performance\n // Using sanitized identifier prevents SQL injection\n const indexName = `idx_${sanitizedTable}_embedding`;\n const sanitizedIndex = sanitizeSQLIdentifier(indexName);\n\n const query = `REINDEX INDEX CONCURRENTLY ${sanitizedIndex}`;\n\n try {\n await this.pool.query(query);\n logger.info(`Reindexed ${sanitizedTable} embeddings`);\n } catch (error: unknown) {\n logger.error(\n 'Failed to reindex embeddings',\n error instanceof Error ? error : undefined\n );\n throw error;\n }\n }\n\n async getStats(): Promise<{\n totalDocuments: number;\n avgSimilarity: number;\n indexSize: string;\n }> {\n // Sanitize all identifiers to prevent SQL injection\n const sanitizedTable = sanitizeSQLIdentifier(this.config.tableName);\n const sanitizedEmbedding = sanitizeSQLIdentifier(\n this.config.embeddingColumn\n );\n const indexName = `idx_${sanitizedTable}_embedding`;\n\n const statsQuery = `\n SELECT \n COUNT(*) as total,\n AVG(\n 1 - (${sanitizedEmbedding} <=> (\n SELECT AVG(${sanitizedEmbedding})::vector \n FROM ${sanitizedTable}\n ))\n ) as avg_similarity,\n pg_size_pretty(\n pg_relation_size($1::regclass)\n ) as index_size\n FROM ${sanitizedTable}\n `;\n\n const result = await this.pool.query(statsQuery, [indexName]);\n const row: any = result.rows[0];\n\n return {\n totalDocuments: parseInt(row.total),\n avgSimilarity: parseFloat(row.avg_similarity) || 0,\n indexSize: row.index_size || '0 bytes',\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { logger } from "../../core/monitoring/logger.js";
|
|
6
|
-
class TimescaleAnalytics {
|
|
7
|
-
pool;
|
|
8
|
-
config;
|
|
9
|
-
constructor(config) {
|
|
10
|
-
this.pool = config.pool;
|
|
11
|
-
this.config = config;
|
|
12
|
-
}
|
|
13
|
-
async createContinuousAggregate(name, interval, columns) {
|
|
14
|
-
const aggregates = columns.map(
|
|
15
|
-
(col) => `
|
|
16
|
-
AVG(${col}) as avg_${col},
|
|
17
|
-
MIN(${col}) as min_${col},
|
|
18
|
-
MAX(${col}) as max_${col},
|
|
19
|
-
SUM(${col}) as sum_${col}
|
|
20
|
-
`
|
|
21
|
-
).join(",\n ");
|
|
22
|
-
const query = `
|
|
23
|
-
CREATE MATERIALIZED VIEW IF NOT EXISTS ${name}
|
|
24
|
-
WITH (timescaledb.continuous) AS
|
|
25
|
-
SELECT
|
|
26
|
-
time_bucket('${interval}', ${this.config.timeColumn}) as bucket,
|
|
27
|
-
COUNT(*) as count,
|
|
28
|
-
${aggregates}
|
|
29
|
-
FROM ${this.config.tableName}
|
|
30
|
-
GROUP BY bucket
|
|
31
|
-
WITH NO DATA
|
|
32
|
-
`;
|
|
33
|
-
await this.pool.query(query);
|
|
34
|
-
await this.pool.query(`
|
|
35
|
-
SELECT add_continuous_aggregate_policy('${name}',
|
|
36
|
-
start_offset => INTERVAL '1 month',
|
|
37
|
-
end_offset => INTERVAL '1 hour',
|
|
38
|
-
schedule_interval => INTERVAL '1 hour',
|
|
39
|
-
if_not_exists => TRUE
|
|
40
|
-
)
|
|
41
|
-
`);
|
|
42
|
-
logger.info(`Created continuous aggregate: ${name}`);
|
|
43
|
-
}
|
|
44
|
-
async getTimeSeries(startTime, endTime, interval, columns) {
|
|
45
|
-
const selectedColumns = columns || this.config.valueColumns;
|
|
46
|
-
const aggregates = selectedColumns.map(
|
|
47
|
-
(col) => `
|
|
48
|
-
AVG(${col})::float as avg_${col},
|
|
49
|
-
MIN(${col})::float as min_${col},
|
|
50
|
-
MAX(${col})::float as max_${col},
|
|
51
|
-
SUM(${col})::float as sum_${col}
|
|
52
|
-
`
|
|
53
|
-
).join(",\n ");
|
|
54
|
-
const query = `
|
|
55
|
-
SELECT
|
|
56
|
-
time_bucket($1, ${this.config.timeColumn}) as period,
|
|
57
|
-
COUNT(*)::int as count,
|
|
58
|
-
${aggregates}
|
|
59
|
-
FROM ${this.config.tableName}
|
|
60
|
-
WHERE ${this.config.timeColumn} >= $2
|
|
61
|
-
AND ${this.config.timeColumn} <= $3
|
|
62
|
-
GROUP BY period
|
|
63
|
-
ORDER BY period
|
|
64
|
-
`;
|
|
65
|
-
const result = await this.pool.query(query, [interval, startTime, endTime]);
|
|
66
|
-
return result.rows.map((row) => {
|
|
67
|
-
const avg = {};
|
|
68
|
-
const min = {};
|
|
69
|
-
const max = {};
|
|
70
|
-
const sum = {};
|
|
71
|
-
selectedColumns.forEach((col) => {
|
|
72
|
-
avg[col] = row[`avg_${col}`];
|
|
73
|
-
min[col] = row[`min_${col}`];
|
|
74
|
-
max[col] = row[`max_${col}`];
|
|
75
|
-
sum[col] = row[`sum_${col}`];
|
|
76
|
-
});
|
|
77
|
-
return {
|
|
78
|
-
period: row.period,
|
|
79
|
-
count: row.count,
|
|
80
|
-
avg,
|
|
81
|
-
min,
|
|
82
|
-
max,
|
|
83
|
-
sum
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
async detectAnomalies(column, sensitivity = 2.5, lookback = "7 days") {
|
|
88
|
-
const query = `
|
|
89
|
-
WITH stats AS (
|
|
90
|
-
SELECT
|
|
91
|
-
AVG(${column})::float as mean,
|
|
92
|
-
STDDEV(${column})::float as stddev
|
|
93
|
-
FROM ${this.config.tableName}
|
|
94
|
-
WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '${lookback}'
|
|
95
|
-
),
|
|
96
|
-
anomalies AS (
|
|
97
|
-
SELECT
|
|
98
|
-
${this.config.timeColumn} as timestamp,
|
|
99
|
-
${column} as value,
|
|
100
|
-
metadata,
|
|
101
|
-
ABS(${column} - stats.mean) / NULLIF(stats.stddev, 0) as z_score
|
|
102
|
-
FROM ${this.config.tableName}, stats
|
|
103
|
-
WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '${lookback}'
|
|
104
|
-
AND ABS(${column} - stats.mean) / NULLIF(stats.stddev, 0) > $1
|
|
105
|
-
)
|
|
106
|
-
SELECT * FROM anomalies
|
|
107
|
-
ORDER BY z_score DESC
|
|
108
|
-
`;
|
|
109
|
-
const result = await this.pool.query(query, [sensitivity]);
|
|
110
|
-
return result.rows.map((row) => ({
|
|
111
|
-
timestamp: row.timestamp,
|
|
112
|
-
values: { [column]: row.value, z_score: row.z_score },
|
|
113
|
-
metadata: row.metadata
|
|
114
|
-
}));
|
|
115
|
-
}
|
|
116
|
-
async forecast(column, periods, method = "linear") {
|
|
117
|
-
if (method === "linear") {
|
|
118
|
-
const query = `
|
|
119
|
-
WITH regression AS (
|
|
120
|
-
SELECT
|
|
121
|
-
regr_slope(${column}, EXTRACT(EPOCH FROM ${this.config.timeColumn}))::float as slope,
|
|
122
|
-
regr_intercept(${column}, EXTRACT(EPOCH FROM ${this.config.timeColumn}))::float as intercept,
|
|
123
|
-
MAX(${this.config.timeColumn}) as last_time,
|
|
124
|
-
EXTRACT(EPOCH FROM MAX(${this.config.timeColumn})) as last_epoch
|
|
125
|
-
FROM ${this.config.tableName}
|
|
126
|
-
WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '30 days'
|
|
127
|
-
),
|
|
128
|
-
forecast_times AS (
|
|
129
|
-
SELECT
|
|
130
|
-
last_time + (INTERVAL '1 hour' * generate_series(1, $1)) as forecast_time
|
|
131
|
-
FROM regression
|
|
132
|
-
)
|
|
133
|
-
SELECT
|
|
134
|
-
forecast_time as timestamp,
|
|
135
|
-
(intercept + slope * EXTRACT(EPOCH FROM forecast_time))::float as forecast_value
|
|
136
|
-
FROM forecast_times, regression
|
|
137
|
-
`;
|
|
138
|
-
const result = await this.pool.query(query, [periods]);
|
|
139
|
-
return result.rows.map((row) => ({
|
|
140
|
-
timestamp: row.timestamp,
|
|
141
|
-
values: { [column]: row.forecast_value, forecast: true }
|
|
142
|
-
}));
|
|
143
|
-
}
|
|
144
|
-
logger.warn("Seasonal forecasting not yet implemented");
|
|
145
|
-
return [];
|
|
146
|
-
}
|
|
147
|
-
async getRetentionPolicy() {
|
|
148
|
-
const query = `
|
|
149
|
-
SELECT
|
|
150
|
-
hypertable_name as table_name,
|
|
151
|
-
drop_after::text as retention_period,
|
|
152
|
-
schedule_interval IS NOT NULL as is_enabled
|
|
153
|
-
FROM timescaledb_information.retention_policies
|
|
154
|
-
WHERE hypertable_name = $1
|
|
155
|
-
`;
|
|
156
|
-
const result = await this.pool.query(query, [this.config.tableName]);
|
|
157
|
-
return result.rows.map((row) => ({
|
|
158
|
-
tableName: row.table_name,
|
|
159
|
-
retentionPeriod: row.retention_period,
|
|
160
|
-
isEnabled: row.is_enabled
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
async setRetentionPolicy(retentionPeriod) {
|
|
164
|
-
const query = `
|
|
165
|
-
SELECT add_retention_policy($1,
|
|
166
|
-
drop_after => INTERVAL '${retentionPeriod}',
|
|
167
|
-
if_not_exists => TRUE
|
|
168
|
-
)
|
|
169
|
-
`;
|
|
170
|
-
await this.pool.query(query, [this.config.tableName]);
|
|
171
|
-
logger.info(
|
|
172
|
-
`Set retention policy for ${this.config.tableName}: ${retentionPeriod}`
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
async compress(olderThan) {
|
|
176
|
-
await this.pool.query(`
|
|
177
|
-
ALTER TABLE ${this.config.tableName}
|
|
178
|
-
SET (timescaledb.compress,
|
|
179
|
-
timescaledb.compress_segmentby = 'type',
|
|
180
|
-
timescaledb.compress_orderby = '${this.config.timeColumn} DESC')
|
|
181
|
-
`);
|
|
182
|
-
await this.pool.query(
|
|
183
|
-
`
|
|
184
|
-
SELECT add_compression_policy($1,
|
|
185
|
-
compress_after => INTERVAL '${olderThan}',
|
|
186
|
-
if_not_exists => TRUE
|
|
187
|
-
)
|
|
188
|
-
`,
|
|
189
|
-
[this.config.tableName]
|
|
190
|
-
);
|
|
191
|
-
logger.info(
|
|
192
|
-
`Enabled compression for ${this.config.tableName} older than ${olderThan}`
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
async getChunkStats() {
|
|
196
|
-
const query = `
|
|
197
|
-
SELECT
|
|
198
|
-
COUNT(*) as total_chunks,
|
|
199
|
-
COUNT(*) FILTER (WHERE is_compressed) as compressed_chunks,
|
|
200
|
-
pg_size_pretty(SUM(total_bytes)) as total_size,
|
|
201
|
-
pg_size_pretty(SUM(total_bytes) FILTER (WHERE is_compressed)) as compressed_size,
|
|
202
|
-
CASE
|
|
203
|
-
WHEN SUM(uncompressed_total_bytes) > 0
|
|
204
|
-
THEN (1 - SUM(total_bytes)::float / SUM(uncompressed_total_bytes))::numeric(4,2)
|
|
205
|
-
ELSE 0
|
|
206
|
-
END as compression_ratio
|
|
207
|
-
FROM timescaledb_information.chunks
|
|
208
|
-
WHERE hypertable_name = $1
|
|
209
|
-
`;
|
|
210
|
-
const result = await this.pool.query(query, [this.config.tableName]);
|
|
211
|
-
const row = result.rows[0];
|
|
212
|
-
return {
|
|
213
|
-
totalChunks: parseInt(row.total_chunks) || 0,
|
|
214
|
-
compressedChunks: parseInt(row.compressed_chunks) || 0,
|
|
215
|
-
totalSize: row.total_size || "0 bytes",
|
|
216
|
-
compressedSize: row.compressed_size || "0 bytes",
|
|
217
|
-
compressionRatio: parseFloat(row.compression_ratio) || 0
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
export {
|
|
222
|
-
TimescaleAnalytics
|
|
223
|
-
};
|
|
224
|
-
//# sourceMappingURL=timescale-analytics.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/integrations/pg-aiguide/timescale-analytics.ts"],
|
|
4
|
-
"sourcesContent": ["import { Pool } from 'pg';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport interface TimeSeriesConfig {\n pool: Pool;\n tableName: string;\n timeColumn: string;\n valueColumns: string[];\n}\n\nexport interface TimeSeriesData {\n timestamp: Date;\n values: Record<string, any>;\n metadata?: Record<string, any>;\n}\n\nexport interface AggregateResult {\n period: Date;\n count: number;\n avg: Record<string, number>;\n min: Record<string, number>;\n max: Record<string, number>;\n sum: Record<string, number>;\n}\n\nexport class TimescaleAnalytics {\n private pool: Pool;\n private config: TimeSeriesConfig;\n\n constructor(config: TimeSeriesConfig) {\n this.pool = config.pool;\n this.config = config;\n }\n\n async createContinuousAggregate(\n name: string,\n interval: string,\n columns: string[]\n ): Promise<void> {\n const aggregates = columns\n .map(\n (col) => `\n AVG(${col}) as avg_${col},\n MIN(${col}) as min_${col},\n MAX(${col}) as max_${col},\n SUM(${col}) as sum_${col}\n `\n )\n .join(',\\n ');\n\n const query = `\n CREATE MATERIALIZED VIEW IF NOT EXISTS ${name}\n WITH (timescaledb.continuous) AS\n SELECT \n time_bucket('${interval}', ${this.config.timeColumn}) as bucket,\n COUNT(*) as count,\n ${aggregates}\n FROM ${this.config.tableName}\n GROUP BY bucket\n WITH NO DATA\n `;\n\n await this.pool.query(query);\n\n // Add refresh policy\n await this.pool.query(`\n SELECT add_continuous_aggregate_policy('${name}',\n start_offset => INTERVAL '1 month',\n end_offset => INTERVAL '1 hour',\n schedule_interval => INTERVAL '1 hour',\n if_not_exists => TRUE\n )\n `);\n\n logger.info(`Created continuous aggregate: ${name}`);\n }\n\n async getTimeSeries(\n startTime: Date,\n endTime: Date,\n interval: string,\n columns?: string[]\n ): Promise<AggregateResult[]> {\n const selectedColumns = columns || this.config.valueColumns;\n\n const aggregates = selectedColumns\n .map(\n (col) => `\n AVG(${col})::float as avg_${col},\n MIN(${col})::float as min_${col},\n MAX(${col})::float as max_${col},\n SUM(${col})::float as sum_${col}\n `\n )\n .join(',\\n ');\n\n const query = `\n SELECT \n time_bucket($1, ${this.config.timeColumn}) as period,\n COUNT(*)::int as count,\n ${aggregates}\n FROM ${this.config.tableName}\n WHERE ${this.config.timeColumn} >= $2\n AND ${this.config.timeColumn} <= $3\n GROUP BY period\n ORDER BY period\n `;\n\n const result = await this.pool.query(query, [interval, startTime, endTime]);\n\n return result.rows.map((row: any) => {\n const avg: Record<string, number> = {};\n const min: Record<string, number> = {};\n const max: Record<string, number> = {};\n const sum: Record<string, number> = {};\n\n selectedColumns.forEach((col) => {\n avg[col] = row[`avg_${col}`];\n min[col] = row[`min_${col}`];\n max[col] = row[`max_${col}`];\n sum[col] = row[`sum_${col}`];\n });\n\n return {\n period: row.period,\n count: row.count,\n avg,\n min,\n max,\n sum,\n };\n });\n }\n\n async detectAnomalies(\n column: string,\n sensitivity = 2.5,\n lookback = '7 days'\n ): Promise<TimeSeriesData[]> {\n const query = `\n WITH stats AS (\n SELECT \n AVG(${column})::float as mean,\n STDDEV(${column})::float as stddev\n FROM ${this.config.tableName}\n WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '${lookback}'\n ),\n anomalies AS (\n SELECT \n ${this.config.timeColumn} as timestamp,\n ${column} as value,\n metadata,\n ABS(${column} - stats.mean) / NULLIF(stats.stddev, 0) as z_score\n FROM ${this.config.tableName}, stats\n WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '${lookback}'\n AND ABS(${column} - stats.mean) / NULLIF(stats.stddev, 0) > $1\n )\n SELECT * FROM anomalies\n ORDER BY z_score DESC\n `;\n\n const result = await this.pool.query(query, [sensitivity]);\n\n return result.rows.map((row) => ({\n timestamp: row.timestamp,\n values: { [column]: row.value, z_score: row.z_score },\n metadata: row.metadata,\n }));\n }\n\n async forecast(\n column: string,\n periods: number,\n method: 'linear' | 'seasonal' = 'linear'\n ): Promise<TimeSeriesData[]> {\n // Simple linear regression forecast\n if (method === 'linear') {\n const query = `\n WITH regression AS (\n SELECT \n regr_slope(${column}, EXTRACT(EPOCH FROM ${this.config.timeColumn}))::float as slope,\n regr_intercept(${column}, EXTRACT(EPOCH FROM ${this.config.timeColumn}))::float as intercept,\n MAX(${this.config.timeColumn}) as last_time,\n EXTRACT(EPOCH FROM MAX(${this.config.timeColumn})) as last_epoch\n FROM ${this.config.tableName}\n WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '30 days'\n ),\n forecast_times AS (\n SELECT \n last_time + (INTERVAL '1 hour' * generate_series(1, $1)) as forecast_time\n FROM regression\n )\n SELECT \n forecast_time as timestamp,\n (intercept + slope * EXTRACT(EPOCH FROM forecast_time))::float as forecast_value\n FROM forecast_times, regression\n `;\n\n const result = await this.pool.query(query, [periods]);\n\n return result.rows.map((row) => ({\n timestamp: row.timestamp,\n values: { [column]: row.forecast_value, forecast: true },\n }));\n }\n\n // Seasonal decomposition would require more complex logic\n logger.warn('Seasonal forecasting not yet implemented');\n return [];\n }\n\n async getRetentionPolicy(): Promise<\n {\n tableName: string;\n retentionPeriod: string;\n isEnabled: boolean;\n }[]\n > {\n const query = `\n SELECT \n hypertable_name as table_name,\n drop_after::text as retention_period,\n schedule_interval IS NOT NULL as is_enabled\n FROM timescaledb_information.retention_policies\n WHERE hypertable_name = $1\n `;\n\n const result = await this.pool.query(query, [this.config.tableName]);\n\n return result.rows.map((row) => ({\n tableName: row.table_name,\n retentionPeriod: row.retention_period,\n isEnabled: row.is_enabled,\n }));\n }\n\n async setRetentionPolicy(retentionPeriod: string): Promise<void> {\n const query = `\n SELECT add_retention_policy($1, \n drop_after => INTERVAL '${retentionPeriod}',\n if_not_exists => TRUE\n )\n `;\n\n await this.pool.query(query, [this.config.tableName]);\n logger.info(\n `Set retention policy for ${this.config.tableName}: ${retentionPeriod}`\n );\n }\n\n async compress(olderThan: string): Promise<void> {\n // Enable compression\n await this.pool.query(`\n ALTER TABLE ${this.config.tableName} \n SET (timescaledb.compress, \n timescaledb.compress_segmentby = 'type',\n timescaledb.compress_orderby = '${this.config.timeColumn} DESC')\n `);\n\n // Add compression policy\n await this.pool.query(\n `\n SELECT add_compression_policy($1,\n compress_after => INTERVAL '${olderThan}',\n if_not_exists => TRUE\n )\n `,\n [this.config.tableName]\n );\n\n logger.info(\n `Enabled compression for ${this.config.tableName} older than ${olderThan}`\n );\n }\n\n async getChunkStats(): Promise<{\n totalChunks: number;\n compressedChunks: number;\n totalSize: string;\n compressedSize: string;\n compressionRatio: number;\n }> {\n const query = `\n SELECT \n COUNT(*) as total_chunks,\n COUNT(*) FILTER (WHERE is_compressed) as compressed_chunks,\n pg_size_pretty(SUM(total_bytes)) as total_size,\n pg_size_pretty(SUM(total_bytes) FILTER (WHERE is_compressed)) as compressed_size,\n CASE \n WHEN SUM(uncompressed_total_bytes) > 0 \n THEN (1 - SUM(total_bytes)::float / SUM(uncompressed_total_bytes))::numeric(4,2)\n ELSE 0\n END as compression_ratio\n FROM timescaledb_information.chunks\n WHERE hypertable_name = $1\n `;\n\n const result = await this.pool.query(query, [this.config.tableName]);\n const row = result.rows[0];\n\n return {\n totalChunks: parseInt(row.total_chunks) || 0,\n compressedChunks: parseInt(row.compressed_chunks) || 0,\n totalSize: row.total_size || '0 bytes',\n compressedSize: row.compressed_size || '0 bytes',\n compressionRatio: parseFloat(row.compression_ratio) || 0,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/integrations/ralph/bridge/ralph-stackmemory-bridge.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Ralph-StackMemory Bridge\n * Main integration point connecting Ralph Wiggum loops with StackMemory persistence\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { FrameManager } from '../../../core/context/index.js';\nimport { SessionManager } from '../../../core/session/session-manager.js';\nimport { SQLiteAdapter } from '../../../core/database/sqlite-adapter.js';\nimport { ContextBudgetManager } from '../context/context-budget-manager.js';\nimport { StateReconciler } from '../state/state-reconciler.js';\nimport {\n IterationLifecycle,\n LifecycleHooks,\n} from '../lifecycle/iteration-lifecycle.js';\nimport { PerformanceOptimizer } from '../performance/performance-optimizer.js';\nimport {\n RalphLoopState,\n RalphIteration,\n BridgeState,\n BridgeOptions,\n RalphStackMemoryConfig,\n IterationContext,\n Frame,\n FrameType,\n RecoveryState,\n Checkpoint,\n StateSource,\n} from '../types.js';\n\nexport class RalphStackMemoryBridge {\n private state: BridgeState;\n private config: RalphStackMemoryConfig;\n private frameManager?: FrameManager;\n private sessionManager: SessionManager;\n private recoveryState?: RecoveryState;\n private readonly ralphDir = '.ralph';\n private readonly requiresDatabase: boolean;\n\n constructor(options?: BridgeOptions & { useStackMemory?: boolean }) {\n // Initialize configuration\n this.config = this.mergeConfig(options?.config);\n\n // Check if database/StackMemory features are required\n this.requiresDatabase = options?.useStackMemory !== false;\n\n // Initialize managers\n this.state = {\n initialized: false,\n contextManager: new ContextBudgetManager(this.config.contextBudget),\n stateReconciler: new StateReconciler(this.config.stateReconciliation),\n performanceOptimizer: new PerformanceOptimizer(this.config.performance),\n };\n\n this.sessionManager = SessionManager.getInstance();\n\n // Setup lifecycle hooks\n this.setupLifecycleHooks(options);\n\n logger.info('Ralph-StackMemory Bridge initialized', {\n config: {\n maxTokens: this.config.contextBudget.maxTokens,\n asyncSaves: this.config.performance.asyncSaves,\n checkpoints: this.config.lifecycle.checkpoints.enabled,\n },\n });\n }\n\n /**\n * Initialize bridge with session\n */\n async initialize(options?: {\n sessionId?: string;\n loopId?: string;\n task?: string;\n criteria?: string;\n }): Promise<void> {\n logger.info('Initializing bridge', options);\n\n try {\n // Initialize session manager\n await this.sessionManager.initialize();\n\n // Get or create session\n const session = await this.sessionManager.getOrCreateSession({\n sessionId: options?.sessionId,\n });\n\n this.state.currentSession = session;\n\n // Initialize frame manager with database\n const dbAdapter = await this.getDatabaseAdapter();\n await dbAdapter.connect();\n const db = (dbAdapter as any).db; // Get the actual Database instance\n const projectId = path.basename(this.ralphDir);\n this.frameManager = new FrameManager(db, projectId, { skipContextBridge: true });\n // Initialize frame manager with session database if required\n if (this.requiresDatabase) {\n if (session.database && session.projectId) {\n this.frameManager = new FrameManager(\n session.database,\n session.projectId,\n {\n skipContextBridge: true,\n }\n );\n } else {\n throw new Error(\n 'Session database not available for FrameManager initialization. ' +\n 'If StackMemory features are not needed, set useStackMemory: false in options'\n );\n }\n } else {\n // Database not required, skip frame manager initialization\n logger.info(\n 'Running without StackMemory database (useStackMemory: false)'\n );\n }\n\n // Check for existing loop or create new\n if (options?.loopId) {\n await this.resumeLoop(options.loopId);\n } else if (options?.task && options?.criteria) {\n await this.createNewLoop(options.task, options.criteria);\n } else {\n // Try to recover from crash\n await this.attemptRecovery();\n }\n\n this.state.initialized = true;\n logger.info('Bridge initialized successfully');\n } catch (error: any) {\n logger.error('Bridge initialization failed', { error: error.message });\n throw error;\n }\n }\n\n /**\n * Create new Ralph loop with StackMemory integration\n */\n async createNewLoop(task: string, criteria: string): Promise<RalphLoopState> {\n logger.info('Creating new Ralph loop', { task: task.substring(0, 100) });\n\n const loopId = uuidv4();\n const startTime = Date.now();\n\n // Create Ralph loop state\n const loopState: RalphLoopState = {\n loopId,\n task,\n criteria,\n iteration: 0,\n status: 'initialized',\n startTime,\n lastUpdateTime: startTime,\n startCommit: await this.getCurrentGitCommit(),\n };\n\n // Initialize Ralph directory structure\n await this.initializeRalphDirectory(loopState);\n\n // Create root frame in StackMemory\n const rootFrame = await this.createRootFrame(loopState);\n\n // Save initial state\n await this.saveLoopState(loopState);\n\n this.state.activeLoop = loopState;\n\n logger.info('Ralph loop created', {\n loopId,\n frameId: rootFrame.frame_id,\n });\n\n return loopState;\n }\n\n /**\n * Resume existing loop\n */\n async resumeLoop(loopId: string): Promise<RalphLoopState> {\n logger.info('Resuming loop', { loopId });\n\n // Get state from all sources\n const sources = await this.gatherStateSources(loopId);\n\n // Reconcile state\n const reconciledState =\n await this.state.stateReconciler!.reconcile(sources);\n\n // Validate consistency\n if (this.config.stateReconciliation.validateConsistency) {\n const validation =\n await this.state.stateReconciler!.validateConsistency(reconciledState);\n\n if (validation.errors.length > 0) {\n logger.error('State validation failed', { errors: validation.errors });\n throw new Error(`Invalid state: ${validation.errors.join(', ')}`);\n }\n }\n\n this.state.activeLoop = reconciledState;\n\n // Load context from StackMemory\n const context = await this.loadIterationContext(reconciledState);\n\n logger.info('Loop resumed', {\n loopId,\n iteration: reconciledState.iteration,\n status: reconciledState.status,\n });\n\n return reconciledState;\n }\n\n /**\n * Run worker iteration\n */\n async runWorkerIteration(): Promise<RalphIteration> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n const iterationNumber = this.state.activeLoop.iteration + 1;\n logger.info('Starting worker iteration', { iteration: iterationNumber });\n\n // Load and prepare context\n let context = await this.loadIterationContext(this.state.activeLoop);\n\n // Apply context budget management\n context = this.state.contextManager!.allocateBudget(context);\n\n if (this.config.contextBudget.compressionEnabled) {\n context = this.state.contextManager!.compressContext(context);\n }\n\n // Start iteration with lifecycle\n const lifecycle = this.getLifecycle();\n context = await lifecycle.startIteration(iterationNumber, context);\n\n // Execute iteration work\n const iteration = await this.executeWorkerIteration(context);\n\n // Save iteration results\n await this.saveIterationResults(iteration);\n\n // Complete iteration with lifecycle\n await lifecycle.completeIteration(iteration);\n\n // Update loop state\n this.state.activeLoop.iteration = iterationNumber;\n this.state.activeLoop.lastUpdateTime = Date.now();\n await this.saveLoopState(this.state.activeLoop);\n\n logger.info('Worker iteration completed', {\n iteration: iterationNumber,\n changes: iteration.changes.length,\n success: iteration.validation.testsPass,\n });\n\n return iteration;\n }\n\n /**\n * Run reviewer iteration\n */\n async runReviewerIteration(): Promise<{\n complete: boolean;\n feedback?: string;\n }> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n logger.info('Starting reviewer iteration', {\n iteration: this.state.activeLoop.iteration,\n });\n\n // Evaluate against criteria\n const evaluation = await this.evaluateCompletion();\n\n if (evaluation.complete) {\n // Mark as complete\n this.state.activeLoop.status = 'completed';\n this.state.activeLoop.completionData = evaluation;\n await this.saveLoopState(this.state.activeLoop);\n\n // Handle completion\n const lifecycle = this.getLifecycle();\n await lifecycle.handleCompletion(this.state.activeLoop);\n\n logger.info('Task completed successfully');\n return { complete: true };\n }\n\n // Generate feedback for next iteration\n const feedback = this.generateFeedback(evaluation);\n this.state.activeLoop.feedback = feedback;\n\n await this.saveLoopState(this.state.activeLoop);\n\n logger.info('Reviewer iteration completed', {\n complete: false,\n feedbackLength: feedback.length,\n });\n\n return { complete: false, feedback };\n }\n\n /**\n * Rehydrate session from StackMemory\n */\n async rehydrateSession(sessionId: string): Promise<IterationContext> {\n logger.info('Rehydrating session', { sessionId });\n\n // Get session from StackMemory\n const session = await this.sessionManager.getSession(sessionId);\n\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n // Load frames from session\n const frames = await this.loadSessionFrames(sessionId);\n\n // Extract Ralph loop information\n const ralphFrames = frames.filter(\n (f) => f.type === 'task' && f.name.startsWith('ralph-')\n );\n\n if (ralphFrames.length === 0) {\n throw new Error('No Ralph loops found in session');\n }\n\n // Get most recent Ralph loop\n const latestLoop = ralphFrames[ralphFrames.length - 1];\n\n // Reconstruct loop state\n const loopState = await this.reconstructLoopState(latestLoop);\n\n // Build context from frames\n const context = await this.buildContextFromFrames(frames, loopState);\n\n this.state.activeLoop = loopState;\n\n logger.info('Session rehydrated', {\n loopId: loopState.loopId,\n iteration: loopState.iteration,\n frameCount: frames.length,\n });\n\n return context;\n }\n\n /**\n * Create checkpoint\n */\n async createCheckpoint(): Promise<Checkpoint> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n const lifecycle = this.getLifecycle();\n\n // Create dummy iteration for checkpoint\n const iteration: RalphIteration = {\n number: this.state.activeLoop.iteration,\n timestamp: Date.now(),\n analysis: {\n filesCount: 0,\n testsPass: true,\n testsFail: 0,\n lastChange: await this.getCurrentGitCommit(),\n },\n plan: {\n summary: 'Checkpoint',\n steps: [],\n priority: 'low',\n },\n changes: [],\n validation: {\n testsPass: true,\n lintClean: true,\n buildSuccess: true,\n errors: [],\n warnings: [],\n },\n };\n\n const checkpoint = await lifecycle.createCheckpoint(iteration);\n\n logger.info('Checkpoint created', {\n id: checkpoint.id,\n iteration: checkpoint.iteration,\n });\n\n return checkpoint;\n }\n\n /**\n * Restore from checkpoint\n */\n async restoreFromCheckpoint(checkpointId: string): Promise<void> {\n const lifecycle = this.getLifecycle();\n await lifecycle.restoreFromCheckpoint(checkpointId);\n\n // Reload loop state\n const sources = await this.gatherStateSources(\n this.state.activeLoop?.loopId || ''\n );\n const reconciledState =\n await this.state.stateReconciler!.reconcile(sources);\n\n this.state.activeLoop = reconciledState;\n\n logger.info('Restored from checkpoint', {\n checkpointId,\n iteration: reconciledState.iteration,\n });\n }\n\n /**\n * Get performance metrics\n */\n getPerformanceMetrics() {\n return this.state.performanceOptimizer!.getMetrics();\n }\n\n /**\n * Start a new Ralph loop\n */\n async startLoop(options: {\n task: string;\n criteria: string;\n }): Promise<string> {\n const state = await this.createNewLoop(options.task, options.criteria);\n return state.loopId;\n }\n\n /**\n * Stop the active loop\n */\n async stopLoop(): Promise<void> {\n if (!this.state.activeLoop) {\n logger.warn('No active loop to stop');\n return;\n }\n\n this.state.activeLoop.status = 'completed';\n this.state.activeLoop.lastUpdateTime = Date.now();\n await this.saveLoopState(this.state.activeLoop);\n\n // Handle completion lifecycle\n const lifecycle = this.getLifecycle();\n await lifecycle.handleCompletion(this.state.activeLoop);\n\n logger.info('Ralph loop stopped', { loopId: this.state.activeLoop.loopId });\n this.state.activeLoop = undefined;\n }\n\n /**\n * Cleanup resources\n */\n async cleanup(): Promise<void> {\n logger.info('Cleaning up bridge resources');\n\n // Flush any pending saves\n await this.state.performanceOptimizer!.flushBatch();\n\n // Clean up lifecycle\n this.getLifecycle().cleanup();\n\n // Clean up optimizer\n this.state.performanceOptimizer!.cleanup();\n\n logger.info('Bridge cleanup completed');\n }\n\n /**\n * Merge configuration with defaults\n */\n private mergeConfig(\n config?: Partial<RalphStackMemoryConfig>\n ): RalphStackMemoryConfig {\n return {\n contextBudget: {\n maxTokens: 4000,\n priorityWeights: {\n task: 0.3,\n recentWork: 0.25,\n feedback: 0.2,\n gitHistory: 0.15,\n dependencies: 0.1,\n },\n compressionEnabled: true,\n adaptiveBudgeting: true,\n ...config?.contextBudget,\n },\n stateReconciliation: {\n precedence: ['git', 'files', 'memory'],\n conflictResolution: 'automatic',\n syncInterval: 5000,\n validateConsistency: true,\n ...config?.stateReconciliation,\n },\n lifecycle: {\n hooks: {\n preIteration: true,\n postIteration: true,\n onStateChange: true,\n onError: true,\n onComplete: true,\n },\n checkpoints: {\n enabled: true,\n frequency: 5,\n retentionDays: 7,\n },\n ...config?.lifecycle,\n },\n performance: {\n asyncSaves: true,\n batchSize: 10,\n compressionLevel: 2,\n cacheEnabled: true,\n parallelOperations: true,\n ...config?.performance,\n },\n };\n }\n\n /**\n * Setup lifecycle hooks\n */\n private setupLifecycleHooks(options?: BridgeOptions): void {\n const hooks: LifecycleHooks = {\n preIteration: async (context) => {\n logger.debug('Pre-iteration hook', {\n iteration: context.task.currentIteration,\n });\n return context;\n },\n postIteration: async (iteration) => {\n // Save to StackMemory\n await this.saveIterationFrame(iteration);\n },\n onStateChange: async (oldState, newState) => {\n // Update StackMemory with state change\n await this.updateStateFrame(oldState, newState);\n },\n onError: async (error, context) => {\n logger.error('Iteration error', { error: error.message, context });\n // Save error frame\n await this.saveErrorFrame(error, context);\n },\n onComplete: async (state) => {\n // Close root frame\n await this.closeRootFrame(state);\n },\n };\n\n const lifecycle = new IterationLifecycle(this.config.lifecycle, hooks);\n (this.state as any).lifecycle = lifecycle;\n }\n\n /**\n * Get lifecycle instance\n */\n private getLifecycle(): IterationLifecycle {\n return (this.state as any).lifecycle;\n }\n\n /**\n * Initialize Ralph directory structure\n */\n private async initializeRalphDirectory(state: RalphLoopState): Promise<void> {\n await fs.mkdir(this.ralphDir, { recursive: true });\n await fs.mkdir(path.join(this.ralphDir, 'history'), { recursive: true });\n\n // Write initial files\n await fs.writeFile(path.join(this.ralphDir, 'task.md'), state.task);\n await fs.writeFile(\n path.join(this.ralphDir, 'completion-criteria.md'),\n state.criteria\n );\n await fs.writeFile(path.join(this.ralphDir, 'iteration.txt'), '0');\n await fs.writeFile(path.join(this.ralphDir, 'feedback.txt'), '');\n await fs.writeFile(\n path.join(this.ralphDir, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n }\n\n /**\n * Create root frame for Ralph loop\n */\n private async createRootFrame(state: RalphLoopState): Promise<Frame> {\n if (!this.requiresDatabase) {\n // Return a mock frame when database is not required\n return {\n frame_id: `mock-${state.loopId}`,\n type: 'task' as FrameType,\n name: `ralph-${state.loopId}`,\n inputs: {\n task: state.task,\n criteria: state.criteria,\n loopId: state.loopId,\n },\n created_at: Date.now(),\n } as Frame;\n }\n\n if (!this.frameManager) {\n throw new Error('Frame manager not initialized');\n }\n\n const frame: Partial<Frame> = {\n type: 'task' as FrameType,\n name: `ralph-${state.loopId}`,\n inputs: {\n task: state.task,\n criteria: state.criteria,\n loopId: state.loopId,\n },\n digest_json: {\n type: 'ralph_loop',\n status: 'started',\n },\n };\n\n return await this.frameManager.createFrame({\n name: frame.name,\n type: frame.type,\n content: frame.content || '',\n metadata: frame.metadata\n });\n }\n\n /**\n * Load iteration context from StackMemory\n */\n private async loadIterationContext(\n state: RalphLoopState\n ): Promise<IterationContext> {\n const frames = await this.loadRelevantFrames(state.loopId);\n\n return {\n task: {\n description: state.task,\n criteria: state.criteria.split('\\n').filter(Boolean),\n currentIteration: state.iteration,\n feedback: state.feedback,\n priority: 'medium',\n },\n history: {\n recentIterations: await this.loadRecentIterations(state.loopId),\n gitCommits: await this.loadGitCommits(),\n changedFiles: await this.loadChangedFiles(),\n testResults: [],\n },\n environment: {\n projectPath: process.cwd(),\n branch: await this.getCurrentBranch(),\n dependencies: {},\n configuration: {},\n },\n memory: {\n relevantFrames: frames,\n decisions: [],\n patterns: [],\n blockers: [],\n },\n tokenCount: 0,\n };\n }\n\n /**\n * Execute worker iteration\n */\n private async executeWorkerIteration(\n context: IterationContext\n ): Promise<RalphIteration> {\n const iterationNumber = context.task.currentIteration + 1;\n\n try {\n // Analyze current codebase state\n const analysis = await this.analyzeCodebaseState();\n\n // Generate iteration plan based on context and analysis\n const plan = await this.generateIterationPlan(context, analysis);\n\n // Execute the planned changes\n const changes = await this.executeIterationChanges(plan, context);\n\n // Validate the changes\n const validation = await this.validateIterationResults(changes);\n\n logger.info('Iteration execution completed', {\n iteration: iterationNumber,\n changesCount: changes.length,\n testsPass: validation.testsPass,\n });\n\n return {\n number: iterationNumber,\n timestamp: Date.now(),\n analysis,\n plan,\n changes,\n validation,\n };\n } catch (error: unknown) {\n logger.error('Iteration execution failed', error as Error);\n\n // Return a minimal iteration with error state\n return {\n number: iterationNumber,\n timestamp: Date.now(),\n analysis: {\n filesCount: 0,\n testsPass: false,\n testsFail: 1,\n lastChange: `Error: ${(error as Error).message}`,\n },\n plan: {\n summary: 'Iteration failed due to error',\n steps: ['Investigate error', 'Fix underlying issue'],\n priority: 'high',\n },\n changes: [],\n validation: {\n testsPass: false,\n lintClean: false,\n buildSuccess: false,\n errors: [(error as Error).message],\n warnings: [],\n },\n };\n }\n }\n\n /**\n * Analyze current codebase state\n */\n private async analyzeCodebaseState(): Promise<any> {\n try {\n const stats = {\n filesCount: 0,\n testsPass: true,\n testsFail: 0,\n lastChange: 'No recent changes',\n };\n\n // Count files in the project (excluding node_modules, .git, etc.)\n try {\n const { execSync } = await import('child_process');\n const output = execSync(\n 'find . -type f -name \"*.ts\" -o -name \"*.js\" -o -name \"*.json\" | grep -v node_modules | grep -v .git | wc -l',\n { encoding: 'utf8', cwd: process.cwd() }\n );\n stats.filesCount = parseInt(output.trim()) || 0;\n } catch {\n stats.filesCount = 0;\n }\n\n // Check git status for recent changes\n try {\n const { execSync } = await import('child_process');\n const gitLog = execSync('git log -1 --oneline', {\n encoding: 'utf8',\n cwd: process.cwd(),\n });\n stats.lastChange = gitLog.trim() || 'No git history';\n } catch {\n stats.lastChange = 'No git repository';\n }\n\n // Run basic tests if available\n try {\n const { existsSync } = await import('fs');\n if (existsSync('package.json')) {\n const packageJson = JSON.parse(\n await fs.readFile('package.json', 'utf8')\n );\n if (packageJson.scripts?.test) {\n const { execSync } = await import('child_process');\n execSync('npm test', { stdio: 'pipe', timeout: 30000 });\n stats.testsPass = true;\n stats.testsFail = 0;\n }\n }\n } catch {\n stats.testsPass = false;\n stats.testsFail = 1;\n }\n\n return stats;\n } catch (error: unknown) {\n return {\n filesCount: 0,\n testsPass: false,\n testsFail: 1,\n lastChange: `Analysis failed: ${(error as Error).message}`,\n };\n }\n }\n\n /**\n * Generate iteration plan based on context and analysis\n */\n private async generateIterationPlan(\n context: IterationContext,\n analysis: any\n ): Promise<any> {\n // Extract task information\n const task = context.task.task || 'Complete assigned work';\n const criteria = context.task.criteria || 'Meet completion criteria';\n\n // Generate basic plan based on analysis\n const steps = [];\n\n if (!analysis.testsPass) {\n steps.push('Fix failing tests');\n }\n\n if (analysis.filesCount === 0) {\n steps.push('Initialize project structure');\n }\n\n // Add task-specific steps\n if (task.toLowerCase().includes('implement')) {\n steps.push('Implement required functionality');\n steps.push('Add appropriate tests');\n } else if (task.toLowerCase().includes('fix')) {\n steps.push('Identify root cause');\n steps.push('Implement fix');\n steps.push('Verify fix works');\n } else {\n steps.push('Analyze requirements');\n steps.push('Plan implementation approach');\n steps.push('Execute planned work');\n }\n\n steps.push('Validate changes');\n\n return {\n summary: `Iteration plan for: ${task}`,\n steps,\n priority: analysis.testsPass ? 'medium' : 'high',\n };\n }\n\n /**\n * Execute planned changes\n */\n private async executeIterationChanges(\n plan: any,\n context: IterationContext\n ): Promise<any[]> {\n const changes = [];\n\n // This would integrate with actual Ralph implementation\n // For now, we'll simulate basic changes based on the plan\n\n for (let i = 0; i < plan.steps.length; i++) {\n const step = plan.steps[i];\n\n changes.push({\n type: 'step_execution',\n description: step,\n timestamp: Date.now(),\n files_affected: [],\n success: true,\n });\n\n // Small delay to simulate work\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n logger.debug('Executed iteration changes', {\n stepsCount: plan.steps.length,\n changesCount: changes.length,\n });\n\n return changes;\n }\n\n /**\n * Validate iteration results\n */\n private async validateIterationResults(changes: any[]): Promise<any> {\n const validation = {\n testsPass: true,\n lintClean: true,\n buildSuccess: true,\n errors: [],\n warnings: [],\n };\n\n // Run validation checks if available\n try {\n const { existsSync } = await import('fs');\n\n // Check if linting is available\n if (existsSync('package.json')) {\n const packageJson = JSON.parse(\n await fs.readFile('package.json', 'utf8')\n );\n\n if (packageJson.scripts?.lint) {\n try {\n const { execSync } = await import('child_process');\n execSync('npm run lint', { stdio: 'pipe', timeout: 30000 });\n validation.lintClean = true;\n } catch (error: any) {\n validation.lintClean = false;\n validation.warnings.push('Lint warnings detected');\n }\n }\n\n if (packageJson.scripts?.build) {\n try {\n const { execSync } = await import('child_process');\n execSync('npm run build', { stdio: 'pipe', timeout: 60000 });\n validation.buildSuccess = true;\n } catch (error: any) {\n validation.buildSuccess = false;\n validation.errors.push('Build failed');\n }\n }\n }\n } catch (error: unknown) {\n validation.errors.push(`Validation error: ${(error as Error).message}`);\n }\n\n return validation;\n }\n\n /**\n * Save iteration results\n */\n private async saveIterationResults(iteration: RalphIteration): Promise<void> {\n // Save with performance optimization\n await this.state.performanceOptimizer!.saveIteration(iteration);\n\n // Save iteration artifacts to Ralph directory\n const iterDir = path.join(\n this.ralphDir,\n 'history',\n `iteration-${String(iteration.number).padStart(3, '0')}`\n );\n\n await fs.mkdir(iterDir, { recursive: true });\n await fs.writeFile(\n path.join(iterDir, 'artifacts.json'),\n JSON.stringify(iteration, null, 2)\n );\n }\n\n /**\n * Save iteration frame to StackMemory\n */\n private async saveIterationFrame(iteration: RalphIteration): Promise<void> {\n if (!this.requiresDatabase || !this.frameManager || !this.state.activeLoop)\n return;\n\n const frame: Partial<Frame> = {\n type: 'subtask' as FrameType,\n name: `iteration-${iteration.number}`,\n inputs: {\n iterationNumber: iteration.number,\n loopId: this.state.activeLoop.loopId,\n },\n outputs: {\n changes: iteration.changes.length,\n success: iteration.validation.testsPass,\n },\n digest_json: iteration,\n };\n\n await this.state.performanceOptimizer!.saveFrame(frame as Frame);\n }\n\n /**\n * Get database adapter for FrameManager\n */\n private async getDatabaseAdapter(): Promise<SQLiteAdapter> {\n const dbPath = path.join(this.ralphDir, 'stackmemory.db');\n const projectId = path.basename(this.ralphDir);\n return new SQLiteAdapter(projectId, { dbPath });\n }\n\n /**\n * Additional helper methods\n */\n private async getCurrentGitCommit(): Promise<string> {\n try {\n // execSync already imported at top\n return execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();\n } catch {\n return '';\n }\n }\n\n private async getCurrentBranch(): Promise<string> {\n try {\n // execSync already imported at top\n return execSync('git branch --show-current', { encoding: 'utf8' }).trim();\n } catch {\n return 'main';\n }\n }\n\n private async saveLoopState(state: RalphLoopState): Promise<void> {\n // Save state.json\n await fs.writeFile(\n path.join(this.ralphDir, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n\n // Synchronize iteration.txt with current iteration\n await fs.writeFile(\n path.join(this.ralphDir, 'iteration.txt'),\n state.iteration.toString()\n );\n\n logger.debug('Saved loop state', {\n iteration: state.iteration,\n status: state.status,\n });\n }\n\n private async gatherStateSources(loopId: string): Promise<StateSource[]> {\n const sources: StateSource[] = [];\n\n // Get git state\n sources.push(await this.state.stateReconciler!.getGitState());\n\n // Get file state\n sources.push(await this.state.stateReconciler!.getFileState());\n\n // Get memory state\n sources.push(await this.state.stateReconciler!.getMemoryState(loopId));\n\n return sources;\n }\n\n private async attemptRecovery(): Promise<void> {\n logger.info('Attempting crash recovery');\n\n try {\n // Check for incomplete loops in file system\n const stateFile = path.join(this.ralphDir, 'state.json');\n const exists = await fs\n .stat(stateFile)\n .then(() => true)\n .catch(() => false);\n\n if (exists) {\n const stateData = await fs.readFile(stateFile, 'utf8');\n const state = JSON.parse(stateData) as RalphLoopState;\n\n if (state.status !== 'completed') {\n logger.info('Found incomplete loop', { loopId: state.loopId });\n await this.resumeLoop(state.loopId);\n }\n }\n } catch (error: any) {\n logger.error('Recovery failed', { error: error.message });\n }\n }\n\n private async evaluateCompletion(): Promise<any> {\n // This would evaluate completion criteria\n // Placeholder implementation\n return {\n complete: false,\n criteria: {},\n unmet: ['criteria1', 'criteria2'],\n };\n }\n\n private generateFeedback(evaluation: any): string {\n if (evaluation.unmet.length === 0) {\n return 'All criteria met';\n }\n return `Still need to address:\\n${evaluation.unmet.map((c: string) => `- ${c}`).join('\\n')}`;\n }\n\n private async loadRelevantFrames(loopId: string): Promise<Frame[]> {\n // This would load frames from StackMemory\n // Placeholder implementation\n return [];\n }\n\n private async loadRecentIterations(loopId: string): Promise<any[]> {\n // Load recent iteration summaries\n return [];\n }\n\n private async loadGitCommits(): Promise<any[]> {\n // Load recent git commits\n return [];\n }\n\n private async loadChangedFiles(): Promise<string[]> {\n // Load recently changed files\n return [];\n }\n\n private async loadSessionFrames(sessionId: string): Promise<Frame[]> {\n // Load frames from session\n return [];\n }\n\n private async reconstructLoopState(frame: Frame): Promise<RalphLoopState> {\n // Reconstruct loop state from frame\n return {\n loopId: frame.inputs.loopId || '',\n task: frame.inputs.task || '',\n criteria: frame.inputs.criteria || '',\n iteration: 0,\n status: 'running',\n startTime: frame.created_at,\n lastUpdateTime: Date.now(),\n };\n }\n\n private async buildContextFromFrames(\n frames: Frame[],\n state: RalphLoopState\n ): Promise<IterationContext> {\n // Build context from frames\n return await this.loadIterationContext(state);\n }\n\n private async updateStateFrame(\n oldState: RalphLoopState,\n newState: RalphLoopState\n ): Promise<void> {\n // Update state in StackMemory\n logger.debug('State frame updated');\n }\n\n private async saveErrorFrame(error: Error, context: any): Promise<void> {\n // Save error as frame\n logger.debug('Error frame saved');\n }\n\n private async closeRootFrame(state: RalphLoopState): Promise<void> {\n // Close the root frame\n logger.debug('Root frame closed');\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["execSync"]
|
|
7
|
-
}
|