@stackmemoryai/stackmemory 0.5.57 → 0.5.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/codex-smd +6 -0
- package/dist/cli/codex-sm-danger.js +21 -0
- package/dist/cli/codex-sm-danger.js.map +7 -0
- package/dist/cli/commands/handoff.js +33 -3
- package/dist/cli/commands/handoff.js.map +2 -2
- package/dist/cli/commands/search.js +20 -3
- package/dist/cli/commands/search.js.map +2 -2
- package/dist/core/database/sqlite-adapter.js +13 -3
- package/dist/core/database/sqlite-adapter.js.map +2 -2
- package/dist/core/errors/error-utils.js +208 -0
- package/dist/core/errors/error-utils.js.map +7 -0
- package/dist/core/errors/index.js +13 -4
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/merge/unified-merge-resolver.js +303 -0
- package/dist/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/core/monitoring/logger.js +61 -9
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/security/index.js +35 -0
- package/dist/core/security/index.js.map +7 -0
- package/dist/core/security/input-sanitizer.js +321 -0
- package/dist/core/security/input-sanitizer.js.map +7 -0
- package/dist/core/session/enhanced-handoff.js +136 -2
- package/dist/core/session/enhanced-handoff.js.map +3 -3
- package/dist/integrations/linear/client.js +5 -1
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/mcp/remote-server.js +27 -36
- package/dist/integrations/mcp/remote-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +44 -29
- package/dist/integrations/mcp/server.js.map +3 -3
- package/dist/scripts/benchmark-performance.js +48 -0
- package/dist/scripts/benchmark-performance.js.map +7 -0
- package/dist/scripts/check-redis.js +42 -0
- package/dist/scripts/check-redis.js.map +7 -0
- package/dist/scripts/initialize.js +116 -0
- package/dist/scripts/initialize.js.map +7 -0
- package/dist/scripts/list-linear-tasks.js +124 -0
- package/dist/scripts/list-linear-tasks.js.map +7 -0
- package/dist/scripts/measure-handoff-impact.js +340 -0
- package/dist/scripts/measure-handoff-impact.js.map +7 -0
- package/dist/scripts/query-chromadb.js +160 -0
- package/dist/scripts/query-chromadb.js.map +7 -0
- package/dist/scripts/show-linear-summary.js +119 -0
- package/dist/scripts/show-linear-summary.js.map +7 -0
- package/dist/scripts/simple-swarm-demo.js +90 -0
- package/dist/scripts/simple-swarm-demo.js.map +7 -0
- package/dist/scripts/status.js +155 -0
- package/dist/scripts/status.js.map +7 -0
- package/dist/scripts/test-chromadb-sync.js +192 -0
- package/dist/scripts/test-chromadb-sync.js.map +7 -0
- package/dist/scripts/test-ralph-iteration-fix.js +86 -0
- package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
- package/dist/scripts/test-ralph-iterations.js +121 -0
- package/dist/scripts/test-ralph-iterations.js.map +7 -0
- package/dist/scripts/test-redis-storage.js +389 -0
- package/dist/scripts/test-redis-storage.js.map +7 -0
- package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
- package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
- package/dist/scripts/test-swarm-fixes.js +125 -0
- package/dist/scripts/test-swarm-fixes.js.map +7 -0
- package/dist/scripts/test-swarm-tui.js +23 -0
- package/dist/scripts/test-swarm-tui.js.map +7 -0
- package/dist/scripts/test-tui-shortcuts.js +52 -0
- package/dist/scripts/test-tui-shortcuts.js.map +7 -0
- package/dist/scripts/validate-tui-shortcuts.js +60 -0
- package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
- package/dist/src/agents/core/agent-task-manager.js +527 -0
- package/dist/src/agents/core/agent-task-manager.js.map +7 -0
- package/dist/src/agents/verifiers/base-verifier.js +133 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/llm-judge.js +252 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/src/cli/auto-detect.js +321 -0
- package/dist/src/cli/auto-detect.js.map +7 -0
- package/dist/src/cli/claude-sm-danger.js +21 -0
- package/dist/src/cli/claude-sm-danger.js.map +7 -0
- package/dist/src/cli/claude-sm.js +1156 -0
- package/dist/src/cli/claude-sm.js.map +7 -0
- package/dist/src/cli/codex-sm-danger.js +21 -0
- package/dist/src/cli/codex-sm-danger.js.map +7 -0
- package/dist/src/cli/codex-sm.js +349 -0
- package/dist/src/cli/codex-sm.js.map +7 -0
- package/dist/src/cli/commands/api.js +232 -0
- package/dist/src/cli/commands/api.js.map +7 -0
- package/dist/src/cli/commands/auto-background.js +180 -0
- package/dist/src/cli/commands/auto-background.js.map +7 -0
- package/dist/src/cli/commands/cleanup-processes.js +68 -0
- package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/src/cli/commands/clear.js +202 -0
- package/dist/src/cli/commands/clear.js.map +7 -0
- package/dist/src/cli/commands/config.js +445 -0
- package/dist/src/cli/commands/config.js.map +7 -0
- package/dist/src/cli/commands/context-rehydrate.js +751 -0
- package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
- package/dist/src/cli/commands/context.js +343 -0
- package/dist/src/cli/commands/context.js.map +7 -0
- package/dist/src/cli/commands/daemon.js +392 -0
- package/dist/src/cli/commands/daemon.js.map +7 -0
- package/dist/src/cli/commands/dashboard.js +210 -0
- package/dist/src/cli/commands/dashboard.js.map +7 -0
- package/dist/src/cli/commands/db.js +147 -0
- package/dist/src/cli/commands/db.js.map +7 -0
- package/dist/src/cli/commands/decision.js +266 -0
- package/dist/src/cli/commands/decision.js.map +7 -0
- package/dist/src/cli/commands/discovery.js +279 -0
- package/dist/src/cli/commands/discovery.js.map +7 -0
- package/dist/src/cli/commands/handoff.js +624 -0
- package/dist/src/cli/commands/handoff.js.map +7 -0
- package/dist/src/cli/commands/hooks.js +298 -0
- package/dist/src/cli/commands/hooks.js.map +7 -0
- package/dist/src/cli/commands/linear.js +529 -0
- package/dist/src/cli/commands/linear.js.map +7 -0
- package/dist/src/cli/commands/log.js +169 -0
- package/dist/src/cli/commands/log.js.map +7 -0
- package/dist/src/cli/commands/login.js +172 -0
- package/dist/src/cli/commands/login.js.map +7 -0
- package/dist/src/cli/commands/migrate.js +240 -0
- package/dist/src/cli/commands/migrate.js.map +7 -0
- package/dist/src/cli/commands/model.js +533 -0
- package/dist/src/cli/commands/model.js.map +7 -0
- package/dist/src/cli/commands/onboard.js +536 -0
- package/dist/src/cli/commands/onboard.js.map +7 -0
- package/dist/src/cli/commands/projects.js +199 -0
- package/dist/src/cli/commands/projects.js.map +7 -0
- package/dist/src/cli/commands/ralph.js +909 -0
- package/dist/src/cli/commands/ralph.js.map +7 -0
- package/dist/src/cli/commands/retrieval.js +248 -0
- package/dist/src/cli/commands/retrieval.js.map +7 -0
- package/dist/src/cli/commands/search.js +173 -0
- package/dist/src/cli/commands/search.js.map +7 -0
- package/dist/src/cli/commands/service.js +749 -0
- package/dist/src/cli/commands/service.js.map +7 -0
- package/dist/src/cli/commands/session.js +200 -0
- package/dist/src/cli/commands/session.js.map +7 -0
- package/dist/src/cli/commands/settings.js +306 -0
- package/dist/src/cli/commands/settings.js.map +7 -0
- package/dist/src/cli/commands/setup.js +701 -0
- package/dist/src/cli/commands/setup.js.map +7 -0
- package/dist/src/cli/commands/shell.js +249 -0
- package/dist/src/cli/commands/shell.js.map +7 -0
- package/dist/src/cli/commands/signup.js +50 -0
- package/dist/src/cli/commands/signup.js.map +7 -0
- package/dist/src/cli/commands/skills.js +470 -0
- package/dist/src/cli/commands/skills.js.map +7 -0
- package/dist/src/cli/commands/sms-notify.js +795 -0
- package/dist/src/cli/commands/sms-notify.js.map +7 -0
- package/dist/src/cli/commands/storage-tier.js +183 -0
- package/dist/src/cli/commands/storage-tier.js.map +7 -0
- package/dist/src/cli/commands/sweep.js +249 -0
- package/dist/src/cli/commands/sweep.js.map +7 -0
- package/dist/src/cli/commands/tasks.js +213 -0
- package/dist/src/cli/commands/tasks.js.map +7 -0
- package/dist/src/cli/commands/worktree.js +319 -0
- package/dist/src/cli/commands/worktree.js.map +7 -0
- package/dist/src/cli/index.js +594 -0
- package/dist/src/cli/index.js.map +7 -0
- package/dist/src/cli/opencode-sm.js +448 -0
- package/dist/src/cli/opencode-sm.js.map +7 -0
- package/dist/src/cli/utils/viewer.js +96 -0
- package/dist/src/cli/utils/viewer.js.map +7 -0
- package/dist/src/core/config/config-manager.js +398 -0
- package/dist/src/core/config/config-manager.js.map +7 -0
- package/dist/src/core/config/feature-flags.js +76 -0
- package/dist/src/core/config/feature-flags.js.map +7 -0
- package/dist/src/core/config/storage-config.js +115 -0
- package/dist/src/core/config/storage-config.js.map +7 -0
- package/dist/src/core/config/types.js +144 -0
- package/dist/src/core/config/types.js.map +7 -0
- package/dist/src/core/context/auto-context.js +80 -0
- package/dist/src/core/context/auto-context.js.map +7 -0
- package/dist/src/core/context/dual-stack-manager.js +870 -0
- package/dist/src/core/context/dual-stack-manager.js.map +7 -0
- package/dist/src/core/context/enhanced-rehydration.js +994 -0
- package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
- package/dist/src/core/context/frame-database.js +479 -0
- package/dist/src/core/context/frame-database.js.map +7 -0
- package/dist/src/core/context/frame-digest.js +250 -0
- package/dist/src/core/context/frame-digest.js.map +7 -0
- package/dist/src/core/context/frame-handoff-manager.js +778 -0
- package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
- package/dist/src/core/context/frame-recovery.js +302 -0
- package/dist/src/core/context/frame-recovery.js.map +7 -0
- package/dist/src/core/context/frame-stack.js +314 -0
- package/dist/src/core/context/frame-stack.js.map +7 -0
- package/dist/src/core/context/frame-types.js +5 -0
- package/dist/src/core/context/frame-types.js.map +7 -0
- package/dist/src/core/context/index.js +25 -0
- package/dist/src/core/context/index.js.map +7 -0
- package/dist/src/core/context/permission-manager.js +185 -0
- package/dist/src/core/context/permission-manager.js.map +7 -0
- package/dist/src/core/context/recursive-context-manager.js +592 -0
- package/dist/src/core/context/recursive-context-manager.js.map +7 -0
- package/dist/src/core/context/refactored-frame-manager.js +754 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/src/core/context/shared-context-layer.js +621 -0
- package/dist/src/core/context/shared-context-layer.js.map +7 -0
- package/dist/src/core/context/stack-merge-resolver.js +749 -0
- package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/src/core/context/validation.js +130 -0
- package/dist/src/core/context/validation.js.map +7 -0
- package/dist/src/core/database/batch-operations.js +384 -0
- package/dist/src/core/database/batch-operations.js.map +7 -0
- package/dist/src/core/database/connection-pool.js +330 -0
- package/dist/src/core/database/connection-pool.js.map +7 -0
- package/dist/src/core/database/database-adapter.js +60 -0
- package/dist/src/core/database/database-adapter.js.map +7 -0
- package/dist/src/core/database/migration-manager.js +614 -0
- package/dist/src/core/database/migration-manager.js.map +7 -0
- package/dist/src/core/database/query-cache.js +298 -0
- package/dist/src/core/database/query-cache.js.map +7 -0
- package/dist/src/core/database/query-router.js +430 -0
- package/dist/src/core/database/query-router.js.map +7 -0
- package/dist/src/core/database/sqlite-adapter.js +738 -0
- package/dist/src/core/database/sqlite-adapter.js.map +7 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/src/core/digest/frame-digest-integration.js +176 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/src/core/digest/index.js +9 -0
- package/dist/src/core/digest/index.js.map +7 -0
- package/dist/src/core/digest/types.js +25 -0
- package/dist/src/core/digest/types.js.map +7 -0
- package/dist/src/core/errors/error-utils.js +208 -0
- package/dist/src/core/errors/error-utils.js.map +7 -0
- package/dist/src/core/errors/index.js +521 -0
- package/dist/src/core/errors/index.js.map +7 -0
- package/dist/src/core/errors/recovery.js +269 -0
- package/dist/src/core/errors/recovery.js.map +7 -0
- package/dist/src/core/execution/parallel-executor.js +258 -0
- package/dist/src/core/execution/parallel-executor.js.map +7 -0
- package/dist/src/core/frame/workflow-templates.js +319 -0
- package/dist/src/core/frame/workflow-templates.js.map +7 -0
- package/dist/src/core/merge/conflict-detector.js +431 -0
- package/dist/src/core/merge/conflict-detector.js.map +7 -0
- package/dist/src/core/merge/index.js +9 -0
- package/dist/src/core/merge/index.js.map +7 -0
- package/dist/src/core/merge/resolution-engine.js +558 -0
- package/dist/src/core/merge/resolution-engine.js.map +7 -0
- package/dist/src/core/merge/stack-diff.js +532 -0
- package/dist/src/core/merge/stack-diff.js.map +7 -0
- package/dist/src/core/merge/types.js +5 -0
- package/dist/src/core/merge/types.js.map +7 -0
- package/dist/src/core/merge/unified-merge-resolver.js +303 -0
- package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/src/core/models/fallback-monitor.js +232 -0
- package/dist/src/core/models/fallback-monitor.js.map +7 -0
- package/dist/src/core/models/model-router.js +340 -0
- package/dist/src/core/models/model-router.js.map +7 -0
- package/dist/src/core/monitoring/error-handler.js +49 -0
- package/dist/src/core/monitoring/error-handler.js.map +7 -0
- package/dist/src/core/monitoring/logger.js +202 -0
- package/dist/src/core/monitoring/logger.js.map +7 -0
- package/dist/src/core/monitoring/metrics.js +172 -0
- package/dist/src/core/monitoring/metrics.js.map +7 -0
- package/dist/src/core/monitoring/progress-tracker.js +189 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/src/core/monitoring/session-monitor.js +300 -0
- package/dist/src/core/monitoring/session-monitor.js.map +7 -0
- package/dist/src/core/performance/context-cache.js +273 -0
- package/dist/src/core/performance/context-cache.js.map +7 -0
- package/dist/src/core/performance/index.js +11 -0
- package/dist/src/core/performance/index.js.map +7 -0
- package/dist/src/core/performance/lazy-context-loader.js +327 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/src/core/performance/monitor.js +221 -0
- package/dist/src/core/performance/monitor.js.map +7 -0
- package/dist/src/core/performance/optimized-frame-context.js +345 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/src/core/performance/performance-benchmark.js +277 -0
- package/dist/src/core/performance/performance-benchmark.js.map +7 -0
- package/dist/src/core/performance/performance-profiler.js +370 -0
- package/dist/src/core/performance/performance-profiler.js.map +7 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/src/core/persistence/postgres-adapter.js +349 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/src/core/projects/project-isolation.js +201 -0
- package/dist/src/core/projects/project-isolation.js.map +7 -0
- package/dist/src/core/projects/project-manager.js +697 -0
- package/dist/src/core/projects/project-manager.js.map +7 -0
- package/dist/src/core/query/query-parser.js +370 -0
- package/dist/src/core/query/query-parser.js.map +7 -0
- package/dist/src/core/query/query-templates.js +321 -0
- package/dist/src/core/query/query-templates.js.map +7 -0
- package/dist/src/core/retrieval/context-retriever.js +479 -0
- package/dist/src/core/retrieval/context-retriever.js.map +7 -0
- package/dist/src/core/retrieval/index.js +8 -0
- package/dist/src/core/retrieval/index.js.map +7 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/src/core/retrieval/llm-provider.js +151 -0
- package/dist/src/core/retrieval/llm-provider.js.map +7 -0
- package/dist/src/core/retrieval/retrieval-audit.js +236 -0
- package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
- package/dist/src/core/retrieval/summary-generator.js +589 -0
- package/dist/src/core/retrieval/summary-generator.js.map +7 -0
- package/dist/src/core/retrieval/types.js +21 -0
- package/dist/src/core/retrieval/types.js.map +7 -0
- package/dist/src/core/security/index.js +35 -0
- package/dist/src/core/security/index.js.map +7 -0
- package/dist/src/core/security/input-sanitizer.js +321 -0
- package/dist/src/core/security/input-sanitizer.js.map +7 -0
- package/dist/src/core/session/clear-survival.js +465 -0
- package/dist/src/core/session/clear-survival.js.map +7 -0
- package/dist/src/core/session/enhanced-handoff.js +792 -0
- package/dist/src/core/session/enhanced-handoff.js.map +7 -0
- package/dist/src/core/session/handoff-generator.js +343 -0
- package/dist/src/core/session/handoff-generator.js.map +7 -0
- package/dist/src/core/session/index.js +15 -0
- package/dist/src/core/session/index.js.map +7 -0
- package/dist/src/core/session/session-manager.js +347 -0
- package/dist/src/core/session/session-manager.js.map +7 -0
- package/dist/src/core/skills/index.js +7 -0
- package/dist/src/core/skills/index.js.map +7 -0
- package/dist/src/core/skills/skill-storage.js +764 -0
- package/dist/src/core/skills/skill-storage.js.map +7 -0
- package/dist/src/core/skills/types.js +193 -0
- package/dist/src/core/skills/types.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +354 -0
- package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
- package/dist/src/core/storage/infinite-storage.js +510 -0
- package/dist/src/core/storage/infinite-storage.js.map +7 -0
- package/dist/src/core/storage/remote-storage.js +489 -0
- package/dist/src/core/storage/remote-storage.js.map +7 -0
- package/dist/src/core/storage/two-tier-storage.js +766 -0
- package/dist/src/core/storage/two-tier-storage.js.map +7 -0
- package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/db-trace-wrapper.js +247 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/debug-trace.js +417 -0
- package/dist/src/core/trace/debug-trace.js.map +7 -0
- package/dist/src/core/trace/index.js +109 -0
- package/dist/src/core/trace/index.js.map +7 -0
- package/dist/src/core/trace/linear-api-wrapper.js +178 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/src/core/trace/trace-detector.js +528 -0
- package/dist/src/core/trace/trace-detector.js.map +7 -0
- package/dist/src/core/trace/trace-store.js +345 -0
- package/dist/src/core/trace/trace-store.js.map +7 -0
- package/dist/src/core/trace/types.js +77 -0
- package/dist/src/core/trace/types.js.map +7 -0
- package/dist/src/core/types.js +5 -0
- package/dist/src/core/types.js.map +7 -0
- package/dist/src/core/utils/async-mutex.js +114 -0
- package/dist/src/core/utils/async-mutex.js.map +7 -0
- package/dist/src/core/utils/compression.js +83 -0
- package/dist/src/core/utils/compression.js.map +7 -0
- package/dist/src/core/utils/update-checker.js +218 -0
- package/dist/src/core/utils/update-checker.js.map +7 -0
- package/dist/src/core/worktree/worktree-manager.js +465 -0
- package/dist/src/core/worktree/worktree-manager.js.map +7 -0
- package/dist/src/daemon/daemon-config.js +149 -0
- package/dist/src/daemon/daemon-config.js.map +7 -0
- package/dist/src/daemon/services/context-service.js +122 -0
- package/dist/src/daemon/services/context-service.js.map +7 -0
- package/dist/src/daemon/services/linear-service.js +136 -0
- package/dist/src/daemon/services/linear-service.js.map +7 -0
- package/dist/src/daemon/session-daemon.js +312 -0
- package/dist/src/daemon/session-daemon.js.map +7 -0
- package/dist/src/daemon/unified-daemon.js +276 -0
- package/dist/src/daemon/unified-daemon.js.map +7 -0
- package/dist/src/features/analytics/api/analytics-api.js +287 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/src/features/analytics/core/analytics-service.js +282 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/src/features/analytics/index.js +18 -0
- package/dist/src/features/analytics/index.js.map +7 -0
- package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/src/features/analytics/types/metrics.js +5 -0
- package/dist/src/features/analytics/types/metrics.js.map +7 -0
- package/dist/src/features/browser/browser-mcp.js +492 -0
- package/dist/src/features/browser/browser-mcp.js.map +7 -0
- package/dist/src/features/sweep/index.js +20 -0
- package/dist/src/features/sweep/index.js.map +7 -0
- package/dist/src/features/sweep/prediction-client.js +155 -0
- package/dist/src/features/sweep/prediction-client.js.map +7 -0
- package/dist/src/features/sweep/prompt-builder.js +85 -0
- package/dist/src/features/sweep/prompt-builder.js.map +7 -0
- package/dist/src/features/sweep/pty-wrapper.js +171 -0
- package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
- package/dist/src/features/sweep/state-watcher.js +87 -0
- package/dist/src/features/sweep/state-watcher.js.map +7 -0
- package/dist/src/features/sweep/status-bar.js +88 -0
- package/dist/src/features/sweep/status-bar.js.map +7 -0
- package/dist/src/features/sweep/sweep-server-manager.js +226 -0
- package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
- package/dist/src/features/sweep/tab-interceptor.js +38 -0
- package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
- package/dist/src/features/sweep/types.js +18 -0
- package/dist/src/features/sweep/types.js.map +7 -0
- package/dist/src/features/tasks/linear-task-manager.js +487 -0
- package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
- package/dist/src/features/tasks/task-aware-context.js +410 -0
- package/dist/src/features/tasks/task-aware-context.js.map +7 -0
- package/dist/src/features/tui/simple-monitor.js +116 -0
- package/dist/src/features/tui/simple-monitor.js.map +7 -0
- package/dist/src/features/tui/swarm-monitor.js +648 -0
- package/dist/src/features/tui/swarm-monitor.js.map +7 -0
- package/dist/src/features/web/client/stores/task-store.js +26 -0
- package/dist/src/features/web/client/stores/task-store.js.map +7 -0
- package/dist/src/features/web/server/index.js +194 -0
- package/dist/src/features/web/server/index.js.map +7 -0
- package/dist/src/hooks/auto-background.js +151 -0
- package/dist/src/hooks/auto-background.js.map +7 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
- package/dist/src/hooks/config.js +150 -0
- package/dist/src/hooks/config.js.map +7 -0
- package/dist/src/hooks/daemon.js +364 -0
- package/dist/src/hooks/daemon.js.map +7 -0
- package/dist/src/hooks/events.js +58 -0
- package/dist/src/hooks/events.js.map +7 -0
- package/dist/src/hooks/index.js +12 -0
- package/dist/src/hooks/index.js.map +7 -0
- package/dist/src/hooks/linear-task-picker.js +186 -0
- package/dist/src/hooks/linear-task-picker.js.map +7 -0
- package/dist/src/hooks/schemas.js +197 -0
- package/dist/src/hooks/schemas.js.map +7 -0
- package/dist/src/hooks/secure-fs.js +49 -0
- package/dist/src/hooks/secure-fs.js.map +7 -0
- package/dist/src/hooks/security-logger.js +155 -0
- package/dist/src/hooks/security-logger.js.map +7 -0
- package/dist/src/hooks/session-summary.js +222 -0
- package/dist/src/hooks/session-summary.js.map +7 -0
- package/dist/src/hooks/sms-action-runner.js +371 -0
- package/dist/src/hooks/sms-action-runner.js.map +7 -0
- package/dist/src/hooks/sms-notify.js +506 -0
- package/dist/src/hooks/sms-notify.js.map +7 -0
- package/dist/src/hooks/sms-watcher.js +93 -0
- package/dist/src/hooks/sms-watcher.js.map +7 -0
- package/dist/src/hooks/sms-webhook.js +555 -0
- package/dist/src/hooks/sms-webhook.js.map +7 -0
- package/dist/src/hooks/whatsapp-commands.js +479 -0
- package/dist/src/hooks/whatsapp-commands.js.map +7 -0
- package/dist/src/hooks/whatsapp-scheduler.js +317 -0
- package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
- package/dist/src/hooks/whatsapp-sync.js +409 -0
- package/dist/src/hooks/whatsapp-sync.js.map +7 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/integrations/anthropic/client.js +263 -0
- package/dist/src/integrations/anthropic/client.js.map +7 -0
- package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
- package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client.js +511 -0
- package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
- package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
- package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
- package/dist/src/integrations/linear/auth.js +337 -0
- package/dist/src/integrations/linear/auth.js.map +7 -0
- package/dist/src/integrations/linear/auto-sync.js +258 -0
- package/dist/src/integrations/linear/auto-sync.js.map +7 -0
- package/dist/src/integrations/linear/client.js +634 -0
- package/dist/src/integrations/linear/client.js.map +7 -0
- package/dist/src/integrations/linear/config.js +130 -0
- package/dist/src/integrations/linear/config.js.map +7 -0
- package/dist/src/integrations/linear/migration.js +361 -0
- package/dist/src/integrations/linear/migration.js.map +7 -0
- package/dist/src/integrations/linear/oauth-server.js +454 -0
- package/dist/src/integrations/linear/oauth-server.js.map +7 -0
- package/dist/src/integrations/linear/rest-client.js +213 -0
- package/dist/src/integrations/linear/rest-client.js.map +7 -0
- package/dist/src/integrations/linear/sync-manager.js +236 -0
- package/dist/src/integrations/linear/sync-manager.js.map +7 -0
- package/dist/src/integrations/linear/sync-service.js +231 -0
- package/dist/src/integrations/linear/sync-service.js.map +7 -0
- package/dist/src/integrations/linear/sync.js +782 -0
- package/dist/src/integrations/linear/sync.js.map +7 -0
- package/dist/src/integrations/linear/types.js +5 -0
- package/dist/src/integrations/linear/types.js.map +7 -0
- package/dist/src/integrations/linear/unified-sync.js +589 -0
- package/dist/src/integrations/linear/unified-sync.js.map +7 -0
- package/dist/src/integrations/linear/webhook-handler.js +219 -0
- package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/src/integrations/linear/webhook-server.js +218 -0
- package/dist/src/integrations/linear/webhook-server.js.map +7 -0
- package/dist/src/integrations/linear/webhook.js +291 -0
- package/dist/src/integrations/linear/webhook.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/index.js +166 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/index.js +23 -0
- package/dist/src/integrations/mcp/index.js.map +7 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/src/integrations/mcp/refactored-server.js +374 -0
- package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
- package/dist/src/integrations/mcp/remote-server.js +682 -0
- package/dist/src/integrations/mcp/remote-server.js.map +7 -0
- package/dist/src/integrations/mcp/schemas.js +147 -0
- package/dist/src/integrations/mcp/schemas.js.map +7 -0
- package/dist/src/integrations/mcp/server.js +1975 -0
- package/dist/src/integrations/mcp/server.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions.js +702 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
- package/dist/src/integrations/ralph/index.js +18 -0
- package/dist/src/integrations/ralph/index.js.map +7 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
- package/dist/src/integrations/ralph/types.js +5 -0
- package/dist/src/integrations/ralph/types.js.map +7 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
- package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/src/middleware/exponential-rate-limiter.js +289 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/src/models/user.model.js +358 -0
- package/dist/src/models/user.model.js.map +7 -0
- package/dist/src/servers/production/auth-middleware.js +528 -0
- package/dist/src/servers/production/auth-middleware.js.map +7 -0
- package/dist/src/services/config-service.js +65 -0
- package/dist/src/services/config-service.js.map +7 -0
- package/dist/src/services/context-service.js +194 -0
- package/dist/src/services/context-service.js.map +7 -0
- package/dist/src/skills/api-discovery.js +354 -0
- package/dist/src/skills/api-discovery.js.map +7 -0
- package/dist/src/skills/api-skill.js +475 -0
- package/dist/src/skills/api-skill.js.map +7 -0
- package/dist/src/skills/claude-skills.js +1061 -0
- package/dist/src/skills/claude-skills.js.map +7 -0
- package/dist/src/skills/dashboard-launcher.js +216 -0
- package/dist/src/skills/dashboard-launcher.js.map +7 -0
- package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
- package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
- package/dist/src/skills/repo-ingestion-skill.js +609 -0
- package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
- package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
- package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
- package/dist/src/types/task.js +5 -0
- package/dist/src/types/task.js.map +7 -0
- package/dist/src/utils/env.js +50 -0
- package/dist/src/utils/env.js.map +7 -0
- package/dist/src/utils/formatting.js +62 -0
- package/dist/src/utils/formatting.js.map +7 -0
- package/dist/src/utils/process-cleanup.js +136 -0
- package/dist/src/utils/process-cleanup.js.map +7 -0
- package/package.json +4 -3
- package/scripts/create-cleanup-issues.js +302 -0
- package/scripts/demos/browser-test.ts +39 -0
- package/scripts/demos/ralph-integration-demo.ts +244 -0
- package/scripts/demos/trace-demo.ts +214 -0
- package/scripts/demos/trace-detector.demo.ts +171 -0
- package/scripts/demos/trace-test.ts +67 -0
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
- package/scripts/test-claude-config.sh +123 -0
- package/scripts/validate-claude-config.sh +155 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
#!/usr/bin/env npx ts-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 { readFileSync, existsSync, readdirSync, statSync } from "fs";
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
import { homedir } from "os";
|
|
9
|
+
import Database from "better-sqlite3";
|
|
10
|
+
function estimateTokensAccurate(text) {
|
|
11
|
+
const baseEstimate = text.length / 3.5;
|
|
12
|
+
const codeIndicators = (text.match(/[{}\[\]();=]/g) || []).length;
|
|
13
|
+
const codeScore = codeIndicators / text.length * 100;
|
|
14
|
+
if (codeScore > 5) {
|
|
15
|
+
return Math.ceil(baseEstimate * 1.2);
|
|
16
|
+
}
|
|
17
|
+
return Math.ceil(baseEstimate);
|
|
18
|
+
}
|
|
19
|
+
function measureHandoffs() {
|
|
20
|
+
const handoffPath = join(homedir(), ".stackmemory", "context.db");
|
|
21
|
+
const metrics = [];
|
|
22
|
+
if (!existsSync(handoffPath)) {
|
|
23
|
+
console.log("No context.db found at", handoffPath);
|
|
24
|
+
return metrics;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const db = new Database(handoffPath, { readonly: true });
|
|
28
|
+
const tableCheck = db.prepare(
|
|
29
|
+
`
|
|
30
|
+
SELECT name FROM sqlite_master
|
|
31
|
+
WHERE type='table' AND name='handoff_requests'
|
|
32
|
+
`
|
|
33
|
+
).get();
|
|
34
|
+
if (!tableCheck) {
|
|
35
|
+
console.log("No handoff_requests table found");
|
|
36
|
+
db.close();
|
|
37
|
+
return metrics;
|
|
38
|
+
}
|
|
39
|
+
const handoffs = db.prepare(
|
|
40
|
+
`
|
|
41
|
+
SELECT id, message, created_at
|
|
42
|
+
FROM handoff_requests
|
|
43
|
+
ORDER BY created_at DESC
|
|
44
|
+
LIMIT 10
|
|
45
|
+
`
|
|
46
|
+
).all();
|
|
47
|
+
for (const h of handoffs) {
|
|
48
|
+
const message = h.message || "";
|
|
49
|
+
metrics.push({
|
|
50
|
+
handoffId: h.id,
|
|
51
|
+
handoffChars: message.length,
|
|
52
|
+
handoffTokens: estimateTokensAccurate(message),
|
|
53
|
+
createdAt: new Date(h.created_at).toISOString()
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
db.close();
|
|
57
|
+
} catch (err) {
|
|
58
|
+
console.log("Error reading handoffs:", err);
|
|
59
|
+
}
|
|
60
|
+
return metrics;
|
|
61
|
+
}
|
|
62
|
+
function measureLastHandoffFile() {
|
|
63
|
+
const handoffPath = join(process.cwd(), ".stackmemory", "last-handoff.md");
|
|
64
|
+
if (!existsSync(handoffPath)) {
|
|
65
|
+
const homeHandoff = join(homedir(), ".stackmemory", "last-handoff.md");
|
|
66
|
+
if (!existsSync(homeHandoff)) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const content2 = readFileSync(homeHandoff, "utf-8");
|
|
70
|
+
return {
|
|
71
|
+
source: homeHandoff,
|
|
72
|
+
charCount: content2.length,
|
|
73
|
+
estimatedTokens: estimateTokensAccurate(content2),
|
|
74
|
+
lineCount: content2.split("\n").length
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const content = readFileSync(handoffPath, "utf-8");
|
|
78
|
+
return {
|
|
79
|
+
source: handoffPath,
|
|
80
|
+
charCount: content.length,
|
|
81
|
+
estimatedTokens: estimateTokensAccurate(content),
|
|
82
|
+
lineCount: content.split("\n").length
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function measureClaudeConversations() {
|
|
86
|
+
const claudeProjectsDir = join(homedir(), ".claude", "projects");
|
|
87
|
+
const metrics = [];
|
|
88
|
+
if (!existsSync(claudeProjectsDir)) {
|
|
89
|
+
return metrics;
|
|
90
|
+
}
|
|
91
|
+
const projectDirs = readdirSync(claudeProjectsDir);
|
|
92
|
+
for (const dir of projectDirs.slice(0, 5)) {
|
|
93
|
+
const projectPath = join(claudeProjectsDir, dir);
|
|
94
|
+
const stat = statSync(projectPath);
|
|
95
|
+
if (stat.isDirectory()) {
|
|
96
|
+
const files = readdirSync(projectPath).filter(
|
|
97
|
+
(f) => f.endsWith(".jsonl")
|
|
98
|
+
);
|
|
99
|
+
for (const file of files.slice(0, 3)) {
|
|
100
|
+
const filePath = join(projectPath, file);
|
|
101
|
+
try {
|
|
102
|
+
const content = readFileSync(filePath, "utf-8");
|
|
103
|
+
metrics.push({
|
|
104
|
+
source: file,
|
|
105
|
+
charCount: content.length,
|
|
106
|
+
estimatedTokens: estimateTokensAccurate(content),
|
|
107
|
+
lineCount: content.split("\n").length
|
|
108
|
+
});
|
|
109
|
+
} catch {
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return metrics;
|
|
115
|
+
}
|
|
116
|
+
function measureFramesAndEvents() {
|
|
117
|
+
const dbPath = join(homedir(), ".stackmemory", "context.db");
|
|
118
|
+
if (!existsSync(dbPath)) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const db = new Database(dbPath, { readonly: true });
|
|
123
|
+
const frameResult = db.prepare(
|
|
124
|
+
`
|
|
125
|
+
SELECT COUNT(*) as count,
|
|
126
|
+
SUM(LENGTH(COALESCE(name, '') || COALESCE(json(inputs), '') || COALESCE(json(outputs), '') || COALESCE(json(digest_json), ''))) as totalChars
|
|
127
|
+
FROM frames
|
|
128
|
+
`
|
|
129
|
+
).get();
|
|
130
|
+
const eventResult = db.prepare(
|
|
131
|
+
`
|
|
132
|
+
SELECT COUNT(*) as count,
|
|
133
|
+
SUM(LENGTH(COALESCE(event_type, '') || COALESCE(json(payload), ''))) as totalChars
|
|
134
|
+
FROM events
|
|
135
|
+
`
|
|
136
|
+
).get();
|
|
137
|
+
db.close();
|
|
138
|
+
const frameChars = frameResult?.totalChars || 0;
|
|
139
|
+
const eventChars = eventResult?.totalChars || 0;
|
|
140
|
+
const totalChars = frameChars + eventChars;
|
|
141
|
+
return {
|
|
142
|
+
sessionId: "aggregate",
|
|
143
|
+
frameCount: frameResult?.count || 0,
|
|
144
|
+
eventCount: eventResult?.count || 0,
|
|
145
|
+
estimatedSessionTokens: estimateTokensAccurate(
|
|
146
|
+
String(totalChars).repeat(Math.floor(totalChars / 10) || 1)
|
|
147
|
+
)
|
|
148
|
+
};
|
|
149
|
+
} catch (err) {
|
|
150
|
+
console.log("Error measuring frames/events:", err);
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function formatNumber(n) {
|
|
155
|
+
if (n >= 1e3) {
|
|
156
|
+
return (n / 1e3).toFixed(1) + "K";
|
|
157
|
+
}
|
|
158
|
+
return n.toString();
|
|
159
|
+
}
|
|
160
|
+
async function main() {
|
|
161
|
+
console.log("========================================");
|
|
162
|
+
console.log(" HANDOFF CONTEXT IMPACT ANALYSIS");
|
|
163
|
+
console.log(" (Actual Measurements)");
|
|
164
|
+
console.log("========================================\n");
|
|
165
|
+
console.log("1. LAST HANDOFF FILE");
|
|
166
|
+
console.log("--------------------");
|
|
167
|
+
const lastHandoff = measureLastHandoffFile();
|
|
168
|
+
if (lastHandoff) {
|
|
169
|
+
console.log(` Source: ${lastHandoff.source}`);
|
|
170
|
+
console.log(` Characters: ${formatNumber(lastHandoff.charCount)}`);
|
|
171
|
+
console.log(` Lines: ${lastHandoff.lineCount}`);
|
|
172
|
+
console.log(
|
|
173
|
+
` Estimated tokens: ${formatNumber(lastHandoff.estimatedTokens)}`
|
|
174
|
+
);
|
|
175
|
+
} else {
|
|
176
|
+
console.log(" No handoff file found");
|
|
177
|
+
}
|
|
178
|
+
console.log("");
|
|
179
|
+
console.log("2. HANDOFFS FROM DATABASE");
|
|
180
|
+
console.log("-------------------------");
|
|
181
|
+
const handoffs = measureHandoffs();
|
|
182
|
+
if (handoffs.length > 0) {
|
|
183
|
+
let totalTokens = 0;
|
|
184
|
+
for (const h of handoffs) {
|
|
185
|
+
console.log(
|
|
186
|
+
` ${h.handoffId.slice(0, 8)}: ${formatNumber(h.handoffTokens)} tokens (${formatNumber(h.handoffChars)} chars)`
|
|
187
|
+
);
|
|
188
|
+
totalTokens += h.handoffTokens;
|
|
189
|
+
}
|
|
190
|
+
const avgTokens = Math.round(totalTokens / handoffs.length);
|
|
191
|
+
console.log(` Average: ${formatNumber(avgTokens)} tokens per handoff`);
|
|
192
|
+
} else {
|
|
193
|
+
console.log(" No handoffs in database");
|
|
194
|
+
}
|
|
195
|
+
console.log("");
|
|
196
|
+
console.log("3. CLAUDE CONVERSATION FILES");
|
|
197
|
+
console.log("----------------------------");
|
|
198
|
+
const conversations = measureClaudeConversations();
|
|
199
|
+
if (conversations.length > 0) {
|
|
200
|
+
let totalConvTokens = 0;
|
|
201
|
+
let maxConvTokens = 0;
|
|
202
|
+
for (const c of conversations) {
|
|
203
|
+
console.log(
|
|
204
|
+
` ${c.source}: ${formatNumber(c.estimatedTokens)} tokens (${formatNumber(c.charCount)} chars, ${c.lineCount} lines)`
|
|
205
|
+
);
|
|
206
|
+
totalConvTokens += c.estimatedTokens;
|
|
207
|
+
maxConvTokens = Math.max(maxConvTokens, c.estimatedTokens);
|
|
208
|
+
}
|
|
209
|
+
const avgConvTokens = Math.round(totalConvTokens / conversations.length);
|
|
210
|
+
console.log(
|
|
211
|
+
` Average: ${formatNumber(avgConvTokens)} tokens per conversation`
|
|
212
|
+
);
|
|
213
|
+
console.log(` Max: ${formatNumber(maxConvTokens)} tokens`);
|
|
214
|
+
} else {
|
|
215
|
+
console.log(" No conversation files found");
|
|
216
|
+
}
|
|
217
|
+
console.log("");
|
|
218
|
+
console.log("4. STACKMEMORY DATABASE CONTENT");
|
|
219
|
+
console.log("-------------------------------");
|
|
220
|
+
const dbMetrics = measureFramesAndEvents();
|
|
221
|
+
if (dbMetrics) {
|
|
222
|
+
console.log(` Frames: ${dbMetrics.frameCount}`);
|
|
223
|
+
console.log(` Events: ${dbMetrics.eventCount}`);
|
|
224
|
+
console.log(
|
|
225
|
+
` Total stored data: ~${formatNumber(dbMetrics.estimatedSessionTokens)} tokens equivalent`
|
|
226
|
+
);
|
|
227
|
+
} else {
|
|
228
|
+
console.log(" No database metrics available");
|
|
229
|
+
}
|
|
230
|
+
console.log("");
|
|
231
|
+
console.log("5. COMPRESSION ANALYSIS");
|
|
232
|
+
console.log("-----------------------");
|
|
233
|
+
const avgHandoffTokens = handoffs.length > 0 ? Math.round(
|
|
234
|
+
handoffs.reduce((sum, h) => sum + h.handoffTokens, 0) / handoffs.length
|
|
235
|
+
) : lastHandoff?.estimatedTokens || 2e3;
|
|
236
|
+
const avgConversationTokens = conversations.length > 0 ? Math.round(
|
|
237
|
+
conversations.reduce((sum, c) => sum + c.estimatedTokens, 0) / conversations.length
|
|
238
|
+
) : 8e4;
|
|
239
|
+
const sessionSizes = {
|
|
240
|
+
short: 35e3,
|
|
241
|
+
// 2hr session
|
|
242
|
+
medium: 78e3,
|
|
243
|
+
// 4hr session
|
|
244
|
+
long: 142e3,
|
|
245
|
+
// 8hr session
|
|
246
|
+
actual: avgConversationTokens
|
|
247
|
+
};
|
|
248
|
+
console.log("\n Compression Ratios (using actual handoff size):");
|
|
249
|
+
console.log(` Handoff size: ${formatNumber(avgHandoffTokens)} tokens
|
|
250
|
+
`);
|
|
251
|
+
for (const [label, size] of Object.entries(sessionSizes)) {
|
|
252
|
+
const reduction = ((size - avgHandoffTokens) / size * 100).toFixed(1);
|
|
253
|
+
const saved = size - avgHandoffTokens;
|
|
254
|
+
console.log(
|
|
255
|
+
` ${label.padEnd(8)}: ${formatNumber(size)} -> ${formatNumber(avgHandoffTokens)} = ${reduction}% reduction (${formatNumber(saved)} saved)`
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
console.log("");
|
|
259
|
+
console.log("6. CONTEXT WINDOW IMPACT");
|
|
260
|
+
console.log("------------------------");
|
|
261
|
+
const contextWindow = 2e5;
|
|
262
|
+
const systemPrompt = 2e3;
|
|
263
|
+
const currentTools = 1e4;
|
|
264
|
+
const withoutHandoff = {
|
|
265
|
+
used: systemPrompt + avgConversationTokens + currentTools,
|
|
266
|
+
available: 0
|
|
267
|
+
};
|
|
268
|
+
withoutHandoff.available = contextWindow - withoutHandoff.used;
|
|
269
|
+
const withHandoff = {
|
|
270
|
+
used: systemPrompt + avgHandoffTokens + currentTools,
|
|
271
|
+
available: 0
|
|
272
|
+
};
|
|
273
|
+
withHandoff.available = contextWindow - withHandoff.used;
|
|
274
|
+
console.log(` Context window: ${formatNumber(contextWindow)} tokens`);
|
|
275
|
+
console.log(` System prompt: ${formatNumber(systemPrompt)} tokens`);
|
|
276
|
+
console.log(` Current tools: ${formatNumber(currentTools)} tokens
|
|
277
|
+
`);
|
|
278
|
+
console.log(" WITHOUT HANDOFF:");
|
|
279
|
+
console.log(
|
|
280
|
+
` Conversation history: ${formatNumber(avgConversationTokens)} tokens`
|
|
281
|
+
);
|
|
282
|
+
console.log(` Total used: ${formatNumber(withoutHandoff.used)} tokens`);
|
|
283
|
+
console.log(
|
|
284
|
+
` Available for work: ${formatNumber(withoutHandoff.available)} tokens (${(withoutHandoff.available / contextWindow * 100).toFixed(1)}%)`
|
|
285
|
+
);
|
|
286
|
+
console.log("");
|
|
287
|
+
console.log(" WITH HANDOFF:");
|
|
288
|
+
console.log(` Handoff summary: ${formatNumber(avgHandoffTokens)} tokens`);
|
|
289
|
+
console.log(` Total used: ${formatNumber(withHandoff.used)} tokens`);
|
|
290
|
+
console.log(
|
|
291
|
+
` Available for work: ${formatNumber(withHandoff.available)} tokens (${(withHandoff.available / contextWindow * 100).toFixed(1)}%)`
|
|
292
|
+
);
|
|
293
|
+
console.log("");
|
|
294
|
+
const improvement = withHandoff.available - withoutHandoff.available;
|
|
295
|
+
const improvementPct = (improvement / withoutHandoff.available * 100).toFixed(1);
|
|
296
|
+
console.log(
|
|
297
|
+
` IMPROVEMENT: +${formatNumber(improvement)} tokens (+${improvementPct}% more capacity)`
|
|
298
|
+
);
|
|
299
|
+
console.log("\n========================================");
|
|
300
|
+
console.log(" SUMMARY");
|
|
301
|
+
console.log("========================================\n");
|
|
302
|
+
const actualReduction = ((avgConversationTokens - avgHandoffTokens) / avgConversationTokens * 100).toFixed(1);
|
|
303
|
+
console.log(
|
|
304
|
+
` Actual handoff size: ${formatNumber(avgHandoffTokens)} tokens`
|
|
305
|
+
);
|
|
306
|
+
console.log(
|
|
307
|
+
` Actual conversation size: ${formatNumber(avgConversationTokens)} tokens`
|
|
308
|
+
);
|
|
309
|
+
console.log(` Actual compression: ${actualReduction}%`);
|
|
310
|
+
console.log(` Actual context freed: ${formatNumber(improvement)} tokens`);
|
|
311
|
+
console.log("");
|
|
312
|
+
console.log(" CLAIM VALIDATION:");
|
|
313
|
+
console.log(" -----------------");
|
|
314
|
+
const claimedReduction = "85-98%";
|
|
315
|
+
const claimedHandoff = "1K-5K tokens";
|
|
316
|
+
const claimedConversation = "50K-150K tokens";
|
|
317
|
+
console.log(` Claimed reduction: ${claimedReduction}`);
|
|
318
|
+
console.log(` Measured reduction: ${actualReduction}%`);
|
|
319
|
+
console.log(
|
|
320
|
+
` Status: ${parseFloat(actualReduction) >= 85 ? "VALIDATED" : "NEEDS REVISION"}`
|
|
321
|
+
);
|
|
322
|
+
console.log("");
|
|
323
|
+
console.log(` Claimed handoff size: ${claimedHandoff}`);
|
|
324
|
+
console.log(
|
|
325
|
+
` Measured handoff size: ${formatNumber(avgHandoffTokens)} tokens`
|
|
326
|
+
);
|
|
327
|
+
console.log(
|
|
328
|
+
` Status: ${avgHandoffTokens >= 1e3 && avgHandoffTokens <= 5e3 ? "VALIDATED" : "NEEDS REVISION"}`
|
|
329
|
+
);
|
|
330
|
+
console.log("");
|
|
331
|
+
console.log(` Claimed conversation: ${claimedConversation}`);
|
|
332
|
+
console.log(
|
|
333
|
+
` Measured conversation: ${formatNumber(avgConversationTokens)} tokens`
|
|
334
|
+
);
|
|
335
|
+
console.log(
|
|
336
|
+
` Status: ${avgConversationTokens >= 5e4 && avgConversationTokens <= 15e4 ? "VALIDATED" : "NEEDS REVISION"}`
|
|
337
|
+
);
|
|
338
|
+
}
|
|
339
|
+
main().catch(console.error);
|
|
340
|
+
//# sourceMappingURL=measure-handoff-impact.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../scripts/measure-handoff-impact.ts"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env npx ts-node\n/**\n * Measure actual handoff context impact with real data\n * Validates claims about token savings\n */\n\nimport { readFileSync, existsSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport Database from 'better-sqlite3';\n\ninterface TokenMetrics {\n source: string;\n charCount: number;\n estimatedTokens: number;\n lineCount: number;\n}\n\ninterface HandoffMetrics {\n handoffId: string;\n handoffTokens: number;\n handoffChars: number;\n createdAt: string;\n}\n\ninterface SessionMetrics {\n sessionId: string;\n frameCount: number;\n eventCount: number;\n estimatedSessionTokens: number;\n}\n\n// Token estimation considering code vs prose\nfunction estimateTokensAccurate(text: string): number {\n const baseEstimate = text.length / 3.5;\n\n // Check if code-heavy (more tokens per char)\n const codeIndicators = (text.match(/[{}\\[\\]();=]/g) || []).length;\n const codeScore = (codeIndicators / text.length) * 100;\n\n if (codeScore > 5) {\n return Math.ceil(baseEstimate * 1.2);\n }\n return Math.ceil(baseEstimate);\n}\n\nfunction measureHandoffs(): HandoffMetrics[] {\n const handoffPath = join(homedir(), '.stackmemory', 'context.db');\n const metrics: HandoffMetrics[] = [];\n\n if (!existsSync(handoffPath)) {\n console.log('No context.db found at', handoffPath);\n return metrics;\n }\n\n try {\n const db = new Database(handoffPath, { readonly: true });\n\n // Check if handoff_requests table exists\n const tableCheck = db\n .prepare(\n `\n SELECT name FROM sqlite_master\n WHERE type='table' AND name='handoff_requests'\n `\n )\n .get();\n\n if (!tableCheck) {\n console.log('No handoff_requests table found');\n db.close();\n return metrics;\n }\n\n const handoffs = db\n .prepare(\n `\n SELECT id, message, created_at\n FROM handoff_requests\n ORDER BY created_at DESC\n LIMIT 10\n `\n )\n .all() as Array<{ id: string; message: string; created_at: number }>;\n\n for (const h of handoffs) {\n const message = h.message || '';\n metrics.push({\n handoffId: h.id,\n handoffChars: message.length,\n handoffTokens: estimateTokensAccurate(message),\n createdAt: new Date(h.created_at).toISOString(),\n });\n }\n\n db.close();\n } catch (err) {\n console.log('Error reading handoffs:', err);\n }\n\n return metrics;\n}\n\nfunction measureLastHandoffFile(): TokenMetrics | null {\n const handoffPath = join(process.cwd(), '.stackmemory', 'last-handoff.md');\n\n if (!existsSync(handoffPath)) {\n // Try home directory\n const homeHandoff = join(homedir(), '.stackmemory', 'last-handoff.md');\n if (!existsSync(homeHandoff)) {\n return null;\n }\n const content = readFileSync(homeHandoff, 'utf-8');\n return {\n source: homeHandoff,\n charCount: content.length,\n estimatedTokens: estimateTokensAccurate(content),\n lineCount: content.split('\\n').length,\n };\n }\n\n const content = readFileSync(handoffPath, 'utf-8');\n return {\n source: handoffPath,\n charCount: content.length,\n estimatedTokens: estimateTokensAccurate(content),\n lineCount: content.split('\\n').length,\n };\n}\n\nfunction measureClaudeConversations(): TokenMetrics[] {\n const claudeProjectsDir = join(homedir(), '.claude', 'projects');\n const metrics: TokenMetrics[] = [];\n\n if (!existsSync(claudeProjectsDir)) {\n return metrics;\n }\n\n // Find conversation files\n const projectDirs = readdirSync(claudeProjectsDir);\n\n for (const dir of projectDirs.slice(0, 5)) {\n const projectPath = join(claudeProjectsDir, dir);\n const stat = statSync(projectPath);\n\n if (stat.isDirectory()) {\n const files = readdirSync(projectPath).filter((f) =>\n f.endsWith('.jsonl')\n );\n\n for (const file of files.slice(0, 3)) {\n const filePath = join(projectPath, file);\n try {\n const content = readFileSync(filePath, 'utf-8');\n metrics.push({\n source: file,\n charCount: content.length,\n estimatedTokens: estimateTokensAccurate(content),\n lineCount: content.split('\\n').length,\n });\n } catch {\n // Skip unreadable files\n }\n }\n }\n }\n\n return metrics;\n}\n\nfunction measureFramesAndEvents(): SessionMetrics | null {\n const dbPath = join(homedir(), '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n return null;\n }\n\n try {\n const db = new Database(dbPath, { readonly: true });\n\n // Get frame count and content\n const frameResult = db\n .prepare(\n `\n SELECT COUNT(*) as count,\n SUM(LENGTH(COALESCE(name, '') || COALESCE(json(inputs), '') || COALESCE(json(outputs), '') || COALESCE(json(digest_json), ''))) as totalChars\n FROM frames\n `\n )\n .get() as { count: number; totalChars: number } | undefined;\n\n // Get event count and content\n const eventResult = db\n .prepare(\n `\n SELECT COUNT(*) as count,\n SUM(LENGTH(COALESCE(event_type, '') || COALESCE(json(payload), ''))) as totalChars\n FROM events\n `\n )\n .get() as { count: number; totalChars: number } | undefined;\n\n db.close();\n\n const frameChars = frameResult?.totalChars || 0;\n const eventChars = eventResult?.totalChars || 0;\n const totalChars = frameChars + eventChars;\n\n return {\n sessionId: 'aggregate',\n frameCount: frameResult?.count || 0,\n eventCount: eventResult?.count || 0,\n estimatedSessionTokens: estimateTokensAccurate(\n String(totalChars).repeat(Math.floor(totalChars / 10) || 1)\n ),\n };\n } catch (err) {\n console.log('Error measuring frames/events:', err);\n return null;\n }\n}\n\nfunction formatNumber(n: number): string {\n if (n >= 1000) {\n return (n / 1000).toFixed(1) + 'K';\n }\n return n.toString();\n}\n\nasync function main() {\n console.log('========================================');\n console.log(' HANDOFF CONTEXT IMPACT ANALYSIS');\n console.log(' (Actual Measurements)');\n console.log('========================================\\n');\n\n // 1. Measure last handoff file\n console.log('1. LAST HANDOFF FILE');\n console.log('--------------------');\n const lastHandoff = measureLastHandoffFile();\n if (lastHandoff) {\n console.log(` Source: ${lastHandoff.source}`);\n console.log(` Characters: ${formatNumber(lastHandoff.charCount)}`);\n console.log(` Lines: ${lastHandoff.lineCount}`);\n console.log(\n ` Estimated tokens: ${formatNumber(lastHandoff.estimatedTokens)}`\n );\n } else {\n console.log(' No handoff file found');\n }\n console.log('');\n\n // 2. Measure handoffs from database\n console.log('2. HANDOFFS FROM DATABASE');\n console.log('-------------------------');\n const handoffs = measureHandoffs();\n if (handoffs.length > 0) {\n let totalTokens = 0;\n for (const h of handoffs) {\n console.log(\n ` ${h.handoffId.slice(0, 8)}: ${formatNumber(h.handoffTokens)} tokens (${formatNumber(h.handoffChars)} chars)`\n );\n totalTokens += h.handoffTokens;\n }\n const avgTokens = Math.round(totalTokens / handoffs.length);\n console.log(` Average: ${formatNumber(avgTokens)} tokens per handoff`);\n } else {\n console.log(' No handoffs in database');\n }\n console.log('');\n\n // 3. Measure Claude conversation files\n console.log('3. CLAUDE CONVERSATION FILES');\n console.log('----------------------------');\n const conversations = measureClaudeConversations();\n if (conversations.length > 0) {\n let totalConvTokens = 0;\n let maxConvTokens = 0;\n for (const c of conversations) {\n console.log(\n ` ${c.source}: ${formatNumber(c.estimatedTokens)} tokens (${formatNumber(c.charCount)} chars, ${c.lineCount} lines)`\n );\n totalConvTokens += c.estimatedTokens;\n maxConvTokens = Math.max(maxConvTokens, c.estimatedTokens);\n }\n const avgConvTokens = Math.round(totalConvTokens / conversations.length);\n console.log(\n ` Average: ${formatNumber(avgConvTokens)} tokens per conversation`\n );\n console.log(` Max: ${formatNumber(maxConvTokens)} tokens`);\n } else {\n console.log(' No conversation files found');\n }\n console.log('');\n\n // 4. Measure StackMemory database\n console.log('4. STACKMEMORY DATABASE CONTENT');\n console.log('-------------------------------');\n const dbMetrics = measureFramesAndEvents();\n if (dbMetrics) {\n console.log(` Frames: ${dbMetrics.frameCount}`);\n console.log(` Events: ${dbMetrics.eventCount}`);\n console.log(\n ` Total stored data: ~${formatNumber(dbMetrics.estimatedSessionTokens)} tokens equivalent`\n );\n } else {\n console.log(' No database metrics available');\n }\n console.log('');\n\n // 5. Calculate compression ratios\n console.log('5. COMPRESSION ANALYSIS');\n console.log('-----------------------');\n\n const avgHandoffTokens =\n handoffs.length > 0\n ? Math.round(\n handoffs.reduce((sum, h) => sum + h.handoffTokens, 0) /\n handoffs.length\n )\n : lastHandoff?.estimatedTokens || 2000;\n\n const avgConversationTokens =\n conversations.length > 0\n ? Math.round(\n conversations.reduce((sum, c) => sum + c.estimatedTokens, 0) /\n conversations.length\n )\n : 80000;\n\n // Typical session sizes based on actual data\n const sessionSizes = {\n short: 35000, // 2hr session\n medium: 78000, // 4hr session\n long: 142000, // 8hr session\n actual: avgConversationTokens,\n };\n\n console.log('\\n Compression Ratios (using actual handoff size):');\n console.log(` Handoff size: ${formatNumber(avgHandoffTokens)} tokens\\n`);\n\n for (const [label, size] of Object.entries(sessionSizes)) {\n const reduction = (((size - avgHandoffTokens) / size) * 100).toFixed(1);\n const saved = size - avgHandoffTokens;\n console.log(\n ` ${label.padEnd(8)}: ${formatNumber(size)} -> ${formatNumber(avgHandoffTokens)} = ${reduction}% reduction (${formatNumber(saved)} saved)`\n );\n }\n\n console.log('');\n\n // 6. Context window impact\n console.log('6. CONTEXT WINDOW IMPACT');\n console.log('------------------------');\n const contextWindow = 200000;\n const systemPrompt = 2000;\n const currentTools = 10000;\n\n const withoutHandoff = {\n used: systemPrompt + avgConversationTokens + currentTools,\n available: 0,\n };\n withoutHandoff.available = contextWindow - withoutHandoff.used;\n\n const withHandoff = {\n used: systemPrompt + avgHandoffTokens + currentTools,\n available: 0,\n };\n withHandoff.available = contextWindow - withHandoff.used;\n\n console.log(` Context window: ${formatNumber(contextWindow)} tokens`);\n console.log(` System prompt: ${formatNumber(systemPrompt)} tokens`);\n console.log(` Current tools: ${formatNumber(currentTools)} tokens\\n`);\n\n console.log(' WITHOUT HANDOFF:');\n console.log(\n ` Conversation history: ${formatNumber(avgConversationTokens)} tokens`\n );\n console.log(` Total used: ${formatNumber(withoutHandoff.used)} tokens`);\n console.log(\n ` Available for work: ${formatNumber(withoutHandoff.available)} tokens (${((withoutHandoff.available / contextWindow) * 100).toFixed(1)}%)`\n );\n console.log('');\n\n console.log(' WITH HANDOFF:');\n console.log(` Handoff summary: ${formatNumber(avgHandoffTokens)} tokens`);\n console.log(` Total used: ${formatNumber(withHandoff.used)} tokens`);\n console.log(\n ` Available for work: ${formatNumber(withHandoff.available)} tokens (${((withHandoff.available / contextWindow) * 100).toFixed(1)}%)`\n );\n console.log('');\n\n const improvement = withHandoff.available - withoutHandoff.available;\n const improvementPct = (\n (improvement / withoutHandoff.available) *\n 100\n ).toFixed(1);\n console.log(\n ` IMPROVEMENT: +${formatNumber(improvement)} tokens (+${improvementPct}% more capacity)`\n );\n\n console.log('\\n========================================');\n console.log(' SUMMARY');\n console.log('========================================\\n');\n\n const actualReduction = (\n ((avgConversationTokens - avgHandoffTokens) / avgConversationTokens) *\n 100\n ).toFixed(1);\n\n console.log(\n ` Actual handoff size: ${formatNumber(avgHandoffTokens)} tokens`\n );\n console.log(\n ` Actual conversation size: ${formatNumber(avgConversationTokens)} tokens`\n );\n console.log(` Actual compression: ${actualReduction}%`);\n console.log(` Actual context freed: ${formatNumber(improvement)} tokens`);\n console.log('');\n\n // Validate claims from document\n console.log(' CLAIM VALIDATION:');\n console.log(' -----------------');\n const claimedReduction = '85-98%';\n const claimedHandoff = '1K-5K tokens';\n const claimedConversation = '50K-150K tokens';\n\n console.log(` Claimed reduction: ${claimedReduction}`);\n console.log(` Measured reduction: ${actualReduction}%`);\n console.log(\n ` Status: ${parseFloat(actualReduction) >= 85 ? 'VALIDATED' : 'NEEDS REVISION'}`\n );\n console.log('');\n console.log(` Claimed handoff size: ${claimedHandoff}`);\n console.log(\n ` Measured handoff size: ${formatNumber(avgHandoffTokens)} tokens`\n );\n console.log(\n ` Status: ${avgHandoffTokens >= 1000 && avgHandoffTokens <= 5000 ? 'VALIDATED' : 'NEEDS REVISION'}`\n );\n console.log('');\n console.log(` Claimed conversation: ${claimedConversation}`);\n console.log(\n ` Measured conversation: ${formatNumber(avgConversationTokens)} tokens`\n );\n console.log(\n ` Status: ${avgConversationTokens >= 50000 && avgConversationTokens <= 150000 ? 'VALIDATED' : 'NEEDS REVISION'}`\n );\n}\n\nmain().catch(console.error);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["content"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
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 { ChromaClient } from "chromadb";
|
|
7
|
+
import dotenv from "dotenv";
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
dotenv.config();
|
|
10
|
+
async function queryChromaDB() {
|
|
11
|
+
const apiKey = process.env.CHROMADB_API_KEY;
|
|
12
|
+
const tenant = process.env.CHROMADB_TENANT;
|
|
13
|
+
const database = process.env.CHROMADB_DATABASE || "stackmemory";
|
|
14
|
+
console.log(chalk.cyan("\u{1F50D} Querying ChromaDB Contexts\n"));
|
|
15
|
+
const client = new ChromaClient({
|
|
16
|
+
ssl: true,
|
|
17
|
+
host: "api.trychroma.com",
|
|
18
|
+
port: 443,
|
|
19
|
+
headers: {
|
|
20
|
+
"X-Chroma-Token": apiKey
|
|
21
|
+
},
|
|
22
|
+
tenant,
|
|
23
|
+
database
|
|
24
|
+
});
|
|
25
|
+
const collections = await client.listCollections();
|
|
26
|
+
console.log(chalk.yellow("\u{1F4DA} Available Collections:"));
|
|
27
|
+
collections.forEach((col) => {
|
|
28
|
+
console.log(` - ${col.name}`);
|
|
29
|
+
});
|
|
30
|
+
console.log();
|
|
31
|
+
let collection;
|
|
32
|
+
try {
|
|
33
|
+
collection = await client.getCollection({
|
|
34
|
+
name: "claude_context"
|
|
35
|
+
});
|
|
36
|
+
console.log(chalk.green("\u2713 Using collection: claude_context\n"));
|
|
37
|
+
} catch {
|
|
38
|
+
collection = await client.getCollection({
|
|
39
|
+
name: "stackmemory_contexts"
|
|
40
|
+
});
|
|
41
|
+
console.log(chalk.green("\u2713 Using collection: stackmemory_contexts\n"));
|
|
42
|
+
}
|
|
43
|
+
console.log(chalk.yellow("\u{1F4CA} Collection Stats:"));
|
|
44
|
+
const count = await collection.count();
|
|
45
|
+
console.log(` Total documents: ${count}
|
|
46
|
+
`);
|
|
47
|
+
console.log(chalk.cyan("\u{1F4DA} All Stored Contexts:\n"));
|
|
48
|
+
const allDocs = await collection.get({
|
|
49
|
+
limit: 100
|
|
50
|
+
});
|
|
51
|
+
if (allDocs.ids.length > 0) {
|
|
52
|
+
for (let i = 0; i < allDocs.ids.length; i++) {
|
|
53
|
+
const metadata = allDocs.metadatas[i];
|
|
54
|
+
const document = allDocs.documents[i];
|
|
55
|
+
console.log(chalk.green(`${i + 1}. ${allDocs.ids[i]}`));
|
|
56
|
+
console.log(` Type: ${metadata.type}`);
|
|
57
|
+
console.log(` Timestamp: ${metadata.timestamp}`);
|
|
58
|
+
console.log(` User: ${metadata.user_id}`);
|
|
59
|
+
console.log(` Project: ${metadata.project}`);
|
|
60
|
+
console.log(` Content: ${document?.substring(0, 100)}...`);
|
|
61
|
+
console.log();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
console.log(chalk.cyan('\n\u{1F50E} Search Results for "TypeScript lint error":\n'));
|
|
65
|
+
const searchResults = await collection.query({
|
|
66
|
+
queryTexts: ["TypeScript lint error fix"],
|
|
67
|
+
nResults: 5
|
|
68
|
+
});
|
|
69
|
+
if (searchResults.ids[0].length > 0) {
|
|
70
|
+
for (let i = 0; i < searchResults.ids[0].length; i++) {
|
|
71
|
+
const metadata = searchResults.metadatas[0][i];
|
|
72
|
+
const document = searchResults.documents[0][i];
|
|
73
|
+
const distance = searchResults.distances[0][i];
|
|
74
|
+
console.log(chalk.yellow(`Match ${i + 1} (distance: ${distance.toFixed(3)}):`));
|
|
75
|
+
console.log(` ID: ${searchResults.ids[0][i]}`);
|
|
76
|
+
console.log(` Type: ${metadata.type}`);
|
|
77
|
+
console.log(` Timestamp: ${metadata.timestamp}`);
|
|
78
|
+
console.log(` Content: ${document?.substring(0, 150)}...`);
|
|
79
|
+
console.log();
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
console.log("No results found");
|
|
83
|
+
}
|
|
84
|
+
console.log(chalk.cyan("\n\u{1F4CB} Recent Task Completions:\n"));
|
|
85
|
+
const taskCompletions = await collection.get({
|
|
86
|
+
where: {
|
|
87
|
+
type: "task_complete"
|
|
88
|
+
},
|
|
89
|
+
limit: 10
|
|
90
|
+
});
|
|
91
|
+
if (taskCompletions.ids.length > 0) {
|
|
92
|
+
for (let i = 0; i < taskCompletions.ids.length; i++) {
|
|
93
|
+
const metadata = taskCompletions.metadatas[i];
|
|
94
|
+
const document = taskCompletions.documents[i];
|
|
95
|
+
console.log(chalk.green(`Task ${i + 1}:`));
|
|
96
|
+
console.log(` ID: ${taskCompletions.ids[i]}`);
|
|
97
|
+
console.log(` Timestamp: ${metadata.timestamp}`);
|
|
98
|
+
console.log(` Task ID: ${metadata.task_id}`);
|
|
99
|
+
console.log(` Duration: ${metadata.duration}ms`);
|
|
100
|
+
console.log(` Files Changed: ${metadata.files_changed}`);
|
|
101
|
+
console.log(` Content: ${document?.substring(0, 100)}...`);
|
|
102
|
+
console.log();
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
console.log("No task completions found");
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk.cyan("\n\u23F0 Periodic Checkpoints:\n"));
|
|
108
|
+
const periodicSaves = await collection.get({
|
|
109
|
+
where: {
|
|
110
|
+
type: "periodic_save"
|
|
111
|
+
},
|
|
112
|
+
limit: 10
|
|
113
|
+
});
|
|
114
|
+
if (periodicSaves.ids.length > 0) {
|
|
115
|
+
for (let i = 0; i < periodicSaves.ids.length; i++) {
|
|
116
|
+
const metadata = periodicSaves.metadatas[i];
|
|
117
|
+
const document = periodicSaves.documents[i];
|
|
118
|
+
console.log(chalk.blue(`Checkpoint ${i + 1}:`));
|
|
119
|
+
console.log(` Timestamp: ${metadata.timestamp}`);
|
|
120
|
+
console.log(` Interval: ${metadata.interval}`);
|
|
121
|
+
console.log(` Active Files: ${metadata.active_files}`);
|
|
122
|
+
console.log(` Git Status: ${document?.substring(0, 150)}...`);
|
|
123
|
+
console.log();
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
console.log("No periodic saves found");
|
|
127
|
+
}
|
|
128
|
+
console.log(chalk.cyan("\n\u{1F4A1} Decisions Made:\n"));
|
|
129
|
+
const decisions = await collection.get({
|
|
130
|
+
where: {
|
|
131
|
+
type: "decision_made"
|
|
132
|
+
},
|
|
133
|
+
limit: 10
|
|
134
|
+
});
|
|
135
|
+
if (decisions.ids.length > 0) {
|
|
136
|
+
for (let i = 0; i < decisions.ids.length; i++) {
|
|
137
|
+
const metadata = decisions.metadatas[i];
|
|
138
|
+
const document = decisions.documents[i];
|
|
139
|
+
console.log(chalk.magenta(`Decision ${i + 1}:`));
|
|
140
|
+
console.log(` Category: ${metadata.category}`);
|
|
141
|
+
console.log(` Alternatives: ${metadata.alternatives}`);
|
|
142
|
+
console.log(` Reasoning: ${metadata.reasoning}`);
|
|
143
|
+
console.log(` Decision: ${document?.substring(0, 200)}...`);
|
|
144
|
+
console.log();
|
|
145
|
+
}
|
|
146
|
+
} else {
|
|
147
|
+
console.log("No decisions found");
|
|
148
|
+
}
|
|
149
|
+
console.log(chalk.cyan("\n\u{1F4C8} Context Types Summary:\n"));
|
|
150
|
+
const types = /* @__PURE__ */ new Map();
|
|
151
|
+
for (let i = 0; i < allDocs.ids.length; i++) {
|
|
152
|
+
const type = allDocs.metadatas[i].type || "unknown";
|
|
153
|
+
types.set(type, (types.get(type) || 0) + 1);
|
|
154
|
+
}
|
|
155
|
+
for (const [type, count2] of types.entries()) {
|
|
156
|
+
console.log(` ${type}: ${count2} documents`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
queryChromaDB().catch(console.error);
|
|
160
|
+
//# sourceMappingURL=query-chromadb.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../scripts/query-chromadb.ts"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env tsx\n\n/**\n * Query ChromaDB for stored contexts\n */\n\nimport { ChromaClient } from 'chromadb';\nimport dotenv from 'dotenv';\nimport chalk from 'chalk';\n\n// Load environment variables\ndotenv.config();\n\nasync function queryChromaDB() {\n const apiKey = process.env.CHROMADB_API_KEY;\n const tenant = process.env.CHROMADB_TENANT;\n const database = process.env.CHROMADB_DATABASE || 'stackmemory';\n\n console.log(chalk.cyan('\uD83D\uDD0D Querying ChromaDB Contexts\\n'));\n\n // Connect to ChromaDB\n const client = new ChromaClient({\n ssl: true,\n host: 'api.trychroma.com',\n port: 443,\n headers: {\n 'X-Chroma-Token': apiKey\n },\n tenant: tenant,\n database: database\n });\n\n // List all collections first\n const collections = await client.listCollections();\n console.log(chalk.yellow('\uD83D\uDCDA Available Collections:'));\n collections.forEach(col => {\n console.log(` - ${col.name}`);\n });\n console.log();\n\n // Get collection - try claude_context first (from hooks), then stackmemory_contexts\n let collection;\n try {\n collection = await client.getCollection({\n name: 'claude_context'\n });\n console.log(chalk.green('\u2713 Using collection: claude_context\\n'));\n } catch {\n collection = await client.getCollection({\n name: 'stackmemory_contexts'\n });\n console.log(chalk.green('\u2713 Using collection: stackmemory_contexts\\n'));\n }\n\n console.log(chalk.yellow('\uD83D\uDCCA Collection Stats:'));\n const count = await collection.count();\n console.log(` Total documents: ${count}\\n`);\n\n // Query 1: Get all documents\n console.log(chalk.cyan('\uD83D\uDCDA All Stored Contexts:\\n'));\n \n const allDocs = await collection.get({\n limit: 100\n });\n\n if (allDocs.ids.length > 0) {\n for (let i = 0; i < allDocs.ids.length; i++) {\n const metadata = allDocs.metadatas[i];\n const document = allDocs.documents[i];\n \n console.log(chalk.green(`${i + 1}. ${allDocs.ids[i]}`));\n console.log(` Type: ${metadata.type}`);\n console.log(` Timestamp: ${metadata.timestamp}`);\n console.log(` User: ${metadata.user_id}`);\n console.log(` Project: ${metadata.project}`);\n console.log(` Content: ${document?.substring(0, 100)}...`);\n console.log();\n }\n }\n\n // Query 2: Search for specific content\n console.log(chalk.cyan('\\n\uD83D\uDD0E Search Results for \"TypeScript lint error\":\\n'));\n \n const searchResults = await collection.query({\n queryTexts: ['TypeScript lint error fix'],\n nResults: 5\n });\n\n if (searchResults.ids[0].length > 0) {\n for (let i = 0; i < searchResults.ids[0].length; i++) {\n const metadata = searchResults.metadatas[0][i];\n const document = searchResults.documents[0][i];\n const distance = searchResults.distances[0][i];\n \n console.log(chalk.yellow(`Match ${i + 1} (distance: ${distance.toFixed(3)}):`));\n console.log(` ID: ${searchResults.ids[0][i]}`);\n console.log(` Type: ${metadata.type}`);\n console.log(` Timestamp: ${metadata.timestamp}`);\n console.log(` Content: ${document?.substring(0, 150)}...`);\n console.log();\n }\n } else {\n console.log('No results found');\n }\n\n // Query 3: Filter by metadata\n console.log(chalk.cyan('\\n\uD83D\uDCCB Recent Task Completions:\\n'));\n \n const taskCompletions = await collection.get({\n where: {\n type: 'task_complete'\n },\n limit: 10\n });\n\n if (taskCompletions.ids.length > 0) {\n for (let i = 0; i < taskCompletions.ids.length; i++) {\n const metadata = taskCompletions.metadatas[i];\n const document = taskCompletions.documents[i];\n \n console.log(chalk.green(`Task ${i + 1}:`));\n console.log(` ID: ${taskCompletions.ids[i]}`);\n console.log(` Timestamp: ${metadata.timestamp}`);\n console.log(` Task ID: ${metadata.task_id}`);\n console.log(` Duration: ${metadata.duration}ms`);\n console.log(` Files Changed: ${metadata.files_changed}`);\n console.log(` Content: ${document?.substring(0, 100)}...`);\n console.log();\n }\n } else {\n console.log('No task completions found');\n }\n\n // Query 4: Get periodic saves\n console.log(chalk.cyan('\\n\u23F0 Periodic Checkpoints:\\n'));\n \n const periodicSaves = await collection.get({\n where: {\n type: 'periodic_save'\n },\n limit: 10\n });\n\n if (periodicSaves.ids.length > 0) {\n for (let i = 0; i < periodicSaves.ids.length; i++) {\n const metadata = periodicSaves.metadatas[i];\n const document = periodicSaves.documents[i];\n \n console.log(chalk.blue(`Checkpoint ${i + 1}:`));\n console.log(` Timestamp: ${metadata.timestamp}`);\n console.log(` Interval: ${metadata.interval}`);\n console.log(` Active Files: ${metadata.active_files}`);\n console.log(` Git Status: ${document?.substring(0, 150)}...`);\n console.log();\n }\n } else {\n console.log('No periodic saves found');\n }\n\n // Query 5: Get decisions\n console.log(chalk.cyan('\\n\uD83D\uDCA1 Decisions Made:\\n'));\n \n const decisions = await collection.get({\n where: {\n type: 'decision_made'\n },\n limit: 10\n });\n\n if (decisions.ids.length > 0) {\n for (let i = 0; i < decisions.ids.length; i++) {\n const metadata = decisions.metadatas[i];\n const document = decisions.documents[i];\n \n console.log(chalk.magenta(`Decision ${i + 1}:`));\n console.log(` Category: ${metadata.category}`);\n console.log(` Alternatives: ${metadata.alternatives}`);\n console.log(` Reasoning: ${metadata.reasoning}`);\n console.log(` Decision: ${document?.substring(0, 200)}...`);\n console.log();\n }\n } else {\n console.log('No decisions found');\n }\n\n // Query 6: Group by type\n console.log(chalk.cyan('\\n\uD83D\uDCC8 Context Types Summary:\\n'));\n \n const types = new Map();\n for (let i = 0; i < allDocs.ids.length; i++) {\n const type = allDocs.metadatas[i].type || 'unknown';\n types.set(type, (types.get(type) || 0) + 1);\n }\n\n for (const [type, count] of types.entries()) {\n console.log(` ${type}: ${count} documents`);\n }\n}\n\n// Run query\nqueryChromaDB().catch(console.error);"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["count"]
|
|
7
|
+
}
|