@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
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { Command } from "commander";
|
|
6
|
-
import chalk from "chalk";
|
|
7
|
-
import ora from "ora";
|
|
8
|
-
import { existsSync, readFileSync, unlinkSync } from "fs";
|
|
9
|
-
import { spawn } from "child_process";
|
|
10
|
-
import { join } from "path";
|
|
11
|
-
import {
|
|
12
|
-
loadDaemonConfig,
|
|
13
|
-
saveDaemonConfig,
|
|
14
|
-
readDaemonStatus,
|
|
15
|
-
getDaemonPaths,
|
|
16
|
-
DEFAULT_DAEMON_CONFIG
|
|
17
|
-
} from "../../daemon/daemon-config.js";
|
|
18
|
-
function createDaemonCommand() {
|
|
19
|
-
const cmd = new Command("daemon").description("Manage StackMemory unified daemon for background services").addHelpText(
|
|
20
|
-
"after",
|
|
21
|
-
`
|
|
22
|
-
Examples:
|
|
23
|
-
stackmemory daemon start Start the daemon
|
|
24
|
-
stackmemory daemon stop Stop the daemon
|
|
25
|
-
stackmemory daemon status Check daemon status
|
|
26
|
-
stackmemory daemon logs View daemon logs
|
|
27
|
-
stackmemory daemon config Show/edit configuration
|
|
28
|
-
|
|
29
|
-
The daemon provides:
|
|
30
|
-
- Context auto-save (default: every 15 minutes)
|
|
31
|
-
- Linear sync (optional, if configured)
|
|
32
|
-
- File watch (optional, for change detection)
|
|
33
|
-
`
|
|
34
|
-
);
|
|
35
|
-
cmd.command("start").description("Start the unified daemon").option("--foreground", "Run in foreground (for debugging)").option("--save-interval <minutes>", "Context save interval in minutes").option("--linear-interval <minutes>", "Linear sync interval in minutes").option("--no-linear", "Disable Linear sync").option("--log-level <level>", "Log level (debug|info|warn|error)").action(async (options) => {
|
|
36
|
-
const status = readDaemonStatus();
|
|
37
|
-
if (status.running) {
|
|
38
|
-
console.log(
|
|
39
|
-
chalk.yellow("Daemon already running"),
|
|
40
|
-
chalk.gray(`(pid: ${status.pid})`)
|
|
41
|
-
);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
const spinner = ora("Starting unified daemon...").start();
|
|
45
|
-
try {
|
|
46
|
-
const args = ["daemon-run"];
|
|
47
|
-
if (options.saveInterval) {
|
|
48
|
-
args.push("--save-interval", options.saveInterval);
|
|
49
|
-
}
|
|
50
|
-
if (options.linearInterval) {
|
|
51
|
-
args.push("--linear-interval", options.linearInterval);
|
|
52
|
-
}
|
|
53
|
-
if (options.linear === false) {
|
|
54
|
-
args.push("--no-linear");
|
|
55
|
-
}
|
|
56
|
-
if (options.logLevel) {
|
|
57
|
-
args.push("--log-level", options.logLevel);
|
|
58
|
-
}
|
|
59
|
-
if (options.foreground) {
|
|
60
|
-
spinner.stop();
|
|
61
|
-
console.log(chalk.cyan("Running in foreground (Ctrl+C to stop)"));
|
|
62
|
-
const { UnifiedDaemon } = await import("../../daemon/unified-daemon.js");
|
|
63
|
-
const config = {};
|
|
64
|
-
if (options.saveInterval) {
|
|
65
|
-
config.context = {
|
|
66
|
-
enabled: true,
|
|
67
|
-
interval: parseInt(options.saveInterval, 10)
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
if (options.linearInterval) {
|
|
71
|
-
config.linear = {
|
|
72
|
-
enabled: true,
|
|
73
|
-
interval: parseInt(options.linearInterval, 10),
|
|
74
|
-
retryAttempts: 3,
|
|
75
|
-
retryDelay: 3e4
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
if (options.linear === false) {
|
|
79
|
-
config.linear = {
|
|
80
|
-
enabled: false,
|
|
81
|
-
interval: 60,
|
|
82
|
-
retryAttempts: 3,
|
|
83
|
-
retryDelay: 3e4
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const daemon = new UnifiedDaemon(config);
|
|
87
|
-
await daemon.start();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const daemonScript = getDaemonScriptPath();
|
|
91
|
-
if (!daemonScript) {
|
|
92
|
-
spinner.fail(chalk.red("Daemon script not found"));
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const daemonProcess = spawn("node", [daemonScript, ...args.slice(1)], {
|
|
96
|
-
detached: true,
|
|
97
|
-
stdio: "ignore",
|
|
98
|
-
env: { ...process.env }
|
|
99
|
-
});
|
|
100
|
-
daemonProcess.unref();
|
|
101
|
-
await new Promise((r) => setTimeout(r, 1e3));
|
|
102
|
-
const newStatus = readDaemonStatus();
|
|
103
|
-
if (newStatus.running) {
|
|
104
|
-
spinner.succeed(chalk.green("Daemon started"));
|
|
105
|
-
console.log(chalk.gray(`PID: ${newStatus.pid}`));
|
|
106
|
-
const services = [];
|
|
107
|
-
if (newStatus.services.context.enabled) services.push("context");
|
|
108
|
-
if (newStatus.services.linear.enabled) services.push("linear");
|
|
109
|
-
if (newStatus.services.fileWatch.enabled) services.push("file-watch");
|
|
110
|
-
if (services.length > 0) {
|
|
111
|
-
console.log(chalk.gray(`Services: ${services.join(", ")}`));
|
|
112
|
-
}
|
|
113
|
-
} else {
|
|
114
|
-
spinner.fail(chalk.red("Failed to start daemon"));
|
|
115
|
-
console.log(chalk.gray("Check logs: stackmemory daemon logs"));
|
|
116
|
-
}
|
|
117
|
-
} catch (error) {
|
|
118
|
-
spinner.fail(chalk.red("Failed to start daemon"));
|
|
119
|
-
console.log(chalk.gray(error.message));
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
cmd.command("stop").description("Stop the unified daemon").action(() => {
|
|
123
|
-
const status = readDaemonStatus();
|
|
124
|
-
if (!status.running || !status.pid) {
|
|
125
|
-
console.log(chalk.yellow("Daemon not running"));
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
try {
|
|
129
|
-
process.kill(status.pid, "SIGTERM");
|
|
130
|
-
console.log(chalk.green("Daemon stopped"));
|
|
131
|
-
} catch (err) {
|
|
132
|
-
console.log(chalk.red("Failed to stop daemon"));
|
|
133
|
-
console.log(chalk.gray(err.message));
|
|
134
|
-
const { pidFile } = getDaemonPaths();
|
|
135
|
-
if (existsSync(pidFile)) {
|
|
136
|
-
unlinkSync(pidFile);
|
|
137
|
-
console.log(chalk.gray("Cleaned up stale PID file"));
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
cmd.command("restart").description("Restart the unified daemon").action(async () => {
|
|
142
|
-
const status = readDaemonStatus();
|
|
143
|
-
if (status.running && status.pid) {
|
|
144
|
-
try {
|
|
145
|
-
process.kill(status.pid, "SIGTERM");
|
|
146
|
-
await new Promise((r) => setTimeout(r, 1e3));
|
|
147
|
-
} catch {
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
const config = loadDaemonConfig();
|
|
151
|
-
const daemonScript = getDaemonScriptPath();
|
|
152
|
-
if (!daemonScript) {
|
|
153
|
-
console.log(chalk.red("Daemon script not found"));
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const args = [];
|
|
157
|
-
if (config.context.interval !== 15) {
|
|
158
|
-
args.push("--save-interval", String(config.context.interval));
|
|
159
|
-
}
|
|
160
|
-
if (!config.linear.enabled) {
|
|
161
|
-
args.push("--no-linear");
|
|
162
|
-
} else if (config.linear.interval !== 60) {
|
|
163
|
-
args.push("--linear-interval", String(config.linear.interval));
|
|
164
|
-
}
|
|
165
|
-
const daemonProcess = spawn("node", [daemonScript, ...args], {
|
|
166
|
-
detached: true,
|
|
167
|
-
stdio: "ignore"
|
|
168
|
-
});
|
|
169
|
-
daemonProcess.unref();
|
|
170
|
-
await new Promise((r) => setTimeout(r, 1e3));
|
|
171
|
-
const newStatus = readDaemonStatus();
|
|
172
|
-
if (newStatus.running) {
|
|
173
|
-
console.log(
|
|
174
|
-
chalk.green("Daemon restarted"),
|
|
175
|
-
chalk.gray(`(pid: ${newStatus.pid})`)
|
|
176
|
-
);
|
|
177
|
-
} else {
|
|
178
|
-
console.log(chalk.red("Failed to restart daemon"));
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
cmd.command("status").description("Check daemon status").action(() => {
|
|
182
|
-
const status = readDaemonStatus();
|
|
183
|
-
const config = loadDaemonConfig();
|
|
184
|
-
console.log(chalk.bold("\nStackMemory Unified Daemon\n"));
|
|
185
|
-
console.log(
|
|
186
|
-
`Status: ${status.running ? chalk.green("Running") : chalk.yellow("Stopped")}`
|
|
187
|
-
);
|
|
188
|
-
if (status.running) {
|
|
189
|
-
console.log(chalk.gray(` PID: ${status.pid}`));
|
|
190
|
-
if (status.uptime) {
|
|
191
|
-
const uptime = Math.round(status.uptime / 1e3);
|
|
192
|
-
const hours = Math.floor(uptime / 3600);
|
|
193
|
-
const mins = Math.floor(uptime % 3600 / 60);
|
|
194
|
-
const secs = uptime % 60;
|
|
195
|
-
console.log(chalk.gray(` Uptime: ${hours}h ${mins}m ${secs}s`));
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
console.log("");
|
|
199
|
-
console.log(chalk.bold("Services:"));
|
|
200
|
-
const ctx = status.services.context;
|
|
201
|
-
console.log(
|
|
202
|
-
` Context: ${ctx.enabled ? chalk.green("Enabled") : chalk.gray("Disabled")}`
|
|
203
|
-
);
|
|
204
|
-
if (ctx.enabled) {
|
|
205
|
-
console.log(chalk.gray(` Interval: ${config.context.interval} min`));
|
|
206
|
-
if (ctx.saveCount) {
|
|
207
|
-
console.log(chalk.gray(` Saves: ${ctx.saveCount}`));
|
|
208
|
-
}
|
|
209
|
-
if (ctx.lastRun) {
|
|
210
|
-
const ago = Math.round((Date.now() - ctx.lastRun) / 1e3 / 60);
|
|
211
|
-
console.log(chalk.gray(` Last save: ${ago} min ago`));
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
const lin = status.services.linear;
|
|
215
|
-
console.log(
|
|
216
|
-
` Linear: ${lin.enabled ? chalk.green("Enabled") : chalk.gray("Disabled")}`
|
|
217
|
-
);
|
|
218
|
-
if (lin.enabled) {
|
|
219
|
-
console.log(chalk.gray(` Interval: ${config.linear.interval} min`));
|
|
220
|
-
if (config.linear.quietHours) {
|
|
221
|
-
console.log(
|
|
222
|
-
chalk.gray(
|
|
223
|
-
` Quiet hours: ${config.linear.quietHours.start}:00 - ${config.linear.quietHours.end}:00`
|
|
224
|
-
)
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
if (lin.syncCount) {
|
|
228
|
-
console.log(chalk.gray(` Syncs: ${lin.syncCount}`));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
const fw = status.services.fileWatch;
|
|
232
|
-
console.log(
|
|
233
|
-
` FileWatch: ${fw.enabled ? chalk.green("Enabled") : chalk.gray("Disabled")}`
|
|
234
|
-
);
|
|
235
|
-
if (status.errors && status.errors.length > 0) {
|
|
236
|
-
console.log("");
|
|
237
|
-
console.log(chalk.bold("Recent Errors:"));
|
|
238
|
-
status.errors.slice(-3).forEach((err) => {
|
|
239
|
-
console.log(chalk.red(` - ${err.slice(0, 80)}`));
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
if (!status.running) {
|
|
243
|
-
console.log("");
|
|
244
|
-
console.log(chalk.bold("To start: stackmemory daemon start"));
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
cmd.command("logs").description("View daemon logs").option("-n, --lines <number>", "Number of lines to show", "50").option("-f, --follow", "Follow log output").option("--level <level>", "Filter by log level").action((options) => {
|
|
248
|
-
const { logFile } = getDaemonPaths();
|
|
249
|
-
if (!existsSync(logFile)) {
|
|
250
|
-
console.log(chalk.yellow("No log file found"));
|
|
251
|
-
console.log(
|
|
252
|
-
chalk.gray("Start the daemon first: stackmemory daemon start")
|
|
253
|
-
);
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
if (options.follow) {
|
|
257
|
-
const tail = spawn("tail", ["-f", logFile], { stdio: "inherit" });
|
|
258
|
-
tail.on("error", () => {
|
|
259
|
-
console.log(chalk.red("Could not follow logs"));
|
|
260
|
-
});
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const content = readFileSync(logFile, "utf8");
|
|
264
|
-
const lines = content.trim().split("\n");
|
|
265
|
-
const count = parseInt(options.lines, 10);
|
|
266
|
-
let recent = lines.slice(-count);
|
|
267
|
-
if (options.level) {
|
|
268
|
-
const level = options.level.toUpperCase();
|
|
269
|
-
recent = recent.filter((line) => {
|
|
270
|
-
try {
|
|
271
|
-
const entry = JSON.parse(line);
|
|
272
|
-
return entry.level === level;
|
|
273
|
-
} catch {
|
|
274
|
-
return false;
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
console.log(chalk.bold(`
|
|
279
|
-
Daemon logs (${recent.length} lines):
|
|
280
|
-
`));
|
|
281
|
-
for (const line of recent) {
|
|
282
|
-
try {
|
|
283
|
-
const entry = JSON.parse(line);
|
|
284
|
-
const time = entry.timestamp.split("T")[1].split(".")[0];
|
|
285
|
-
const levelColor = entry.level === "ERROR" ? chalk.red : entry.level === "WARN" ? chalk.yellow : entry.level === "DEBUG" ? chalk.gray : chalk.white;
|
|
286
|
-
console.log(
|
|
287
|
-
`${chalk.gray(time)} ${levelColor(`[${entry.level}]`)} ${chalk.cyan(`[${entry.service}]`)} ${entry.message}`
|
|
288
|
-
);
|
|
289
|
-
} catch {
|
|
290
|
-
console.log(line);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
cmd.command("config").description("Show or edit daemon configuration").option("--edit", "Open config in editor").option("--reset", "Reset to default configuration").option("--set <key=value>", "Set a config value").action((options) => {
|
|
295
|
-
const { configFile } = getDaemonPaths();
|
|
296
|
-
if (options.reset) {
|
|
297
|
-
saveDaemonConfig(DEFAULT_DAEMON_CONFIG);
|
|
298
|
-
console.log(chalk.green("Configuration reset to defaults"));
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
if (options.edit) {
|
|
302
|
-
const editor = process.env["EDITOR"] || "vim";
|
|
303
|
-
spawn(editor, [configFile], { stdio: "inherit" });
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
if (options.set) {
|
|
307
|
-
const [key, value] = options.set.split("=");
|
|
308
|
-
const config2 = loadDaemonConfig();
|
|
309
|
-
const parts = key.split(".");
|
|
310
|
-
let target = config2;
|
|
311
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
312
|
-
if (target[parts[i]] && typeof target[parts[i]] === "object") {
|
|
313
|
-
target = target[parts[i]];
|
|
314
|
-
} else {
|
|
315
|
-
console.log(chalk.red(`Invalid config key: ${key}`));
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
const lastKey = parts[parts.length - 1];
|
|
320
|
-
const parsed = value === "true" ? true : value === "false" ? false : isNaN(Number(value)) ? value : Number(value);
|
|
321
|
-
target[lastKey] = parsed;
|
|
322
|
-
saveDaemonConfig(config2);
|
|
323
|
-
console.log(chalk.green(`Set ${key} = ${value}`));
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
const config = loadDaemonConfig();
|
|
327
|
-
console.log(chalk.bold("\nDaemon Configuration\n"));
|
|
328
|
-
console.log(chalk.gray(`File: ${configFile}`));
|
|
329
|
-
console.log("");
|
|
330
|
-
console.log(chalk.bold("Context Service:"));
|
|
331
|
-
console.log(` Enabled: ${config.context.enabled}`);
|
|
332
|
-
console.log(` Interval: ${config.context.interval} minutes`);
|
|
333
|
-
console.log("");
|
|
334
|
-
console.log(chalk.bold("Linear Service:"));
|
|
335
|
-
console.log(` Enabled: ${config.linear.enabled}`);
|
|
336
|
-
console.log(` Interval: ${config.linear.interval} minutes`);
|
|
337
|
-
if (config.linear.quietHours) {
|
|
338
|
-
console.log(
|
|
339
|
-
` Quiet hours: ${config.linear.quietHours.start}:00 - ${config.linear.quietHours.end}:00`
|
|
340
|
-
);
|
|
341
|
-
}
|
|
342
|
-
console.log("");
|
|
343
|
-
console.log(chalk.bold("File Watch:"));
|
|
344
|
-
console.log(` Enabled: ${config.fileWatch.enabled}`);
|
|
345
|
-
console.log(` Extensions: ${config.fileWatch.extensions.join(", ")}`);
|
|
346
|
-
console.log("");
|
|
347
|
-
console.log(chalk.bold("General:"));
|
|
348
|
-
console.log(` Heartbeat: ${config.heartbeatInterval} seconds`);
|
|
349
|
-
console.log(` Log level: ${config.logLevel}`);
|
|
350
|
-
});
|
|
351
|
-
cmd.action(() => {
|
|
352
|
-
const status = readDaemonStatus();
|
|
353
|
-
console.log(chalk.bold("\nStackMemory Daemon\n"));
|
|
354
|
-
console.log(
|
|
355
|
-
`Status: ${status.running ? chalk.green("Running") : chalk.yellow("Stopped")}`
|
|
356
|
-
);
|
|
357
|
-
if (!status.running) {
|
|
358
|
-
console.log("");
|
|
359
|
-
console.log(chalk.bold("Quick start:"));
|
|
360
|
-
console.log(" stackmemory daemon start Start background services");
|
|
361
|
-
} else {
|
|
362
|
-
console.log("");
|
|
363
|
-
console.log(chalk.bold("Commands:"));
|
|
364
|
-
console.log(" stackmemory daemon status View detailed status");
|
|
365
|
-
console.log(" stackmemory daemon logs View daemon logs");
|
|
366
|
-
console.log(" stackmemory daemon stop Stop the daemon");
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
return cmd;
|
|
370
|
-
}
|
|
371
|
-
function getDaemonScriptPath() {
|
|
372
|
-
const candidates = [
|
|
373
|
-
join(__dirname, "../../daemon/unified-daemon.js"),
|
|
374
|
-
join(process.cwd(), "dist/daemon/unified-daemon.js"),
|
|
375
|
-
join(
|
|
376
|
-
process.cwd(),
|
|
377
|
-
"node_modules/@stackmemoryai/stackmemory/dist/daemon/unified-daemon.js"
|
|
378
|
-
)
|
|
379
|
-
];
|
|
380
|
-
for (const candidate of candidates) {
|
|
381
|
-
if (existsSync(candidate)) {
|
|
382
|
-
return candidate;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
return candidates[0];
|
|
386
|
-
}
|
|
387
|
-
var daemon_default = createDaemonCommand();
|
|
388
|
-
export {
|
|
389
|
-
createDaemonCommand,
|
|
390
|
-
daemon_default as default
|
|
391
|
-
};
|
|
392
|
-
//# sourceMappingURL=daemon.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/commands/daemon.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Daemon CLI Command\n * Manage StackMemory unified daemon\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync, readFileSync, unlinkSync } from 'fs';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\nimport {\n loadDaemonConfig,\n saveDaemonConfig,\n readDaemonStatus,\n getDaemonPaths,\n DEFAULT_DAEMON_CONFIG,\n type DaemonConfig,\n} from '../../daemon/daemon-config.js';\n\nexport function createDaemonCommand(): Command {\n const cmd = new Command('daemon')\n .description('Manage StackMemory unified daemon for background services')\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory daemon start Start the daemon\n stackmemory daemon stop Stop the daemon\n stackmemory daemon status Check daemon status\n stackmemory daemon logs View daemon logs\n stackmemory daemon config Show/edit configuration\n\nThe daemon provides:\n - Context auto-save (default: every 15 minutes)\n - Linear sync (optional, if configured)\n - File watch (optional, for change detection)\n`\n );\n\n // Start command\n cmd\n .command('start')\n .description('Start the unified daemon')\n .option('--foreground', 'Run in foreground (for debugging)')\n .option('--save-interval <minutes>', 'Context save interval in minutes')\n .option('--linear-interval <minutes>', 'Linear sync interval in minutes')\n .option('--no-linear', 'Disable Linear sync')\n .option('--log-level <level>', 'Log level (debug|info|warn|error)')\n .action(async (options) => {\n const status = readDaemonStatus();\n\n if (status.running) {\n console.log(\n chalk.yellow('Daemon already running'),\n chalk.gray(`(pid: ${status.pid})`)\n );\n return;\n }\n\n const spinner = ora('Starting unified daemon...').start();\n\n try {\n // Build args\n const args = ['daemon-run'];\n\n if (options.saveInterval) {\n args.push('--save-interval', options.saveInterval);\n }\n if (options.linearInterval) {\n args.push('--linear-interval', options.linearInterval);\n }\n if (options.linear === false) {\n args.push('--no-linear');\n }\n if (options.logLevel) {\n args.push('--log-level', options.logLevel);\n }\n\n if (options.foreground) {\n spinner.stop();\n console.log(chalk.cyan('Running in foreground (Ctrl+C to stop)'));\n const { UnifiedDaemon } =\n await import('../../daemon/unified-daemon.js');\n const config: Partial<DaemonConfig> = {};\n if (options.saveInterval) {\n config.context = {\n enabled: true,\n interval: parseInt(options.saveInterval, 10),\n };\n }\n if (options.linearInterval) {\n config.linear = {\n enabled: true,\n interval: parseInt(options.linearInterval, 10),\n retryAttempts: 3,\n retryDelay: 30000,\n };\n }\n if (options.linear === false) {\n config.linear = {\n enabled: false,\n interval: 60,\n retryAttempts: 3,\n retryDelay: 30000,\n };\n }\n const daemon = new UnifiedDaemon(config);\n await daemon.start();\n return;\n }\n\n // Get path to daemon script\n const daemonScript = getDaemonScriptPath();\n if (!daemonScript) {\n spinner.fail(chalk.red('Daemon script not found'));\n return;\n }\n\n // Start in background\n const daemonProcess = spawn('node', [daemonScript, ...args.slice(1)], {\n detached: true,\n stdio: 'ignore',\n env: { ...process.env },\n });\n\n daemonProcess.unref();\n\n // Wait for startup\n await new Promise((r) => setTimeout(r, 1000));\n const newStatus = readDaemonStatus();\n\n if (newStatus.running) {\n spinner.succeed(chalk.green('Daemon started'));\n console.log(chalk.gray(`PID: ${newStatus.pid}`));\n\n // Show enabled services\n const services = [];\n if (newStatus.services.context.enabled) services.push('context');\n if (newStatus.services.linear.enabled) services.push('linear');\n if (newStatus.services.fileWatch.enabled) services.push('file-watch');\n if (services.length > 0) {\n console.log(chalk.gray(`Services: ${services.join(', ')}`));\n }\n } else {\n spinner.fail(chalk.red('Failed to start daemon'));\n console.log(chalk.gray('Check logs: stackmemory daemon logs'));\n }\n } catch (error) {\n spinner.fail(chalk.red('Failed to start daemon'));\n console.log(chalk.gray((error as Error).message));\n }\n });\n\n // Stop command\n cmd\n .command('stop')\n .description('Stop the unified daemon')\n .action(() => {\n const status = readDaemonStatus();\n\n if (!status.running || !status.pid) {\n console.log(chalk.yellow('Daemon not running'));\n return;\n }\n\n try {\n process.kill(status.pid, 'SIGTERM');\n console.log(chalk.green('Daemon stopped'));\n } catch (err) {\n console.log(chalk.red('Failed to stop daemon'));\n console.log(chalk.gray((err as Error).message));\n\n // Clean up stale PID file\n const { pidFile } = getDaemonPaths();\n if (existsSync(pidFile)) {\n unlinkSync(pidFile);\n console.log(chalk.gray('Cleaned up stale PID file'));\n }\n }\n });\n\n // Restart command\n cmd\n .command('restart')\n .description('Restart the unified daemon')\n .action(async () => {\n const status = readDaemonStatus();\n\n if (status.running && status.pid) {\n try {\n process.kill(status.pid, 'SIGTERM');\n await new Promise((r) => setTimeout(r, 1000));\n } catch {\n // Ignore\n }\n }\n\n // Get saved config\n const config = loadDaemonConfig();\n\n // Start with same config\n const daemonScript = getDaemonScriptPath();\n if (!daemonScript) {\n console.log(chalk.red('Daemon script not found'));\n return;\n }\n\n const args: string[] = [];\n if (config.context.interval !== 15) {\n args.push('--save-interval', String(config.context.interval));\n }\n if (!config.linear.enabled) {\n args.push('--no-linear');\n } else if (config.linear.interval !== 60) {\n args.push('--linear-interval', String(config.linear.interval));\n }\n\n const daemonProcess = spawn('node', [daemonScript, ...args], {\n detached: true,\n stdio: 'ignore',\n });\n daemonProcess.unref();\n\n await new Promise((r) => setTimeout(r, 1000));\n const newStatus = readDaemonStatus();\n\n if (newStatus.running) {\n console.log(\n chalk.green('Daemon restarted'),\n chalk.gray(`(pid: ${newStatus.pid})`)\n );\n } else {\n console.log(chalk.red('Failed to restart daemon'));\n }\n });\n\n // Status command\n cmd\n .command('status')\n .description('Check daemon status')\n .action(() => {\n const status = readDaemonStatus();\n const config = loadDaemonConfig();\n\n console.log(chalk.bold('\\nStackMemory Unified Daemon\\n'));\n\n console.log(\n `Status: ${status.running ? chalk.green('Running') : chalk.yellow('Stopped')}`\n );\n\n if (status.running) {\n console.log(chalk.gray(` PID: ${status.pid}`));\n if (status.uptime) {\n const uptime = Math.round(status.uptime / 1000);\n const hours = Math.floor(uptime / 3600);\n const mins = Math.floor((uptime % 3600) / 60);\n const secs = uptime % 60;\n console.log(chalk.gray(` Uptime: ${hours}h ${mins}m ${secs}s`));\n }\n }\n\n console.log('');\n console.log(chalk.bold('Services:'));\n\n // Context service\n const ctx = status.services.context;\n console.log(\n ` Context: ${ctx.enabled ? chalk.green('Enabled') : chalk.gray('Disabled')}`\n );\n if (ctx.enabled) {\n console.log(chalk.gray(` Interval: ${config.context.interval} min`));\n if (ctx.saveCount) {\n console.log(chalk.gray(` Saves: ${ctx.saveCount}`));\n }\n if (ctx.lastRun) {\n const ago = Math.round((Date.now() - ctx.lastRun) / 1000 / 60);\n console.log(chalk.gray(` Last save: ${ago} min ago`));\n }\n }\n\n // Linear service\n const lin = status.services.linear;\n console.log(\n ` Linear: ${lin.enabled ? chalk.green('Enabled') : chalk.gray('Disabled')}`\n );\n if (lin.enabled) {\n console.log(chalk.gray(` Interval: ${config.linear.interval} min`));\n if (config.linear.quietHours) {\n console.log(\n chalk.gray(\n ` Quiet hours: ${config.linear.quietHours.start}:00 - ${config.linear.quietHours.end}:00`\n )\n );\n }\n if (lin.syncCount) {\n console.log(chalk.gray(` Syncs: ${lin.syncCount}`));\n }\n }\n\n // File watch\n const fw = status.services.fileWatch;\n console.log(\n ` FileWatch: ${fw.enabled ? chalk.green('Enabled') : chalk.gray('Disabled')}`\n );\n\n // Errors\n if (status.errors && status.errors.length > 0) {\n console.log('');\n console.log(chalk.bold('Recent Errors:'));\n status.errors.slice(-3).forEach((err) => {\n console.log(chalk.red(` - ${err.slice(0, 80)}`));\n });\n }\n\n if (!status.running) {\n console.log('');\n console.log(chalk.bold('To start: stackmemory daemon start'));\n }\n });\n\n // Logs command\n cmd\n .command('logs')\n .description('View daemon logs')\n .option('-n, --lines <number>', 'Number of lines to show', '50')\n .option('-f, --follow', 'Follow log output')\n .option('--level <level>', 'Filter by log level')\n .action((options) => {\n const { logFile } = getDaemonPaths();\n\n if (!existsSync(logFile)) {\n console.log(chalk.yellow('No log file found'));\n console.log(\n chalk.gray('Start the daemon first: stackmemory daemon start')\n );\n return;\n }\n\n if (options.follow) {\n const tail = spawn('tail', ['-f', logFile], { stdio: 'inherit' });\n tail.on('error', () => {\n console.log(chalk.red('Could not follow logs'));\n });\n return;\n }\n\n const content = readFileSync(logFile, 'utf8');\n const lines = content.trim().split('\\n');\n const count = parseInt(options.lines, 10);\n let recent = lines.slice(-count);\n\n // Filter by level if specified\n if (options.level) {\n const level = options.level.toUpperCase();\n recent = recent.filter((line) => {\n try {\n const entry = JSON.parse(line);\n return entry.level === level;\n } catch {\n return false;\n }\n });\n }\n\n console.log(chalk.bold(`\\nDaemon logs (${recent.length} lines):\\n`));\n\n for (const line of recent) {\n try {\n const entry = JSON.parse(line);\n const time = entry.timestamp.split('T')[1].split('.')[0];\n const levelColor =\n entry.level === 'ERROR'\n ? chalk.red\n : entry.level === 'WARN'\n ? chalk.yellow\n : entry.level === 'DEBUG'\n ? chalk.gray\n : chalk.white;\n\n console.log(\n `${chalk.gray(time)} ${levelColor(`[${entry.level}]`)} ${chalk.cyan(`[${entry.service}]`)} ${entry.message}`\n );\n } catch {\n console.log(line);\n }\n }\n });\n\n // Config command\n cmd\n .command('config')\n .description('Show or edit daemon configuration')\n .option('--edit', 'Open config in editor')\n .option('--reset', 'Reset to default configuration')\n .option('--set <key=value>', 'Set a config value')\n .action((options) => {\n const { configFile } = getDaemonPaths();\n\n if (options.reset) {\n saveDaemonConfig(DEFAULT_DAEMON_CONFIG);\n console.log(chalk.green('Configuration reset to defaults'));\n return;\n }\n\n if (options.edit) {\n const editor = process.env['EDITOR'] || 'vim';\n spawn(editor, [configFile], { stdio: 'inherit' });\n return;\n }\n\n if (options.set) {\n const [key, value] = options.set.split('=');\n const config = loadDaemonConfig();\n\n // Parse the key path (e.g., \"context.interval\")\n const parts = key.split('.');\n let target: Record<string, unknown> = config as unknown as Record<\n string,\n unknown\n >;\n for (let i = 0; i < parts.length - 1; i++) {\n if (target[parts[i]] && typeof target[parts[i]] === 'object') {\n target = target[parts[i]] as Record<string, unknown>;\n } else {\n console.log(chalk.red(`Invalid config key: ${key}`));\n return;\n }\n }\n\n const lastKey = parts[parts.length - 1];\n const parsed =\n value === 'true'\n ? true\n : value === 'false'\n ? false\n : isNaN(Number(value))\n ? value\n : Number(value);\n target[lastKey] = parsed;\n\n saveDaemonConfig(config);\n console.log(chalk.green(`Set ${key} = ${value}`));\n return;\n }\n\n // Show config\n const config = loadDaemonConfig();\n\n console.log(chalk.bold('\\nDaemon Configuration\\n'));\n console.log(chalk.gray(`File: ${configFile}`));\n console.log('');\n\n console.log(chalk.bold('Context Service:'));\n console.log(` Enabled: ${config.context.enabled}`);\n console.log(` Interval: ${config.context.interval} minutes`);\n\n console.log('');\n console.log(chalk.bold('Linear Service:'));\n console.log(` Enabled: ${config.linear.enabled}`);\n console.log(` Interval: ${config.linear.interval} minutes`);\n if (config.linear.quietHours) {\n console.log(\n ` Quiet hours: ${config.linear.quietHours.start}:00 - ${config.linear.quietHours.end}:00`\n );\n }\n\n console.log('');\n console.log(chalk.bold('File Watch:'));\n console.log(` Enabled: ${config.fileWatch.enabled}`);\n console.log(` Extensions: ${config.fileWatch.extensions.join(', ')}`);\n\n console.log('');\n console.log(chalk.bold('General:'));\n console.log(` Heartbeat: ${config.heartbeatInterval} seconds`);\n console.log(` Log level: ${config.logLevel}`);\n });\n\n // Default action\n cmd.action(() => {\n const status = readDaemonStatus();\n\n console.log(chalk.bold('\\nStackMemory Daemon\\n'));\n console.log(\n `Status: ${status.running ? chalk.green('Running') : chalk.yellow('Stopped')}`\n );\n\n if (!status.running) {\n console.log('');\n console.log(chalk.bold('Quick start:'));\n console.log(' stackmemory daemon start Start background services');\n } else {\n console.log('');\n console.log(chalk.bold('Commands:'));\n console.log(' stackmemory daemon status View detailed status');\n console.log(' stackmemory daemon logs View daemon logs');\n console.log(' stackmemory daemon stop Stop the daemon');\n }\n });\n\n return cmd;\n}\n\n/**\n * Get path to daemon script\n */\nfunction getDaemonScriptPath(): string | null {\n // Check various locations\n const candidates = [\n join(__dirname, '../../daemon/unified-daemon.js'),\n join(process.cwd(), 'dist/daemon/unified-daemon.js'),\n join(\n process.cwd(),\n 'node_modules/@stackmemoryai/stackmemory/dist/daemon/unified-daemon.js'\n ),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n return candidates[0]; // Return first candidate as fallback\n}\n\nexport default createDaemonCommand();\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["config"]
|
|
7
|
-
}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
3
|
-
import { dirname as __pathDirname } from 'path';
|
|
4
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = __pathDirname(__filename);
|
|
6
|
-
import chalk from "chalk";
|
|
7
|
-
import Table from "cli-table3";
|
|
8
|
-
import { SessionManager } from "../../core/session/session-manager.js";
|
|
9
|
-
import Database from "better-sqlite3";
|
|
10
|
-
import { join } from "path";
|
|
11
|
-
import { existsSync } from "fs";
|
|
12
|
-
const dashboardCommand = {
|
|
13
|
-
command: "dashboard",
|
|
14
|
-
describe: "Display monitoring dashboard in terminal",
|
|
15
|
-
builder: (yargs) => {
|
|
16
|
-
return yargs.option("watch", {
|
|
17
|
-
alias: "w",
|
|
18
|
-
type: "boolean",
|
|
19
|
-
description: "Auto-refresh dashboard",
|
|
20
|
-
default: false
|
|
21
|
-
}).option("interval", {
|
|
22
|
-
alias: "i",
|
|
23
|
-
type: "number",
|
|
24
|
-
description: "Refresh interval in seconds",
|
|
25
|
-
default: 5
|
|
26
|
-
});
|
|
27
|
-
},
|
|
28
|
-
handler: async (argv) => {
|
|
29
|
-
const projectRoot = process.cwd();
|
|
30
|
-
const dbPath = join(projectRoot, ".stackmemory", "context.db");
|
|
31
|
-
if (!existsSync(dbPath)) {
|
|
32
|
-
console.log(
|
|
33
|
-
'\u274C StackMemory not initialized. Run "stackmemory init" first.'
|
|
34
|
-
);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const displayDashboard = async () => {
|
|
38
|
-
console.clear();
|
|
39
|
-
console.log(
|
|
40
|
-
chalk.cyan.bold(
|
|
41
|
-
"\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"
|
|
42
|
-
)
|
|
43
|
-
);
|
|
44
|
-
console.log(
|
|
45
|
-
chalk.cyan.bold(
|
|
46
|
-
" \u{1F680} StackMemory Monitoring Dashboard "
|
|
47
|
-
)
|
|
48
|
-
);
|
|
49
|
-
console.log(
|
|
50
|
-
chalk.cyan.bold(
|
|
51
|
-
"\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"
|
|
52
|
-
)
|
|
53
|
-
);
|
|
54
|
-
console.log();
|
|
55
|
-
const sessionManager = new SessionManager({ enableMonitoring: false });
|
|
56
|
-
await sessionManager.initialize();
|
|
57
|
-
const db = new Database(dbPath);
|
|
58
|
-
const sessions = await sessionManager.listSessions({
|
|
59
|
-
state: "active",
|
|
60
|
-
limit: 5
|
|
61
|
-
});
|
|
62
|
-
const sessionsTable = new Table({
|
|
63
|
-
head: [
|
|
64
|
-
chalk.white("Session ID"),
|
|
65
|
-
chalk.white("Status"),
|
|
66
|
-
chalk.white("Branch"),
|
|
67
|
-
chalk.white("Duration"),
|
|
68
|
-
chalk.white("Last Active")
|
|
69
|
-
],
|
|
70
|
-
style: { head: [], border: [] }
|
|
71
|
-
});
|
|
72
|
-
sessions.forEach((session) => {
|
|
73
|
-
const duration = Math.round(
|
|
74
|
-
(Date.now() - session.startedAt) / 1e3 / 60
|
|
75
|
-
);
|
|
76
|
-
const lastActive = Math.round(
|
|
77
|
-
(Date.now() - session.lastActiveAt) / 1e3 / 60
|
|
78
|
-
);
|
|
79
|
-
const status = session.state === "active" ? chalk.green("\u25CF Active") : session.state === "completed" ? chalk.gray("\u25CF Completed") : chalk.yellow("\u25CF Idle");
|
|
80
|
-
sessionsTable.push([
|
|
81
|
-
session.sessionId.substring(0, 8),
|
|
82
|
-
status,
|
|
83
|
-
session.branch || "main",
|
|
84
|
-
`${duration}m`,
|
|
85
|
-
`${lastActive}m ago`
|
|
86
|
-
]);
|
|
87
|
-
});
|
|
88
|
-
console.log(chalk.yellow.bold("\u{1F4CA} Active Sessions"));
|
|
89
|
-
console.log(sessionsTable.toString());
|
|
90
|
-
console.log();
|
|
91
|
-
const frameStats = db.prepare(
|
|
92
|
-
`
|
|
93
|
-
SELECT
|
|
94
|
-
COUNT(*) as total,
|
|
95
|
-
SUM(CASE WHEN state = 'active' THEN 1 ELSE 0 END) as active,
|
|
96
|
-
COUNT(DISTINCT run_id) as sessions
|
|
97
|
-
FROM frames
|
|
98
|
-
`
|
|
99
|
-
).get();
|
|
100
|
-
const statsTable = new Table({
|
|
101
|
-
head: [chalk.white("Metric"), chalk.white("Value")],
|
|
102
|
-
style: { head: [], border: [] }
|
|
103
|
-
});
|
|
104
|
-
statsTable.push(
|
|
105
|
-
["Total Frames", frameStats.total || 0],
|
|
106
|
-
["Active Frames", chalk.green(frameStats.active || 0)],
|
|
107
|
-
["Total Sessions", frameStats.sessions || 0]
|
|
108
|
-
);
|
|
109
|
-
console.log(chalk.yellow.bold("\u{1F4C8} Frame Statistics"));
|
|
110
|
-
console.log(statsTable.toString());
|
|
111
|
-
console.log();
|
|
112
|
-
const recentActivity = db.prepare(
|
|
113
|
-
`
|
|
114
|
-
SELECT
|
|
115
|
-
name,
|
|
116
|
-
type,
|
|
117
|
-
state,
|
|
118
|
-
datetime(created_at, 'unixepoch') as created
|
|
119
|
-
FROM frames
|
|
120
|
-
ORDER BY created_at DESC
|
|
121
|
-
LIMIT 5
|
|
122
|
-
`
|
|
123
|
-
).all();
|
|
124
|
-
if (recentActivity.length > 0) {
|
|
125
|
-
const activityTable = new Table({
|
|
126
|
-
head: [
|
|
127
|
-
chalk.white("Frame"),
|
|
128
|
-
chalk.white("Type"),
|
|
129
|
-
chalk.white("Status"),
|
|
130
|
-
chalk.white("Created")
|
|
131
|
-
],
|
|
132
|
-
style: { head: [], border: [] }
|
|
133
|
-
});
|
|
134
|
-
recentActivity.forEach((frame) => {
|
|
135
|
-
const status = frame.state === "active" ? chalk.green("Active") : chalk.gray("Closed");
|
|
136
|
-
activityTable.push([
|
|
137
|
-
frame.name.substring(0, 30),
|
|
138
|
-
frame.type,
|
|
139
|
-
status,
|
|
140
|
-
frame.created
|
|
141
|
-
]);
|
|
142
|
-
});
|
|
143
|
-
console.log(chalk.yellow.bold("\u{1F550} Recent Activity"));
|
|
144
|
-
console.log(activityTable.toString());
|
|
145
|
-
console.log();
|
|
146
|
-
}
|
|
147
|
-
const contextUsage = await estimateContextUsage(db);
|
|
148
|
-
const usageBar = createProgressBar(contextUsage, 100);
|
|
149
|
-
console.log(chalk.yellow.bold("\u{1F4BE} Context Usage"));
|
|
150
|
-
console.log(`${usageBar} ${contextUsage}%`);
|
|
151
|
-
console.log();
|
|
152
|
-
db.close();
|
|
153
|
-
if (argv.watch) {
|
|
154
|
-
console.log(
|
|
155
|
-
chalk.gray(
|
|
156
|
-
`Auto-refreshing every ${argv.interval} seconds. Press Ctrl+C to exit.`
|
|
157
|
-
)
|
|
158
|
-
);
|
|
159
|
-
} else {
|
|
160
|
-
console.log(chalk.gray("Run with --watch to auto-refresh"));
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
try {
|
|
164
|
-
await displayDashboard();
|
|
165
|
-
if (argv.watch) {
|
|
166
|
-
const interval = setInterval(async () => {
|
|
167
|
-
await displayDashboard();
|
|
168
|
-
}, argv.interval * 1e3);
|
|
169
|
-
process.on("SIGINT", () => {
|
|
170
|
-
clearInterval(interval);
|
|
171
|
-
console.clear();
|
|
172
|
-
console.log(chalk.green("\u2705 Dashboard closed"));
|
|
173
|
-
process.exit(0);
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
} catch (error) {
|
|
177
|
-
console.error(chalk.red("\u274C Dashboard error:"), error.message);
|
|
178
|
-
process.exit(1);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
function createProgressBar(value, max) {
|
|
183
|
-
const percentage = Math.min(100, Math.round(value / max * 100));
|
|
184
|
-
const filled = Math.round(percentage / 5);
|
|
185
|
-
const empty = 20 - filled;
|
|
186
|
-
let color = chalk.green;
|
|
187
|
-
if (percentage > 80) color = chalk.red;
|
|
188
|
-
else if (percentage > 60) color = chalk.yellow;
|
|
189
|
-
return color("\u2588".repeat(filled)) + chalk.gray("\u2591".repeat(empty));
|
|
190
|
-
}
|
|
191
|
-
async function estimateContextUsage(db) {
|
|
192
|
-
const result = db.prepare(
|
|
193
|
-
`
|
|
194
|
-
SELECT
|
|
195
|
-
COUNT(*) as frame_count,
|
|
196
|
-
SUM(LENGTH(inputs)) as input_size,
|
|
197
|
-
SUM(LENGTH(outputs)) as output_size
|
|
198
|
-
FROM frames
|
|
199
|
-
WHERE state = 'active'
|
|
200
|
-
`
|
|
201
|
-
).get();
|
|
202
|
-
const totalBytes = (result.input_size || 0) + (result.output_size || 0);
|
|
203
|
-
const estimatedTokens = totalBytes / 4;
|
|
204
|
-
const maxTokens = 128e3;
|
|
205
|
-
return Math.round(estimatedTokens / maxTokens * 100);
|
|
206
|
-
}
|
|
207
|
-
export {
|
|
208
|
-
dashboardCommand
|
|
209
|
-
};
|
|
210
|
-
//# sourceMappingURL=dashboard.js.map
|