@stackmemoryai/stackmemory 0.5.58 → 0.5.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/search.js +20 -3
- package/dist/cli/commands/search.js.map +2 -2
- package/dist/core/database/sqlite-adapter.js +13 -3
- package/dist/core/database/sqlite-adapter.js.map +2 -2
- package/dist/core/errors/error-utils.js +208 -0
- package/dist/core/errors/error-utils.js.map +7 -0
- package/dist/core/errors/index.js +13 -4
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/merge/unified-merge-resolver.js +303 -0
- package/dist/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/core/monitoring/logger.js +61 -9
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/security/index.js +35 -0
- package/dist/core/security/index.js.map +7 -0
- package/dist/core/security/input-sanitizer.js +321 -0
- package/dist/core/security/input-sanitizer.js.map +7 -0
- package/dist/integrations/linear/client.js +5 -1
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/mcp/remote-server.js +27 -36
- package/dist/integrations/mcp/remote-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +44 -29
- package/dist/integrations/mcp/server.js.map +3 -3
- 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 +527 -0
- package/dist/src/agents/core/agent-task-manager.js.map +7 -0
- package/dist/src/agents/verifiers/base-verifier.js +133 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/llm-judge.js +252 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/src/cli/auto-detect.js +321 -0
- package/dist/src/cli/auto-detect.js.map +7 -0
- package/dist/src/cli/claude-sm-danger.js +21 -0
- package/dist/src/cli/claude-sm-danger.js.map +7 -0
- package/dist/src/cli/claude-sm.js +1156 -0
- package/dist/src/cli/claude-sm.js.map +7 -0
- package/dist/src/cli/codex-sm-danger.js +21 -0
- package/dist/src/cli/codex-sm-danger.js.map +7 -0
- package/dist/src/cli/codex-sm.js +349 -0
- package/dist/src/cli/codex-sm.js.map +7 -0
- package/dist/src/cli/commands/api.js +232 -0
- package/dist/src/cli/commands/api.js.map +7 -0
- package/dist/src/cli/commands/auto-background.js +180 -0
- package/dist/src/cli/commands/auto-background.js.map +7 -0
- package/dist/src/cli/commands/cleanup-processes.js +68 -0
- package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/src/cli/commands/clear.js +202 -0
- package/dist/src/cli/commands/clear.js.map +7 -0
- package/dist/src/cli/commands/config.js +445 -0
- package/dist/src/cli/commands/config.js.map +7 -0
- package/dist/src/cli/commands/context-rehydrate.js +751 -0
- package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
- package/dist/src/cli/commands/context.js +343 -0
- package/dist/src/cli/commands/context.js.map +7 -0
- package/dist/src/cli/commands/daemon.js +392 -0
- package/dist/src/cli/commands/daemon.js.map +7 -0
- package/dist/src/cli/commands/dashboard.js +210 -0
- package/dist/src/cli/commands/dashboard.js.map +7 -0
- package/dist/src/cli/commands/db.js +147 -0
- package/dist/src/cli/commands/db.js.map +7 -0
- package/dist/src/cli/commands/decision.js +266 -0
- package/dist/src/cli/commands/decision.js.map +7 -0
- package/dist/src/cli/commands/discovery.js +279 -0
- package/dist/src/cli/commands/discovery.js.map +7 -0
- package/dist/src/cli/commands/handoff.js +624 -0
- package/dist/src/cli/commands/handoff.js.map +7 -0
- package/dist/src/cli/commands/hooks.js +298 -0
- package/dist/src/cli/commands/hooks.js.map +7 -0
- package/dist/src/cli/commands/linear.js +529 -0
- package/dist/src/cli/commands/linear.js.map +7 -0
- package/dist/src/cli/commands/log.js +169 -0
- package/dist/src/cli/commands/log.js.map +7 -0
- package/dist/src/cli/commands/login.js +172 -0
- package/dist/src/cli/commands/login.js.map +7 -0
- package/dist/src/cli/commands/migrate.js +240 -0
- package/dist/src/cli/commands/migrate.js.map +7 -0
- package/dist/src/cli/commands/model.js +533 -0
- package/dist/src/cli/commands/model.js.map +7 -0
- package/dist/src/cli/commands/onboard.js +536 -0
- package/dist/src/cli/commands/onboard.js.map +7 -0
- package/dist/src/cli/commands/projects.js +199 -0
- package/dist/src/cli/commands/projects.js.map +7 -0
- package/dist/src/cli/commands/ralph.js +909 -0
- package/dist/src/cli/commands/ralph.js.map +7 -0
- package/dist/src/cli/commands/retrieval.js +248 -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 +749 -0
- package/dist/src/cli/commands/service.js.map +7 -0
- package/dist/src/cli/commands/session.js +200 -0
- package/dist/src/cli/commands/session.js.map +7 -0
- package/dist/src/cli/commands/settings.js +306 -0
- package/dist/src/cli/commands/settings.js.map +7 -0
- package/dist/src/cli/commands/setup.js +701 -0
- package/dist/src/cli/commands/setup.js.map +7 -0
- package/dist/src/cli/commands/shell.js +249 -0
- package/dist/src/cli/commands/shell.js.map +7 -0
- package/dist/src/cli/commands/signup.js +50 -0
- package/dist/src/cli/commands/signup.js.map +7 -0
- package/dist/src/cli/commands/skills.js +470 -0
- package/dist/src/cli/commands/skills.js.map +7 -0
- package/dist/src/cli/commands/sms-notify.js +795 -0
- package/dist/src/cli/commands/sms-notify.js.map +7 -0
- package/dist/src/cli/commands/storage-tier.js +183 -0
- package/dist/src/cli/commands/storage-tier.js.map +7 -0
- package/dist/src/cli/commands/sweep.js +249 -0
- package/dist/src/cli/commands/sweep.js.map +7 -0
- package/dist/src/cli/commands/tasks.js +213 -0
- package/dist/src/cli/commands/tasks.js.map +7 -0
- package/dist/src/cli/commands/worktree.js +319 -0
- package/dist/src/cli/commands/worktree.js.map +7 -0
- package/dist/src/cli/index.js +594 -0
- package/dist/src/cli/index.js.map +7 -0
- package/dist/src/cli/opencode-sm.js +448 -0
- package/dist/src/cli/opencode-sm.js.map +7 -0
- package/dist/src/cli/utils/viewer.js +96 -0
- package/dist/src/cli/utils/viewer.js.map +7 -0
- package/dist/src/core/config/config-manager.js +398 -0
- package/dist/src/core/config/config-manager.js.map +7 -0
- package/dist/src/core/config/feature-flags.js +76 -0
- package/dist/src/core/config/feature-flags.js.map +7 -0
- package/dist/src/core/config/storage-config.js +115 -0
- package/dist/src/core/config/storage-config.js.map +7 -0
- package/dist/src/core/config/types.js +144 -0
- package/dist/src/core/config/types.js.map +7 -0
- package/dist/src/core/context/auto-context.js +80 -0
- package/dist/src/core/context/auto-context.js.map +7 -0
- package/dist/src/core/context/dual-stack-manager.js +870 -0
- package/dist/src/core/context/dual-stack-manager.js.map +7 -0
- package/dist/src/core/context/enhanced-rehydration.js +994 -0
- package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
- package/dist/src/core/context/frame-database.js +479 -0
- package/dist/src/core/context/frame-database.js.map +7 -0
- package/dist/src/core/context/frame-digest.js +250 -0
- package/dist/src/core/context/frame-digest.js.map +7 -0
- package/dist/src/core/context/frame-handoff-manager.js +778 -0
- package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
- package/dist/src/core/context/frame-recovery.js +302 -0
- package/dist/src/core/context/frame-recovery.js.map +7 -0
- package/dist/src/core/context/frame-stack.js +314 -0
- package/dist/src/core/context/frame-stack.js.map +7 -0
- package/dist/src/core/context/frame-types.js +5 -0
- package/dist/src/core/context/frame-types.js.map +7 -0
- package/dist/src/core/context/index.js +25 -0
- package/dist/src/core/context/index.js.map +7 -0
- package/dist/src/core/context/permission-manager.js +185 -0
- package/dist/src/core/context/permission-manager.js.map +7 -0
- package/dist/src/core/context/recursive-context-manager.js +592 -0
- package/dist/src/core/context/recursive-context-manager.js.map +7 -0
- package/dist/src/core/context/refactored-frame-manager.js +754 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/src/core/context/shared-context-layer.js +621 -0
- package/dist/src/core/context/shared-context-layer.js.map +7 -0
- package/dist/src/core/context/stack-merge-resolver.js +749 -0
- package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/src/core/context/validation.js +130 -0
- package/dist/src/core/context/validation.js.map +7 -0
- package/dist/src/core/database/batch-operations.js +384 -0
- package/dist/src/core/database/batch-operations.js.map +7 -0
- package/dist/src/core/database/connection-pool.js +330 -0
- package/dist/src/core/database/connection-pool.js.map +7 -0
- package/dist/src/core/database/database-adapter.js +60 -0
- package/dist/src/core/database/database-adapter.js.map +7 -0
- package/dist/src/core/database/migration-manager.js +614 -0
- package/dist/src/core/database/migration-manager.js.map +7 -0
- package/dist/src/core/database/query-cache.js +298 -0
- package/dist/src/core/database/query-cache.js.map +7 -0
- package/dist/src/core/database/query-router.js +430 -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 +277 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/src/core/digest/frame-digest-integration.js +176 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/src/core/digest/index.js +9 -0
- package/dist/src/core/digest/index.js.map +7 -0
- package/dist/src/core/digest/types.js +25 -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 +269 -0
- package/dist/src/core/errors/recovery.js.map +7 -0
- package/dist/src/core/execution/parallel-executor.js +258 -0
- package/dist/src/core/execution/parallel-executor.js.map +7 -0
- package/dist/src/core/frame/workflow-templates.js +319 -0
- package/dist/src/core/frame/workflow-templates.js.map +7 -0
- package/dist/src/core/merge/conflict-detector.js +431 -0
- package/dist/src/core/merge/conflict-detector.js.map +7 -0
- package/dist/src/core/merge/index.js +9 -0
- package/dist/src/core/merge/index.js.map +7 -0
- package/dist/src/core/merge/resolution-engine.js +558 -0
- package/dist/src/core/merge/resolution-engine.js.map +7 -0
- package/dist/src/core/merge/stack-diff.js +532 -0
- package/dist/src/core/merge/stack-diff.js.map +7 -0
- package/dist/src/core/merge/types.js +5 -0
- package/dist/src/core/merge/types.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 +232 -0
- package/dist/src/core/models/fallback-monitor.js.map +7 -0
- package/dist/src/core/models/model-router.js +340 -0
- package/dist/src/core/models/model-router.js.map +7 -0
- package/dist/src/core/monitoring/error-handler.js +49 -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 +172 -0
- package/dist/src/core/monitoring/metrics.js.map +7 -0
- package/dist/src/core/monitoring/progress-tracker.js +189 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/src/core/monitoring/session-monitor.js +300 -0
- package/dist/src/core/monitoring/session-monitor.js.map +7 -0
- package/dist/src/core/performance/context-cache.js +273 -0
- package/dist/src/core/performance/context-cache.js.map +7 -0
- package/dist/src/core/performance/index.js +11 -0
- package/dist/src/core/performance/index.js.map +7 -0
- package/dist/src/core/performance/lazy-context-loader.js +327 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/src/core/performance/monitor.js +221 -0
- package/dist/src/core/performance/monitor.js.map +7 -0
- package/dist/src/core/performance/optimized-frame-context.js +345 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/src/core/performance/performance-benchmark.js +277 -0
- package/dist/src/core/performance/performance-benchmark.js.map +7 -0
- package/dist/src/core/performance/performance-profiler.js +370 -0
- package/dist/src/core/performance/performance-profiler.js.map +7 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/src/core/persistence/postgres-adapter.js +349 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/src/core/projects/project-isolation.js +201 -0
- package/dist/src/core/projects/project-isolation.js.map +7 -0
- package/dist/src/core/projects/project-manager.js +697 -0
- package/dist/src/core/projects/project-manager.js.map +7 -0
- package/dist/src/core/query/query-parser.js +370 -0
- package/dist/src/core/query/query-parser.js.map +7 -0
- package/dist/src/core/query/query-templates.js +321 -0
- package/dist/src/core/query/query-templates.js.map +7 -0
- package/dist/src/core/retrieval/context-retriever.js +479 -0
- package/dist/src/core/retrieval/context-retriever.js.map +7 -0
- package/dist/src/core/retrieval/index.js +8 -0
- package/dist/src/core/retrieval/index.js.map +7 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/src/core/retrieval/llm-provider.js +151 -0
- package/dist/src/core/retrieval/llm-provider.js.map +7 -0
- package/dist/src/core/retrieval/retrieval-audit.js +236 -0
- package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
- package/dist/src/core/retrieval/summary-generator.js +589 -0
- package/dist/src/core/retrieval/summary-generator.js.map +7 -0
- package/dist/src/core/retrieval/types.js +21 -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 +465 -0
- package/dist/src/core/session/clear-survival.js.map +7 -0
- package/dist/src/core/session/enhanced-handoff.js +792 -0
- package/dist/src/core/session/enhanced-handoff.js.map +7 -0
- package/dist/src/core/session/handoff-generator.js +343 -0
- package/dist/src/core/session/handoff-generator.js.map +7 -0
- package/dist/src/core/session/index.js +15 -0
- package/dist/src/core/session/index.js.map +7 -0
- package/dist/src/core/session/session-manager.js +347 -0
- package/dist/src/core/session/session-manager.js.map +7 -0
- package/dist/src/core/skills/index.js +7 -0
- package/dist/src/core/skills/index.js.map +7 -0
- package/dist/src/core/skills/skill-storage.js +764 -0
- package/dist/src/core/skills/skill-storage.js.map +7 -0
- package/dist/src/core/skills/types.js +193 -0
- package/dist/src/core/skills/types.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +354 -0
- package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
- package/dist/src/core/storage/infinite-storage.js +510 -0
- package/dist/src/core/storage/infinite-storage.js.map +7 -0
- package/dist/src/core/storage/remote-storage.js +489 -0
- package/dist/src/core/storage/remote-storage.js.map +7 -0
- package/dist/src/core/storage/two-tier-storage.js +766 -0
- package/dist/src/core/storage/two-tier-storage.js.map +7 -0
- package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/db-trace-wrapper.js +247 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/debug-trace.js +417 -0
- package/dist/src/core/trace/debug-trace.js.map +7 -0
- package/dist/src/core/trace/index.js +109 -0
- package/dist/src/core/trace/index.js.map +7 -0
- package/dist/src/core/trace/linear-api-wrapper.js +178 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/src/core/trace/trace-detector.js +528 -0
- package/dist/src/core/trace/trace-detector.js.map +7 -0
- package/dist/src/core/trace/trace-store.js +345 -0
- package/dist/src/core/trace/trace-store.js.map +7 -0
- package/dist/src/core/trace/types.js +77 -0
- package/dist/src/core/trace/types.js.map +7 -0
- package/dist/src/core/types.js +5 -0
- package/dist/src/core/types.js.map +7 -0
- package/dist/src/core/utils/async-mutex.js +114 -0
- package/dist/src/core/utils/async-mutex.js.map +7 -0
- package/dist/src/core/utils/compression.js +83 -0
- package/dist/src/core/utils/compression.js.map +7 -0
- package/dist/src/core/utils/update-checker.js +218 -0
- package/dist/src/core/utils/update-checker.js.map +7 -0
- package/dist/src/core/worktree/worktree-manager.js +465 -0
- package/dist/src/core/worktree/worktree-manager.js.map +7 -0
- package/dist/src/daemon/daemon-config.js +149 -0
- package/dist/src/daemon/daemon-config.js.map +7 -0
- package/dist/src/daemon/services/context-service.js +122 -0
- package/dist/src/daemon/services/context-service.js.map +7 -0
- package/dist/src/daemon/services/linear-service.js +136 -0
- package/dist/src/daemon/services/linear-service.js.map +7 -0
- package/dist/src/daemon/session-daemon.js +312 -0
- package/dist/src/daemon/session-daemon.js.map +7 -0
- package/dist/src/daemon/unified-daemon.js +276 -0
- package/dist/src/daemon/unified-daemon.js.map +7 -0
- package/dist/src/features/analytics/api/analytics-api.js +287 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/src/features/analytics/core/analytics-service.js +282 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/src/features/analytics/index.js +18 -0
- package/dist/src/features/analytics/index.js.map +7 -0
- package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/src/features/analytics/types/metrics.js +5 -0
- package/dist/src/features/analytics/types/metrics.js.map +7 -0
- package/dist/src/features/browser/browser-mcp.js +492 -0
- package/dist/src/features/browser/browser-mcp.js.map +7 -0
- package/dist/src/features/sweep/index.js +20 -0
- package/dist/src/features/sweep/index.js.map +7 -0
- package/dist/src/features/sweep/prediction-client.js +155 -0
- package/dist/src/features/sweep/prediction-client.js.map +7 -0
- package/dist/src/features/sweep/prompt-builder.js +85 -0
- package/dist/src/features/sweep/prompt-builder.js.map +7 -0
- package/dist/src/features/sweep/pty-wrapper.js +171 -0
- package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
- package/dist/src/features/sweep/state-watcher.js +87 -0
- package/dist/src/features/sweep/state-watcher.js.map +7 -0
- package/dist/src/features/sweep/status-bar.js +88 -0
- package/dist/src/features/sweep/status-bar.js.map +7 -0
- package/dist/src/features/sweep/sweep-server-manager.js +226 -0
- package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
- package/dist/src/features/sweep/tab-interceptor.js +38 -0
- package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
- package/dist/src/features/sweep/types.js +18 -0
- package/dist/src/features/sweep/types.js.map +7 -0
- package/dist/src/features/tasks/linear-task-manager.js +487 -0
- package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
- package/dist/src/features/tasks/task-aware-context.js +410 -0
- package/dist/src/features/tasks/task-aware-context.js.map +7 -0
- package/dist/src/features/tui/simple-monitor.js +116 -0
- package/dist/src/features/tui/simple-monitor.js.map +7 -0
- package/dist/src/features/tui/swarm-monitor.js +648 -0
- package/dist/src/features/tui/swarm-monitor.js.map +7 -0
- package/dist/src/features/web/client/stores/task-store.js +26 -0
- package/dist/src/features/web/client/stores/task-store.js.map +7 -0
- package/dist/src/features/web/server/index.js +194 -0
- package/dist/src/features/web/server/index.js.map +7 -0
- package/dist/src/hooks/auto-background.js +151 -0
- package/dist/src/hooks/auto-background.js.map +7 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
- package/dist/src/hooks/config.js +150 -0
- package/dist/src/hooks/config.js.map +7 -0
- package/dist/src/hooks/daemon.js +364 -0
- package/dist/src/hooks/daemon.js.map +7 -0
- package/dist/src/hooks/events.js +58 -0
- package/dist/src/hooks/events.js.map +7 -0
- package/dist/src/hooks/index.js +12 -0
- package/dist/src/hooks/index.js.map +7 -0
- package/dist/src/hooks/linear-task-picker.js +186 -0
- package/dist/src/hooks/linear-task-picker.js.map +7 -0
- package/dist/src/hooks/schemas.js +197 -0
- package/dist/src/hooks/schemas.js.map +7 -0
- package/dist/src/hooks/secure-fs.js +49 -0
- package/dist/src/hooks/secure-fs.js.map +7 -0
- package/dist/src/hooks/security-logger.js +155 -0
- package/dist/src/hooks/security-logger.js.map +7 -0
- package/dist/src/hooks/session-summary.js +222 -0
- package/dist/src/hooks/session-summary.js.map +7 -0
- package/dist/src/hooks/sms-action-runner.js +371 -0
- package/dist/src/hooks/sms-action-runner.js.map +7 -0
- package/dist/src/hooks/sms-notify.js +506 -0
- package/dist/src/hooks/sms-notify.js.map +7 -0
- package/dist/src/hooks/sms-watcher.js +93 -0
- package/dist/src/hooks/sms-watcher.js.map +7 -0
- package/dist/src/hooks/sms-webhook.js +555 -0
- package/dist/src/hooks/sms-webhook.js.map +7 -0
- package/dist/src/hooks/whatsapp-commands.js +479 -0
- package/dist/src/hooks/whatsapp-commands.js.map +7 -0
- package/dist/src/hooks/whatsapp-scheduler.js +317 -0
- package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
- package/dist/src/hooks/whatsapp-sync.js +409 -0
- package/dist/src/hooks/whatsapp-sync.js.map +7 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/integrations/anthropic/client.js +263 -0
- package/dist/src/integrations/anthropic/client.js.map +7 -0
- package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
- package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client.js +511 -0
- package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
- package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
- package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
- package/dist/src/integrations/linear/auth.js +337 -0
- package/dist/src/integrations/linear/auth.js.map +7 -0
- package/dist/src/integrations/linear/auto-sync.js +258 -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 +130 -0
- package/dist/src/integrations/linear/config.js.map +7 -0
- package/dist/src/integrations/linear/migration.js +361 -0
- package/dist/src/integrations/linear/migration.js.map +7 -0
- package/dist/src/integrations/linear/oauth-server.js +454 -0
- package/dist/src/integrations/linear/oauth-server.js.map +7 -0
- package/dist/src/integrations/linear/rest-client.js +213 -0
- package/dist/src/integrations/linear/rest-client.js.map +7 -0
- package/dist/src/integrations/linear/sync-manager.js +236 -0
- package/dist/src/integrations/linear/sync-manager.js.map +7 -0
- package/dist/src/integrations/linear/sync-service.js +231 -0
- package/dist/src/integrations/linear/sync-service.js.map +7 -0
- package/dist/src/integrations/linear/sync.js +782 -0
- package/dist/src/integrations/linear/sync.js.map +7 -0
- package/dist/src/integrations/linear/types.js +5 -0
- package/dist/src/integrations/linear/types.js.map +7 -0
- package/dist/src/integrations/linear/unified-sync.js +589 -0
- package/dist/src/integrations/linear/unified-sync.js.map +7 -0
- package/dist/src/integrations/linear/webhook-handler.js +219 -0
- package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/src/integrations/linear/webhook-server.js +218 -0
- package/dist/src/integrations/linear/webhook-server.js.map +7 -0
- package/dist/src/integrations/linear/webhook.js +291 -0
- package/dist/src/integrations/linear/webhook.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/index.js +166 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/index.js +23 -0
- package/dist/src/integrations/mcp/index.js.map +7 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/src/integrations/mcp/refactored-server.js +374 -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 +147 -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 +125 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions.js +702 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
- package/dist/src/integrations/ralph/index.js +18 -0
- package/dist/src/integrations/ralph/index.js.map +7 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -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/types.js.map +7 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
- package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/src/middleware/exponential-rate-limiter.js +289 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/src/models/user.model.js +358 -0
- package/dist/src/models/user.model.js.map +7 -0
- package/dist/src/servers/production/auth-middleware.js +528 -0
- package/dist/src/servers/production/auth-middleware.js.map +7 -0
- package/dist/src/services/config-service.js +65 -0
- package/dist/src/services/config-service.js.map +7 -0
- package/dist/src/services/context-service.js +194 -0
- package/dist/src/services/context-service.js.map +7 -0
- package/dist/src/skills/api-discovery.js +354 -0
- package/dist/src/skills/api-discovery.js.map +7 -0
- package/dist/src/skills/api-skill.js +475 -0
- package/dist/src/skills/api-skill.js.map +7 -0
- package/dist/src/skills/claude-skills.js +1061 -0
- package/dist/src/skills/claude-skills.js.map +7 -0
- package/dist/src/skills/dashboard-launcher.js +216 -0
- package/dist/src/skills/dashboard-launcher.js.map +7 -0
- package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
- package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
- package/dist/src/skills/repo-ingestion-skill.js +609 -0
- package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
- package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
- package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
- package/dist/src/types/task.js +5 -0
- package/dist/src/types/task.js.map +7 -0
- package/dist/src/utils/env.js +50 -0
- package/dist/src/utils/env.js.map +7 -0
- package/dist/src/utils/formatting.js +62 -0
- package/dist/src/utils/formatting.js.map +7 -0
- package/dist/src/utils/process-cleanup.js +136 -0
- package/dist/src/utils/process-cleanup.js.map +7 -0
- package/package.json +3 -3
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
|
@@ -0,0 +1,404 @@
|
|
|
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 * as fs from "fs/promises";
|
|
6
|
+
import * as path from "path";
|
|
7
|
+
import { execSync } from "child_process";
|
|
8
|
+
import { logger } from "../../../core/monitoring/logger.js";
|
|
9
|
+
class StateReconciler {
|
|
10
|
+
config;
|
|
11
|
+
ralphDir = ".ralph";
|
|
12
|
+
reconciliationLog = [];
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = {
|
|
15
|
+
precedence: config?.precedence || ["git", "files", "memory"],
|
|
16
|
+
conflictResolution: config?.conflictResolution || "automatic",
|
|
17
|
+
syncInterval: config?.syncInterval || 5e3,
|
|
18
|
+
validateConsistency: config?.validateConsistency ?? true
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Reconcile state from multiple sources
|
|
23
|
+
*/
|
|
24
|
+
async reconcile(sources) {
|
|
25
|
+
logger.info("Reconciling state from sources", {
|
|
26
|
+
sources: sources.map((s) => ({ type: s.type, confidence: s.confidence }))
|
|
27
|
+
});
|
|
28
|
+
const sortedSources = this.sortByPrecedence(sources);
|
|
29
|
+
const conflicts = this.detectConflicts(sortedSources);
|
|
30
|
+
if (conflicts.length > 0) {
|
|
31
|
+
logger.warn("State conflicts detected", {
|
|
32
|
+
count: conflicts.length,
|
|
33
|
+
fields: conflicts.map((c) => c.field)
|
|
34
|
+
});
|
|
35
|
+
const resolutions = await this.resolveConflicts(conflicts);
|
|
36
|
+
return this.applyResolutions(sortedSources[0].state, resolutions);
|
|
37
|
+
}
|
|
38
|
+
return this.mergeStates(sortedSources);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Detect conflicts between state sources
|
|
42
|
+
*/
|
|
43
|
+
detectConflicts(sources) {
|
|
44
|
+
const conflicts = [];
|
|
45
|
+
const fields = /* @__PURE__ */ new Set();
|
|
46
|
+
sources.forEach((source) => {
|
|
47
|
+
Object.keys(source.state).forEach((field) => fields.add(field));
|
|
48
|
+
});
|
|
49
|
+
for (const field of fields) {
|
|
50
|
+
const values = sources.filter((s) => s.state[field] !== void 0).map((s) => ({
|
|
51
|
+
source: s,
|
|
52
|
+
value: s.state[field]
|
|
53
|
+
}));
|
|
54
|
+
if (values.length > 1 && !this.valuesMatch(values.map((v) => v.value))) {
|
|
55
|
+
conflicts.push({
|
|
56
|
+
field,
|
|
57
|
+
sources: values.map((v) => v.source),
|
|
58
|
+
severity: this.assessConflictSeverity(field),
|
|
59
|
+
suggestedResolution: this.suggestResolution(field, values.map((v) => v.source))
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return conflicts;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolve a single conflict
|
|
67
|
+
*/
|
|
68
|
+
async resolveConflict(conflict) {
|
|
69
|
+
const resolution = await this.resolveConflictByStrategy(conflict);
|
|
70
|
+
this.reconciliationLog.push(resolution);
|
|
71
|
+
logger.debug("Conflict resolved", {
|
|
72
|
+
field: conflict.field,
|
|
73
|
+
resolution: resolution.source,
|
|
74
|
+
rationale: resolution.rationale
|
|
75
|
+
});
|
|
76
|
+
return resolution;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Validate state consistency
|
|
80
|
+
*/
|
|
81
|
+
async validateConsistency(state) {
|
|
82
|
+
const errors = [];
|
|
83
|
+
const warnings = [];
|
|
84
|
+
try {
|
|
85
|
+
await this.validateFileSystemState(state, errors, warnings);
|
|
86
|
+
this.validateGitState(state, errors, warnings);
|
|
87
|
+
this.validateLogicalConsistency(state, errors, warnings);
|
|
88
|
+
return {
|
|
89
|
+
testsPass: errors.length === 0,
|
|
90
|
+
lintClean: true,
|
|
91
|
+
buildSuccess: true,
|
|
92
|
+
errors,
|
|
93
|
+
warnings
|
|
94
|
+
};
|
|
95
|
+
} catch (error) {
|
|
96
|
+
errors.push(`Validation failed: ${error.message}`);
|
|
97
|
+
return {
|
|
98
|
+
testsPass: false,
|
|
99
|
+
lintClean: false,
|
|
100
|
+
buildSuccess: false,
|
|
101
|
+
errors,
|
|
102
|
+
warnings
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get state from git
|
|
108
|
+
*/
|
|
109
|
+
async getGitState() {
|
|
110
|
+
try {
|
|
111
|
+
const currentCommit = execSync("git rev-parse HEAD", { encoding: "utf8" }).trim();
|
|
112
|
+
const branch = execSync("git branch --show-current", { encoding: "utf8" }).trim();
|
|
113
|
+
const uncommittedChanges = execSync("git status --porcelain", { encoding: "utf8" });
|
|
114
|
+
const ralphCommits = execSync('git log --oneline --grep="Ralph iteration"', {
|
|
115
|
+
encoding: "utf8"
|
|
116
|
+
}).split("\n").filter(Boolean);
|
|
117
|
+
const lastRalphCommit = ralphCommits[0]?.split(" ")[0];
|
|
118
|
+
const iteration = ralphCommits.length;
|
|
119
|
+
return {
|
|
120
|
+
type: "git",
|
|
121
|
+
state: {
|
|
122
|
+
currentCommit,
|
|
123
|
+
startCommit: lastRalphCommit,
|
|
124
|
+
iteration,
|
|
125
|
+
status: uncommittedChanges ? "running" : "completed"
|
|
126
|
+
},
|
|
127
|
+
timestamp: Date.now(),
|
|
128
|
+
confidence: 0.9
|
|
129
|
+
};
|
|
130
|
+
} catch (error) {
|
|
131
|
+
logger.error("Failed to get git state", { error: error.message });
|
|
132
|
+
return {
|
|
133
|
+
type: "git",
|
|
134
|
+
state: {},
|
|
135
|
+
timestamp: Date.now(),
|
|
136
|
+
confidence: 0.1
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get state from file system
|
|
142
|
+
*/
|
|
143
|
+
async getFileState() {
|
|
144
|
+
try {
|
|
145
|
+
const statePath = path.join(this.ralphDir, "state.json");
|
|
146
|
+
const iterationPath = path.join(this.ralphDir, "iteration.txt");
|
|
147
|
+
const feedbackPath = path.join(this.ralphDir, "feedback.txt");
|
|
148
|
+
const taskPath = path.join(this.ralphDir, "task.md");
|
|
149
|
+
const criteriaPath = path.join(this.ralphDir, "completion-criteria.md");
|
|
150
|
+
const [stateData, iteration, feedback, task, criteria] = await Promise.all([
|
|
151
|
+
fs.readFile(statePath, "utf8").catch(() => "{}"),
|
|
152
|
+
fs.readFile(iterationPath, "utf8").catch(() => "0"),
|
|
153
|
+
fs.readFile(feedbackPath, "utf8").catch(() => ""),
|
|
154
|
+
fs.readFile(taskPath, "utf8").catch(() => ""),
|
|
155
|
+
fs.readFile(criteriaPath, "utf8").catch(() => "")
|
|
156
|
+
]);
|
|
157
|
+
const state = JSON.parse(stateData);
|
|
158
|
+
return {
|
|
159
|
+
type: "files",
|
|
160
|
+
state: {
|
|
161
|
+
...state,
|
|
162
|
+
iteration: parseInt(iteration.trim()),
|
|
163
|
+
feedback: feedback.trim() || void 0,
|
|
164
|
+
task: task.trim(),
|
|
165
|
+
criteria: criteria.trim()
|
|
166
|
+
},
|
|
167
|
+
timestamp: Date.now(),
|
|
168
|
+
confidence: 0.95
|
|
169
|
+
};
|
|
170
|
+
} catch (error) {
|
|
171
|
+
logger.error("Failed to get file state", { error: error.message });
|
|
172
|
+
return {
|
|
173
|
+
type: "files",
|
|
174
|
+
state: {},
|
|
175
|
+
timestamp: Date.now(),
|
|
176
|
+
confidence: 0.1
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get state from memory (StackMemory)
|
|
182
|
+
*/
|
|
183
|
+
async getMemoryState(loopId) {
|
|
184
|
+
try {
|
|
185
|
+
return {
|
|
186
|
+
type: "memory",
|
|
187
|
+
state: {
|
|
188
|
+
loopId,
|
|
189
|
+
lastUpdateTime: Date.now()
|
|
190
|
+
},
|
|
191
|
+
timestamp: Date.now(),
|
|
192
|
+
confidence: 0.8
|
|
193
|
+
};
|
|
194
|
+
} catch (error) {
|
|
195
|
+
logger.error("Failed to get memory state", { error: error.message });
|
|
196
|
+
return {
|
|
197
|
+
type: "memory",
|
|
198
|
+
state: {},
|
|
199
|
+
timestamp: Date.now(),
|
|
200
|
+
confidence: 0.1
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Sort sources by configured precedence
|
|
206
|
+
*/
|
|
207
|
+
sortByPrecedence(sources) {
|
|
208
|
+
return sources.sort((a, b) => {
|
|
209
|
+
const aIndex = this.config.precedence.indexOf(a.type);
|
|
210
|
+
const bIndex = this.config.precedence.indexOf(b.type);
|
|
211
|
+
if (aIndex === -1 && bIndex === -1) {
|
|
212
|
+
return b.confidence - a.confidence;
|
|
213
|
+
}
|
|
214
|
+
if (aIndex === -1) return 1;
|
|
215
|
+
if (bIndex === -1) return -1;
|
|
216
|
+
return aIndex - bIndex;
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Check if values match
|
|
221
|
+
*/
|
|
222
|
+
valuesMatch(values) {
|
|
223
|
+
if (values.length === 0) return true;
|
|
224
|
+
const first = JSON.stringify(values[0]);
|
|
225
|
+
return values.every((v) => JSON.stringify(v) === first);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Assess conflict severity
|
|
229
|
+
*/
|
|
230
|
+
assessConflictSeverity(field) {
|
|
231
|
+
const highSeverityFields = ["loopId", "task", "criteria", "status"];
|
|
232
|
+
const mediumSeverityFields = ["iteration", "currentCommit", "feedback"];
|
|
233
|
+
if (highSeverityFields.includes(field)) return "high";
|
|
234
|
+
if (mediumSeverityFields.includes(field)) return "medium";
|
|
235
|
+
return "low";
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Suggest resolution based on field and sources
|
|
239
|
+
*/
|
|
240
|
+
suggestResolution(field, sources) {
|
|
241
|
+
const sorted = this.sortByPrecedence(sources);
|
|
242
|
+
const highestConfidence = sorted.reduce(
|
|
243
|
+
(max, s) => s.confidence > max.confidence ? s : max
|
|
244
|
+
);
|
|
245
|
+
return highestConfidence.state[field];
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Resolve conflicts based on configured strategy
|
|
249
|
+
*/
|
|
250
|
+
async resolveConflicts(conflicts) {
|
|
251
|
+
const resolutions = [];
|
|
252
|
+
for (const conflict of conflicts) {
|
|
253
|
+
const resolution = await this.resolveConflictByStrategy(conflict);
|
|
254
|
+
resolutions.push(resolution);
|
|
255
|
+
}
|
|
256
|
+
return resolutions;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Resolve conflict based on strategy
|
|
260
|
+
*/
|
|
261
|
+
async resolveConflictByStrategy(conflict) {
|
|
262
|
+
switch (this.config.conflictResolution) {
|
|
263
|
+
case "automatic":
|
|
264
|
+
return this.automaticResolution(conflict);
|
|
265
|
+
case "manual":
|
|
266
|
+
return this.manualResolution(conflict);
|
|
267
|
+
case "interactive":
|
|
268
|
+
return this.interactiveResolution(conflict);
|
|
269
|
+
default:
|
|
270
|
+
return this.automaticResolution(conflict);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Automatic resolution based on precedence and confidence
|
|
275
|
+
*/
|
|
276
|
+
automaticResolution(conflict) {
|
|
277
|
+
const sorted = this.sortByPrecedence(conflict.sources);
|
|
278
|
+
const winner = sorted[0];
|
|
279
|
+
return {
|
|
280
|
+
field: conflict.field,
|
|
281
|
+
value: winner.state[conflict.field],
|
|
282
|
+
source: winner.type,
|
|
283
|
+
rationale: `Automatic resolution: ${winner.type} has highest precedence (confidence: ${winner.confidence})`
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Manual resolution (uses suggested resolution)
|
|
288
|
+
*/
|
|
289
|
+
manualResolution(conflict) {
|
|
290
|
+
return {
|
|
291
|
+
field: conflict.field,
|
|
292
|
+
value: conflict.suggestedResolution,
|
|
293
|
+
source: "manual",
|
|
294
|
+
rationale: "Manual resolution: using suggested value"
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Interactive resolution (would prompt user in real implementation)
|
|
299
|
+
*/
|
|
300
|
+
async interactiveResolution(conflict) {
|
|
301
|
+
logger.info("Interactive resolution required", {
|
|
302
|
+
field: conflict.field,
|
|
303
|
+
options: conflict.sources.map((s) => ({
|
|
304
|
+
type: s.type,
|
|
305
|
+
value: s.state[conflict.field],
|
|
306
|
+
confidence: s.confidence
|
|
307
|
+
}))
|
|
308
|
+
});
|
|
309
|
+
return this.automaticResolution(conflict);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Apply resolutions to base state
|
|
313
|
+
*/
|
|
314
|
+
applyResolutions(baseState, resolutions) {
|
|
315
|
+
const resolvedState = { ...baseState };
|
|
316
|
+
for (const resolution of resolutions) {
|
|
317
|
+
resolvedState[resolution.field] = resolution.value;
|
|
318
|
+
}
|
|
319
|
+
return resolvedState;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Merge states without conflicts
|
|
323
|
+
*/
|
|
324
|
+
mergeStates(sources) {
|
|
325
|
+
const merged = {};
|
|
326
|
+
for (const source of sources) {
|
|
327
|
+
Object.assign(merged, source.state);
|
|
328
|
+
}
|
|
329
|
+
return merged;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Validate file system state
|
|
333
|
+
*/
|
|
334
|
+
async validateFileSystemState(state, errors, warnings) {
|
|
335
|
+
try {
|
|
336
|
+
const ralphDirExists = await fs.stat(this.ralphDir).then(() => true).catch(() => false);
|
|
337
|
+
if (!ralphDirExists) {
|
|
338
|
+
warnings.push("Ralph directory does not exist");
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
const requiredFiles = ["task.md", "state.json", "iteration.txt"];
|
|
342
|
+
for (const file of requiredFiles) {
|
|
343
|
+
const filePath = path.join(this.ralphDir, file);
|
|
344
|
+
const exists = await fs.stat(filePath).then(() => true).catch(() => false);
|
|
345
|
+
if (!exists) {
|
|
346
|
+
warnings.push(`Missing file: ${file}`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
} catch (error) {
|
|
350
|
+
errors.push(`File system validation failed: ${error.message}`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Validate git state
|
|
355
|
+
*/
|
|
356
|
+
validateGitState(state, errors, warnings) {
|
|
357
|
+
try {
|
|
358
|
+
const isGitRepo = execSync("git rev-parse --is-inside-work-tree", {
|
|
359
|
+
encoding: "utf8"
|
|
360
|
+
}).trim() === "true";
|
|
361
|
+
if (!isGitRepo) {
|
|
362
|
+
warnings.push("Not in a git repository");
|
|
363
|
+
}
|
|
364
|
+
if (state.currentCommit && state.startCommit) {
|
|
365
|
+
try {
|
|
366
|
+
execSync(`git rev-parse ${state.currentCommit}`, { encoding: "utf8" });
|
|
367
|
+
} catch {
|
|
368
|
+
errors.push(`Invalid current commit: ${state.currentCommit}`);
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
execSync(`git rev-parse ${state.startCommit}`, { encoding: "utf8" });
|
|
372
|
+
} catch {
|
|
373
|
+
warnings.push(`Invalid start commit: ${state.startCommit}`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
} catch (error) {
|
|
377
|
+
warnings.push(`Git validation failed: ${error.message}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Validate logical consistency
|
|
382
|
+
*/
|
|
383
|
+
validateLogicalConsistency(state, errors, warnings) {
|
|
384
|
+
if (state.iteration < 0) {
|
|
385
|
+
errors.push("Invalid iteration number: cannot be negative");
|
|
386
|
+
}
|
|
387
|
+
if (state.status === "completed" && !state.completionData) {
|
|
388
|
+
warnings.push("Status is completed but no completion data");
|
|
389
|
+
}
|
|
390
|
+
if (state.lastUpdateTime && state.startTime && state.lastUpdateTime < state.startTime) {
|
|
391
|
+
errors.push("Last update time is before start time");
|
|
392
|
+
}
|
|
393
|
+
if (!state.task) {
|
|
394
|
+
errors.push("No task defined");
|
|
395
|
+
}
|
|
396
|
+
if (!state.criteria) {
|
|
397
|
+
warnings.push("No completion criteria defined");
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
export {
|
|
402
|
+
StateReconciler
|
|
403
|
+
};
|
|
404
|
+
//# sourceMappingURL=state-reconciler.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/integrations/ralph/state/state-reconciler.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * State Reconciler for Ralph-StackMemory Integration\n * Handles conflict resolution and state consistency across git, files, and memory\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport {\n RalphLoopState,\n StateSource,\n Conflict,\n Resolution,\n ValidationResult,\n RalphStackMemoryConfig,\n} from '../types.js';\n\nexport class StateReconciler {\n private config: RalphStackMemoryConfig['stateReconciliation'];\n private readonly ralphDir = '.ralph';\n private reconciliationLog: Resolution[] = [];\n\n constructor(config?: Partial<RalphStackMemoryConfig['stateReconciliation']>) {\n this.config = {\n precedence: config?.precedence || ['git', 'files', 'memory'],\n conflictResolution: config?.conflictResolution || 'automatic',\n syncInterval: config?.syncInterval || 5000,\n validateConsistency: config?.validateConsistency ?? true,\n };\n }\n\n /**\n * Reconcile state from multiple sources\n */\n async reconcile(sources: StateSource[]): Promise<RalphLoopState> {\n logger.info('Reconciling state from sources', {\n sources: sources.map(s => ({ type: s.type, confidence: s.confidence })),\n });\n\n // Sort sources by precedence\n const sortedSources = this.sortByPrecedence(sources);\n \n // Detect conflicts\n const conflicts = this.detectConflicts(sortedSources);\n \n if (conflicts.length > 0) {\n logger.warn('State conflicts detected', {\n count: conflicts.length,\n fields: conflicts.map(c => c.field),\n });\n\n // Resolve conflicts based on configuration\n const resolutions = await this.resolveConflicts(conflicts);\n return this.applyResolutions(sortedSources[0].state as RalphLoopState, resolutions);\n }\n\n // No conflicts, merge states\n return this.mergeStates(sortedSources);\n }\n\n /**\n * Detect conflicts between state sources\n */\n detectConflicts(sources: StateSource[]): Conflict[] {\n const conflicts: Conflict[] = [];\n const fields = new Set<string>();\n\n // Collect all fields across sources\n sources.forEach(source => {\n Object.keys(source.state).forEach(field => fields.add(field));\n });\n\n // Check each field for conflicts\n for (const field of fields) {\n const values = sources\n .filter(s => s.state[field as keyof RalphLoopState] !== undefined)\n .map(s => ({\n source: s,\n value: s.state[field as keyof RalphLoopState],\n }));\n\n if (values.length > 1 && !this.valuesMatch(values.map(v => v.value))) {\n conflicts.push({\n field,\n sources: values.map(v => v.source),\n severity: this.assessConflictSeverity(field),\n suggestedResolution: this.suggestResolution(field, values.map(v => v.source)),\n });\n }\n }\n\n return conflicts;\n }\n\n /**\n * Resolve a single conflict\n */\n async resolveConflict(conflict: Conflict): Promise<Resolution> {\n const resolution = await this.resolveConflictByStrategy(conflict);\n \n this.reconciliationLog.push(resolution);\n \n logger.debug('Conflict resolved', {\n field: conflict.field,\n resolution: resolution.source,\n rationale: resolution.rationale,\n });\n\n return resolution;\n }\n\n /**\n * Validate state consistency\n */\n async validateConsistency(state: RalphLoopState): Promise<ValidationResult> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n // Validate file system state\n await this.validateFileSystemState(state, errors, warnings);\n \n // Validate git state\n this.validateGitState(state, errors, warnings);\n \n // Validate logical consistency\n this.validateLogicalConsistency(state, errors, warnings);\n\n return {\n testsPass: errors.length === 0,\n lintClean: true,\n buildSuccess: true,\n errors,\n warnings,\n };\n } catch (error: any) {\n errors.push(`Validation failed: ${error.message}`);\n return {\n testsPass: false,\n lintClean: false,\n buildSuccess: false,\n errors,\n warnings,\n };\n }\n }\n\n /**\n * Get state from git\n */\n async getGitState(): Promise<StateSource> {\n try {\n const currentCommit = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();\n const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();\n const uncommittedChanges = execSync('git status --porcelain', { encoding: 'utf8' });\n \n // Check for Ralph commits\n const ralphCommits = execSync('git log --oneline --grep=\"Ralph iteration\"', {\n encoding: 'utf8',\n }).split('\\n').filter(Boolean);\n\n const lastRalphCommit = ralphCommits[0]?.split(' ')[0];\n const iteration = ralphCommits.length;\n\n return {\n type: 'git',\n state: {\n currentCommit,\n startCommit: lastRalphCommit,\n iteration,\n status: uncommittedChanges ? 'running' : 'completed',\n },\n timestamp: Date.now(),\n confidence: 0.9,\n };\n } catch (error: any) {\n logger.error('Failed to get git state', { error: error.message });\n return {\n type: 'git',\n state: {},\n timestamp: Date.now(),\n confidence: 0.1,\n };\n }\n }\n\n /**\n * Get state from file system\n */\n async getFileState(): Promise<StateSource> {\n try {\n const statePath = path.join(this.ralphDir, 'state.json');\n const iterationPath = path.join(this.ralphDir, 'iteration.txt');\n const feedbackPath = path.join(this.ralphDir, 'feedback.txt');\n const taskPath = path.join(this.ralphDir, 'task.md');\n const criteriaPath = path.join(this.ralphDir, 'completion-criteria.md');\n\n const [stateData, iteration, feedback, task, criteria] = await Promise.all([\n fs.readFile(statePath, 'utf8').catch(() => '{}'),\n fs.readFile(iterationPath, 'utf8').catch(() => '0'),\n fs.readFile(feedbackPath, 'utf8').catch(() => ''),\n fs.readFile(taskPath, 'utf8').catch(() => ''),\n fs.readFile(criteriaPath, 'utf8').catch(() => ''),\n ]);\n\n const state = JSON.parse(stateData);\n\n return {\n type: 'files',\n state: {\n ...state,\n iteration: parseInt(iteration.trim()),\n feedback: feedback.trim() || undefined,\n task: task.trim(),\n criteria: criteria.trim(),\n },\n timestamp: Date.now(),\n confidence: 0.95,\n };\n } catch (error: any) {\n logger.error('Failed to get file state', { error: error.message });\n return {\n type: 'files',\n state: {},\n timestamp: Date.now(),\n confidence: 0.1,\n };\n }\n }\n\n /**\n * Get state from memory (StackMemory)\n */\n async getMemoryState(loopId: string): Promise<StateSource> {\n try {\n // This would integrate with StackMemory's frame system\n // For now, returning a placeholder\n return {\n type: 'memory',\n state: {\n loopId,\n lastUpdateTime: Date.now(),\n },\n timestamp: Date.now(),\n confidence: 0.8,\n };\n } catch (error: any) {\n logger.error('Failed to get memory state', { error: error.message });\n return {\n type: 'memory',\n state: {},\n timestamp: Date.now(),\n confidence: 0.1,\n };\n }\n }\n\n /**\n * Sort sources by configured precedence\n */\n private sortByPrecedence(sources: StateSource[]): StateSource[] {\n return sources.sort((a, b) => {\n const aIndex = this.config.precedence.indexOf(a.type);\n const bIndex = this.config.precedence.indexOf(b.type);\n \n if (aIndex === -1 && bIndex === -1) {\n return b.confidence - a.confidence;\n }\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n \n return aIndex - bIndex;\n });\n }\n\n /**\n * Check if values match\n */\n private valuesMatch(values: any[]): boolean {\n if (values.length === 0) return true;\n const first = JSON.stringify(values[0]);\n return values.every(v => JSON.stringify(v) === first);\n }\n\n /**\n * Assess conflict severity\n */\n private assessConflictSeverity(field: string): 'low' | 'medium' | 'high' {\n const highSeverityFields = ['loopId', 'task', 'criteria', 'status'];\n const mediumSeverityFields = ['iteration', 'currentCommit', 'feedback'];\n \n if (highSeverityFields.includes(field)) return 'high';\n if (mediumSeverityFields.includes(field)) return 'medium';\n return 'low';\n }\n\n /**\n * Suggest resolution based on field and sources\n */\n private suggestResolution(field: string, sources: StateSource[]): any {\n // Sort by confidence and precedence\n const sorted = this.sortByPrecedence(sources);\n const highestConfidence = sorted.reduce((max, s) => \n s.confidence > max.confidence ? s : max\n );\n \n return highestConfidence.state[field as keyof RalphLoopState];\n }\n\n /**\n * Resolve conflicts based on configured strategy\n */\n private async resolveConflicts(conflicts: Conflict[]): Promise<Resolution[]> {\n const resolutions: Resolution[] = [];\n\n for (const conflict of conflicts) {\n const resolution = await this.resolveConflictByStrategy(conflict);\n resolutions.push(resolution);\n }\n\n return resolutions;\n }\n\n /**\n * Resolve conflict based on strategy\n */\n private async resolveConflictByStrategy(conflict: Conflict): Promise<Resolution> {\n switch (this.config.conflictResolution) {\n case 'automatic':\n return this.automaticResolution(conflict);\n \n case 'manual':\n return this.manualResolution(conflict);\n \n case 'interactive':\n return this.interactiveResolution(conflict);\n \n default:\n return this.automaticResolution(conflict);\n }\n }\n\n /**\n * Automatic resolution based on precedence and confidence\n */\n private automaticResolution(conflict: Conflict): Resolution {\n const sorted = this.sortByPrecedence(conflict.sources);\n const winner = sorted[0];\n \n return {\n field: conflict.field,\n value: winner.state[conflict.field as keyof RalphLoopState],\n source: winner.type,\n rationale: `Automatic resolution: ${winner.type} has highest precedence (confidence: ${winner.confidence})`,\n };\n }\n\n /**\n * Manual resolution (uses suggested resolution)\n */\n private manualResolution(conflict: Conflict): Resolution {\n return {\n field: conflict.field,\n value: conflict.suggestedResolution,\n source: 'manual',\n rationale: 'Manual resolution: using suggested value',\n };\n }\n\n /**\n * Interactive resolution (would prompt user in real implementation)\n */\n private async interactiveResolution(conflict: Conflict): Promise<Resolution> {\n // In real implementation, this would prompt the user\n logger.info('Interactive resolution required', {\n field: conflict.field,\n options: conflict.sources.map(s => ({\n type: s.type,\n value: s.state[conflict.field as keyof RalphLoopState],\n confidence: s.confidence,\n })),\n });\n\n // For now, fallback to automatic\n return this.automaticResolution(conflict);\n }\n\n /**\n * Apply resolutions to base state\n */\n private applyResolutions(\n baseState: RalphLoopState,\n resolutions: Resolution[]\n ): RalphLoopState {\n const resolvedState = { ...baseState };\n\n for (const resolution of resolutions) {\n (resolvedState as any)[resolution.field] = resolution.value;\n }\n\n return resolvedState;\n }\n\n /**\n * Merge states without conflicts\n */\n private mergeStates(sources: StateSource[]): RalphLoopState {\n const merged: any = {};\n\n // Apply in precedence order\n for (const source of sources) {\n Object.assign(merged, source.state);\n }\n\n return merged as RalphLoopState;\n }\n\n /**\n * Validate file system state\n */\n private async validateFileSystemState(\n state: RalphLoopState,\n errors: string[],\n warnings: string[]\n ): Promise<void> {\n try {\n const ralphDirExists = await fs.stat(this.ralphDir).then(() => true).catch(() => false);\n \n if (!ralphDirExists) {\n warnings.push('Ralph directory does not exist');\n return;\n }\n\n const requiredFiles = ['task.md', 'state.json', 'iteration.txt'];\n for (const file of requiredFiles) {\n const filePath = path.join(this.ralphDir, file);\n const exists = await fs.stat(filePath).then(() => true).catch(() => false);\n \n if (!exists) {\n warnings.push(`Missing file: ${file}`);\n }\n }\n } catch (error: any) {\n errors.push(`File system validation failed: ${error.message}`);\n }\n }\n\n /**\n * Validate git state\n */\n private validateGitState(\n state: RalphLoopState,\n errors: string[],\n warnings: string[]\n ): void {\n try {\n const isGitRepo = execSync('git rev-parse --is-inside-work-tree', {\n encoding: 'utf8',\n }).trim() === 'true';\n \n if (!isGitRepo) {\n warnings.push('Not in a git repository');\n }\n\n if (state.currentCommit && state.startCommit) {\n try {\n execSync(`git rev-parse ${state.currentCommit}`, { encoding: 'utf8' });\n } catch {\n errors.push(`Invalid current commit: ${state.currentCommit}`);\n }\n\n try {\n execSync(`git rev-parse ${state.startCommit}`, { encoding: 'utf8' });\n } catch {\n warnings.push(`Invalid start commit: ${state.startCommit}`);\n }\n }\n } catch (error: any) {\n warnings.push(`Git validation failed: ${error.message}`);\n }\n }\n\n /**\n * Validate logical consistency\n */\n private validateLogicalConsistency(\n state: RalphLoopState,\n errors: string[],\n warnings: string[]\n ): void {\n // Check iteration number\n if (state.iteration < 0) {\n errors.push('Invalid iteration number: cannot be negative');\n }\n\n // Check status consistency\n if (state.status === 'completed' && !state.completionData) {\n warnings.push('Status is completed but no completion data');\n }\n\n // Check time consistency\n if (state.lastUpdateTime && state.startTime && state.lastUpdateTime < state.startTime) {\n errors.push('Last update time is before start time');\n }\n\n // Check task and criteria\n if (!state.task) {\n errors.push('No task defined');\n }\n\n if (!state.criteria) {\n warnings.push('No completion criteria defined');\n }\n }\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|