@stackmemoryai/stackmemory 0.5.59 → 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/src/cli/claude-sm.js +130 -50
- package/dist/src/cli/claude-sm.js.map +2 -2
- package/dist/src/cli/index.js +18 -3
- package/dist/src/cli/index.js.map +3 -3
- 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/storage/chromadb-adapter.js +32 -6
- package/dist/src/core/storage/chromadb-adapter.js.map +2 -2
- package/dist/src/skills/repo-ingestion-skill.js +35 -12
- package/dist/src/skills/repo-ingestion-skill.js.map +2 -2
- package/package.json +11 -7
- 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/test-pre-publish-quick.sh +1 -1
- package/dist/agents/core/agent-task-manager.js +0 -527
- 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 +0 -133
- package/dist/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/agents/verifiers/formatter-verifier.js +0 -130
- package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/agents/verifiers/llm-judge.js +0 -252
- package/dist/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/cli/auto-detect.js +0 -321
- 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 +0 -21
- 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 +0 -21
- package/dist/cli/codex-sm-danger.js.map +0 -7
- package/dist/cli/codex-sm.js +0 -349
- package/dist/cli/codex-sm.js.map +0 -7
- package/dist/cli/commands/api.js +0 -232
- package/dist/cli/commands/api.js.map +0 -7
- package/dist/cli/commands/auto-background.js +0 -180
- package/dist/cli/commands/auto-background.js.map +0 -7
- package/dist/cli/commands/cleanup-processes.js +0 -68
- package/dist/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/cli/commands/clear.js +0 -202
- package/dist/cli/commands/clear.js.map +0 -7
- package/dist/cli/commands/config.js +0 -445
- package/dist/cli/commands/config.js.map +0 -7
- package/dist/cli/commands/context-rehydrate.js +0 -751
- package/dist/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/cli/commands/context.js +0 -343
- package/dist/cli/commands/context.js.map +0 -7
- package/dist/cli/commands/daemon.js +0 -392
- package/dist/cli/commands/daemon.js.map +0 -7
- package/dist/cli/commands/dashboard.js +0 -210
- package/dist/cli/commands/dashboard.js.map +0 -7
- package/dist/cli/commands/db.js +0 -147
- package/dist/cli/commands/db.js.map +0 -7
- package/dist/cli/commands/decision.js +0 -266
- package/dist/cli/commands/decision.js.map +0 -7
- package/dist/cli/commands/discovery.js +0 -279
- package/dist/cli/commands/discovery.js.map +0 -7
- package/dist/cli/commands/handoff.js +0 -624
- package/dist/cli/commands/handoff.js.map +0 -7
- package/dist/cli/commands/hooks.js +0 -298
- 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 +0 -529
- package/dist/cli/commands/linear.js.map +0 -7
- package/dist/cli/commands/log.js +0 -169
- package/dist/cli/commands/log.js.map +0 -7
- package/dist/cli/commands/login.js +0 -172
- package/dist/cli/commands/login.js.map +0 -7
- package/dist/cli/commands/migrate.js +0 -240
- package/dist/cli/commands/migrate.js.map +0 -7
- package/dist/cli/commands/model.js +0 -533
- 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 +0 -536
- package/dist/cli/commands/onboard.js.map +0 -7
- package/dist/cli/commands/projects.js +0 -199
- 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 +0 -909
- package/dist/cli/commands/ralph.js.map +0 -7
- package/dist/cli/commands/retrieval.js +0 -248
- package/dist/cli/commands/retrieval.js.map +0 -7
- package/dist/cli/commands/search.js +0 -173
- package/dist/cli/commands/search.js.map +0 -7
- package/dist/cli/commands/service.js +0 -749
- package/dist/cli/commands/service.js.map +0 -7
- package/dist/cli/commands/session.js +0 -200
- package/dist/cli/commands/session.js.map +0 -7
- package/dist/cli/commands/settings.js +0 -306
- package/dist/cli/commands/settings.js.map +0 -7
- package/dist/cli/commands/setup.js +0 -701
- package/dist/cli/commands/setup.js.map +0 -7
- package/dist/cli/commands/shell.js +0 -249
- package/dist/cli/commands/shell.js.map +0 -7
- package/dist/cli/commands/signup.js +0 -50
- package/dist/cli/commands/signup.js.map +0 -7
- package/dist/cli/commands/skills.js +0 -470
- package/dist/cli/commands/skills.js.map +0 -7
- package/dist/cli/commands/sms-notify.js +0 -795
- package/dist/cli/commands/sms-notify.js.map +0 -7
- package/dist/cli/commands/storage-tier.js +0 -183
- 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 +0 -249
- package/dist/cli/commands/sweep.js.map +0 -7
- package/dist/cli/commands/tasks.js +0 -213
- 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 +0 -319
- 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 +0 -448
- package/dist/cli/opencode-sm.js.map +0 -7
- package/dist/cli/utils/viewer.js +0 -96
- 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 +0 -398
- package/dist/core/config/config-manager.js.map +0 -7
- package/dist/core/config/feature-flags.js +0 -76
- package/dist/core/config/feature-flags.js.map +0 -7
- package/dist/core/config/storage-config.js +0 -115
- package/dist/core/config/storage-config.js.map +0 -7
- package/dist/core/config/types.js +0 -144
- package/dist/core/config/types.js.map +0 -7
- package/dist/core/context/auto-context.js +0 -80
- package/dist/core/context/auto-context.js.map +0 -7
- package/dist/core/context/dual-stack-manager.js +0 -870
- package/dist/core/context/dual-stack-manager.js.map +0 -7
- package/dist/core/context/enhanced-rehydration.js +0 -994
- package/dist/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/core/context/frame-database.js +0 -479
- package/dist/core/context/frame-database.js.map +0 -7
- package/dist/core/context/frame-digest.js +0 -250
- package/dist/core/context/frame-digest.js.map +0 -7
- package/dist/core/context/frame-handoff-manager.js +0 -778
- package/dist/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/core/context/frame-lifecycle-hooks.js +0 -119
- 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 +0 -302
- package/dist/core/context/frame-recovery.js.map +0 -7
- package/dist/core/context/frame-stack.js +0 -314
- package/dist/core/context/frame-stack.js.map +0 -7
- package/dist/core/context/frame-types.js +0 -5
- package/dist/core/context/frame-types.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 +0 -25
- 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 +0 -185
- package/dist/core/context/permission-manager.js.map +0 -7
- package/dist/core/context/recursive-context-manager.js +0 -592
- package/dist/core/context/recursive-context-manager.js.map +0 -7
- package/dist/core/context/refactored-frame-manager.js +0 -754
- package/dist/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/core/context/shared-context-layer.js +0 -621
- package/dist/core/context/shared-context-layer.js.map +0 -7
- package/dist/core/context/stack-merge-resolver.js +0 -749
- package/dist/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/core/context/validation.js +0 -130
- package/dist/core/context/validation.js.map +0 -7
- package/dist/core/database/batch-operations.js +0 -384
- package/dist/core/database/batch-operations.js.map +0 -7
- package/dist/core/database/connection-pool.js +0 -330
- package/dist/core/database/connection-pool.js.map +0 -7
- package/dist/core/database/database-adapter.js +0 -60
- package/dist/core/database/database-adapter.js.map +0 -7
- package/dist/core/database/migration-manager.js +0 -614
- 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 +0 -298
- package/dist/core/database/query-cache.js.map +0 -7
- package/dist/core/database/query-router.js +0 -430
- package/dist/core/database/query-router.js.map +0 -7
- package/dist/core/database/sqlite-adapter.js +0 -738
- package/dist/core/database/sqlite-adapter.js.map +0 -7
- package/dist/core/digest/enhanced-hybrid-digest.js +0 -277
- package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/core/digest/frame-digest-integration.js +0 -176
- package/dist/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/core/digest/hybrid-digest-generator.js +0 -553
- package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/core/digest/index.js +0 -9
- package/dist/core/digest/index.js.map +0 -7
- package/dist/core/digest/types.js +0 -25
- package/dist/core/digest/types.js.map +0 -7
- package/dist/core/errors/error-utils.js +0 -208
- package/dist/core/errors/error-utils.js.map +0 -7
- package/dist/core/errors/index.js +0 -521
- package/dist/core/errors/index.js.map +0 -7
- package/dist/core/errors/recovery.js +0 -269
- package/dist/core/errors/recovery.js.map +0 -7
- package/dist/core/execution/parallel-executor.js +0 -258
- package/dist/core/execution/parallel-executor.js.map +0 -7
- package/dist/core/frame/workflow-templates.js +0 -319
- package/dist/core/frame/workflow-templates.js.map +0 -7
- package/dist/core/merge/conflict-detector.js +0 -431
- package/dist/core/merge/conflict-detector.js.map +0 -7
- package/dist/core/merge/index.js +0 -9
- package/dist/core/merge/index.js.map +0 -7
- package/dist/core/merge/resolution-engine.js +0 -558
- package/dist/core/merge/resolution-engine.js.map +0 -7
- package/dist/core/merge/stack-diff.js +0 -532
- package/dist/core/merge/stack-diff.js.map +0 -7
- package/dist/core/merge/unified-merge-resolver.js +0 -303
- package/dist/core/merge/unified-merge-resolver.js.map +0 -7
- package/dist/core/models/fallback-monitor.js +0 -232
- package/dist/core/models/fallback-monitor.js.map +0 -7
- package/dist/core/models/model-router.js +0 -340
- package/dist/core/models/model-router.js.map +0 -7
- package/dist/core/monitoring/error-handler.js +0 -49
- package/dist/core/monitoring/error-handler.js.map +0 -7
- package/dist/core/monitoring/logger.js +0 -202
- package/dist/core/monitoring/logger.js.map +0 -7
- package/dist/core/monitoring/metrics.js +0 -172
- package/dist/core/monitoring/metrics.js.map +0 -7
- package/dist/core/monitoring/progress-tracker.js +0 -189
- package/dist/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/core/monitoring/session-monitor.js +0 -300
- package/dist/core/monitoring/session-monitor.js.map +0 -7
- package/dist/core/performance/context-cache.js +0 -273
- package/dist/core/performance/context-cache.js.map +0 -7
- package/dist/core/performance/index.js +0 -11
- package/dist/core/performance/index.js.map +0 -7
- package/dist/core/performance/lazy-context-loader.js +0 -327
- package/dist/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/core/performance/monitor.js +0 -221
- package/dist/core/performance/monitor.js.map +0 -7
- package/dist/core/performance/optimized-frame-context.js +0 -345
- package/dist/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/core/performance/performance-benchmark.js +0 -277
- package/dist/core/performance/performance-benchmark.js.map +0 -7
- package/dist/core/performance/performance-profiler.js +0 -370
- package/dist/core/performance/performance-profiler.js.map +0 -7
- package/dist/core/performance/streaming-jsonl-parser.js +0 -195
- package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/core/persistence/postgres-adapter.js +0 -349
- package/dist/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/core/projects/project-isolation.js +0 -201
- package/dist/core/projects/project-isolation.js.map +0 -7
- package/dist/core/projects/project-manager.js +0 -697
- package/dist/core/projects/project-manager.js.map +0 -7
- package/dist/core/query/query-parser.js +0 -370
- package/dist/core/query/query-parser.js.map +0 -7
- package/dist/core/query/query-templates.js +0 -321
- package/dist/core/query/query-templates.js.map +0 -7
- package/dist/core/retrieval/context-retriever.js +0 -479
- 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 +0 -8
- package/dist/core/retrieval/index.js.map +0 -7
- package/dist/core/retrieval/llm-context-retrieval.js +0 -613
- package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/core/retrieval/llm-provider.js +0 -151
- package/dist/core/retrieval/llm-provider.js.map +0 -7
- package/dist/core/retrieval/retrieval-audit.js +0 -236
- 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 +0 -589
- package/dist/core/retrieval/summary-generator.js.map +0 -7
- package/dist/core/retrieval/types.js +0 -21
- package/dist/core/retrieval/types.js.map +0 -7
- package/dist/core/security/index.js +0 -35
- package/dist/core/security/index.js.map +0 -7
- package/dist/core/security/input-sanitizer.js +0 -321
- package/dist/core/security/input-sanitizer.js.map +0 -7
- package/dist/core/session/clear-survival.js +0 -465
- package/dist/core/session/clear-survival.js.map +0 -7
- package/dist/core/session/enhanced-handoff.js +0 -792
- package/dist/core/session/enhanced-handoff.js.map +0 -7
- package/dist/core/session/handoff-generator.js +0 -343
- package/dist/core/session/handoff-generator.js.map +0 -7
- package/dist/core/session/index.js +0 -15
- package/dist/core/session/index.js.map +0 -7
- package/dist/core/session/session-manager.js +0 -347
- package/dist/core/session/session-manager.js.map +0 -7
- package/dist/core/skills/index.js +0 -7
- package/dist/core/skills/index.js.map +0 -7
- package/dist/core/skills/skill-storage.js +0 -764
- package/dist/core/skills/skill-storage.js.map +0 -7
- package/dist/core/skills/types.js +0 -193
- 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 +0 -510
- 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 +0 -489
- package/dist/core/storage/remote-storage.js.map +0 -7
- package/dist/core/storage/two-tier-storage.js +0 -766
- package/dist/core/storage/two-tier-storage.js.map +0 -7
- package/dist/core/trace/cli-trace-wrapper.js +0 -132
- package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/core/trace/db-trace-wrapper.js +0 -247
- package/dist/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/core/trace/debug-trace.js +0 -417
- package/dist/core/trace/debug-trace.js.map +0 -7
- package/dist/core/trace/index.js +0 -109
- package/dist/core/trace/index.js.map +0 -7
- package/dist/core/trace/linear-api-wrapper.js +0 -178
- 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 +0 -528
- package/dist/core/trace/trace-detector.js.map +0 -7
- package/dist/core/trace/trace-store.js +0 -345
- package/dist/core/trace/trace-store.js.map +0 -7
- package/dist/core/trace/types.js +0 -77
- package/dist/core/trace/types.js.map +0 -7
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -7
- package/dist/core/utils/async-mutex.js +0 -114
- package/dist/core/utils/async-mutex.js.map +0 -7
- package/dist/core/utils/compression.js +0 -83
- package/dist/core/utils/compression.js.map +0 -7
- package/dist/core/utils/update-checker.js +0 -218
- package/dist/core/utils/update-checker.js.map +0 -7
- package/dist/core/worktree/worktree-manager.js +0 -465
- package/dist/core/worktree/worktree-manager.js.map +0 -7
- package/dist/daemon/daemon-config.js +0 -149
- package/dist/daemon/daemon-config.js.map +0 -7
- package/dist/daemon/services/context-service.js +0 -122
- package/dist/daemon/services/context-service.js.map +0 -7
- package/dist/daemon/services/linear-service.js +0 -136
- package/dist/daemon/services/linear-service.js.map +0 -7
- package/dist/daemon/session-daemon.js +0 -312
- package/dist/daemon/session-daemon.js.map +0 -7
- package/dist/daemon/unified-daemon.js +0 -276
- package/dist/daemon/unified-daemon.js.map +0 -7
- package/dist/features/analytics/api/analytics-api.js +0 -287
- package/dist/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/features/analytics/core/analytics-service.js +0 -282
- package/dist/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/features/analytics/index.js +0 -18
- package/dist/features/analytics/index.js.map +0 -7
- package/dist/features/analytics/queries/metrics-queries.js +0 -277
- package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/features/analytics/types/metrics.js +0 -5
- package/dist/features/analytics/types/metrics.js.map +0 -7
- package/dist/features/browser/browser-mcp.js +0 -492
- package/dist/features/browser/browser-mcp.js.map +0 -7
- package/dist/features/sweep/index.js +0 -20
- package/dist/features/sweep/index.js.map +0 -7
- package/dist/features/sweep/prediction-client.js +0 -155
- package/dist/features/sweep/prediction-client.js.map +0 -7
- package/dist/features/sweep/prompt-builder.js +0 -85
- package/dist/features/sweep/prompt-builder.js.map +0 -7
- package/dist/features/sweep/pty-wrapper.js +0 -171
- package/dist/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/features/sweep/state-watcher.js +0 -87
- package/dist/features/sweep/state-watcher.js.map +0 -7
- package/dist/features/sweep/status-bar.js +0 -88
- package/dist/features/sweep/status-bar.js.map +0 -7
- package/dist/features/sweep/sweep-server-manager.js +0 -226
- package/dist/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/features/sweep/tab-interceptor.js +0 -38
- package/dist/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/features/sweep/types.js +0 -18
- package/dist/features/sweep/types.js.map +0 -7
- package/dist/features/tasks/linear-task-manager.js +0 -487
- package/dist/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/features/tasks/task-aware-context.js +0 -410
- package/dist/features/tasks/task-aware-context.js.map +0 -7
- package/dist/features/tui/simple-monitor.js +0 -116
- package/dist/features/tui/simple-monitor.js.map +0 -7
- package/dist/features/tui/swarm-monitor.js +0 -648
- package/dist/features/tui/swarm-monitor.js.map +0 -7
- package/dist/features/web/client/stores/task-store.js +0 -26
- package/dist/features/web/client/stores/task-store.js.map +0 -7
- package/dist/features/web/server/index.js +0 -194
- package/dist/features/web/server/index.js.map +0 -7
- package/dist/hooks/auto-background.js +0 -151
- package/dist/hooks/auto-background.js.map +0 -7
- package/dist/hooks/claude-code-whatsapp-hook.js +0 -197
- package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/hooks/config.js +0 -150
- package/dist/hooks/config.js.map +0 -7
- package/dist/hooks/daemon.js +0 -364
- package/dist/hooks/daemon.js.map +0 -7
- package/dist/hooks/events.js +0 -58
- package/dist/hooks/events.js.map +0 -7
- package/dist/hooks/index.js +0 -12
- package/dist/hooks/index.js.map +0 -7
- package/dist/hooks/linear-task-picker.js +0 -186
- package/dist/hooks/linear-task-picker.js.map +0 -7
- package/dist/hooks/schemas.js +0 -197
- package/dist/hooks/schemas.js.map +0 -7
- package/dist/hooks/secure-fs.js +0 -49
- package/dist/hooks/secure-fs.js.map +0 -7
- package/dist/hooks/security-logger.js +0 -155
- package/dist/hooks/security-logger.js.map +0 -7
- package/dist/hooks/session-summary.js +0 -222
- package/dist/hooks/session-summary.js.map +0 -7
- package/dist/hooks/sms-action-runner.js +0 -371
- package/dist/hooks/sms-action-runner.js.map +0 -7
- package/dist/hooks/sms-notify.js +0 -506
- package/dist/hooks/sms-notify.js.map +0 -7
- package/dist/hooks/sms-watcher.js +0 -93
- package/dist/hooks/sms-watcher.js.map +0 -7
- package/dist/hooks/sms-webhook.js +0 -555
- package/dist/hooks/sms-webhook.js.map +0 -7
- package/dist/hooks/whatsapp-commands.js +0 -479
- package/dist/hooks/whatsapp-commands.js.map +0 -7
- package/dist/hooks/whatsapp-scheduler.js +0 -317
- package/dist/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/hooks/whatsapp-sync.js +0 -409
- package/dist/hooks/whatsapp-sync.js.map +0 -7
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -7
- package/dist/integrations/anthropic/client.js +0 -263
- package/dist/integrations/anthropic/client.js.map +0 -7
- package/dist/integrations/claude-code/agent-bridge.js +0 -768
- package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -459
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/integrations/claude-code/lifecycle-hooks.js +0 -254
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/integrations/claude-code/post-task-hooks.js +0 -545
- package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client-stub.js +0 -20
- package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client.js +0 -511
- package/dist/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/integrations/claude-code/task-coordinator.js +0 -360
- package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/integrations/linear/auth.js +0 -337
- package/dist/integrations/linear/auth.js.map +0 -7
- package/dist/integrations/linear/auto-sync.js +0 -258
- package/dist/integrations/linear/auto-sync.js.map +0 -7
- package/dist/integrations/linear/client.js +0 -634
- package/dist/integrations/linear/client.js.map +0 -7
- package/dist/integrations/linear/config.js +0 -130
- package/dist/integrations/linear/config.js.map +0 -7
- package/dist/integrations/linear/migration.js +0 -361
- package/dist/integrations/linear/migration.js.map +0 -7
- package/dist/integrations/linear/oauth-server.js +0 -454
- package/dist/integrations/linear/oauth-server.js.map +0 -7
- package/dist/integrations/linear/rest-client.js +0 -213
- package/dist/integrations/linear/rest-client.js.map +0 -7
- package/dist/integrations/linear/sync-manager.js +0 -236
- package/dist/integrations/linear/sync-manager.js.map +0 -7
- package/dist/integrations/linear/sync-service.js +0 -231
- package/dist/integrations/linear/sync-service.js.map +0 -7
- package/dist/integrations/linear/sync.js +0 -782
- package/dist/integrations/linear/sync.js.map +0 -7
- package/dist/integrations/linear/types.js +0 -5
- package/dist/integrations/linear/types.js.map +0 -7
- package/dist/integrations/linear/unified-sync.js +0 -589
- package/dist/integrations/linear/unified-sync.js.map +0 -7
- package/dist/integrations/linear/webhook-handler.js +0 -219
- package/dist/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/integrations/linear/webhook-server.js +0 -218
- package/dist/integrations/linear/webhook-server.js.map +0 -7
- package/dist/integrations/linear/webhook.js +0 -291
- package/dist/integrations/linear/webhook.js.map +0 -7
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +0 -266
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/context-handlers.js +0 -257
- package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/discovery-handlers.js +0 -497
- package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/index.js +0 -166
- package/dist/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/integrations/mcp/handlers/linear-handlers.js +0 -247
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/skill-handlers.js +0 -529
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/task-handlers.js +0 -239
- package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/trace-handlers.js +0 -308
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/integrations/mcp/index.js +0 -23
- package/dist/integrations/mcp/index.js.map +0 -7
- package/dist/integrations/mcp/middleware/tool-scoring.js +0 -356
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/integrations/mcp/refactored-server.js +0 -374
- package/dist/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/integrations/mcp/remote-server.js +0 -682
- package/dist/integrations/mcp/remote-server.js.map +0 -7
- package/dist/integrations/mcp/schemas.js +0 -147
- package/dist/integrations/mcp/schemas.js.map +0 -7
- package/dist/integrations/mcp/server.js +0 -1975
- package/dist/integrations/mcp/server.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions-code.js +0 -125
- package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions.js +0 -702
- 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 +0 -860
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/integrations/ralph/context/context-budget-manager.js +0 -301
- package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +0 -360
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +0 -410
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/integrations/ralph/index.js +0 -18
- package/dist/integrations/ralph/index.js.map +0 -7
- package/dist/integrations/ralph/learning/pattern-learner.js +0 -401
- package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +0 -294
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-registry.js +0 -108
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -463
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -400
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +0 -473
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +0 -388
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/integrations/ralph/performance/performance-optimizer.js +0 -358
- 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 +0 -462
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/integrations/ralph/state/state-reconciler.js +0 -404
- package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +0 -428
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +0 -996
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/integrations/ralph/types.js +0 -5
- package/dist/integrations/ralph/types.js.map +0 -7
- package/dist/integrations/ralph/visualization/ralph-debugger.js +0 -585
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/mcp/stackmemory-mcp-server.js +0 -554
- package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/middleware/exponential-rate-limiter.js +0 -289
- package/dist/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/models/user.model.js +0 -358
- package/dist/models/user.model.js.map +0 -7
- package/dist/servers/production/auth-middleware.js +0 -528
- 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 +0 -65
- package/dist/services/config-service.js.map +0 -7
- package/dist/services/context-service.js +0 -194
- package/dist/services/context-service.js.map +0 -7
- package/dist/skills/api-discovery.js +0 -354
- package/dist/skills/api-discovery.js.map +0 -7
- package/dist/skills/api-skill.js +0 -475
- package/dist/skills/api-skill.js.map +0 -7
- package/dist/skills/claude-skills.js +0 -1061
- package/dist/skills/claude-skills.js.map +0 -7
- package/dist/skills/dashboard-launcher.js +0 -216
- package/dist/skills/dashboard-launcher.js.map +0 -7
- package/dist/skills/recursive-agent-orchestrator.js +0 -575
- 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 +0 -404
- package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -7
- package/dist/utils/env.js +0 -50
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/formatting.js +0 -62
- package/dist/utils/formatting.js.map +0 -7
- package/dist/utils/process-cleanup.js +0 -136
- 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/{core/merge → src/core/extensions}/types.js +0 -0
- /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
|
@@ -21,19 +21,19 @@ const execAsync = promisify(exec);
|
|
|
21
21
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
22
22
|
|
|
23
23
|
// Load environment variables from .env file (check .env first as per user preference)
|
|
24
|
-
dotenv.config({
|
|
24
|
+
dotenv.config({
|
|
25
25
|
path: path.join(__dirname, '..', '.env'),
|
|
26
26
|
override: true,
|
|
27
|
-
silent: true
|
|
27
|
+
silent: true,
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
// Sync intervals (in milliseconds)
|
|
31
31
|
const SYNC_INTERVALS = {
|
|
32
|
-
linear: 60 * 60 * 1000,
|
|
33
|
-
context: 15 * 60 * 1000,
|
|
34
|
-
backup: 4 * 60 * 60 * 1000,
|
|
35
|
-
redis: 5 * 60 * 1000,
|
|
36
|
-
crossSession: 10 * 60 * 1000,
|
|
32
|
+
linear: 60 * 60 * 1000, // 1 hour - Linear task sync
|
|
33
|
+
context: 15 * 60 * 1000, // 15 minutes - Context and frame sync
|
|
34
|
+
backup: 4 * 60 * 60 * 1000, // 4 hours - Cloud backup
|
|
35
|
+
redis: 5 * 60 * 1000, // 5 minutes - Redis cache sync
|
|
36
|
+
crossSession: 10 * 60 * 1000, // 10 minutes - Cross-session sync
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
class BackgroundSyncManager {
|
|
@@ -44,18 +44,23 @@ class BackgroundSyncManager {
|
|
|
44
44
|
context: { count: 0, lastSync: null, errors: 0 },
|
|
45
45
|
backup: { count: 0, lastSync: null, errors: 0 },
|
|
46
46
|
redis: { count: 0, lastSync: null, errors: 0 },
|
|
47
|
-
crossSession: { count: 0, lastSync: null, errors: 0 }
|
|
47
|
+
crossSession: { count: 0, lastSync: null, errors: 0 },
|
|
48
48
|
};
|
|
49
|
-
this.logFile = path.join(
|
|
49
|
+
this.logFile = path.join(
|
|
50
|
+
__dirname,
|
|
51
|
+
'..',
|
|
52
|
+
'.stackmemory',
|
|
53
|
+
'sync-manager.log'
|
|
54
|
+
);
|
|
50
55
|
this.isRunning = false;
|
|
51
56
|
}
|
|
52
57
|
|
|
53
58
|
log(message, level = 'INFO') {
|
|
54
59
|
const timestamp = new Date().toISOString();
|
|
55
60
|
const logMessage = `[${timestamp}] [${level}] ${message}\n`;
|
|
56
|
-
|
|
61
|
+
|
|
57
62
|
console.log(logMessage.trim());
|
|
58
|
-
|
|
63
|
+
|
|
59
64
|
try {
|
|
60
65
|
fs.appendFileSync(this.logFile, logMessage);
|
|
61
66
|
} catch (error) {
|
|
@@ -64,10 +69,18 @@ class BackgroundSyncManager {
|
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
/**
|
|
67
|
-
* Sync Linear tasks
|
|
72
|
+
* Sync Linear tasks (opt-in only)
|
|
68
73
|
*/
|
|
69
74
|
async syncLinear() {
|
|
70
|
-
|
|
75
|
+
// Require explicit opt-in via ENABLE_LINEAR_SYNC=true
|
|
76
|
+
if (process.env.ENABLE_LINEAR_SYNC !== 'true') {
|
|
77
|
+
return; // Silent skip - Linear sync is opt-in
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (
|
|
81
|
+
!process.env.LINEAR_API_KEY &&
|
|
82
|
+
!process.env.STACKMEMORY_LINEAR_API_KEY
|
|
83
|
+
) {
|
|
71
84
|
this.log('Linear sync skipped - no API key', 'WARN');
|
|
72
85
|
return;
|
|
73
86
|
}
|
|
@@ -77,11 +90,11 @@ class BackgroundSyncManager {
|
|
|
77
90
|
const { stdout, stderr } = await execAsync(
|
|
78
91
|
`node ${path.join(__dirname, 'sync-linear-graphql.js')}`
|
|
79
92
|
);
|
|
80
|
-
|
|
93
|
+
|
|
81
94
|
// Parse output for summary
|
|
82
95
|
const addedMatch = stdout.match(/Added to local: (\d+)/);
|
|
83
96
|
const added = addedMatch ? addedMatch[1] : '0';
|
|
84
|
-
|
|
97
|
+
|
|
85
98
|
this.stats.linear.count++;
|
|
86
99
|
this.stats.linear.lastSync = new Date();
|
|
87
100
|
this.log(`Linear sync completed - added ${added} tasks`);
|
|
@@ -99,42 +112,50 @@ class BackgroundSyncManager {
|
|
|
99
112
|
try {
|
|
100
113
|
const homeDir = process.env.HOME;
|
|
101
114
|
const stackMemoryDir = path.join(homeDir, '.stackmemory');
|
|
102
|
-
|
|
115
|
+
|
|
103
116
|
// Get all session directories
|
|
104
117
|
const sessionsDir = path.join(stackMemoryDir, 'sessions');
|
|
105
118
|
const sharedContextDir = path.join(stackMemoryDir, 'shared-context');
|
|
106
|
-
|
|
119
|
+
|
|
107
120
|
// Count items to sync
|
|
108
121
|
let sessionCount = 0;
|
|
109
122
|
let contextCount = 0;
|
|
110
|
-
|
|
123
|
+
|
|
111
124
|
if (fs.existsSync(sessionsDir)) {
|
|
112
125
|
sessionCount = fs.readdirSync(sessionsDir).length;
|
|
113
126
|
}
|
|
114
|
-
|
|
127
|
+
|
|
115
128
|
if (fs.existsSync(sharedContextDir)) {
|
|
116
|
-
const projects = fs
|
|
129
|
+
const projects = fs
|
|
130
|
+
.readdirSync(path.join(sharedContextDir, 'projects'))
|
|
131
|
+
.filter((f) => f.endsWith('.json'));
|
|
117
132
|
contextCount = projects.length;
|
|
118
|
-
|
|
133
|
+
|
|
119
134
|
// Consolidate shared contexts
|
|
120
135
|
for (const projectFile of projects) {
|
|
121
|
-
const projectPath = path.join(
|
|
136
|
+
const projectPath = path.join(
|
|
137
|
+
sharedContextDir,
|
|
138
|
+
'projects',
|
|
139
|
+
projectFile
|
|
140
|
+
);
|
|
122
141
|
const data = JSON.parse(fs.readFileSync(projectPath, 'utf8'));
|
|
123
|
-
|
|
142
|
+
|
|
124
143
|
// Remove old/stale entries (older than 30 days)
|
|
125
|
-
const thirtyDaysAgo = Date.now() -
|
|
144
|
+
const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;
|
|
126
145
|
if (data.contexts) {
|
|
127
|
-
data.contexts = data.contexts.filter(
|
|
128
|
-
c.timestamp && c.timestamp > thirtyDaysAgo
|
|
146
|
+
data.contexts = data.contexts.filter(
|
|
147
|
+
(c) => c.timestamp && c.timestamp > thirtyDaysAgo
|
|
129
148
|
);
|
|
130
149
|
fs.writeFileSync(projectPath, JSON.stringify(data, null, 2));
|
|
131
150
|
}
|
|
132
151
|
}
|
|
133
152
|
}
|
|
134
|
-
|
|
153
|
+
|
|
135
154
|
this.stats.context.count++;
|
|
136
155
|
this.stats.context.lastSync = new Date();
|
|
137
|
-
this.log(
|
|
156
|
+
this.log(
|
|
157
|
+
`Context sync completed - ${sessionCount} sessions, ${contextCount} shared contexts`
|
|
158
|
+
);
|
|
138
159
|
} catch (error) {
|
|
139
160
|
this.stats.context.errors++;
|
|
140
161
|
this.log(`Context sync failed: ${error.message}`, 'ERROR');
|
|
@@ -150,24 +171,30 @@ class BackgroundSyncManager {
|
|
|
150
171
|
const homeDir = process.env.HOME;
|
|
151
172
|
const stackMemoryDir = path.join(homeDir, '.stackmemory');
|
|
152
173
|
const backupDir = path.join(__dirname, '..', 'backups');
|
|
153
|
-
|
|
174
|
+
|
|
154
175
|
// Create backup directory
|
|
155
176
|
if (!fs.existsSync(backupDir)) {
|
|
156
177
|
fs.mkdirSync(backupDir, { recursive: true });
|
|
157
178
|
}
|
|
158
|
-
|
|
179
|
+
|
|
159
180
|
// Create timestamp for backup
|
|
160
|
-
const timestamp = new Date()
|
|
161
|
-
|
|
162
|
-
|
|
181
|
+
const timestamp = new Date()
|
|
182
|
+
.toISOString()
|
|
183
|
+
.replace(/:/g, '-')
|
|
184
|
+
.split('.')[0];
|
|
185
|
+
const backupFile = path.join(
|
|
186
|
+
backupDir,
|
|
187
|
+
`stackmemory-backup-${timestamp}.tar.gz`
|
|
188
|
+
);
|
|
189
|
+
|
|
163
190
|
// Create tar archive of important data
|
|
164
191
|
const { stdout, stderr } = await execAsync(
|
|
165
192
|
`tar -czf ${backupFile} -C ${homeDir} .stackmemory/sessions .stackmemory/shared-context .stackmemory/projects.db 2>/dev/null || true`
|
|
166
193
|
);
|
|
167
|
-
|
|
194
|
+
|
|
168
195
|
const stats = fs.statSync(backupFile);
|
|
169
196
|
const sizeMB = (stats.size / (1024 * 1024)).toFixed(2);
|
|
170
|
-
|
|
197
|
+
|
|
171
198
|
// Upload to cloud if configured
|
|
172
199
|
if (process.env.AWS_S3_BUCKET) {
|
|
173
200
|
await execAsync(
|
|
@@ -180,19 +207,22 @@ class BackgroundSyncManager {
|
|
|
180
207
|
);
|
|
181
208
|
this.log(`Backup uploaded to GCS: ${sizeMB}MB`);
|
|
182
209
|
} else {
|
|
183
|
-
this.log(
|
|
210
|
+
this.log(
|
|
211
|
+
`Local backup created: ${sizeMB}MB (no cloud storage configured)`
|
|
212
|
+
);
|
|
184
213
|
}
|
|
185
|
-
|
|
214
|
+
|
|
186
215
|
// Clean up old local backups (keep last 5)
|
|
187
|
-
const backups = fs
|
|
188
|
-
.
|
|
216
|
+
const backups = fs
|
|
217
|
+
.readdirSync(backupDir)
|
|
218
|
+
.filter((f) => f.startsWith('stackmemory-backup-'))
|
|
189
219
|
.sort()
|
|
190
220
|
.reverse();
|
|
191
|
-
|
|
221
|
+
|
|
192
222
|
for (let i = 5; i < backups.length; i++) {
|
|
193
223
|
fs.unlinkSync(path.join(backupDir, backups[i]));
|
|
194
224
|
}
|
|
195
|
-
|
|
225
|
+
|
|
196
226
|
this.stats.backup.count++;
|
|
197
227
|
this.stats.backup.lastSync = new Date();
|
|
198
228
|
this.log(`Backup completed - ${sizeMB}MB`);
|
|
@@ -215,19 +245,19 @@ class BackgroundSyncManager {
|
|
|
215
245
|
// Import Redis client dynamically
|
|
216
246
|
const { default: Redis } = await import('ioredis');
|
|
217
247
|
const redis = new Redis(process.env.REDIS_URL);
|
|
218
|
-
|
|
248
|
+
|
|
219
249
|
// Sync recent frames to Redis for fast access
|
|
220
250
|
const homeDir = process.env.HOME;
|
|
221
251
|
const projectsDb = path.join(homeDir, '.stackmemory', 'projects.db');
|
|
222
|
-
|
|
252
|
+
|
|
223
253
|
if (fs.existsSync(projectsDb)) {
|
|
224
254
|
// Get recent frames from SQLite
|
|
225
255
|
const { stdout } = await execAsync(
|
|
226
256
|
`sqlite3 ${projectsDb} "SELECT frame_id, title, created_at FROM frames WHERE created_at > datetime('now', '-7 days') ORDER BY created_at DESC LIMIT 100"`
|
|
227
257
|
);
|
|
228
|
-
|
|
258
|
+
|
|
229
259
|
const frames = stdout.trim().split('\n').filter(Boolean);
|
|
230
|
-
|
|
260
|
+
|
|
231
261
|
// Store in Redis with expiry
|
|
232
262
|
for (const frame of frames) {
|
|
233
263
|
const [id, title, created] = frame.split('|');
|
|
@@ -237,12 +267,12 @@ class BackgroundSyncManager {
|
|
|
237
267
|
JSON.stringify({ id, title, created })
|
|
238
268
|
);
|
|
239
269
|
}
|
|
240
|
-
|
|
270
|
+
|
|
241
271
|
this.log(`Redis sync completed - ${frames.length} frames cached`);
|
|
242
272
|
}
|
|
243
|
-
|
|
273
|
+
|
|
244
274
|
await redis.quit();
|
|
245
|
-
|
|
275
|
+
|
|
246
276
|
this.stats.redis.count++;
|
|
247
277
|
this.stats.redis.lastSync = new Date();
|
|
248
278
|
} catch (error) {
|
|
@@ -258,56 +288,64 @@ class BackgroundSyncManager {
|
|
|
258
288
|
this.log('Starting cross-session sync...');
|
|
259
289
|
try {
|
|
260
290
|
const homeDir = process.env.HOME;
|
|
261
|
-
const sharedContextDir = path.join(
|
|
291
|
+
const sharedContextDir = path.join(
|
|
292
|
+
homeDir,
|
|
293
|
+
'.stackmemory',
|
|
294
|
+
'shared-context'
|
|
295
|
+
);
|
|
262
296
|
const projectsDir = path.join(sharedContextDir, 'projects');
|
|
263
|
-
|
|
297
|
+
|
|
264
298
|
if (!fs.existsSync(projectsDir)) {
|
|
265
299
|
fs.mkdirSync(projectsDir, { recursive: true });
|
|
266
300
|
}
|
|
267
|
-
|
|
301
|
+
|
|
268
302
|
// Get current project
|
|
269
303
|
const projectName = path.basename(process.cwd());
|
|
270
304
|
const projectFile = path.join(projectsDir, `${projectName}.json`);
|
|
271
|
-
|
|
272
|
-
let projectData = {
|
|
273
|
-
name: projectName,
|
|
305
|
+
|
|
306
|
+
let projectData = {
|
|
307
|
+
name: projectName,
|
|
274
308
|
sessions: [],
|
|
275
309
|
lastSync: null,
|
|
276
|
-
contexts: []
|
|
310
|
+
contexts: [],
|
|
277
311
|
};
|
|
278
|
-
|
|
312
|
+
|
|
279
313
|
if (fs.existsSync(projectFile)) {
|
|
280
314
|
projectData = JSON.parse(fs.readFileSync(projectFile, 'utf8'));
|
|
281
315
|
}
|
|
282
|
-
|
|
316
|
+
|
|
283
317
|
// Update sync timestamp
|
|
284
318
|
projectData.lastSync = new Date().toISOString();
|
|
285
|
-
|
|
319
|
+
|
|
286
320
|
// Add current session info
|
|
287
321
|
const sessionId = process.env.STACKMEMORY_SESSION_ID || 'unknown';
|
|
288
|
-
const existingSession = projectData.sessions.find(
|
|
289
|
-
|
|
322
|
+
const existingSession = projectData.sessions.find(
|
|
323
|
+
(s) => s.id === sessionId
|
|
324
|
+
);
|
|
325
|
+
|
|
290
326
|
if (existingSession) {
|
|
291
327
|
existingSession.lastActive = new Date().toISOString();
|
|
292
328
|
} else {
|
|
293
329
|
projectData.sessions.push({
|
|
294
330
|
id: sessionId,
|
|
295
331
|
startTime: new Date().toISOString(),
|
|
296
|
-
lastActive: new Date().toISOString()
|
|
332
|
+
lastActive: new Date().toISOString(),
|
|
297
333
|
});
|
|
298
334
|
}
|
|
299
|
-
|
|
335
|
+
|
|
300
336
|
// Keep only recent sessions (last 30 days)
|
|
301
337
|
const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
|
|
302
|
-
projectData.sessions = projectData.sessions.filter(
|
|
303
|
-
new Date(s.lastActive) > thirtyDaysAgo
|
|
338
|
+
projectData.sessions = projectData.sessions.filter(
|
|
339
|
+
(s) => new Date(s.lastActive) > thirtyDaysAgo
|
|
304
340
|
);
|
|
305
|
-
|
|
341
|
+
|
|
306
342
|
fs.writeFileSync(projectFile, JSON.stringify(projectData, null, 2));
|
|
307
|
-
|
|
343
|
+
|
|
308
344
|
this.stats.crossSession.count++;
|
|
309
345
|
this.stats.crossSession.lastSync = new Date();
|
|
310
|
-
this.log(
|
|
346
|
+
this.log(
|
|
347
|
+
`Cross-session sync completed - ${projectData.sessions.length} active sessions`
|
|
348
|
+
);
|
|
311
349
|
} catch (error) {
|
|
312
350
|
this.stats.crossSession.errors++;
|
|
313
351
|
this.log(`Cross-session sync failed: ${error.message}`, 'ERROR');
|
|
@@ -349,26 +387,50 @@ class BackgroundSyncManager {
|
|
|
349
387
|
this.isRunning = true;
|
|
350
388
|
this.log('🚀 StackMemory Background Sync Manager starting...');
|
|
351
389
|
this.log(`📅 Sync intervals:`);
|
|
352
|
-
|
|
390
|
+
if (process.env.ENABLE_LINEAR_SYNC === 'true') {
|
|
391
|
+
this.log(` Linear: every ${SYNC_INTERVALS.linear / 60000} minutes`);
|
|
392
|
+
} else {
|
|
393
|
+
this.log(` Linear: disabled (set ENABLE_LINEAR_SYNC=true to enable)`);
|
|
394
|
+
}
|
|
353
395
|
this.log(` Context: every ${SYNC_INTERVALS.context / 60000} minutes`);
|
|
354
396
|
this.log(` Backup: every ${SYNC_INTERVALS.backup / 3600000} hours`);
|
|
355
397
|
this.log(` Redis: every ${SYNC_INTERVALS.redis / 60000} minutes`);
|
|
356
|
-
this.log(
|
|
357
|
-
|
|
398
|
+
this.log(
|
|
399
|
+
` Cross-session: every ${SYNC_INTERVALS.crossSession / 60000} minutes`
|
|
400
|
+
);
|
|
401
|
+
|
|
358
402
|
// Run initial sync for all tasks
|
|
359
403
|
await this.syncLinear();
|
|
360
404
|
await this.syncContext();
|
|
361
405
|
await this.syncCrossSession();
|
|
362
|
-
|
|
406
|
+
|
|
363
407
|
// Schedule recurring syncs
|
|
364
|
-
this.syncTasks.set(
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
this.syncTasks.set(
|
|
369
|
-
|
|
408
|
+
this.syncTasks.set(
|
|
409
|
+
'linear',
|
|
410
|
+
setInterval(() => this.runSync('linear'), SYNC_INTERVALS.linear)
|
|
411
|
+
);
|
|
412
|
+
this.syncTasks.set(
|
|
413
|
+
'context',
|
|
414
|
+
setInterval(() => this.runSync('context'), SYNC_INTERVALS.context)
|
|
415
|
+
);
|
|
416
|
+
this.syncTasks.set(
|
|
417
|
+
'backup',
|
|
418
|
+
setInterval(() => this.runSync('backup'), SYNC_INTERVALS.backup)
|
|
419
|
+
);
|
|
420
|
+
this.syncTasks.set(
|
|
421
|
+
'redis',
|
|
422
|
+
setInterval(() => this.runSync('redis'), SYNC_INTERVALS.redis)
|
|
423
|
+
);
|
|
424
|
+
this.syncTasks.set(
|
|
425
|
+
'crossSession',
|
|
426
|
+
setInterval(
|
|
427
|
+
() => this.runSync('crossSession'),
|
|
428
|
+
SYNC_INTERVALS.crossSession
|
|
429
|
+
)
|
|
430
|
+
);
|
|
431
|
+
|
|
370
432
|
this.log('⏰ All sync tasks scheduled');
|
|
371
|
-
|
|
433
|
+
|
|
372
434
|
// Handle graceful shutdown
|
|
373
435
|
process.on('SIGINT', () => this.stop());
|
|
374
436
|
process.on('SIGTERM', () => this.stop());
|
|
@@ -379,13 +441,13 @@ class BackgroundSyncManager {
|
|
|
379
441
|
*/
|
|
380
442
|
stop() {
|
|
381
443
|
this.log('🛑 Stopping Background Sync Manager...');
|
|
382
|
-
|
|
444
|
+
|
|
383
445
|
// Clear all intervals
|
|
384
446
|
for (const [name, interval] of this.syncTasks) {
|
|
385
447
|
clearInterval(interval);
|
|
386
448
|
}
|
|
387
449
|
this.syncTasks.clear();
|
|
388
|
-
|
|
450
|
+
|
|
389
451
|
// Log final stats
|
|
390
452
|
this.log('📊 Final statistics:');
|
|
391
453
|
for (const [name, stats] of Object.entries(this.stats)) {
|
|
@@ -393,7 +455,7 @@ class BackgroundSyncManager {
|
|
|
393
455
|
this.log(` ${name}: ${stats.count} syncs, ${stats.errors} errors`);
|
|
394
456
|
}
|
|
395
457
|
}
|
|
396
|
-
|
|
458
|
+
|
|
397
459
|
this.isRunning = false;
|
|
398
460
|
this.log('👋 Sync manager stopped');
|
|
399
461
|
process.exit(0);
|
|
@@ -406,11 +468,11 @@ class BackgroundSyncManager {
|
|
|
406
468
|
return {
|
|
407
469
|
running: this.isRunning,
|
|
408
470
|
stats: this.stats,
|
|
409
|
-
tasks: Array.from(this.syncTasks.keys())
|
|
471
|
+
tasks: Array.from(this.syncTasks.keys()),
|
|
410
472
|
};
|
|
411
473
|
}
|
|
412
474
|
}
|
|
413
475
|
|
|
414
476
|
// Start the manager
|
|
415
477
|
const manager = new BackgroundSyncManager();
|
|
416
|
-
manager.start();
|
|
478
|
+
manager.start();
|
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
* StackMemory Claude Auto-Start Daemon Manager
|
|
5
5
|
* Automatically starts essential daemons when Claude loads the project
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* Core daemons (always started):
|
|
8
8
|
* 1. Context Monitor - Saves context every 15 min
|
|
9
|
-
* 2.
|
|
10
|
-
* 3.
|
|
11
|
-
* 4.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
9
|
+
* 2. File Watcher - Auto-syncs on file changes
|
|
10
|
+
* 3. Error Monitor - Tracks and logs errors
|
|
11
|
+
* 4. Auto-handoff - Session transition helper
|
|
12
|
+
*
|
|
13
|
+
* Optional daemons (set env var to enable):
|
|
14
|
+
* - ENABLE_LINEAR_SYNC=true - Linear task sync (hourly)
|
|
15
|
+
* - ENABLE_WEBHOOKS=true - Linear webhook listener
|
|
16
|
+
* - ENABLE_QUALITY_GATES=true - Post-task validation
|
|
15
17
|
*/
|
|
16
18
|
|
|
17
19
|
import fs from 'fs';
|
|
@@ -129,8 +131,8 @@ class ClaudeAutoStartManager {
|
|
|
129
131
|
}
|
|
130
132
|
|
|
131
133
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
+
* Linear Sync Daemon (opt-in)
|
|
135
|
+
* Requires ENABLE_LINEAR_SYNC=true and LINEAR_API_KEY
|
|
134
136
|
*/
|
|
135
137
|
startLinearSync() {
|
|
136
138
|
if (
|
|
@@ -444,13 +446,16 @@ class ClaudeAutoStartManager {
|
|
|
444
446
|
// Save PID for management
|
|
445
447
|
fs.writeFileSync(this.pidFile, process.pid.toString());
|
|
446
448
|
|
|
447
|
-
// Start
|
|
449
|
+
// Start core daemons
|
|
448
450
|
this.startContextMonitor();
|
|
449
|
-
this.startLinearSync();
|
|
450
451
|
this.startFileWatcher();
|
|
451
452
|
this.startErrorMonitor();
|
|
452
453
|
|
|
453
|
-
// Optional daemons (only if
|
|
454
|
+
// Optional daemons (only if explicitly enabled)
|
|
455
|
+
if (process.env.ENABLE_LINEAR_SYNC === 'true') {
|
|
456
|
+
this.startLinearSync();
|
|
457
|
+
}
|
|
458
|
+
|
|
454
459
|
if (process.env.ENABLE_WEBHOOKS === 'true') {
|
|
455
460
|
this.startWebhookListener();
|
|
456
461
|
}
|