@stackmemoryai/stackmemory 0.8.1 → 1.0.0
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/LICENSE +64 -0
- package/README.md +15 -3
- package/dist/src/agents/core/agent-task-manager.js +0 -1
- package/dist/src/agents/verifiers/base-verifier.js +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.js +0 -1
- package/dist/src/agents/verifiers/llm-judge.js +0 -1
- package/dist/src/cli/auto-detect.js +0 -1
- package/dist/src/cli/claude-sm-danger.js +0 -1
- package/dist/src/cli/claude-sm.js +0 -1
- package/dist/src/cli/codex-sm-danger.js +0 -1
- package/dist/src/cli/codex-sm.js +0 -1
- package/dist/src/cli/commands/api.js +0 -1
- package/dist/src/cli/commands/auto-background.js +0 -1
- package/dist/src/cli/commands/cleanup-processes.js +0 -1
- package/dist/src/cli/commands/clear.js +0 -1
- package/dist/src/cli/commands/config.js +0 -1
- package/dist/src/cli/commands/context-rehydrate.js +0 -1
- package/dist/src/cli/commands/context.js +0 -1
- package/dist/src/cli/commands/daemon.js +0 -1
- package/dist/src/cli/commands/dashboard.js +4 -5
- package/dist/src/cli/commands/db.js +0 -1
- package/dist/src/cli/commands/decision.js +0 -1
- package/dist/src/cli/commands/discovery.js +0 -1
- package/dist/src/cli/commands/handoff.js +0 -1
- package/dist/src/cli/commands/hooks.js +0 -1
- package/dist/src/cli/commands/linear.js +0 -1
- package/dist/src/cli/commands/log.js +0 -1
- package/dist/src/cli/commands/login.js +0 -1
- package/dist/src/cli/commands/migrate.js +0 -1
- package/dist/src/cli/commands/model.js +0 -1
- package/dist/src/cli/commands/onboard.js +0 -1
- package/dist/src/cli/commands/ping.js +0 -1
- package/dist/src/cli/commands/projects.js +0 -1
- package/dist/src/cli/commands/ralph.js +0 -1
- package/dist/src/cli/commands/retrieval.js +0 -1
- package/dist/src/cli/commands/search.js +0 -1
- package/dist/src/cli/commands/service.js +0 -1
- package/dist/src/cli/commands/session.js +0 -1
- package/dist/src/cli/commands/setup.js +0 -4
- package/dist/src/cli/commands/shell.js +0 -1
- package/dist/src/cli/commands/signup.js +0 -1
- package/dist/src/cli/commands/skills.js +4 -3
- package/dist/src/cli/commands/storage-tier.js +0 -1
- package/dist/src/cli/commands/sweep.js +0 -1
- package/dist/src/cli/commands/tasks.js +0 -1
- package/dist/src/cli/commands/worktree.js +10 -5
- package/dist/src/cli/index.js +8 -5
- package/dist/src/cli/opencode-sm.js +0 -1
- package/dist/src/cli/utils/viewer.js +0 -1
- package/dist/src/core/config/config-manager.js +0 -1
- package/dist/src/core/config/feature-flags.js +0 -1
- package/dist/src/core/config/storage-config.js +0 -1
- package/dist/src/core/config/types.js +0 -1
- package/dist/src/core/context/auto-context.js +0 -1
- package/dist/src/core/context/dual-stack-manager.js +0 -1
- package/dist/src/core/context/enhanced-rehydration.js +0 -2
- package/dist/src/core/context/frame-database.js +60 -6
- package/dist/src/core/context/frame-digest.js +0 -1
- package/dist/src/core/context/frame-handoff-manager.js +0 -1
- package/dist/src/core/context/frame-lifecycle-hooks.js +0 -1
- package/dist/src/core/context/frame-recovery.js +0 -1
- package/dist/src/core/context/frame-stack.js +0 -1
- package/dist/src/core/context/frame-types.js +0 -1
- package/dist/src/core/context/index.js +0 -1
- package/dist/src/core/context/permission-manager.js +0 -1
- package/dist/src/core/context/recursive-context-manager.js +3 -2
- package/dist/src/core/context/refactored-frame-manager.js +0 -1
- package/dist/src/core/context/shared-context-layer.js +0 -1
- package/dist/src/core/context/stack-merge-resolver.js +0 -1
- package/dist/src/core/context/validation.js +0 -1
- package/dist/src/core/database/batch-operations.js +0 -1
- package/dist/src/core/database/connection-pool.js +0 -1
- package/dist/src/core/database/database-adapter.js +0 -1
- package/dist/src/core/database/embedding-provider-factory.js +0 -1
- package/dist/src/core/database/embedding-provider.js +0 -1
- package/dist/src/core/database/migration-manager.js +0 -1
- package/dist/src/core/database/ollama-embedding-provider.js +0 -1
- package/dist/src/core/database/openai-embedding-provider.js +0 -1
- package/dist/src/core/database/query-cache.js +0 -1
- package/dist/src/core/database/query-router.js +0 -1
- package/dist/src/core/database/sqlite-adapter.js +18 -108
- package/dist/src/core/database/transformers-embedding-provider.js +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -1
- package/dist/src/core/digest/frame-digest-integration.js +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.js +0 -1
- package/dist/src/core/digest/index.js +0 -1
- package/dist/src/core/digest/types.js +0 -1
- package/dist/src/core/errors/error-utils.js +0 -1
- package/dist/src/core/errors/index.js +0 -1
- package/dist/src/core/errors/recovery.js +0 -1
- package/dist/src/core/execution/parallel-executor.js +0 -1
- package/dist/src/core/extensions/custom-tools.js +0 -1
- package/dist/src/core/extensions/index.js +0 -1
- package/dist/src/core/extensions/loader.js +0 -1
- package/dist/src/core/extensions/plugin-system.js +0 -1
- package/dist/src/core/extensions/provider-adapter.js +0 -1
- package/dist/src/core/extensions/sandbox-runtime.js +0 -1
- package/dist/src/core/extensions/types.js +0 -1
- package/dist/src/core/frame/workflow-templates.js +0 -1
- package/dist/src/core/merge/conflict-detector.js +0 -1
- package/dist/src/core/merge/index.js +0 -1
- package/dist/src/core/merge/resolution-engine.js +0 -1
- package/dist/src/core/merge/stack-diff.js +0 -1
- package/dist/src/core/merge/types.js +0 -1
- package/dist/src/core/merge/unified-merge-resolver.js +0 -1
- package/dist/src/core/models/fallback-monitor.js +0 -1
- package/dist/src/core/models/model-router.js +0 -1
- package/dist/src/core/monitoring/error-handler.js +0 -1
- package/dist/src/core/monitoring/logger.js +0 -1
- package/dist/src/core/monitoring/metrics.js +0 -1
- package/dist/src/core/monitoring/progress-tracker.js +0 -1
- package/dist/src/core/monitoring/session-monitor.js +0 -1
- package/dist/src/core/performance/context-cache.js +0 -1
- package/dist/src/core/performance/index.js +0 -1
- package/dist/src/core/performance/lazy-context-loader.js +3 -8
- package/dist/src/core/performance/monitor.js +0 -1
- package/dist/src/core/performance/optimized-frame-context.js +0 -1
- package/dist/src/core/performance/performance-benchmark.js +0 -1
- package/dist/src/core/performance/performance-profiler.js +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.js +0 -1
- package/dist/src/core/persistence/postgres-adapter.js +0 -1
- package/dist/src/core/projects/project-isolation.js +0 -1
- package/dist/src/core/projects/project-manager.js +0 -1
- package/dist/src/core/query/query-parser.js +0 -1
- package/dist/src/core/query/query-templates.js +0 -1
- package/dist/src/core/retrieval/context-retriever.js +0 -1
- package/dist/src/core/retrieval/index.js +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +0 -1
- package/dist/src/core/retrieval/llm-provider.js +0 -1
- package/dist/src/core/retrieval/privacy-filter.js +0 -1
- package/dist/src/core/retrieval/retrieval-audit.js +0 -1
- package/dist/src/core/retrieval/summary-generator.js +15 -6
- package/dist/src/core/retrieval/types.js +0 -1
- package/dist/src/core/retrieval/unified-context-assembler.js +0 -1
- package/dist/src/core/security/index.js +0 -1
- package/dist/src/core/security/input-sanitizer.js +0 -1
- package/dist/src/core/session/clear-survival.js +0 -1
- package/dist/src/core/session/enhanced-handoff.js +0 -1
- package/dist/src/core/session/handoff-generator.js +0 -1
- package/dist/src/core/session/index.js +0 -1
- package/dist/src/core/session/session-manager.js +0 -1
- package/dist/src/core/skills/index.js +0 -1
- package/dist/src/core/skills/skill-storage.js +0 -1
- package/dist/src/core/skills/types.js +0 -1
- package/dist/src/core/storage/chromadb-adapter.js +0 -1
- package/dist/src/core/storage/infinite-storage.js +0 -1
- package/dist/src/core/storage/project-registry.js +0 -1
- package/dist/src/core/storage/remote-storage.js +4 -2
- package/dist/src/core/storage/storage-tier-manager.js +0 -1
- package/dist/src/core/storage/two-tier-storage.js +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.js +0 -1
- package/dist/src/core/trace/db-trace-wrapper.js +0 -1
- package/dist/src/core/trace/debug-trace.js +0 -1
- package/dist/src/core/trace/index.js +0 -1
- package/dist/src/core/trace/linear-api-wrapper.js +0 -1
- package/dist/src/core/trace/trace-detector.js +0 -1
- package/dist/src/core/trace/trace-store.js +4 -5
- package/dist/src/core/trace/types.js +0 -1
- package/dist/src/core/types.js +0 -1
- package/dist/src/core/utils/async-mutex.js +0 -1
- package/dist/src/core/utils/compression.js +0 -1
- package/dist/src/core/utils/update-checker.js +0 -1
- package/dist/src/core/worktree/worktree-manager.js +0 -1
- package/dist/src/daemon/daemon-config.js +0 -1
- package/dist/src/daemon/services/context-service.js +0 -1
- package/dist/src/daemon/services/linear-service.js +0 -1
- package/dist/src/daemon/services/maintenance-service.js +0 -1
- package/dist/src/daemon/services/memory-service.js +0 -1
- package/dist/src/daemon/session-daemon.js +0 -1
- package/dist/src/daemon/unified-daemon.js +0 -1
- package/dist/src/features/analytics/api/analytics-api.js +0 -1
- package/dist/src/features/analytics/core/analytics-service.js +1 -2
- package/dist/src/features/analytics/index.js +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +8 -9
- package/dist/src/features/analytics/types/metrics.js +0 -1
- package/dist/src/features/browser/browser-mcp.js +0 -1
- package/dist/src/features/sweep/index.js +0 -1
- package/dist/src/features/sweep/prediction-client.js +0 -1
- package/dist/src/features/sweep/prompt-builder.js +0 -1
- package/dist/src/features/sweep/pty-wrapper.js +0 -1
- package/dist/src/features/sweep/state-watcher.js +0 -1
- package/dist/src/features/sweep/status-bar.js +0 -1
- package/dist/src/features/sweep/sweep-server-manager.js +0 -1
- package/dist/src/features/sweep/tab-interceptor.js +0 -1
- package/dist/src/features/sweep/types.js +0 -1
- package/dist/src/features/tasks/linear-task-manager.js +0 -1
- package/dist/src/features/tasks/task-aware-context.js +0 -1
- package/dist/src/features/tui/simple-monitor.js +0 -1
- package/dist/src/features/tui/swarm-monitor.js +0 -1
- package/dist/src/features/web/client/stores/task-store.js +0 -1
- package/dist/src/features/web/server/index.js +0 -1
- package/dist/src/features/workers/tmux-manager.js +0 -1
- package/dist/src/features/workers/worker-registry.js +0 -1
- package/dist/src/hooks/auto-background.js +0 -1
- package/dist/src/hooks/config.js +0 -1
- package/dist/src/hooks/daemon.js +0 -1
- package/dist/src/hooks/diffmem-hooks.js +0 -1
- package/dist/src/hooks/events.js +0 -1
- package/dist/src/hooks/index.js +0 -1
- package/dist/src/hooks/linear-task-picker.js +0 -1
- package/dist/src/hooks/schemas.js +0 -1
- package/dist/src/hooks/secure-fs.js +0 -1
- package/dist/src/hooks/security-logger.js +0 -1
- package/dist/src/hooks/session-summary.js +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/integrations/anthropic/client.js +0 -1
- package/dist/src/integrations/claude-code/agent-bridge.js +0 -1
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -1
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +0 -1
- package/dist/src/integrations/claude-code/post-task-hooks.js +0 -1
- package/dist/src/integrations/claude-code/subagent-client-stub.js +0 -1
- package/dist/src/integrations/claude-code/subagent-client.js +0 -1
- package/dist/src/integrations/claude-code/task-coordinator.js +0 -1
- package/dist/src/integrations/diffmem/client.js +0 -1
- package/dist/src/integrations/diffmem/config.js +0 -1
- package/dist/src/integrations/diffmem/index.js +0 -1
- package/dist/src/integrations/diffmem/types.js +0 -1
- package/dist/src/integrations/linear/auth.js +0 -1
- package/dist/src/integrations/linear/auto-sync.js +0 -1
- package/dist/src/integrations/linear/client.js +0 -1
- package/dist/src/integrations/linear/config.js +0 -1
- package/dist/src/integrations/linear/migration.js +0 -1
- package/dist/src/integrations/linear/oauth-server.js +0 -1
- package/dist/src/integrations/linear/rest-client.js +0 -1
- package/dist/src/integrations/linear/sync-manager.js +0 -1
- package/dist/src/integrations/linear/sync-service.js +0 -1
- package/dist/src/integrations/linear/sync.js +0 -1
- package/dist/src/integrations/linear/types.js +0 -1
- package/dist/src/integrations/linear/unified-sync.js +0 -1
- package/dist/src/integrations/linear/webhook-handler.js +0 -1
- package/dist/src/integrations/linear/webhook-server.js +0 -1
- package/dist/src/integrations/linear/webhook.js +0 -1
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.js +43 -30
- package/dist/src/integrations/mcp/handlers/diffmem-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/index.js +1 -3
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +24 -61
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -1
- package/dist/src/integrations/mcp/index.js +0 -1
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +3 -2
- package/dist/src/integrations/mcp/pending-utils.js +0 -1
- package/dist/src/integrations/mcp/refactored-server.js +0 -1
- package/dist/src/integrations/mcp/remote-server.js +0 -1
- package/dist/src/integrations/mcp/schemas.js +0 -1
- package/dist/src/integrations/mcp/server.js +20 -24
- package/dist/src/integrations/mcp/tool-definitions-code.js +0 -1
- package/dist/src/integrations/mcp/tool-definitions.js +0 -1
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -1
- package/dist/src/integrations/ralph/context/context-budget-manager.js +0 -1
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +0 -1
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +0 -1
- package/dist/src/integrations/ralph/index.js +0 -1
- package/dist/src/integrations/ralph/learning/pattern-learner.js +0 -1
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +5 -5
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +0 -1
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +0 -1
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -1
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -1
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +0 -1
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +0 -1
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +0 -1
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +0 -1
- package/dist/src/integrations/ralph/state/state-reconciler.js +25 -9
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +0 -1
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +0 -1
- package/dist/src/integrations/ralph/types.js +0 -1
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.js +0 -1
- package/dist/src/middleware/exponential-rate-limiter.js +0 -1
- package/dist/src/models/user.model.js +0 -1
- package/dist/src/orchestrators/multimodal/constants.js +0 -1
- package/dist/src/orchestrators/multimodal/harness.js +0 -1
- package/dist/src/orchestrators/multimodal/providers.js +0 -1
- package/dist/src/orchestrators/multimodal/types.js +0 -1
- package/dist/src/orchestrators/multimodal/utils.js +0 -1
- package/dist/src/servers/production/auth-middleware.js +0 -1
- package/dist/src/services/config-service.js +0 -1
- package/dist/src/services/context-service.js +0 -1
- package/dist/src/skills/api-discovery.js +0 -1
- package/dist/src/skills/api-skill.js +0 -1
- package/dist/src/skills/claude-skills.js +0 -1
- package/dist/src/skills/dashboard-launcher.js +0 -1
- package/dist/src/skills/linear-task-runner.js +0 -1
- package/dist/src/skills/recursive-agent-orchestrator.js +0 -1
- package/dist/src/skills/repo-ingestion-skill.js +0 -1
- package/dist/src/skills/spec-generator-skill.js +0 -1
- package/dist/src/skills/unified-rlm-orchestrator.js +0 -1
- package/dist/src/types/task.js +0 -1
- package/dist/src/utils/env.js +0 -1
- package/dist/src/utils/formatting.js +0 -1
- package/dist/src/utils/process-cleanup.js +0 -1
- package/package.json +32 -7
- package/dist/scripts/benchmark-performance.js +0 -48
- package/dist/scripts/benchmark-performance.js.map +0 -7
- package/dist/scripts/check-redis.js +0 -42
- package/dist/scripts/check-redis.js.map +0 -7
- package/dist/scripts/initialize.js +0 -183
- package/dist/scripts/initialize.js.map +0 -7
- package/dist/scripts/list-linear-tasks.js +0 -124
- package/dist/scripts/list-linear-tasks.js.map +0 -7
- package/dist/scripts/measure-handoff-impact.js +0 -340
- package/dist/scripts/measure-handoff-impact.js.map +0 -7
- package/dist/scripts/query-chromadb.js +0 -160
- package/dist/scripts/query-chromadb.js.map +0 -7
- package/dist/scripts/show-linear-summary.js +0 -119
- package/dist/scripts/show-linear-summary.js.map +0 -7
- package/dist/scripts/simple-swarm-demo.js +0 -90
- package/dist/scripts/simple-swarm-demo.js.map +0 -7
- package/dist/scripts/status.js +0 -155
- package/dist/scripts/status.js.map +0 -7
- package/dist/scripts/test-chromadb-sync.js +0 -192
- package/dist/scripts/test-chromadb-sync.js.map +0 -7
- package/dist/scripts/test-ralph-iteration-fix.js +0 -86
- package/dist/scripts/test-ralph-iteration-fix.js.map +0 -7
- package/dist/scripts/test-ralph-iterations.js +0 -121
- package/dist/scripts/test-ralph-iterations.js.map +0 -7
- package/dist/scripts/test-redis-storage.js +0 -389
- package/dist/scripts/test-redis-storage.js.map +0 -7
- package/dist/scripts/test-simple-ralph-state-sync.js +0 -115
- package/dist/scripts/test-simple-ralph-state-sync.js.map +0 -7
- package/dist/scripts/test-swarm-fixes.js +0 -125
- package/dist/scripts/test-swarm-fixes.js.map +0 -7
- package/dist/scripts/test-swarm-tui.js +0 -23
- package/dist/scripts/test-swarm-tui.js.map +0 -7
- package/dist/scripts/test-tui-shortcuts.js +0 -52
- package/dist/scripts/test-tui-shortcuts.js.map +0 -7
- package/dist/scripts/validate-tui-shortcuts.js +0 -60
- package/dist/scripts/validate-tui-shortcuts.js.map +0 -7
- package/dist/src/agents/core/agent-task-manager.js.map +0 -7
- package/dist/src/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/src/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/src/cli/auto-detect.js.map +0 -7
- package/dist/src/cli/claude-sm-danger.js.map +0 -7
- package/dist/src/cli/claude-sm.js.map +0 -7
- package/dist/src/cli/codex-sm-danger.js.map +0 -7
- package/dist/src/cli/codex-sm.js.map +0 -7
- package/dist/src/cli/commands/api.js.map +0 -7
- package/dist/src/cli/commands/auto-background.js.map +0 -7
- package/dist/src/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/src/cli/commands/clear.js.map +0 -7
- package/dist/src/cli/commands/config.js.map +0 -7
- package/dist/src/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/src/cli/commands/context.js.map +0 -7
- package/dist/src/cli/commands/daemon.js.map +0 -7
- package/dist/src/cli/commands/dashboard.js.map +0 -7
- package/dist/src/cli/commands/db.js.map +0 -7
- package/dist/src/cli/commands/decision.js.map +0 -7
- package/dist/src/cli/commands/discovery.js.map +0 -7
- package/dist/src/cli/commands/handoff.js.map +0 -7
- package/dist/src/cli/commands/hooks.js.map +0 -7
- package/dist/src/cli/commands/linear.js.map +0 -7
- package/dist/src/cli/commands/log.js.map +0 -7
- package/dist/src/cli/commands/login.js.map +0 -7
- package/dist/src/cli/commands/migrate.js.map +0 -7
- package/dist/src/cli/commands/model.js.map +0 -7
- package/dist/src/cli/commands/onboard.js.map +0 -7
- package/dist/src/cli/commands/ping.js.map +0 -7
- package/dist/src/cli/commands/projects.js.map +0 -7
- package/dist/src/cli/commands/ralph.js.map +0 -7
- package/dist/src/cli/commands/retrieval.js.map +0 -7
- package/dist/src/cli/commands/search.js.map +0 -7
- package/dist/src/cli/commands/service.js.map +0 -7
- package/dist/src/cli/commands/session.js.map +0 -7
- package/dist/src/cli/commands/settings.js +0 -306
- package/dist/src/cli/commands/settings.js.map +0 -7
- package/dist/src/cli/commands/setup.js.map +0 -7
- package/dist/src/cli/commands/shell.js.map +0 -7
- package/dist/src/cli/commands/signup.js.map +0 -7
- package/dist/src/cli/commands/skills.js.map +0 -7
- package/dist/src/cli/commands/sms-notify.js +0 -795
- package/dist/src/cli/commands/sms-notify.js.map +0 -7
- package/dist/src/cli/commands/storage-tier.js.map +0 -7
- package/dist/src/cli/commands/sweep.js.map +0 -7
- package/dist/src/cli/commands/tasks.js.map +0 -7
- package/dist/src/cli/commands/worktree.js.map +0 -7
- package/dist/src/cli/index.js.map +0 -7
- package/dist/src/cli/opencode-sm.js.map +0 -7
- package/dist/src/cli/utils/viewer.js.map +0 -7
- package/dist/src/core/config/config-manager.js.map +0 -7
- package/dist/src/core/config/feature-flags.js.map +0 -7
- package/dist/src/core/config/storage-config.js.map +0 -7
- package/dist/src/core/config/types.js.map +0 -7
- package/dist/src/core/context/auto-context.js.map +0 -7
- package/dist/src/core/context/dual-stack-manager.js.map +0 -7
- package/dist/src/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/src/core/context/frame-database.js.map +0 -7
- package/dist/src/core/context/frame-digest.js.map +0 -7
- package/dist/src/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +0 -7
- package/dist/src/core/context/frame-recovery.js.map +0 -7
- package/dist/src/core/context/frame-stack.js.map +0 -7
- package/dist/src/core/context/frame-types.js.map +0 -7
- package/dist/src/core/context/index.js.map +0 -7
- package/dist/src/core/context/permission-manager.js.map +0 -7
- package/dist/src/core/context/recursive-context-manager.js.map +0 -7
- package/dist/src/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/src/core/context/shared-context-layer.js.map +0 -7
- package/dist/src/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/src/core/context/validation.js.map +0 -7
- package/dist/src/core/database/batch-operations.js.map +0 -7
- package/dist/src/core/database/connection-pool.js.map +0 -7
- package/dist/src/core/database/database-adapter.js.map +0 -7
- package/dist/src/core/database/embedding-provider-factory.js.map +0 -7
- package/dist/src/core/database/embedding-provider.js.map +0 -7
- package/dist/src/core/database/migration-manager.js.map +0 -7
- package/dist/src/core/database/ollama-embedding-provider.js.map +0 -7
- package/dist/src/core/database/openai-embedding-provider.js.map +0 -7
- package/dist/src/core/database/query-cache.js.map +0 -7
- package/dist/src/core/database/query-router.js.map +0 -7
- package/dist/src/core/database/sqlite-adapter.js.map +0 -7
- package/dist/src/core/database/transformers-embedding-provider.js.map +0 -7
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/src/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/src/core/digest/index.js.map +0 -7
- package/dist/src/core/digest/types.js.map +0 -7
- package/dist/src/core/errors/error-utils.js.map +0 -7
- package/dist/src/core/errors/index.js.map +0 -7
- package/dist/src/core/errors/recovery.js.map +0 -7
- package/dist/src/core/execution/parallel-executor.js.map +0 -7
- package/dist/src/core/extensions/custom-tools.js.map +0 -7
- package/dist/src/core/extensions/index.js.map +0 -7
- package/dist/src/core/extensions/loader.js.map +0 -7
- package/dist/src/core/extensions/plugin-system.js.map +0 -7
- package/dist/src/core/extensions/provider-adapter.js.map +0 -7
- package/dist/src/core/extensions/sandbox-runtime.js.map +0 -7
- package/dist/src/core/extensions/types.js.map +0 -7
- package/dist/src/core/frame/workflow-templates.js.map +0 -7
- package/dist/src/core/merge/conflict-detector.js.map +0 -7
- package/dist/src/core/merge/index.js.map +0 -7
- package/dist/src/core/merge/resolution-engine.js.map +0 -7
- package/dist/src/core/merge/stack-diff.js.map +0 -7
- package/dist/src/core/merge/types.js.map +0 -7
- package/dist/src/core/merge/unified-merge-resolver.js.map +0 -7
- package/dist/src/core/models/fallback-monitor.js.map +0 -7
- package/dist/src/core/models/model-router.js.map +0 -7
- package/dist/src/core/monitoring/error-handler.js.map +0 -7
- package/dist/src/core/monitoring/logger.js.map +0 -7
- package/dist/src/core/monitoring/metrics.js.map +0 -7
- package/dist/src/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/src/core/monitoring/session-monitor.js.map +0 -7
- package/dist/src/core/performance/context-cache.js.map +0 -7
- package/dist/src/core/performance/index.js.map +0 -7
- package/dist/src/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/src/core/performance/monitor.js.map +0 -7
- package/dist/src/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/src/core/performance/performance-benchmark.js.map +0 -7
- package/dist/src/core/performance/performance-profiler.js.map +0 -7
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/src/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/src/core/projects/project-isolation.js.map +0 -7
- package/dist/src/core/projects/project-manager.js.map +0 -7
- package/dist/src/core/query/query-parser.js.map +0 -7
- package/dist/src/core/query/query-templates.js.map +0 -7
- package/dist/src/core/retrieval/context-retriever.js.map +0 -7
- package/dist/src/core/retrieval/index.js.map +0 -7
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/src/core/retrieval/llm-provider.js.map +0 -7
- package/dist/src/core/retrieval/privacy-filter.js.map +0 -7
- package/dist/src/core/retrieval/retrieval-audit.js.map +0 -7
- package/dist/src/core/retrieval/summary-generator.js.map +0 -7
- package/dist/src/core/retrieval/types.js.map +0 -7
- package/dist/src/core/retrieval/unified-context-assembler.js.map +0 -7
- package/dist/src/core/security/index.js.map +0 -7
- package/dist/src/core/security/input-sanitizer.js.map +0 -7
- package/dist/src/core/session/clear-survival.js.map +0 -7
- package/dist/src/core/session/enhanced-handoff.js.map +0 -7
- package/dist/src/core/session/handoff-generator.js.map +0 -7
- package/dist/src/core/session/index.js.map +0 -7
- package/dist/src/core/session/session-manager.js.map +0 -7
- package/dist/src/core/skills/index.js.map +0 -7
- package/dist/src/core/skills/skill-storage.js.map +0 -7
- package/dist/src/core/skills/types.js.map +0 -7
- package/dist/src/core/storage/chromadb-adapter.js.map +0 -7
- package/dist/src/core/storage/infinite-storage.js.map +0 -7
- package/dist/src/core/storage/project-registry.js.map +0 -7
- package/dist/src/core/storage/remote-storage.js.map +0 -7
- package/dist/src/core/storage/storage-tier-manager.js.map +0 -7
- package/dist/src/core/storage/two-tier-storage.js.map +0 -7
- package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/src/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/src/core/trace/debug-trace.js.map +0 -7
- package/dist/src/core/trace/index.js.map +0 -7
- package/dist/src/core/trace/linear-api-wrapper.js.map +0 -7
- package/dist/src/core/trace/trace-detector.js.map +0 -7
- package/dist/src/core/trace/trace-store.js.map +0 -7
- package/dist/src/core/trace/types.js.map +0 -7
- package/dist/src/core/types.js.map +0 -7
- package/dist/src/core/utils/async-mutex.js.map +0 -7
- package/dist/src/core/utils/compression.js.map +0 -7
- package/dist/src/core/utils/update-checker.js.map +0 -7
- package/dist/src/core/worktree/worktree-manager.js.map +0 -7
- package/dist/src/daemon/daemon-config.js.map +0 -7
- package/dist/src/daemon/services/context-service.js.map +0 -7
- package/dist/src/daemon/services/linear-service.js.map +0 -7
- package/dist/src/daemon/services/maintenance-service.js.map +0 -7
- package/dist/src/daemon/services/memory-service.js.map +0 -7
- package/dist/src/daemon/session-daemon.js.map +0 -7
- package/dist/src/daemon/unified-daemon.js.map +0 -7
- package/dist/src/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/src/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/src/features/analytics/index.js.map +0 -7
- package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/src/features/analytics/types/metrics.js.map +0 -7
- package/dist/src/features/browser/browser-mcp.js.map +0 -7
- package/dist/src/features/sweep/index.js.map +0 -7
- package/dist/src/features/sweep/prediction-client.js.map +0 -7
- package/dist/src/features/sweep/prompt-builder.js.map +0 -7
- package/dist/src/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/src/features/sweep/state-watcher.js.map +0 -7
- package/dist/src/features/sweep/status-bar.js.map +0 -7
- package/dist/src/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/src/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/src/features/sweep/types.js.map +0 -7
- package/dist/src/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/src/features/tasks/task-aware-context.js.map +0 -7
- package/dist/src/features/tui/simple-monitor.js.map +0 -7
- package/dist/src/features/tui/swarm-monitor.js.map +0 -7
- package/dist/src/features/web/client/stores/task-store.js.map +0 -7
- package/dist/src/features/web/server/index.js.map +0 -7
- package/dist/src/features/workers/tmux-manager.js.map +0 -7
- package/dist/src/features/workers/worker-registry.js.map +0 -7
- package/dist/src/hooks/auto-background.js.map +0 -7
- package/dist/src/hooks/claude-code-whatsapp-hook.js +0 -197
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/src/hooks/config.js.map +0 -7
- package/dist/src/hooks/daemon.js.map +0 -7
- package/dist/src/hooks/diffmem-hooks.js.map +0 -7
- package/dist/src/hooks/events.js.map +0 -7
- package/dist/src/hooks/index.js.map +0 -7
- package/dist/src/hooks/linear-task-picker.js.map +0 -7
- package/dist/src/hooks/schemas.js.map +0 -7
- package/dist/src/hooks/secure-fs.js.map +0 -7
- package/dist/src/hooks/security-logger.js.map +0 -7
- package/dist/src/hooks/session-summary.js.map +0 -7
- package/dist/src/hooks/sms-action-runner.js +0 -371
- package/dist/src/hooks/sms-action-runner.js.map +0 -7
- package/dist/src/hooks/sms-notify.js +0 -506
- package/dist/src/hooks/sms-notify.js.map +0 -7
- package/dist/src/hooks/sms-watcher.js +0 -93
- package/dist/src/hooks/sms-watcher.js.map +0 -7
- package/dist/src/hooks/sms-webhook.js +0 -555
- package/dist/src/hooks/sms-webhook.js.map +0 -7
- package/dist/src/hooks/whatsapp-commands.js +0 -479
- package/dist/src/hooks/whatsapp-commands.js.map +0 -7
- package/dist/src/hooks/whatsapp-scheduler.js +0 -317
- package/dist/src/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/src/hooks/whatsapp-sync.js +0 -409
- package/dist/src/hooks/whatsapp-sync.js.map +0 -7
- package/dist/src/index.js.map +0 -7
- package/dist/src/integrations/anthropic/client.js.map +0 -7
- package/dist/src/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/src/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/src/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/src/integrations/diffmem/client.js.map +0 -7
- package/dist/src/integrations/diffmem/config.js.map +0 -7
- package/dist/src/integrations/diffmem/index.js.map +0 -7
- package/dist/src/integrations/diffmem/types.js.map +0 -7
- package/dist/src/integrations/linear/auth.js.map +0 -7
- package/dist/src/integrations/linear/auto-sync.js.map +0 -7
- package/dist/src/integrations/linear/client.js.map +0 -7
- package/dist/src/integrations/linear/config.js.map +0 -7
- package/dist/src/integrations/linear/migration.js.map +0 -7
- package/dist/src/integrations/linear/oauth-server.js.map +0 -7
- package/dist/src/integrations/linear/rest-client.js.map +0 -7
- package/dist/src/integrations/linear/sync-manager.js.map +0 -7
- package/dist/src/integrations/linear/sync-service.js.map +0 -7
- package/dist/src/integrations/linear/sync.js.map +0 -7
- package/dist/src/integrations/linear/types.js.map +0 -7
- package/dist/src/integrations/linear/unified-sync.js.map +0 -7
- package/dist/src/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/src/integrations/linear/webhook-server.js.map +0 -7
- package/dist/src/integrations/linear/webhook.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/diffmem-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/index.js.map +0 -7
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/src/integrations/mcp/pending-utils.js.map +0 -7
- package/dist/src/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/src/integrations/mcp/remote-server.js.map +0 -7
- package/dist/src/integrations/mcp/schemas.js.map +0 -7
- package/dist/src/integrations/mcp/server.js.map +0 -7
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/src/integrations/mcp/tool-definitions.js.map +0 -7
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/src/integrations/ralph/index.js.map +0 -7
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +0 -7
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/src/integrations/ralph/types.js.map +0 -7
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/src/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/src/models/user.model.js.map +0 -7
- package/dist/src/orchestrators/multimodal/constants.js.map +0 -7
- package/dist/src/orchestrators/multimodal/harness.js.map +0 -7
- package/dist/src/orchestrators/multimodal/providers.js.map +0 -7
- package/dist/src/orchestrators/multimodal/types.js.map +0 -7
- package/dist/src/orchestrators/multimodal/utils.js.map +0 -7
- package/dist/src/servers/production/auth-middleware.js.map +0 -7
- package/dist/src/services/config-service.js.map +0 -7
- package/dist/src/services/context-service.js.map +0 -7
- package/dist/src/skills/api-discovery.js.map +0 -7
- package/dist/src/skills/api-skill.js.map +0 -7
- package/dist/src/skills/claude-skills.js.map +0 -7
- package/dist/src/skills/dashboard-launcher.js.map +0 -7
- package/dist/src/skills/linear-task-runner.js.map +0 -7
- package/dist/src/skills/recursive-agent-orchestrator.js.map +0 -7
- package/dist/src/skills/repo-ingestion-skill.js.map +0 -7
- package/dist/src/skills/spec-generator-skill.js.map +0 -7
- package/dist/src/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/src/types/task.js.map +0 -7
- package/dist/src/utils/env.js.map +0 -7
- package/dist/src/utils/formatting.js.map +0 -7
- package/dist/src/utils/process-cleanup.js.map +0 -7
- package/scripts/README-TESTING.md +0 -186
- package/scripts/analyze-cli-security.js +0 -288
- package/scripts/archive/add-phase-tasks-to-linear.js +0 -163
- package/scripts/archive/analyze-linear-duplicates.js +0 -214
- package/scripts/archive/analyze-remaining-duplicates.js +0 -230
- package/scripts/archive/analyze-sta-duplicates.js +0 -292
- package/scripts/archive/analyze-sta-graphql.js +0 -399
- package/scripts/archive/cancel-duplicate-tasks.ts +0 -246
- package/scripts/archive/check-all-duplicates.ts +0 -419
- package/scripts/archive/clean-duplicate-tasks.js +0 -114
- package/scripts/archive/cleanup-duplicate-tasks.ts +0 -286
- package/scripts/archive/create-phase-tasks.js +0 -387
- package/scripts/archive/delete-linear-duplicates.js +0 -182
- package/scripts/archive/delete-remaining-duplicates.js +0 -158
- package/scripts/archive/delete-sta-duplicates.js +0 -201
- package/scripts/archive/delete-sta-oauth.js +0 -201
- package/scripts/archive/export-sta-tasks.js +0 -62
- package/scripts/archive/install-auto-sync.js +0 -266
- package/scripts/archive/install-chromadb-hooks.sh +0 -133
- package/scripts/archive/install-enhanced-clear-hooks.sh +0 -431
- package/scripts/archive/install-post-task-hooks.sh +0 -289
- package/scripts/archive/install-stackmemory-hooks.sh +0 -420
- package/scripts/archive/merge-linear-duplicates-safe.ts +0 -362
- package/scripts/archive/merge-linear-duplicates.ts +0 -182
- package/scripts/archive/remove-sta-tasks.js +0 -70
- package/scripts/archive/setup-background-sync.sh +0 -168
- package/scripts/archive/setup-claude-auto-triggers.sh +0 -181
- package/scripts/archive/setup-claude-autostart.sh +0 -305
- package/scripts/archive/setup-git-hooks.sh +0 -25
- package/scripts/archive/setup-linear-oauth.sh +0 -46
- package/scripts/archive/setup-mcp.sh +0 -113
- package/scripts/archive/setup-railway-deployment.sh +0 -81
- package/scripts/auto-handoff.sh +0 -262
- package/scripts/background-sync-manager.js +0 -478
- package/scripts/benchmark-performance.ts +0 -57
- package/scripts/check-redis.ts +0 -48
- package/scripts/chromadb-auto-loader.sh +0 -128
- package/scripts/chromadb-context-loader.js +0 -479
- package/scripts/claude-chromadb-hook.js +0 -460
- package/scripts/claude-linear-skill.js +0 -455
- package/scripts/claude-pre-commit.sh +0 -302
- package/scripts/claude-sm-autostart.js +0 -579
- package/scripts/claude-with-chromadb.sh +0 -69
- package/scripts/clean-linear-backlog.js +0 -273
- package/scripts/cleanup-old-sessions.sh +0 -57
- package/scripts/create-cleanup-issues.js +0 -302
- package/scripts/create-sandbox.sh +0 -269
- package/scripts/debug-linear-update.js +0 -174
- package/scripts/delete-linear-tasks.js +0 -167
- package/scripts/demos/browser-test.ts +0 -39
- package/scripts/demos/ralph-integration-demo.ts +0 -245
- package/scripts/demos/trace-demo.ts +0 -200
- package/scripts/demos/trace-detector.demo.ts +0 -171
- package/scripts/demos/trace-test.ts +0 -79
- package/scripts/deploy-ralph-swarm.sh +0 -365
- package/scripts/deploy.sh +0 -89
- package/scripts/deployment/test-deployment.js +0 -194
- package/scripts/detect-and-rehydrate.js +0 -162
- package/scripts/detect-and-rehydrate.mjs +0 -165
- package/scripts/development/create-demo-tasks.js +0 -143
- package/scripts/development/debug-frame-test.js +0 -16
- package/scripts/development/demo-auto-sync.js +0 -128
- package/scripts/development/fix-all-imports.js +0 -213
- package/scripts/development/fix-imports.js +0 -229
- package/scripts/development/fix-lint-loop.cjs +0 -103
- package/scripts/development/fix-project-id.ts +0 -161
- package/scripts/development/fix-strict-mode-issues.ts +0 -291
- package/scripts/development/reorganize-structure.sh +0 -228
- package/scripts/development/test-persistence-direct.js +0 -148
- package/scripts/development/test-persistence.js +0 -114
- package/scripts/development/test-tasks.js +0 -93
- package/scripts/development/update-imports.js +0 -212
- package/scripts/fetch-linear-status.js +0 -125
- package/scripts/initialize.ts +0 -220
- package/scripts/linear-auto-sync.js +0 -262
- package/scripts/linear-auto-sync.sh +0 -161
- package/scripts/linear-sync-daemon.js +0 -150
- package/scripts/linear-task-review.js +0 -237
- package/scripts/list-linear-tasks.ts +0 -178
- package/scripts/mcp-proxy.js +0 -66
- package/scripts/measure-handoff-impact.mjs +0 -395
- package/scripts/measure-handoff-impact.ts +0 -450
- package/scripts/publish-local.js +0 -74
- package/scripts/query-chromadb.ts +0 -201
- package/scripts/ralph-integration-test.js +0 -274
- package/scripts/reconcile-local-tasks.js +0 -170
- package/scripts/recreate-frames-db.js +0 -89
- package/scripts/show-linear-summary.ts +0 -172
- package/scripts/simple-swarm-demo.ts +0 -114
- package/scripts/stackmemory-auto-handoff.sh +0 -231
- package/scripts/start-linear-sync-daemon.sh +0 -141
- package/scripts/start-temporal-paradox.sh +0 -214
- package/scripts/status.ts +0 -224
- package/scripts/stop-notify-webhook.sh +0 -19
- package/scripts/swarm-monitor.js +0 -509
- package/scripts/sync-and-clean-tasks.js +0 -258
- package/scripts/sync-linear-graphql.js +0 -303
- package/scripts/sync-linear-tasks.js +0 -186
- package/scripts/test-auto-triggers.sh +0 -57
- package/scripts/test-browser-mcp.js +0 -74
- package/scripts/test-chromadb-full.js +0 -115
- package/scripts/test-chromadb-hooks.sh +0 -28
- package/scripts/test-chromadb-sync.ts +0 -245
- package/scripts/test-claude-config.sh +0 -123
- package/scripts/test-cli-security.js +0 -293
- package/scripts/test-code-execution.js +0 -143
- package/scripts/test-hooks-persistence.sh +0 -220
- package/scripts/test-installation-scenarios.sh +0 -359
- package/scripts/test-installation.sh +0 -224
- package/scripts/test-mcp.js +0 -163
- package/scripts/test-parallel-swarms.js +0 -443
- package/scripts/test-pre-publish-quick.sh +0 -69
- package/scripts/test-quality-gates.sh +0 -263
- package/scripts/test-ralph-iteration-fix.ts +0 -118
- package/scripts/test-ralph-iterations.ts +0 -164
- package/scripts/test-redis-storage.ts +0 -490
- package/scripts/test-rlm-basic.sh +0 -122
- package/scripts/test-rlm-comprehensive.sh +0 -260
- package/scripts/test-rlm-e2e.sh +0 -268
- package/scripts/test-rlm-simple.js +0 -90
- package/scripts/test-rlm.js +0 -110
- package/scripts/test-session-handoff.sh +0 -165
- package/scripts/test-setup-e2e.sh +0 -154
- package/scripts/test-shell-integration.sh +0 -275
- package/scripts/test-simple-ralph-state-sync.ts +0 -178
- package/scripts/test-swarm-fixes.ts +0 -161
- package/scripts/test-swarm-git-workflow.js +0 -338
- package/scripts/test-swarm-tui.ts +0 -34
- package/scripts/test-tui-shortcuts.ts +0 -66
- package/scripts/testing/ab-test-runner.ts +0 -510
- package/scripts/testing/collect-metrics.ts +0 -457
- package/scripts/testing/quick-effectiveness-demo.js +0 -187
- package/scripts/testing/ralph-cli-test.js +0 -88
- package/scripts/testing/ralph-integration-validation.js +0 -727
- package/scripts/testing/ralph-swarm-test-scenarios.js +0 -613
- package/scripts/testing/real-performance-test.js +0 -422
- package/scripts/testing/results/real-performance-results.json +0 -90
- package/scripts/testing/run-effectiveness-tests.sh +0 -176
- package/scripts/testing/simple-effectiveness-test.js +0 -310
- package/scripts/testing/test-tier-migration.js +0 -100
- package/scripts/update-linear-status.js +0 -268
- package/scripts/update-linear-tasks-fixed.js +0 -284
- package/scripts/validate-claude-config.sh +0 -155
- package/scripts/validate-swarm-implementation.js +0 -467
- package/scripts/validate-tui-shortcuts.ts +0 -83
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/agents/verifiers/base-verifier.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Base Verifier Interface - Spotify-inspired verification infrastructure\n *\n * Implements the strong verification loop pattern from Spotify's approach:\n * - Component-aware activation\n * - Incremental feedback\n * - Abstract complexity from agents\n */\n\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport type VerifierSeverity = 'error' | 'warning' | 'info';\nexport type VerifierType =\n | 'syntax'\n | 'semantic'\n | 'performance'\n | 'security'\n | 'style';\n\nexport interface VerifierContext {\n filePath?: string;\n language?: string;\n framework?: string;\n hasTests?: boolean;\n hasDocumentation?: boolean;\n isProduction?: boolean;\n customRules?: Record<string, any>;\n}\n\nexport interface VerifierResult {\n verifierId: string;\n verifierType: VerifierType;\n passed: boolean;\n message: string;\n severity: VerifierSeverity;\n timestamp: Date;\n details?: VerifierDetails;\n autoFix?: VerifierAutoFix;\n confidence?: number; // 0-1, for probabilistic verifiers like LLM judge\n}\n\nexport interface VerifierDetails {\n location?: {\n file?: string;\n line?: number;\n column?: number;\n };\n code?: string;\n expected?: string;\n actual?: string;\n suggestion?: string;\n relatedLinks?: string[];\n}\n\nexport interface VerifierAutoFix {\n command: string;\n description: string;\n safe: boolean; // Whether fix can be applied automatically\n confidence: number; // 0-1\n}\n\nexport interface VerifierConfig {\n id: string;\n name: string;\n type: VerifierType;\n enabled: boolean;\n stopOnError: boolean; // Spotify's stop hook pattern\n maxRetries?: number;\n timeout?: number; // milliseconds\n customConfig?: Record<string, any>;\n}\n\n/**\n * Abstract base class for all verifiers\n */\nexport abstract class BaseVerifier {\n protected config: VerifierConfig;\n protected retryCount: Map<string, number> = new Map();\n\n constructor(config: VerifierConfig) {\n this.config = config;\n }\n\n /**\n * Check if verifier should be activated for given context\n * Implements Spotify's context-aware activation\n */\n abstract shouldActivate(context: VerifierContext): boolean;\n\n /**\n * Run verification on the given input\n */\n abstract verify(\n input: string | Buffer,\n context: VerifierContext\n ): Promise<VerifierResult>;\n\n /**\n * Extract most relevant error messages (Spotify pattern)\n */\n protected extractRelevantErrors(\n output: string,\n patterns: RegExp[]\n ): string[] {\n const errors: string[] = [];\n const lines = output.split('\\n');\n\n for (const line of lines) {\n for (const pattern of patterns) {\n const match = line.match(pattern);\n if (match) {\n errors.push(match[0]);\n break;\n }\n }\n }\n\n // Limit to most relevant errors (Spotify's approach)\n return errors.slice(0, 5);\n }\n\n /**\n * Generate incremental feedback\n */\n protected generateFeedback(\n errors: string[],\n context: VerifierContext\n ): string {\n if (errors.length === 0) {\n return `${this.config.name} verification passed`;\n }\n\n const prefix = context.filePath ? `In ${context.filePath}: ` : '';\n const errorList = errors.map((e) => ` - ${e}`).join('\\n');\n\n return `${prefix}${this.config.name} found ${errors.length} issue(s):\\n${errorList}`;\n }\n\n /**\n * Retry logic for transient failures\n */\n protected async withRetry<T>(\n operation: () => Promise<T>,\n key: string\n ): Promise<T> {\n const maxRetries = this.config.maxRetries || 0;\n const currentRetries = this.retryCount.get(key) || 0;\n\n try {\n const result = await operation();\n this.retryCount.delete(key); // Clear on success\n return result;\n } catch (error: unknown) {\n if (currentRetries < maxRetries) {\n this.retryCount.set(key, currentRetries + 1);\n logger.warn(`Retrying ${this.config.name} verification`, {\n attempt: currentRetries + 1,\n maxRetries,\n error: error instanceof Error ? error.message : String(error),\n });\n\n // Exponential backoff\n await this.delay(Math.pow(2, currentRetries) * 1000);\n return this.withRetry(operation, key);\n }\n\n this.retryCount.delete(key);\n throw error;\n }\n }\n\n /**\n * Apply timeout to verification\n */\n protected async withTimeout<T>(operation: () => Promise<T>): Promise<T> {\n if (!this.config.timeout) {\n return operation();\n }\n\n return Promise.race([\n operation(),\n new Promise<T>((_, reject) =>\n setTimeout(\n () =>\n reject(\n new Error(\n `${this.config.name} timeout after ${this.config.timeout}ms`\n )\n ),\n this.config.timeout\n )\n ),\n ]);\n }\n\n /**\n * Helper to create a standard result\n */\n protected createResult(\n passed: boolean,\n message: string,\n severity: VerifierSeverity = 'info',\n details?: VerifierDetails,\n autoFix?: VerifierAutoFix\n ): VerifierResult {\n return {\n verifierId: this.config.id,\n verifierType: this.config.type,\n passed,\n message,\n severity,\n timestamp: new Date(),\n details: details || undefined,\n autoFix: autoFix || undefined,\n };\n }\n\n /**\n * Delay helper for retries\n */\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Get verifier configuration\n */\n getConfig(): VerifierConfig {\n return { ...this.config };\n }\n\n /**\n * Check if verifier should stop execution on error\n */\n shouldStopOnError(): boolean {\n return this.config.stopOnError;\n }\n\n /**\n * Update verifier configuration\n */\n updateConfig(updates: Partial<VerifierConfig>): void {\n this.config = { ...this.config, ...updates };\n logger.info(`Updated ${this.config.name} configuration`, {\n updates,\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/agents/verifiers/formatter-verifier.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Formatter Verifier - Code formatting verification\n * Based on Spotify's formatting verifier pattern\n */\n\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport {\n BaseVerifier,\n VerifierContext,\n VerifierResult,\n VerifierConfig,\n} from './base-verifier.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport class FormatterVerifier extends BaseVerifier {\n private formatters: Map<string, FormatterCommand> = new Map();\n\n constructor(config?: Partial<VerifierConfig>) {\n super({\n id: 'formatter',\n name: 'Code Formatter',\n type: 'style',\n enabled: true,\n stopOnError: false,\n timeout: 10000,\n ...config,\n });\n\n this.initializeFormatters();\n }\n\n private initializeFormatters() {\n // Common formatters for different languages\n this.formatters.set('typescript', {\n checkCommand: 'npx prettier --check',\n fixCommand: 'npx prettier --write',\n patterns: [/\\[error\\]/gi, /File not formatted/gi],\n });\n\n this.formatters.set('javascript', {\n checkCommand: 'npx prettier --check',\n fixCommand: 'npx prettier --write',\n patterns: [/\\[error\\]/gi, /File not formatted/gi],\n });\n\n this.formatters.set('python', {\n checkCommand: 'black --check',\n fixCommand: 'black',\n patterns: [/would reformat/gi, /File not formatted/gi],\n });\n\n this.formatters.set('rust', {\n checkCommand: 'cargo fmt -- --check',\n fixCommand: 'cargo fmt',\n patterns: [/Diff in/gi, /File not formatted/gi],\n });\n\n this.formatters.set('go', {\n checkCommand: 'gofmt -l',\n fixCommand: 'gofmt -w',\n patterns: [/.+\\.go$/gm], // gofmt lists unformatted files\n });\n }\n\n shouldActivate(context: VerifierContext): boolean {\n // Activate for supported languages with code files\n if (!context.language || !context.filePath) {\n return false;\n }\n\n return this.formatters.has(context.language.toLowerCase());\n }\n\n async verify(\n input: string | Buffer,\n context: VerifierContext\n ): Promise<VerifierResult> {\n if (!context.language || !context.filePath) {\n return this.createResult(\n false,\n 'Missing language or file path in context',\n 'error'\n );\n }\n\n const formatter = this.formatters.get(context.language.toLowerCase());\n if (!formatter) {\n return this.createResult(\n true,\n `No formatter configured for ${context.language}`,\n 'info'\n );\n }\n\n try {\n return await this.withTimeout(async () => {\n return await this.withRetry(\n () => this.runFormatter(formatter, context),\n context.filePath!\n );\n });\n } catch (error: unknown) {\n logger.error(\n 'Formatter verification failed',\n error instanceof Error ? error : undefined\n );\n return this.createResult(\n false,\n `Formatter error: ${error instanceof Error ? error.message : String(error)}`,\n 'error'\n );\n }\n }\n\n private async runFormatter(\n formatter: FormatterCommand,\n context: VerifierContext\n ): Promise<VerifierResult> {\n const command = `${formatter.checkCommand} \"${context.filePath}\"`;\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd: process.cwd(),\n timeout: this.config.timeout,\n });\n\n // Formatter passed\n return this.createResult(true, 'Code is properly formatted', 'info');\n } catch (error: any) {\n // Check if it's a formatting issue (exit code 1) vs actual error\n if (error.code === 1) {\n const output = error.stdout + error.stderr;\n const errors = this.extractRelevantErrors(output, formatter.patterns);\n\n return this.createResult(\n false,\n this.generateFeedback(errors, context),\n 'warning',\n {\n code: output.substring(0, 500),\n suggestion: 'Run formatter to fix issues',\n },\n {\n command: `${formatter.fixCommand} \"${context.filePath}\"`,\n description: 'Auto-format the file',\n safe: true,\n confidence: 0.95,\n }\n );\n }\n\n // Actual error running formatter\n throw error;\n }\n }\n}\n\ninterface FormatterCommand {\n checkCommand: string;\n fixCommand: string;\n patterns: RegExp[];\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/agents/verifiers/llm-judge.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * LLM Judge - Semantic validation using LLM\n * Implements Spotify's LLM judge pattern that \"vetoes about a quarter of agent sessions\"\n */\n\nimport {\n BaseVerifier,\n VerifierContext,\n VerifierResult,\n VerifierConfig,\n} from './base-verifier.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport interface LLMJudgeContext extends VerifierContext {\n originalPrompt: string;\n proposedChanges: string;\n acceptanceCriteria?: string[];\n previousFeedback?: string[];\n}\n\nexport interface JudgementCriteria {\n adherenceToRequirements: number; // 0-1\n codeQuality: number; // 0-1\n safety: number; // 0-1\n completeness: number; // 0-1\n semanticCorrectness: number; // 0-1\n}\n\nexport class LLMJudge extends BaseVerifier {\n // Spotify reports ~75% pass rate (25% veto rate)\n private readonly VETO_THRESHOLD = 0.7;\n private readonly CRITERIA_WEIGHTS = {\n adherenceToRequirements: 0.3,\n codeQuality: 0.2,\n safety: 0.2,\n completeness: 0.15,\n semanticCorrectness: 0.15,\n };\n\n constructor(config?: Partial<VerifierConfig>) {\n super({\n id: 'llm-judge',\n name: 'LLM Semantic Judge',\n type: 'semantic',\n enabled: true,\n stopOnError: true, // Stop on semantic failures (Spotify pattern)\n timeout: 30000,\n ...config,\n });\n }\n\n shouldActivate(context: VerifierContext): boolean {\n // Always activate for semantic validation (Spotify always includes this)\n return true;\n }\n\n async verify(\n input: string | Buffer,\n context: VerifierContext\n ): Promise<VerifierResult> {\n const llmContext = context as LLMJudgeContext;\n\n if (!llmContext.originalPrompt) {\n return this.createResult(\n false,\n 'Missing original prompt for semantic validation',\n 'error'\n );\n }\n\n try {\n return await this.withTimeout(async () => {\n const judgement = await this.performJudgement(\n input.toString(),\n llmContext\n );\n return this.createJudgementResult(judgement, llmContext);\n });\n } catch (error: unknown) {\n logger.error(\n 'LLM Judge failed',\n error instanceof Error ? error : undefined\n );\n return this.createResult(\n false,\n `Semantic validation error: ${error instanceof Error ? error.message : String(error)}`,\n 'error'\n );\n }\n }\n\n private async performJudgement(\n proposedChanges: string,\n context: LLMJudgeContext\n ): Promise<JudgementCriteria> {\n // In production, this would call an actual LLM API\n // For now, simulate judgement with realistic patterns\n\n const criteria: JudgementCriteria = {\n adherenceToRequirements: this.evaluateAdherence(proposedChanges, context),\n codeQuality: this.evaluateCodeQuality(proposedChanges),\n safety: this.evaluateSafety(proposedChanges),\n completeness: this.evaluateCompleteness(proposedChanges, context),\n semanticCorrectness: this.evaluateSemanticCorrectness(\n proposedChanges,\n context\n ),\n };\n\n // Log judgement for analysis (Spotify's trace collection)\n logger.info('LLM Judge evaluation', {\n criteria,\n overallScore: this.calculateOverallScore(criteria),\n willVeto: this.calculateOverallScore(criteria) < this.VETO_THRESHOLD,\n });\n\n return criteria;\n }\n\n private evaluateAdherence(\n proposedChanges: string,\n context: LLMJudgeContext\n ): number {\n // Simulate checking if changes match original requirements\n const hasKeywords = context.originalPrompt\n .toLowerCase()\n .split(' ')\n .filter((word) => word.length > 4)\n .some((keyword) => proposedChanges.toLowerCase().includes(keyword));\n\n // Check acceptance criteria if provided\n if (context.acceptanceCriteria) {\n const metCriteria = context.acceptanceCriteria.filter((criterion) =>\n this.checkCriterion(criterion, proposedChanges)\n ).length;\n const criteriaScore = metCriteria / context.acceptanceCriteria.length;\n return hasKeywords ? Math.min(1, criteriaScore + 0.2) : criteriaScore;\n }\n\n // Simulate realistic pass rate (~75%)\n return hasKeywords ? 0.75 + Math.random() * 0.2 : 0.4 + Math.random() * 0.3;\n }\n\n private evaluateCodeQuality(proposedChanges: string): number {\n // Simple heuristics for code quality\n const indicators = {\n hasComments:\n proposedChanges.includes('//') || proposedChanges.includes('/*'),\n hasErrorHandling:\n proposedChanges.includes('try') || proposedChanges.includes('catch'),\n hasTests:\n proposedChanges.includes('test') || proposedChanges.includes('expect'),\n properNaming: !/[a-z]{20,}|[A-Z]{10,}/.test(proposedChanges), // No extremely long names\n reasonable_length:\n proposedChanges.length > 50 && proposedChanges.length < 5000,\n };\n\n const score =\n Object.values(indicators).filter(Boolean).length /\n Object.keys(indicators).length;\n return Math.min(1, score + 0.2); // Boost slightly\n }\n\n private evaluateSafety(proposedChanges: string): number {\n // Check for dangerous patterns\n const dangerousPatterns = [\n /eval\\s*\\(/,\n /exec\\s*\\(/,\n /rm\\s+-rf/,\n /DROP\\s+TABLE/i,\n /DELETE\\s+FROM/i,\n /<script>/i,\n /document\\.write/,\n /innerHTML\\s*=/,\n ];\n\n const hasDangerousPattern = dangerousPatterns.some((pattern) =>\n pattern.test(proposedChanges)\n );\n\n return hasDangerousPattern ? 0.3 : 0.9 + Math.random() * 0.1;\n }\n\n private evaluateCompleteness(\n proposedChanges: string,\n context: LLMJudgeContext\n ): number {\n // Check if the solution seems complete\n const hasImplementation = proposedChanges.length > 100;\n const hasStructure =\n proposedChanges.includes('function') ||\n proposedChanges.includes('class') ||\n proposedChanges.includes('const') ||\n proposedChanges.includes('def');\n\n if (context.acceptanceCriteria) {\n const addressedCriteria = context.acceptanceCriteria.filter((criterion) =>\n proposedChanges\n .toLowerCase()\n .includes(criterion.toLowerCase().split(' ')[0])\n ).length;\n return addressedCriteria / context.acceptanceCriteria.length;\n }\n\n return hasImplementation && hasStructure ? 0.8 + Math.random() * 0.15 : 0.4;\n }\n\n private evaluateSemanticCorrectness(\n proposedChanges: string,\n context: LLMJudgeContext\n ): number {\n // Simulate semantic analysis\n // In production, this would use embeddings and semantic similarity\n\n // Check if previous feedback was addressed\n if (context.previousFeedback && context.previousFeedback.length > 0) {\n const addressedFeedback = context.previousFeedback.filter((feedback) => {\n const keywords = feedback\n .toLowerCase()\n .split(' ')\n .filter((w) => w.length > 4);\n return keywords.some((keyword) =>\n proposedChanges.toLowerCase().includes(keyword)\n );\n }).length;\n\n if (addressedFeedback > 0) {\n return Math.min(\n 1,\n 0.7 + (addressedFeedback / context.previousFeedback.length) * 0.3\n );\n }\n }\n\n // Default semantic score (realistic distribution)\n return 0.65 + Math.random() * 0.25;\n }\n\n private checkCriterion(criterion: string, proposedChanges: string): boolean {\n // Simple keyword matching for criteria\n const keywords = criterion\n .toLowerCase()\n .split(' ')\n .filter((word) => word.length > 3);\n const matchedKeywords = keywords.filter((keyword) =>\n proposedChanges.toLowerCase().includes(keyword)\n );\n return matchedKeywords.length >= keywords.length * 0.5;\n }\n\n private calculateOverallScore(criteria: JudgementCriteria): number {\n let score = 0;\n for (const [key, weight] of Object.entries(this.CRITERIA_WEIGHTS)) {\n score += criteria[key as keyof JudgementCriteria] * weight;\n }\n return score;\n }\n\n private createJudgementResult(\n criteria: JudgementCriteria,\n context: LLMJudgeContext\n ): VerifierResult {\n const overallScore = this.calculateOverallScore(criteria);\n const passed = overallScore >= this.VETO_THRESHOLD;\n\n // Generate detailed feedback\n const feedback = this.generateJudgementFeedback(\n criteria,\n overallScore,\n context\n );\n\n // Determine severity based on score\n const severity =\n overallScore < 0.5\n ? 'error'\n : overallScore < this.VETO_THRESHOLD\n ? 'warning'\n : 'info';\n\n return this.createResult(\n passed,\n feedback,\n severity,\n {\n expected: 'Changes that fully address the original requirements',\n actual: `Score: ${(overallScore * 100).toFixed(1)}%`,\n suggestion: this.generateSuggestions(criteria),\n },\n passed\n ? undefined\n : {\n command: 'Review and adjust approach based on feedback',\n description: 'Manual review required',\n safe: false,\n confidence: overallScore,\n }\n );\n }\n\n private generateJudgementFeedback(\n criteria: JudgementCriteria,\n overallScore: number,\n context: LLMJudgeContext\n ): string {\n if (overallScore >= this.VETO_THRESHOLD) {\n return (\n `Semantic validation PASSED (${(overallScore * 100).toFixed(1)}% confidence). ` +\n `Changes adequately address the requirements.`\n );\n }\n\n // Identify weakest areas\n const weakAreas: string[] = [];\n if (criteria.adherenceToRequirements < 0.6) {\n weakAreas.push('requirements adherence');\n }\n if (criteria.codeQuality < 0.6) {\n weakAreas.push('code quality');\n }\n if (criteria.safety < 0.7) {\n weakAreas.push('safety concerns');\n }\n if (criteria.completeness < 0.6) {\n weakAreas.push('completeness');\n }\n if (criteria.semanticCorrectness < 0.6) {\n weakAreas.push('semantic correctness');\n }\n\n return (\n `Semantic validation VETOED (${(overallScore * 100).toFixed(1)}% confidence). ` +\n `Issues found with: ${weakAreas.join(', ')}. ` +\n `Agent should course-correct based on this feedback.`\n );\n }\n\n private generateSuggestions(criteria: JudgementCriteria): string {\n const suggestions: string[] = [];\n\n if (criteria.adherenceToRequirements < 0.7) {\n suggestions.push(\n 'Review original requirements and ensure all are addressed'\n );\n }\n if (criteria.codeQuality < 0.7) {\n suggestions.push(\n 'Improve code structure, add error handling and comments'\n );\n }\n if (criteria.safety < 0.8) {\n suggestions.push(\n 'Review code for security vulnerabilities and unsafe patterns'\n );\n }\n if (criteria.completeness < 0.7) {\n suggestions.push('Ensure solution is complete and handles edge cases');\n }\n if (criteria.semanticCorrectness < 0.7) {\n suggestions.push('Verify logic correctness and alignment with intent');\n }\n\n return suggestions.length > 0\n ? suggestions.join('; ')\n : 'Continue with current approach';\n }\n\n /**\n * Get veto statistics (for monitoring)\n */\n getVetoRate(): number {\n // In production, this would track actual veto rate\n // Spotify reports ~25% veto rate\n return 0.25;\n }\n\n /**\n * Check if agent can course-correct after veto\n * Spotify: \"When vetoed, agents can course correct half the time\"\n */\n canCourseCorrect(previousAttempts: number): boolean {\n // 50% chance of successful course correction\n return previousAttempts < 2 && Math.random() > 0.5;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/auto-detect.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Auto-detection utilities for Claude-SM\n * Automatically detects when worktree isolation is needed\n */\n\nimport { execSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface DetectionResult {\n shouldUseWorktree: boolean;\n reasons: string[];\n confidence: 'high' | 'medium' | 'low';\n suggestions: string[];\n}\n\nexport class ClaudeAutoDetect {\n private projectRoot: string;\n\n constructor(projectRoot: string = process.cwd()) {\n this.projectRoot = projectRoot;\n }\n\n /**\n * Main detection logic\n */\n public detect(): DetectionResult {\n const result: DetectionResult = {\n shouldUseWorktree: false,\n reasons: [],\n confidence: 'low',\n suggestions: [],\n };\n\n // Check various conditions\n const checks = [\n this.checkUncommittedChanges(),\n this.checkActiveInstances(),\n this.checkBranchProtection(),\n this.checkFileConflicts(),\n this.checkResourceUsage(),\n this.checkTaskComplexity(),\n ];\n\n // Aggregate results\n let score = 0;\n for (const check of checks) {\n if (check.detected) {\n score += check.weight;\n result.reasons.push(check.reason);\n if (check.suggestion) {\n result.suggestions.push(check.suggestion);\n }\n }\n }\n\n // Determine recommendation\n if (score >= 7) {\n result.shouldUseWorktree = true;\n result.confidence = 'high';\n } else if (score >= 4) {\n result.shouldUseWorktree = true;\n result.confidence = 'medium';\n } else if (score >= 2) {\n result.shouldUseWorktree = false;\n result.confidence = 'medium';\n result.suggestions.push(\n 'Consider using --worktree if making significant changes'\n );\n }\n\n return result;\n }\n\n /**\n * Check for uncommitted changes\n */\n private checkUncommittedChanges(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n try {\n const status = execSync('git status --porcelain', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n });\n\n if (status.trim().length > 0) {\n const lines = status.trim().split('\\n').length;\n return {\n detected: true,\n weight: lines > 10 ? 3 : 2,\n reason: `${lines} uncommitted changes in working directory`,\n suggestion:\n 'Commit or stash changes before proceeding, or use worktree',\n };\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check for other active Claude instances\n */\n private checkActiveInstances(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n const lockDir = path.join(this.projectRoot, '.claude-worktree-locks');\n\n if (fs.existsSync(lockDir)) {\n try {\n const locks = fs\n .readdirSync(lockDir)\n .filter((f) => f.endsWith('.lock'));\n const activeLocks = locks.filter((lockFile) => {\n const lockPath = path.join(lockDir, lockFile);\n const stats = fs.statSync(lockPath);\n const ageHours = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60);\n return ageHours < 24;\n });\n\n if (activeLocks.length > 0) {\n return {\n detected: true,\n weight: activeLocks.length >= 2 ? 4 : 3,\n reason: `${activeLocks.length} other Claude instance(s) active`,\n suggestion: 'Use worktree to avoid conflicts with other instances',\n };\n }\n } catch {}\n }\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check if on protected branch\n */\n private checkBranchProtection(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n }).trim();\n\n const protectedBranches = [\n 'main',\n 'master',\n 'production',\n 'staging',\n 'develop',\n ];\n\n if (protectedBranches.includes(branch)) {\n return {\n detected: true,\n weight: 4,\n reason: `Working on protected branch: ${branch}`,\n suggestion: 'Create a feature branch or use worktree',\n };\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check for potential file conflicts\n */\n private checkFileConflicts(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n // Check if multiple editors/IDEs are open\n const ideFiles = [\n '.vscode/settings.json',\n '.idea/workspace.xml',\n '.sublime-workspace',\n ];\n\n let openIDEs = 0;\n for (const ideFile of ideFiles) {\n const filePath = path.join(this.projectRoot, ideFile);\n if (fs.existsSync(filePath)) {\n try {\n const stats = fs.statSync(filePath);\n const ageMinutes = (Date.now() - stats.mtimeMs) / (1000 * 60);\n if (ageMinutes < 5) {\n openIDEs++;\n }\n } catch {}\n }\n }\n\n if (openIDEs > 1) {\n return {\n detected: true,\n weight: 2,\n reason: 'Multiple IDEs/editors detected',\n suggestion: 'Use worktree to avoid file lock conflicts',\n };\n }\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check system resource usage\n */\n private checkResourceUsage(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n try {\n // Check number of git worktrees\n const worktrees = execSync('git worktree list', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n })\n .trim()\n .split('\\n').length;\n\n if (worktrees > 3) {\n return {\n detected: true,\n weight: 1,\n reason: `${worktrees} worktrees already exist`,\n suggestion: 'Consider cleaning up old worktrees',\n };\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Detect task complexity from user input or context\n */\n private checkTaskComplexity(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n // Check for complex task indicators in recent commits\n try {\n const recentCommit = execSync('git log -1 --pretty=%B', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n }).toLowerCase();\n\n const complexIndicators = [\n 'refactor',\n 'breaking change',\n 'major',\n 'experiment',\n 'prototype',\n 'redesign',\n 'migration',\n ];\n\n for (const indicator of complexIndicators) {\n if (recentCommit.includes(indicator)) {\n return {\n detected: true,\n weight: 2,\n reason: 'Recent complex changes detected',\n suggestion: 'Use worktree for experimental or major changes',\n };\n }\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Get current environment status\n */\n public getStatus(): {\n git: boolean;\n worktrees: number;\n instances: number;\n branch: string;\n uncommittedChanges: number;\n } {\n const status = {\n git: false,\n worktrees: 0,\n instances: 0,\n branch: 'unknown',\n uncommittedChanges: 0,\n };\n\n // Check Git\n try {\n execSync('git rev-parse --git-dir', {\n cwd: this.projectRoot,\n stdio: 'ignore',\n });\n status.git = true;\n\n // Get branch\n status.branch = execSync('git rev-parse --abbrev-ref HEAD', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n }).trim();\n\n // Count worktrees\n const worktreeList = execSync('git worktree list', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n });\n status.worktrees = worktreeList.trim().split('\\n').length;\n\n // Count changes\n const changes = execSync('git status --porcelain', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n });\n status.uncommittedChanges = changes.trim()\n ? changes.trim().split('\\n').length\n : 0;\n } catch {}\n\n // Count instances\n const lockDir = path.join(this.projectRoot, '.claude-worktree-locks');\n if (fs.existsSync(lockDir)) {\n try {\n const locks = fs\n .readdirSync(lockDir)\n .filter((f) => f.endsWith('.lock'));\n status.instances = locks.filter((lockFile) => {\n const lockPath = path.join(lockDir, lockFile);\n const stats = fs.statSync(lockPath);\n const ageHours = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60);\n return ageHours < 24;\n }).length;\n } catch {}\n }\n\n return status;\n }\n\n /**\n * Smart recommendation based on context\n */\n public recommend(taskDescription?: string): {\n mode: 'normal' | 'worktree' | 'sandbox' | 'chrome';\n reason: string;\n flags: string[];\n } {\n const detection = this.detect();\n const status = this.getStatus();\n\n // Analyze task description if provided\n let taskType = 'general';\n if (taskDescription) {\n const lower = taskDescription.toLowerCase();\n if (\n lower.includes('ui') ||\n lower.includes('frontend') ||\n lower.includes('component')\n ) {\n taskType = 'frontend';\n } else if (\n lower.includes('api') ||\n lower.includes('backend') ||\n lower.includes('database')\n ) {\n taskType = 'backend';\n } else if (\n lower.includes('test') ||\n lower.includes('debug') ||\n lower.includes('fix')\n ) {\n taskType = 'debugging';\n } else if (lower.includes('refactor') || lower.includes('clean')) {\n taskType = 'refactoring';\n }\n }\n\n // Determine mode and flags\n let mode: 'normal' | 'worktree' | 'sandbox' | 'chrome' = 'normal';\n const flags: string[] = [];\n let reason = '';\n\n if (detection.shouldUseWorktree) {\n mode = 'worktree';\n flags.push('--worktree');\n reason = detection.reasons[0] || 'Isolation recommended';\n }\n\n // Add task-specific flags\n switch (taskType) {\n case 'frontend':\n if (mode === 'worktree') {\n mode = 'chrome';\n flags.push('--chrome');\n reason += '; Chrome automation for UI work';\n }\n break;\n case 'backend':\n if (mode === 'worktree') {\n mode = 'sandbox';\n flags.push('--sandbox');\n reason += '; Sandboxed for API development';\n }\n break;\n case 'refactoring':\n if (mode === 'normal' && status.uncommittedChanges === 0) {\n // Refactoring on clean working directory is OK\n reason = 'Clean working directory, safe to proceed';\n }\n break;\n }\n\n return { mode, reason, flags };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/claude-sm-danger.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n\n/**\n * claude-sm-danger: Claude-SM wrapper with --dangerously-skip-permissions\n * Shorthand for: claude-sm --dangerously-skip-permissions [args]\n */\n\nimport { spawn } from 'child_process';\nimport * as path from 'path';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\n// Get the claude-sm script path\nconst claudeSmPath = path.join(__dirname, 'claude-sm.js');\n\n// Prepend the danger flag to all args\nconst args = ['--dangerously-skip-permissions', ...process.argv.slice(2)];\n\n// Spawn claude-sm with the danger flag\nconst child = spawn('node', [claudeSmPath, ...args], {\n stdio: 'inherit',\n env: process.env,\n});\n\nchild.on('exit', (code) => {\n process.exit(code || 0);\n});\n\nchild.on('error', (err) => {\n console.error('Failed to launch claude-sm:', err.message);\n process.exit(1);\n});\n"],
|
|
5
|
-
"mappings": ";;;;;AAOA,SAAS,aAAa;AACtB,YAAY,UAAU;AAKtB,MAAM,eAAe,KAAK,KAAK,WAAW,cAAc;AAGxD,MAAM,OAAO,CAAC,kCAAkC,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC;AAGxE,MAAM,QAAQ,MAAM,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG;AAAA,EACnD,OAAO;AAAA,EACP,KAAK,QAAQ;AACf,CAAC;AAED,MAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,UAAQ,KAAK,QAAQ,CAAC;AACxB,CAAC;AAED,MAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,UAAQ,MAAM,+BAA+B,IAAI,OAAO;AACxD,UAAQ,KAAK,CAAC;AAChB,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/claude-sm.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n\n/**\n * claude-sm: Claude wrapper with StackMemory and worktree integration\n * Automatically manages context persistence and instance isolation\n */\n\nimport { config as loadDotenv } from 'dotenv';\nloadDotenv({ override: true, debug: false });\n\nimport { spawn, execSync, execFileSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { program } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\nimport chalk from 'chalk';\nimport { initializeTracing, trace } from '../core/trace/index.js';\nimport {\n getModelRouter,\n loadModelRouterConfig,\n type ModelProvider,\n} from '../core/models/model-router.js';\nimport { launchWrapper } from '../features/sweep/pty-wrapper.js';\nimport { FallbackMonitor } from '../core/models/fallback-monitor.js';\nimport {\n ensureWorkerStateDir,\n saveRegistry,\n loadRegistry,\n clearRegistry,\n type WorkerEntry,\n type WorkerSession,\n} from '../features/workers/worker-registry.js';\nimport {\n isTmuxAvailable,\n createTmuxSession,\n sendToPane,\n killTmuxSession,\n attachToSession,\n listPanes,\n sendCtrlC,\n sessionExists,\n} from '../features/workers/tmux-manager.js';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\ninterface ClaudeSMConfig {\n defaultWorktree: boolean;\n defaultSandbox: boolean;\n defaultChrome: boolean;\n defaultTracing: boolean;\n defaultNotifyOnDone: boolean;\n defaultModelRouting: boolean;\n defaultSweep: boolean;\n defaultGEPA: boolean;\n}\n\ninterface ClaudeConfig {\n instanceId: string;\n worktreePath?: string;\n useSandbox: boolean;\n useChrome: boolean;\n useWorktree: boolean;\n notifyOnDone: boolean;\n contextEnabled: boolean;\n branch?: string;\n task?: string;\n tracingEnabled: boolean;\n verboseTracing: boolean;\n claudeBin?: string;\n sessionStartTime: number;\n // Model routing\n useModelRouting: boolean;\n forceProvider?: ModelProvider;\n useThinkingMode: boolean;\n useSweep: boolean;\n useGEPA: boolean;\n}\n\nconst DEFAULT_SM_CONFIG: ClaudeSMConfig = {\n defaultWorktree: false,\n defaultSandbox: false,\n defaultChrome: false,\n defaultTracing: true,\n defaultNotifyOnDone: true,\n defaultModelRouting: false,\n defaultSweep: true,\n defaultGEPA: false,\n};\n\nfunction getConfigPath(): string {\n return path.join(os.homedir(), '.stackmemory', 'claude-sm.json');\n}\n\nfunction loadSMConfig(): ClaudeSMConfig {\n try {\n const configPath = getConfigPath();\n if (fs.existsSync(configPath)) {\n const content = fs.readFileSync(configPath, 'utf8');\n return { ...DEFAULT_SM_CONFIG, ...JSON.parse(content) };\n }\n } catch {\n // Ignore errors, use defaults\n }\n return { ...DEFAULT_SM_CONFIG };\n}\n\nfunction saveSMConfig(config: ClaudeSMConfig): void {\n const configPath = getConfigPath();\n const dir = path.dirname(configPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n}\n\nclass ClaudeSM {\n private config: ClaudeConfig;\n private stackmemoryPath: string;\n private worktreeScriptPath: string;\n private claudeConfigDir: string;\n private smConfig: ClaudeSMConfig;\n\n constructor() {\n // Load persistent defaults\n this.smConfig = loadSMConfig();\n\n this.config = {\n instanceId: this.generateInstanceId(),\n useSandbox: this.smConfig.defaultSandbox,\n useChrome: this.smConfig.defaultChrome,\n useWorktree: this.smConfig.defaultWorktree,\n notifyOnDone: this.smConfig.defaultNotifyOnDone,\n contextEnabled: true,\n tracingEnabled: this.smConfig.defaultTracing,\n verboseTracing: false,\n sessionStartTime: Date.now(),\n useModelRouting: this.smConfig.defaultModelRouting,\n useThinkingMode: false,\n useSweep: this.smConfig.defaultSweep,\n useGEPA: this.smConfig.defaultGEPA,\n };\n\n this.stackmemoryPath = this.findStackMemory();\n this.worktreeScriptPath = path.join(\n __dirname,\n '../../scripts/claude-worktree-manager.sh'\n );\n this.claudeConfigDir = path.join(os.homedir(), '.claude');\n\n // Ensure config directory exists\n if (!fs.existsSync(this.claudeConfigDir)) {\n fs.mkdirSync(this.claudeConfigDir, { recursive: true });\n }\n }\n\n private getRepoRoot(): string | null {\n try {\n const root = execSync('git rev-parse --show-toplevel', {\n encoding: 'utf8',\n }).trim();\n return root || null;\n } catch {\n return null;\n }\n }\n\n private ensureInitialized(): void {\n try {\n const root = this.getRepoRoot();\n const dir = root || process.cwd();\n const dbPath = path.join(dir, '.stackmemory', 'context.db');\n if (!fs.existsSync(dbPath)) {\n console.log(\n chalk.blue('\uD83D\uDCE6 Initializing StackMemory for this project...')\n );\n execSync(`${this.stackmemoryPath} init`, {\n cwd: dir,\n stdio: ['ignore', 'ignore', 'ignore'],\n });\n }\n } catch {\n // Non-fatal: Claude should continue even if context init fails\n }\n }\n\n private generateInstanceId(): string {\n return uuidv4().substring(0, 8);\n }\n\n private findStackMemory(): string {\n // Check multiple possible locations\n const possiblePaths = [\n path.join(os.homedir(), '.stackmemory', 'bin', 'stackmemory'),\n '/usr/local/bin/stackmemory',\n '/opt/homebrew/bin/stackmemory',\n 'stackmemory', // Rely on PATH\n ];\n\n for (const smPath of possiblePaths) {\n try {\n execFileSync('which', [smPath], { stdio: 'ignore' });\n return smPath;\n } catch {\n // Continue searching\n }\n }\n\n return 'stackmemory'; // Fallback to PATH\n }\n\n private isGitRepo(): boolean {\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n private getCurrentBranch(): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf8',\n }).trim();\n } catch {\n return 'main';\n }\n }\n\n private hasUncommittedChanges(): boolean {\n try {\n const status = execSync('git status --porcelain', { encoding: 'utf8' });\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n private resolveClaudeBin(): string | null {\n // 1) CLI-specified\n if (this.config.claudeBin && this.config.claudeBin.trim()) {\n return this.config.claudeBin.trim();\n }\n // 2) Env override\n const envBin = process.env['CLAUDE_BIN'];\n if (envBin && envBin.trim()) return envBin.trim();\n // 3) PATH detection\n try {\n execSync('which claude', { stdio: 'ignore' });\n return 'claude';\n } catch {}\n return null;\n }\n\n private gepaProcesses: ReturnType<typeof spawn>[] = [];\n\n private startGEPAWatcher(): void {\n // Find CLAUDE.md and AGENT.md in current directory or project root\n const watchFiles = ['CLAUDE.md', 'AGENT.md', 'AGENTS.md']\n .map((f) => path.join(process.cwd(), f))\n .filter((p) => fs.existsSync(p));\n\n if (watchFiles.length === 0) {\n console.log(\n chalk.gray(\n ' Prompt Forge: disabled (no CLAUDE.md, AGENT.md, or AGENTS.md found)'\n )\n );\n return;\n }\n\n // Find GEPA scripts directory (check multiple locations)\n const gepaPaths = [\n // From dist/src/cli -> scripts/gepa (3 levels up)\n path.join(__dirname, '../../../scripts/gepa/hooks/auto-optimize.js'),\n // From src/cli -> scripts/gepa (2 levels up, for dev mode)\n path.join(__dirname, '../../scripts/gepa/hooks/auto-optimize.js'),\n // Global install location\n path.join(\n os.homedir(),\n '.stackmemory',\n 'scripts',\n 'gepa',\n 'hooks',\n 'auto-optimize.js'\n ),\n // npm global install\n path.join(\n __dirname,\n '..',\n '..',\n 'scripts',\n 'gepa',\n 'hooks',\n 'auto-optimize.js'\n ),\n ];\n\n const gepaScript = gepaPaths.find((p) => fs.existsSync(p));\n if (!gepaScript) {\n console.log(chalk.gray(' Prompt Forge: disabled (scripts not found)'));\n return;\n }\n\n // Start GEPA watcher for each file\n for (const filePath of watchFiles) {\n const gepaProcess = spawn('node', [gepaScript, 'watch', filePath], {\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: { ...process.env, GEPA_SILENT: '1' },\n });\n\n gepaProcess.unref();\n this.gepaProcesses.push(gepaProcess);\n\n // Log output from GEPA (non-blocking)\n gepaProcess.stdout?.on('data', (data: Buffer) => {\n const output = data.toString().trim();\n if (output && !output.includes('Watching')) {\n console.log(chalk.magenta(`[GEPA] ${output}`));\n }\n });\n }\n\n const fileNames = watchFiles.map((f) => path.basename(f)).join(', ');\n console.log(\n chalk.cyan(` Prompt Forge: watching ${fileNames} for optimization`)\n );\n }\n\n private stopGEPAWatcher(): void {\n for (const proc of this.gepaProcesses) {\n proc.kill('SIGTERM');\n }\n this.gepaProcesses = [];\n }\n\n private setupWorktree(): string | null {\n if (!this.config.useWorktree || !this.isGitRepo()) {\n return null;\n }\n\n console.log(chalk.blue('\uD83C\uDF33 Setting up isolated worktree...'));\n\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.]/g, '-')\n .substring(0, 19);\n const branch =\n this.config.branch ||\n `claude-${this.config.task || 'work'}-${timestamp}-${this.config.instanceId}`;\n const repoName = path.basename(process.cwd());\n const worktreePath = path.join(\n path.dirname(process.cwd()),\n `${repoName}--${branch}`\n );\n\n try {\n // Create worktree\n const flags = [];\n if (this.config.useSandbox) flags.push('--sandbox');\n if (this.config.useChrome) flags.push('--chrome');\n\n const cmd = `git worktree add -b \"${branch}\" \"${worktreePath}\"`;\n execSync(cmd, { stdio: 'inherit' });\n\n console.log(chalk.green(`\u2705 Worktree created: ${worktreePath}`));\n console.log(chalk.gray(` Branch: ${branch}`));\n\n // Save worktree config\n const configPath = path.join(worktreePath, '.claude-instance.json');\n const configData = {\n instanceId: this.config.instanceId,\n worktreePath,\n branch,\n task: this.config.task,\n sandboxEnabled: this.config.useSandbox,\n chromeEnabled: this.config.useChrome,\n created: new Date().toISOString(),\n parentRepo: process.cwd(),\n };\n fs.writeFileSync(configPath, JSON.stringify(configData, null, 2));\n\n // Copy environment files\n const envFiles = ['.env', '.env.local', '.mise.toml', '.tool-versions'];\n for (const file of envFiles) {\n const srcPath = path.join(process.cwd(), file);\n if (fs.existsSync(srcPath)) {\n fs.copyFileSync(srcPath, path.join(worktreePath, file));\n }\n }\n\n return worktreePath;\n } catch (err: unknown) {\n console.error(chalk.red('\u274C Failed to create worktree:'), err);\n return null;\n }\n }\n\n private saveContext(\n message: string,\n metadata: Record<string, unknown> = {}\n ): void {\n if (!this.config.contextEnabled) return;\n\n try {\n const contextData = {\n message,\n metadata: {\n ...metadata,\n instanceId: this.config.instanceId,\n worktree: this.config.worktreePath,\n timestamp: new Date().toISOString(),\n },\n };\n\n const cmd = `${this.stackmemoryPath} context save --json '${JSON.stringify(contextData)}'`;\n execSync(cmd, { stdio: 'ignore' });\n } catch {\n // Silently fail - don't interrupt Claude\n }\n }\n\n private getHandoffContent(): string | null {\n if (!this.config.contextEnabled) return null;\n\n try {\n const handoffPath = path.join(\n process.cwd(),\n '.stackmemory',\n 'last-handoff.md'\n );\n if (fs.existsSync(handoffPath)) {\n const content = fs.readFileSync(handoffPath, 'utf8').trim();\n if (content.length > 0) {\n // Cap at 8000 chars to avoid excessively long system prompts\n return content.length > 8000\n ? content.substring(0, 8000) + '\\n\\n[...truncated]'\n : content;\n }\n }\n } catch {\n // Silently continue - handoff loading is optional\n }\n return null;\n }\n\n private loadContext(): void {\n if (!this.config.contextEnabled) return;\n\n try {\n // Use 'context show' command to display the current context stack\n const cmd = `${this.stackmemoryPath} context show`;\n const output = execSync(cmd, {\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const lines = output\n .trim()\n .split('\\n')\n .filter((l) => l.trim());\n if (lines.length > 3) {\n console.log(chalk.gray(' Context stack loaded'));\n }\n } catch {\n // Silently continue - context loading is optional\n }\n }\n\n private detectMultipleInstances(): boolean {\n try {\n const lockDir = path.join(process.cwd(), '.claude-worktree-locks');\n if (!fs.existsSync(lockDir)) return false;\n\n const locks = fs.readdirSync(lockDir).filter((f) => f.endsWith('.lock'));\n const activeLocks = locks.filter((lockFile) => {\n const lockPath = path.join(lockDir, lockFile);\n const lockData = JSON.parse(fs.readFileSync(lockPath, 'utf8'));\n const lockAge = Date.now() - new Date(lockData.created).getTime();\n return lockAge < 24 * 60 * 60 * 1000; // Less than 24 hours old\n });\n\n return activeLocks.length > 0;\n } catch {\n return false;\n }\n }\n\n private suggestWorktreeMode(): void {\n if (this.hasUncommittedChanges()) {\n console.log(chalk.yellow('\u26A0\uFE0F Uncommitted changes detected'));\n console.log(\n chalk.gray(' Consider using --worktree to work in isolation')\n );\n }\n\n if (this.detectMultipleInstances()) {\n console.log(chalk.yellow('\u26A0\uFE0F Other Claude instances detected'));\n console.log(\n chalk.gray(' Using --worktree is recommended to avoid conflicts')\n );\n }\n }\n\n private notifyDone(exitCode: number | null): void {\n // Terminal bell to signal session completion\n process.stdout.write('\\x07');\n console.log(chalk.gray(`\\nSession ended (exit ${exitCode ?? 0})`));\n }\n\n public async run(args: string[]): Promise<void> {\n // Parse arguments\n const claudeArgs: string[] = [];\n let i = 0;\n\n while (i < args.length) {\n const arg = args[i];\n\n switch (arg) {\n case '--worktree':\n case '-w':\n this.config.useWorktree = true;\n break;\n case '--no-worktree':\n case '-W':\n this.config.useWorktree = false;\n break;\n case '--notify-done':\n case '-n':\n this.config.notifyOnDone = true;\n break;\n case '--no-notify-done':\n this.config.notifyOnDone = false;\n break;\n case '--sandbox':\n case '-s':\n this.config.useSandbox = true;\n claudeArgs.push('--sandbox');\n break;\n case '--chrome':\n case '-c':\n this.config.useChrome = true;\n claudeArgs.push('--chrome');\n break;\n case '--no-context':\n this.config.contextEnabled = false;\n break;\n case '--no-trace':\n this.config.tracingEnabled = false;\n break;\n case '--verbose-trace':\n this.config.verboseTracing = true;\n break;\n case '--branch':\n case '-b':\n i++;\n this.config.branch = args[i];\n break;\n case '--task':\n case '-t':\n i++;\n this.config.task = args[i];\n break;\n case '--claude-bin':\n i++;\n this.config.claudeBin = args[i];\n process.env['CLAUDE_BIN'] = this.config.claudeBin;\n break;\n case '--auto':\n case '-a':\n // Auto mode: detect and apply best settings\n if (this.isGitRepo()) {\n this.config.useWorktree =\n this.hasUncommittedChanges() || this.detectMultipleInstances();\n }\n break;\n case '--think':\n case '--think-hard':\n case '--ultrathink':\n // Enable thinking mode with Qwen (if configured)\n this.config.useThinkingMode = true;\n this.config.useModelRouting = true;\n this.config.forceProvider = 'qwen';\n break;\n case '--qwen':\n // Force Qwen provider\n this.config.useModelRouting = true;\n this.config.forceProvider = 'qwen';\n break;\n case '--openai':\n // Force OpenAI provider\n this.config.useModelRouting = true;\n this.config.forceProvider = 'openai';\n break;\n case '--ollama':\n // Force Ollama provider\n this.config.useModelRouting = true;\n this.config.forceProvider = 'ollama';\n break;\n case '--model-routing':\n this.config.useModelRouting = true;\n break;\n case '--no-model-routing':\n this.config.useModelRouting = false;\n break;\n case '--sweep':\n this.config.useSweep = true;\n break;\n case '--no-sweep':\n this.config.useSweep = false;\n break;\n case '--gepa':\n this.config.useGEPA = true;\n break;\n case '--no-gepa':\n this.config.useGEPA = false;\n break;\n default:\n claudeArgs.push(arg);\n }\n i++;\n }\n\n // Validate --print/-p requires a prompt argument (unless stdin is piped)\n const printIndex = claudeArgs.findIndex(\n (a) => a === '-p' || a === '--print'\n );\n if (printIndex !== -1) {\n const nextArg = claudeArgs[printIndex + 1];\n const hasStdin = !process.stdin.isTTY; // stdin is piped\n const hasPromptArg = nextArg && !nextArg.startsWith('-');\n\n // Error only if no stdin AND no prompt argument\n if (!hasStdin && !hasPromptArg) {\n console.error(\n chalk.red('Error: --print/-p requires a prompt argument.')\n );\n console.log(chalk.gray('Usage: claude-smd -p \"your prompt here\"'));\n console.log(chalk.gray(' echo \"prompt\" | claude-smd -p'));\n process.exit(1);\n }\n }\n\n // \u2500\u2500 Core Setup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (this.config.tracingEnabled) {\n // Set up environment for tracing\n process.env['DEBUG_TRACE'] = 'true';\n process.env['STACKMEMORY_DEBUG'] = 'true';\n process.env['TRACE_OUTPUT'] = 'file'; // Write to file to not clutter Claude output\n process.env['TRACE_MASK_SENSITIVE'] = 'true'; // Always mask sensitive data\n\n if (this.config.verboseTracing) {\n process.env['TRACE_VERBOSITY'] = 'full';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'true';\n process.env['TRACE_MEMORY'] = 'true';\n } else {\n process.env['TRACE_VERBOSITY'] = 'summary';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'false';\n }\n\n // Initialize the tracing system\n initializeTracing();\n\n // Start tracing this Claude session\n trace.command(\n 'claude-sm',\n {\n instanceId: this.config.instanceId,\n worktree: this.config.useWorktree,\n sandbox: this.config.useSandbox,\n task: this.config.task,\n },\n async () => {\n // Session tracing will wrap the entire Claude execution\n }\n );\n }\n\n // Show header\n console.log(chalk.blue('\u2554\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\u2557'));\n console.log(chalk.blue('\u2551 Claude + StackMemory + Worktree \u2551'));\n console.log(chalk.blue('\u255A\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\u255D'));\n console.log();\n\n // Ensure project is initialized for context operations (best-effort)\n this.ensureInitialized();\n\n // Check Git repo status\n if (this.isGitRepo()) {\n const branch = this.getCurrentBranch();\n console.log(chalk.gray(`\uD83D\uDCCD Current branch: ${branch}`));\n\n if (!this.config.useWorktree) {\n this.suggestWorktreeMode();\n }\n }\n\n // Setup worktree if requested\n if (this.config.useWorktree) {\n const worktreePath = this.setupWorktree();\n if (worktreePath) {\n this.config.worktreePath = worktreePath;\n process.chdir(worktreePath);\n\n // Save context about worktree creation\n this.saveContext('Created worktree for Claude instance', {\n action: 'worktree_created',\n path: worktreePath,\n branch: this.config.branch,\n });\n }\n }\n\n // Load previous context\n this.loadContext();\n\n // Setup environment\n process.env['CLAUDE_INSTANCE_ID'] = this.config.instanceId;\n if (this.config.worktreePath) {\n process.env['CLAUDE_WORKTREE_PATH'] = this.config.worktreePath;\n }\n console.log(chalk.gray(`\uD83E\uDD16 Instance ID: ${this.config.instanceId}`));\n console.log(chalk.gray(`\uD83D\uDCC1 Working in: ${process.cwd()}`));\n\n if (this.config.useSandbox) {\n console.log(chalk.yellow('\uD83D\uDD12 Sandbox mode enabled'));\n }\n if (this.config.useChrome) {\n console.log(chalk.yellow('\uD83C\uDF10 Chrome automation enabled'));\n }\n if (this.config.tracingEnabled) {\n console.log(\n chalk.gray(`\uD83D\uDD0D Debug tracing enabled (logs to ~/.stackmemory/traces/)`)\n );\n if (this.config.verboseTracing) {\n console.log(\n chalk.gray(` Verbose mode: capturing all execution details`)\n );\n }\n }\n\n // \u2500\u2500 Optional Services \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Model routing: route to Qwen/OpenAI/Ollama based on task type\n if (this.config.useModelRouting) {\n const routerConfig = loadModelRouterConfig();\n if (routerConfig.enabled || this.config.forceProvider) {\n const router = getModelRouter();\n let routeResult;\n\n if (this.config.forceProvider) {\n // Force specific provider\n const env = router.switchTo(this.config.forceProvider);\n Object.assign(process.env, env);\n console.log(\n chalk.magenta(`\uD83D\uDD00 Model: ${this.config.forceProvider} (forced)`)\n );\n\n // Show thinking mode info if using Qwen with thinking\n if (\n this.config.forceProvider === 'qwen' &&\n this.config.useThinkingMode\n ) {\n const qwenConfig = routerConfig.providers.qwen;\n if (qwenConfig?.params?.enable_thinking) {\n console.log(\n chalk.gray(\n ` Thinking mode: budget ${qwenConfig.params.thinking_budget || 10000} tokens`\n )\n );\n }\n }\n } else {\n // Auto-route based on task type\n const taskType = this.config.useThinkingMode ? 'think' : 'default';\n routeResult = router.route(taskType, this.config.task);\n Object.assign(process.env, routeResult.env);\n\n if (routeResult.switched) {\n console.log(\n chalk.magenta(`\uD83D\uDD00 Model routed to: ${routeResult.provider}`)\n );\n }\n }\n } else {\n console.log(\n chalk.gray(\n ' Model routing: disabled (run: stackmemory model enable)'\n )\n );\n }\n }\n\n // GEPA: auto-optimize CLAUDE.md on file changes\n if (this.config.useGEPA) {\n this.startGEPAWatcher();\n }\n\n // \u2500\u2500 Session Injection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n let initialInput = '';\n const handoffContent = this.getHandoffContent();\n if (handoffContent) {\n // Only inject if not resuming an existing conversation\n const hasResume =\n claudeArgs.includes('--continue') ||\n claudeArgs.some((a) => a === '--resume');\n if (!hasResume) {\n // Load into input text area via PTY bracketed paste (not auto-sent)\n initialInput = handoffContent;\n console.log(chalk.gray(' Handoff context ready'));\n }\n }\n\n console.log();\n\n // \u2500\u2500 Launch \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Sweep PTY wrapper: next-edit predictions (falls back to direct launch)\n if (this.config.useSweep) {\n const claudeBin = this.resolveClaudeBin();\n if (!claudeBin) {\n console.error(chalk.red('Claude CLI not found.'));\n process.exit(1);\n return;\n }\n console.log(\n chalk.cyan('[Sweep] Launching Claude with prediction bar...')\n );\n console.log(chalk.gray('\u2500'.repeat(42)));\n try {\n await launchWrapper({\n claudeBin,\n claudeArgs,\n initialInput: initialInput || undefined,\n });\n // PTY wrapper is now running \u2014 it calls process.exit() on child exit.\n // Return to prevent falling through to the fallback-monitor path,\n // which would spawn a second Claude instance.\n return;\n } catch (error) {\n // If PTY wrapper fails (e.g., node-pty missing), fall back to direct launch\n const msg = (error as Error).message || 'Unknown PTY error';\n console.error(chalk.yellow(`[Sweep disabled] ${msg}`));\n console.log(\n chalk.gray(\n 'Falling back to direct Claude launch (no prediction bar)...'\n )\n );\n // Disable Sweep for this session and continue below\n this.config.useSweep = false;\n }\n }\n\n // Non-Sweep fallback: inject handoff as system prompt context\n if (initialInput) {\n claudeArgs.push('--append-system-prompt', initialInput);\n }\n\n console.log(chalk.gray('Starting Claude...'));\n console.log(chalk.gray('\u2500'.repeat(42)));\n\n const claudeBin = this.resolveClaudeBin();\n if (!claudeBin) {\n console.error(chalk.red('\u274C Claude CLI not found.'));\n console.log(\n chalk.gray(\n ' Install Claude CLI or set an override:\\n' +\n ' export CLAUDE_BIN=/path/to/claude\\n' +\n ' claude-sm --help\\n\\n' +\n ' Ensure PATH includes npm global bin (npm bin -g).'\n )\n );\n process.exit(1);\n return;\n }\n\n // Setup fallback monitor for automatic Qwen switching on Claude failures\n const fallbackMonitor = new FallbackMonitor({\n enabled: true,\n maxRestarts: 2,\n restartDelayMs: 1500,\n onFallback: (provider, reason) => {\n console.log(chalk.yellow(`\\n[auto-fallback] Switching to ${provider}`));\n console.log(chalk.gray(` Reason: ${reason}`));\n console.log(chalk.gray(` Session will continue on ${provider}...`));\n },\n });\n\n // Check if fallback is available\n const fallbackAvailable = fallbackMonitor.isFallbackAvailable();\n if (fallbackAvailable) {\n console.log(\n chalk.gray(` Auto-fallback: Qwen ready (on rate limit/error)`)\n );\n }\n\n // Launch Claude with fallback monitoring\n const wrapper = fallbackMonitor.wrapProcess(claudeBin, claudeArgs, {\n env: process.env,\n cwd: process.cwd(),\n });\n\n const claude = wrapper.start();\n\n claude.on('error', (err: NodeJS.ErrnoException) => {\n console.error(chalk.red('\u274C Failed to launch Claude CLI.'));\n if (err.code === 'ENOENT') {\n console.error(\n chalk.gray(' Not found. Set CLAUDE_BIN or install claude on PATH.')\n );\n } else if (err.code === 'EPERM' || err.code === 'EACCES') {\n console.error(\n chalk.gray(\n ' Permission/sandbox issue. Try outside a sandbox or set CLAUDE_BIN.'\n )\n );\n } else {\n console.error(chalk.gray(` ${err.message}`));\n }\n process.exit(1);\n });\n\n // Handle exit\n claude.on('exit', async (code) => {\n // Stop GEPA watcher if running\n this.stopGEPAWatcher();\n\n // Check if we were in fallback mode\n const status = fallbackMonitor.getStatus();\n if (status.inFallback) {\n console.log(\n chalk.yellow(\n `\\nSession completed on fallback provider: ${status.currentProvider}`\n )\n );\n }\n // Save final context\n this.saveContext('Claude session ended', {\n action: 'session_end',\n exitCode: code,\n });\n\n // End tracing and show summary if enabled\n if (this.config.tracingEnabled) {\n const summary = trace.getExecutionSummary();\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Debug Trace Summary:'));\n console.log(chalk.gray(summary));\n }\n\n // Bell notification when done\n if (this.config.notifyOnDone) {\n this.notifyDone(code);\n }\n\n // Offer to clean up worktree\n if (this.config.worktreePath) {\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Session ended in worktree:'));\n console.log(chalk.gray(` ${this.config.worktreePath}`));\n console.log();\n console.log(chalk.gray('To remove worktree: gd_claude'));\n console.log(chalk.gray('To merge to main: cwm'));\n }\n\n process.exit(code || 0);\n });\n\n // Handle signals\n process.on('SIGINT', () => {\n this.saveContext('Claude session interrupted', {\n action: 'session_interrupt',\n });\n claude.kill('SIGINT');\n });\n\n process.on('SIGTERM', () => {\n this.saveContext('Claude session terminated', {\n action: 'session_terminate',\n });\n claude.kill('SIGTERM');\n });\n }\n}\n\n// CLI interface\nprogram\n .name('claude-sm')\n .description('Claude with StackMemory context and worktree isolation')\n .version('1.0.0');\n\n// Config subcommand\nconst configCmd = program\n .command('config')\n .description('Manage claude-sm defaults');\n\nconfigCmd\n .command('show')\n .description('Show current default settings')\n .action(() => {\n const config = loadSMConfig();\n console.log(chalk.blue('claude-sm defaults:'));\n const on = chalk.green('ON ');\n const off = chalk.gray('OFF');\n console.log(chalk.cyan('\\n Feature Status'));\n console.log(chalk.gray(' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'));\n console.log(` Predictive Edit ${config.defaultSweep ? on : off}`);\n console.log(` Prompt Forge ${config.defaultGEPA ? on : off}`);\n console.log(` Model Switcher ${config.defaultModelRouting ? on : off}`);\n console.log(` Safe Branch ${config.defaultWorktree ? on : off}`);\n console.log(` Session Insights ${config.defaultTracing ? on : off}`);\n console.log(` Task Alert ${config.defaultNotifyOnDone ? on : off}`);\n console.log(chalk.gray(' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'));\n console.log(` Sandbox ${config.defaultSandbox ? on : off}`);\n console.log(` Chrome ${config.defaultChrome ? on : off}`);\n console.log(` Remote ${config.defaultRemote ? on : off}`);\n console.log(chalk.gray(`\\n Config: ${getConfigPath()}`));\n });\n\nconfigCmd\n .command('set <key> <value>')\n .description('Set a default (e.g., set worktree true)')\n .action((key: string, value: string) => {\n const config = loadSMConfig();\n const boolValue = value === 'true' || value === '1' || value === 'on';\n\n const keyMap: Record<string, keyof ClaudeSMConfig> = {\n worktree: 'defaultWorktree',\n sandbox: 'defaultSandbox',\n chrome: 'defaultChrome',\n tracing: 'defaultTracing',\n 'notify-done': 'defaultNotifyOnDone',\n notifyondone: 'defaultNotifyOnDone',\n 'model-routing': 'defaultModelRouting',\n modelrouting: 'defaultModelRouting',\n sweep: 'defaultSweep',\n gepa: 'defaultGEPA',\n };\n\n const configKey = keyMap[key];\n if (!configKey) {\n console.log(chalk.red(`Unknown key: ${key}`));\n console.log(\n chalk.gray(\n 'Valid keys: worktree, sandbox, chrome, tracing, notify-done, model-routing, sweep, gepa'\n )\n );\n process.exit(1);\n }\n\n config[configKey] = boolValue;\n saveSMConfig(config);\n console.log(chalk.green(`Set ${key} = ${boolValue}`));\n });\n\nconfigCmd\n .command('worktree-on')\n .description('Enable worktree mode by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultWorktree = true;\n saveSMConfig(config);\n console.log(chalk.green('Worktree mode enabled by default'));\n });\n\nconfigCmd\n .command('worktree-off')\n .description('Disable worktree mode by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultWorktree = false;\n saveSMConfig(config);\n console.log(chalk.green('Worktree mode disabled by default'));\n });\n\nconfigCmd\n .command('notify-done-on')\n .description('Enable bell notification when session ends (default)')\n .action(() => {\n const config = loadSMConfig();\n config.defaultNotifyOnDone = true;\n saveSMConfig(config);\n console.log(chalk.green('Notify-on-done enabled by default'));\n });\n\nconfigCmd\n .command('notify-done-off')\n .description('Disable notification when session ends')\n .action(() => {\n const config = loadSMConfig();\n config.defaultNotifyOnDone = false;\n saveSMConfig(config);\n console.log(chalk.green('Notify-on-done disabled by default'));\n });\n\nconfigCmd\n .command('model-routing-on')\n .description(\n 'Enable model routing by default (route tasks to Qwen/other models)'\n )\n .action(() => {\n const config = loadSMConfig();\n config.defaultModelRouting = true;\n saveSMConfig(config);\n console.log(chalk.green('Model routing enabled by default'));\n console.log(chalk.gray('Configure with: stackmemory model setup-qwen'));\n });\n\nconfigCmd\n .command('model-routing-off')\n .description('Disable model routing by default (use Claude only)')\n .action(() => {\n const config = loadSMConfig();\n config.defaultModelRouting = false;\n saveSMConfig(config);\n console.log(chalk.green('Model routing disabled by default'));\n });\n\nconfigCmd\n .command('gepa-on')\n .description('Enable GEPA auto-optimization of CLAUDE.md on changes')\n .action(() => {\n const config = loadSMConfig();\n config.defaultGEPA = true;\n saveSMConfig(config);\n console.log(chalk.green('GEPA auto-optimization enabled by default'));\n console.log(\n chalk.gray('CLAUDE.md changes will trigger evolutionary optimization')\n );\n });\n\nconfigCmd\n .command('gepa-off')\n .description('Disable GEPA auto-optimization')\n .action(() => {\n const config = loadSMConfig();\n config.defaultGEPA = false;\n saveSMConfig(config);\n console.log(chalk.green('GEPA auto-optimization disabled by default'));\n });\n\nconfigCmd\n .command('setup')\n .description('Interactive feature setup wizard')\n .action(async () => {\n const inquirer = await import('inquirer');\n const ora = (await import('ora')).default;\n const config = loadSMConfig();\n\n console.log(chalk.cyan('\\nClaude-SM Feature Setup\\n'));\n\n interface FeatureDef {\n key: keyof ClaudeSMConfig;\n name: string;\n desc: string;\n }\n\n const features: FeatureDef[] = [\n {\n key: 'defaultSweep',\n name: 'Predictive Edit',\n desc: 'AI-powered next-edit suggestions in real-time',\n },\n {\n key: 'defaultGEPA',\n name: 'Prompt Forge',\n desc: 'Evolutionary optimization of system prompts',\n },\n {\n key: 'defaultModelRouting',\n name: 'Model Switcher',\n desc: 'Smart routing across Claude, Qwen, and other models',\n },\n {\n key: 'defaultWorktree',\n name: 'Safe Branch',\n desc: 'Isolated git worktrees for conflict-free parallel work',\n },\n {\n key: 'defaultTracing',\n name: 'Session Insights',\n desc: 'Deep execution tracing and performance analytics',\n },\n {\n key: 'defaultNotifyOnDone',\n name: 'Task Alert',\n desc: 'Instant notification when sessions complete',\n },\n ];\n\n const choices = features.map((f) => ({\n name: `${f.name} - ${f.desc}`,\n value: f.key,\n checked: config[f.key],\n }));\n\n const { selected } = await inquirer.default.prompt([\n {\n type: 'checkbox',\n name: 'selected',\n message: 'Select features to enable:',\n choices,\n },\n ]);\n\n const selectedKeys = selected as string[];\n\n // Apply all toggles\n for (const f of features) {\n config[f.key] = selectedKeys.includes(f.key);\n }\n saveSMConfig(config);\n\n // Post-install: Sweep -> install node-pty\n if (config.defaultSweep) {\n let hasPty = false;\n try {\n await import('node-pty');\n hasPty = true;\n } catch {\n // not installed\n }\n if (!hasPty) {\n const spinner = ora('Installing node-pty...').start();\n try {\n execSync('npm install node-pty', {\n stdio: 'ignore',\n cwd: process.cwd(),\n });\n spinner.succeed('node-pty installed');\n } catch {\n spinner.fail('Failed to install node-pty');\n console.log(chalk.gray(' Install manually: npm install node-pty'));\n }\n }\n }\n\n // Summary\n console.log(chalk.cyan('\\nFeature summary:'));\n for (const f of features) {\n const on = config[f.key];\n const mark = on ? chalk.green('ON') : chalk.gray('OFF');\n console.log(` ${mark} ${f.name}`);\n }\n console.log(chalk.gray(`\\nSaved to ${getConfigPath()}`));\n });\n\n// Spawn subcommand: launch N parallel Claude workers in tmux panes\nprogram\n .command('spawn <count>')\n .description('Spawn N parallel Claude workers in tmux panes')\n .option('-t, --task <desc>', 'Task description for each worker')\n .option('--worktree', 'Create isolated git worktrees per worker')\n .option('--no-sweep', 'Disable Sweep predictions')\n .option('--no-attach', 'Do not attach to tmux session after creation')\n .action(async (countStr: string, opts: Record<string, unknown>) => {\n const count = parseInt(countStr, 10);\n if (isNaN(count) || count < 1 || count > 8) {\n console.error(chalk.red('Worker count must be between 1 and 8'));\n process.exit(1);\n }\n\n if (!isTmuxAvailable()) {\n console.error(chalk.red('tmux is required for parallel workers.'));\n console.log(chalk.gray('Install with: brew install tmux'));\n process.exit(1);\n }\n\n const sessionId = uuidv4().substring(0, 8);\n const sessionName = `claude-sm-${sessionId}`;\n\n console.log(\n chalk.blue(`Spawning ${count} workers in tmux session: ${sessionName}`)\n );\n\n // Create tmux session with the right number of panes\n createTmuxSession(sessionName, count);\n\n const workers: WorkerEntry[] = [];\n const panes = listPanes(sessionName);\n\n for (let i = 0; i < count; i++) {\n const workerId = `w${i}-${uuidv4().substring(0, 6)}`;\n const stateDir = ensureWorkerStateDir(workerId);\n const pane = panes[i] || String(i);\n\n // Build claude-sm command with isolated sweep state\n const parts = ['claude-sm'];\n if (opts['sweep'] === false) parts.push('--no-sweep');\n if (opts['worktree']) parts.push('--worktree');\n if (opts['task']) parts.push('--task', `\"${opts['task']}\"`);\n const cmd = parts.join(' ');\n\n // Set env vars and launch in the pane\n sendToPane(\n sessionName,\n pane,\n `export SWEEP_INSTANCE_ID=${workerId} SWEEP_STATE_DIR=${stateDir} && ${cmd}`\n );\n\n workers.push({\n id: workerId,\n pane,\n cwd: process.cwd(),\n startedAt: new Date().toISOString(),\n stateDir,\n task: opts['task'] as string | undefined,\n });\n\n console.log(\n chalk.gray(\n ` Worker ${i}: ${workerId} (pane ${pane}, state: ${stateDir})`\n )\n );\n }\n\n // Save registry\n const session: WorkerSession = {\n sessionName,\n workers,\n createdAt: new Date().toISOString(),\n };\n saveRegistry(session);\n console.log(chalk.green(`\\nRegistry saved (${workers.length} workers)`));\n\n // Attach unless --no-attach\n if (opts['attach'] !== false) {\n console.log(chalk.gray('Attaching to tmux session...'));\n attachToSession(sessionName);\n } else {\n console.log(\n chalk.gray(`Attach later with: tmux attach -t ${sessionName}`)\n );\n }\n });\n\n// Workers subcommand: list/kill workers\nconst workersCmd = program\n .command('workers')\n .description('List active workers (default) or manage them');\n\nworkersCmd\n .command('list', { isDefault: true })\n .description('List active workers')\n .action(() => {\n const session = loadRegistry();\n if (!session) {\n console.log(chalk.gray('No active worker session.'));\n return;\n }\n\n const alive = sessionExists(session.sessionName);\n const status = alive ? chalk.green('ACTIVE') : chalk.red('DEAD');\n console.log(chalk.blue(`Session: ${session.sessionName} [${status}]`));\n console.log(chalk.gray(`Created: ${session.createdAt}`));\n console.log();\n\n for (const w of session.workers) {\n const taskLabel = w.task ? ` task=\"${w.task}\"` : '';\n console.log(` ${chalk.cyan(w.id)} pane=${w.pane}${taskLabel}`);\n console.log(chalk.gray(` state: ${w.stateDir}`));\n }\n });\n\nworkersCmd\n .command('kill [id]')\n .description('Kill entire session or send Ctrl-C to a specific worker')\n .action((id?: string) => {\n const session = loadRegistry();\n if (!session) {\n console.log(chalk.gray('No active worker session.'));\n return;\n }\n\n if (id) {\n // Kill specific worker\n const worker = session.workers.find((w) => w.id === id);\n if (!worker) {\n console.error(chalk.red(`Worker ${id} not found.`));\n process.exit(1);\n }\n sendCtrlC(session.sessionName, worker.pane);\n console.log(\n chalk.yellow(`Sent Ctrl-C to worker ${id} (pane ${worker.pane})`)\n );\n } else {\n // Kill entire session\n if (sessionExists(session.sessionName)) {\n killTmuxSession(session.sessionName);\n console.log(\n chalk.yellow(`Killed tmux session: ${session.sessionName}`)\n );\n }\n clearRegistry();\n console.log(chalk.gray('Registry cleared.'));\n }\n });\n\n// Main command (default action when no subcommand)\nprogram\n .option('-w, --worktree', 'Create isolated worktree for this instance')\n .option('-W, --no-worktree', 'Disable worktree (override default)')\n .option('-n, --notify-done', 'Bell notification when session ends')\n .option('--no-notify-done', 'Disable notification when session ends')\n .option('-s, --sandbox', 'Enable sandbox mode (file/network restrictions)')\n .option('-c, --chrome', 'Enable Chrome automation')\n .option('-a, --auto', 'Automatically detect and apply best settings')\n .option('-b, --branch <name>', 'Specify branch name for worktree')\n .option('-t, --task <desc>', 'Task description for context')\n .option('--claude-bin <path>', 'Path to claude CLI (or use CLAUDE_BIN)')\n .option('--no-context', 'Disable StackMemory context integration')\n .option('--no-trace', 'Disable debug tracing (enabled by default)')\n .option('--verbose-trace', 'Enable verbose debug tracing with full details')\n .option('--think', 'Enable thinking mode with Qwen (deep reasoning)')\n .option('--think-hard', 'Alias for --think')\n .option('--ultrathink', 'Alias for --think')\n .option('--qwen', 'Force Qwen provider for this session')\n .option('--openai', 'Force OpenAI provider for this session')\n .option('--ollama', 'Force Ollama provider for this session')\n .option('--model-routing', 'Enable model routing')\n .option('--no-model-routing', 'Disable model routing')\n .option('--sweep', 'Enable Sweep next-edit predictions (PTY wrapper)')\n .option('--no-sweep', 'Disable Sweep predictions')\n .option('--gepa', 'Enable GEPA auto-optimization of CLAUDE.md')\n .option('--no-gepa', 'Disable GEPA auto-optimization')\n .helpOption('-h, --help', 'Display help')\n .allowUnknownOption(true)\n .action(async (_options) => {\n const claudeSM = new ClaudeSM();\n const args = process.argv.slice(2);\n await claudeSM.run(args);\n });\n\n// Handle direct execution\n// ESM-safe CLI entry\nprogram.parse(process.argv);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["claudeBin"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/codex-sm-danger.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n\n/**\n * codex-sm-danger: Codex-SM wrapper with --dangerously-skip-permissions\n * Shorthand for: codex-sm --dangerously-skip-permissions [args]\n */\n\nimport { spawn } from 'child_process';\nimport * as path from 'path';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\n// Get the codex-sm script path\nconst codexSmPath = path.join(__dirname, 'codex-sm.js');\n\n// Prepend the danger flag to all args\nconst args = ['--dangerously-skip-permissions', ...process.argv.slice(2)];\n\n// Spawn codex-sm with the danger flag\nconst child = spawn('node', [codexSmPath, ...args], {\n stdio: 'inherit',\n env: process.env,\n});\n\nchild.on('exit', (code) => {\n process.exit(code || 0);\n});\n\nchild.on('error', (err) => {\n console.error('Failed to launch codex-sm:', err.message);\n process.exit(1);\n});\n"],
|
|
5
|
-
"mappings": ";;;;;AAOA,SAAS,aAAa;AACtB,YAAY,UAAU;AAKtB,MAAM,cAAc,KAAK,KAAK,WAAW,aAAa;AAGtD,MAAM,OAAO,CAAC,kCAAkC,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC;AAGxE,MAAM,QAAQ,MAAM,QAAQ,CAAC,aAAa,GAAG,IAAI,GAAG;AAAA,EAClD,OAAO;AAAA,EACP,KAAK,QAAQ;AACf,CAAC;AAED,MAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,UAAQ,KAAK,QAAQ,CAAC;AACxB,CAAC;AAED,MAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,UAAQ,MAAM,8BAA8B,IAAI,OAAO;AACvD,UAAQ,KAAK,CAAC;AAChB,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/codex-sm.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n\n/**\n * codex-sm: Codex wrapper with StackMemory and worktree integration\n * Automatically manages context persistence, optional worktree isolation, and tracing\n */\n\nimport { spawn, execSync, execFileSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { program } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\nimport chalk from 'chalk';\nimport { initializeTracing, trace } from '../core/trace/index.js';\n\ninterface CodexConfig {\n instanceId: string;\n worktreePath?: string;\n useWorktree: boolean;\n contextEnabled: boolean;\n branch?: string;\n task?: string;\n tracingEnabled: boolean;\n verboseTracing: boolean;\n codexBin?: string;\n}\n\nclass CodexSM {\n private config: CodexConfig;\n private stackmemoryPath: string;\n\n constructor() {\n this.config = {\n instanceId: this.generateInstanceId(),\n useWorktree: false,\n contextEnabled: true,\n tracingEnabled: true,\n verboseTracing: false,\n };\n\n this.stackmemoryPath = this.findStackMemory();\n }\n\n private getRepoRoot(): string | null {\n try {\n const root = execSync('git rev-parse --show-toplevel', {\n encoding: 'utf8',\n }).trim();\n return root || null;\n } catch {\n return null;\n }\n }\n\n private ensureInitialized(): void {\n try {\n const root = this.getRepoRoot();\n const dir = root || process.cwd();\n const dbPath = path.join(dir, '.stackmemory', 'context.db');\n if (!fs.existsSync(dbPath)) {\n console.log(\n chalk.blue('\uD83D\uDCE6 Initializing StackMemory for this project...')\n );\n execSync(`${this.stackmemoryPath} init`, {\n cwd: dir,\n stdio: ['ignore', 'ignore', 'ignore'],\n });\n }\n } catch {\n // Non-fatal: allow Codex to run without context\n }\n }\n\n private generateInstanceId(): string {\n return uuidv4().substring(0, 8);\n }\n\n private findStackMemory(): string {\n const possiblePaths = [\n path.join(os.homedir(), '.stackmemory', 'bin', 'stackmemory'),\n '/usr/local/bin/stackmemory',\n '/opt/homebrew/bin/stackmemory',\n 'stackmemory',\n ];\n for (const smPath of possiblePaths) {\n try {\n execFileSync('which', [smPath], { stdio: 'ignore' });\n return smPath;\n } catch {\n // continue\n }\n }\n return 'stackmemory';\n }\n\n private isGitRepo(): boolean {\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n private getCurrentBranch(): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf8',\n }).trim();\n } catch {\n return 'main';\n }\n }\n\n private hasUncommittedChanges(): boolean {\n try {\n const status = execSync('git status --porcelain', { encoding: 'utf8' });\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n private resolveCodexBin(): string | null {\n // 1) CLI option\n if (this.config.codexBin && this.config.codexBin.trim()) {\n return this.config.codexBin.trim();\n }\n // 2) Environment override\n const envBin = process.env['CODEX_BIN'];\n if (envBin && envBin.trim()) {\n return envBin.trim();\n }\n // 3) Detect on PATH\n try {\n execSync('which codex', { stdio: 'ignore' });\n return 'codex';\n } catch {}\n try {\n execSync('which codex-cli', { stdio: 'ignore' });\n return 'codex-cli';\n } catch {}\n return null;\n }\n\n private setupWorktree(): string | null {\n if (!this.config.useWorktree || !this.isGitRepo()) return null;\n\n console.log(chalk.blue('\uD83C\uDF33 Setting up isolated worktree...'));\n\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.]/g, '-')\n .substring(0, 19);\n const branch =\n this.config.branch ||\n `codex-${this.config.task || 'work'}-${timestamp}-${this.config.instanceId}`;\n const repoName = path.basename(process.cwd());\n const worktreePath = path.join(\n path.dirname(process.cwd()),\n `${repoName}--${branch}`\n );\n\n try {\n const cmd = `git worktree add -b \"${branch}\" \"${worktreePath}\"`;\n execSync(cmd, { stdio: 'inherit' });\n\n console.log(chalk.green(`Worktree created: ${worktreePath}`));\n console.log(chalk.gray(` Branch: ${branch}`));\n\n const configPath = path.join(worktreePath, '.codex-instance.json');\n const configData = {\n instanceId: this.config.instanceId,\n worktreePath,\n branch,\n task: this.config.task,\n created: new Date().toISOString(),\n parentRepo: process.cwd(),\n };\n fs.writeFileSync(configPath, JSON.stringify(configData, null, 2));\n\n const envFiles = ['.env', '.env.local', '.mise.toml', '.tool-versions'];\n for (const file of envFiles) {\n const srcPath = path.join(process.cwd(), file);\n if (fs.existsSync(srcPath))\n fs.copyFileSync(srcPath, path.join(worktreePath, file));\n }\n\n return worktreePath;\n } catch (err: unknown) {\n console.error(chalk.red('Failed to create worktree:'), err);\n return null;\n }\n }\n\n private saveContext(\n message: string,\n metadata: Record<string, unknown> = {}\n ): void {\n if (!this.config.contextEnabled) return;\n try {\n const contextData = {\n message,\n metadata: {\n ...metadata,\n instanceId: this.config.instanceId,\n worktree: this.config.worktreePath,\n timestamp: new Date().toISOString(),\n },\n };\n const cmd = `${this.stackmemoryPath} context save --json '${JSON.stringify(contextData)}'`;\n execSync(cmd, { stdio: 'ignore' });\n } catch {\n // ignore\n }\n }\n\n private loadContext(): void {\n if (!this.config.contextEnabled) return;\n try {\n console.log(chalk.blue('\uD83D\uDCDA Loading previous context...'));\n const cmd = `${this.stackmemoryPath} context list --limit 5 --format json`;\n const output = execSync(cmd, { encoding: 'utf8' });\n const contexts = JSON.parse(output);\n if (Array.isArray(contexts) && contexts.length > 0) {\n console.log(chalk.gray('Recent context loaded:'));\n contexts.forEach(\n (ctx: { message: string; metadata?: { timestamp?: string } }) => {\n console.log(\n chalk.gray(` - ${ctx.message} (${ctx.metadata?.timestamp})`)\n );\n }\n );\n }\n } catch {\n // ignore\n }\n }\n\n private suggestWorktreeMode(): void {\n if (this.hasUncommittedChanges()) {\n console.log(chalk.yellow('WARNING: Uncommitted changes detected'));\n console.log(\n chalk.gray(' Consider using --worktree to work in isolation')\n );\n }\n }\n\n public async run(args: string[]): Promise<void> {\n const codexArgs: string[] = [];\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\n switch (arg) {\n case '--worktree':\n case '-w':\n this.config.useWorktree = true;\n break;\n case '--no-context':\n this.config.contextEnabled = false;\n break;\n case '--no-trace':\n this.config.tracingEnabled = false;\n break;\n case '--verbose-trace':\n this.config.verboseTracing = true;\n break;\n case '--branch':\n case '-b':\n i++;\n this.config.branch = args[i];\n break;\n case '--task':\n case '-t':\n i++;\n this.config.task = args[i];\n break;\n case '--codex-bin':\n i++;\n this.config.codexBin = args[i];\n process.env['CODEX_BIN'] = this.config.codexBin;\n break;\n case '--auto':\n case '-a':\n if (this.isGitRepo()) {\n this.config.useWorktree = this.hasUncommittedChanges();\n }\n break;\n default:\n codexArgs.push(arg);\n }\n i++;\n }\n\n if (this.config.tracingEnabled) {\n process.env['DEBUG_TRACE'] = 'true';\n process.env['STACKMEMORY_DEBUG'] = 'true';\n process.env['TRACE_OUTPUT'] = 'file';\n process.env['TRACE_MASK_SENSITIVE'] = 'true';\n if (this.config.verboseTracing) {\n process.env['TRACE_VERBOSITY'] = 'full';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'true';\n process.env['TRACE_MEMORY'] = 'true';\n } else {\n process.env['TRACE_VERBOSITY'] = 'summary';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'false';\n }\n initializeTracing();\n trace.command(\n 'codex-sm',\n {\n instanceId: this.config.instanceId,\n worktree: this.config.useWorktree,\n task: this.config.task,\n },\n async () => {}\n );\n }\n\n console.log(chalk.blue('\u2554\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\u2557'));\n console.log(chalk.blue('\u2551 Codex + StackMemory + Worktree \u2551'));\n console.log(chalk.blue('\u255A\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\u255D'));\n\n // Ensure project has StackMemory initialized (if possible)\n this.ensureInitialized();\n console.log();\n\n if (this.isGitRepo()) {\n const branch = this.getCurrentBranch();\n console.log(chalk.gray(`\uD83D\uDCCD Current branch: ${branch}`));\n if (!this.config.useWorktree) this.suggestWorktreeMode();\n }\n\n if (this.config.useWorktree) {\n const worktreePath = this.setupWorktree();\n if (worktreePath) {\n this.config.worktreePath = worktreePath;\n process.chdir(worktreePath);\n this.saveContext('Created worktree for Codex instance', {\n action: 'worktree_created',\n path: worktreePath,\n branch: this.config.branch,\n });\n }\n }\n\n this.loadContext();\n\n process.env['CODEX_INSTANCE_ID'] = this.config.instanceId;\n if (this.config.worktreePath)\n process.env['CODEX_WORKTREE_PATH'] = this.config.worktreePath;\n\n console.log(chalk.gray(`\uD83E\uDD16 Instance ID: ${this.config.instanceId}`));\n console.log(chalk.gray(`\uD83D\uDCC1 Working in: ${process.cwd()}`));\n\n console.log();\n console.log(chalk.gray('Starting Codex...'));\n console.log(chalk.gray('\u2500'.repeat(42)));\n\n const codexBin = this.resolveCodexBin();\n\n if (!codexBin) {\n console.error(chalk.red('\u274C Codex CLI not found.'));\n console.log(\n chalk.gray(\n ' Install codex/codex-cli or set an override:\\n' +\n ' export CODEX_BIN=/path/to/codex\\n' +\n ' codex-sm --help\\n\\n' +\n ' Ensure PATH includes npm global bin (npm bin -g).'\n )\n );\n process.exit(1);\n return;\n }\n\n const child = spawn(codexBin, codexArgs, {\n stdio: 'inherit',\n env: process.env,\n });\n\n child.on('error', (err: NodeJS.ErrnoException) => {\n console.error(chalk.red('\u274C Failed to launch Codex CLI.'));\n if (err.code === 'ENOENT') {\n console.error(\n chalk.gray(\n ' Not found. Set CODEX_BIN or install codex/codex-cli on PATH.'\n )\n );\n } else if (err.code === 'EPERM' || err.code === 'EACCES') {\n console.error(\n chalk.gray(\n ' Permission/sandbox issue. Try running outside a sandbox or set CODEX_BIN.'\n )\n );\n } else {\n console.error(chalk.gray(` ${err.message}`));\n }\n process.exit(1);\n });\n\n child.on('exit', (code) => {\n this.saveContext('Codex session ended', {\n action: 'session_end',\n exitCode: code,\n });\n if (this.config.tracingEnabled) {\n const summary = trace.getExecutionSummary();\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Debug Trace Summary:'));\n console.log(chalk.gray(summary));\n }\n if (this.config.worktreePath) {\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Session ended in worktree:'));\n console.log(chalk.gray(` ${this.config.worktreePath}`));\n }\n process.exit(code || 0);\n });\n\n process.on('SIGINT', () => {\n this.saveContext('Codex session interrupted', {\n action: 'session_interrupt',\n });\n child.kill('SIGINT');\n });\n\n process.on('SIGTERM', () => {\n this.saveContext('Codex session terminated', {\n action: 'session_terminate',\n });\n child.kill('SIGTERM');\n });\n }\n}\n\nprogram\n .name('codex-sm')\n .description('Codex with StackMemory context and optional worktree isolation')\n .version('1.0.0')\n .option('-w, --worktree', 'Create isolated worktree for this instance')\n .option('-a, --auto', 'Automatically detect and apply best settings')\n .option('-b, --branch <name>', 'Specify branch name for worktree')\n .option('-t, --task <desc>', 'Task description for context')\n .option('--codex-bin <path>', 'Path to codex/codex-cli (or use CODEX_BIN)')\n .option('--no-context', 'Disable StackMemory context integration')\n .option('--no-trace', 'Disable debug tracing (enabled by default)')\n .option('--verbose-trace', 'Enable verbose debug tracing with full details')\n .helpOption('-h, --help', 'Display help')\n .allowUnknownOption(true)\n .action(async (_options) => {\n const codexSM = new CodexSM();\n const args = process.argv.slice(2);\n await codexSM.run(args);\n });\n\n// ESM-safe CLI entry\nprogram.parse(process.argv);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cli/commands/api.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * CLI Commands for API Skill\n *\n * Provides command-line interface for managing and executing APIs\n * via the Restish-based API skill.\n */\n\nimport { Command } from 'commander';\nimport { getAPISkill } from '../../skills/api-skill.js';\nimport { getAPIDiscovery } from '../../skills/api-discovery.js';\n\nexport function createAPICommand(): Command {\n const api = new Command('api');\n api.description('OpenAPI-based API access via Restish');\n\n // Add API\n api\n .command('add <name> <url>')\n .description('Register a new API')\n .option('--spec <url>', 'OpenAPI spec URL')\n .option(\n '--auth-type <type>',\n 'Authentication type (none|api-key|oauth2|basic)',\n 'none'\n )\n .option('--header-name <name>', 'Auth header name', 'Authorization')\n .option('--env-var <name>', 'Environment variable for auth token')\n .action(async (name: string, url: string, options) => {\n const skill = getAPISkill();\n const result = await skill.add(name, url, {\n spec: options.spec,\n authType: options.authType,\n headerName: options.headerName,\n envVar: options.envVar,\n });\n\n if (result.success) {\n console.log(`API '${name}' registered`);\n if (result.data) {\n console.log(JSON.stringify(result.data, null, 2));\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // List APIs\n api\n .command('list')\n .description('List all registered APIs')\n .action(async () => {\n const skill = getAPISkill();\n const result = await skill.list();\n\n if (result.success) {\n if (Array.isArray(result.data) && result.data.length === 0) {\n console.log(\n 'No APIs registered. Use: stackmemory api add <name> <url>'\n );\n } else {\n console.log('Registered APIs:');\n for (const api of result.data as Array<{\n name: string;\n baseUrl: string;\n authType: string;\n operations: number | string;\n }>) {\n console.log(` ${api.name}`);\n console.log(` URL: ${api.baseUrl}`);\n console.log(` Auth: ${api.authType}`);\n console.log(` Operations: ${api.operations}`);\n }\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Describe API\n api\n .command('describe <name> [operation]')\n .description('Show API details or specific operation')\n .action(async (name: string, operation?: string) => {\n const skill = getAPISkill();\n const result = await skill.describe(name, operation);\n\n if (result.success) {\n console.log(result.message);\n if (result.data) {\n console.log(JSON.stringify(result.data, null, 2));\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Execute API operation\n api\n .command('exec <name> <operation>')\n .description('Execute an API operation')\n .option('--raw', 'Output raw response')\n .option('--filter <query>', 'Filter/project response using shorthand query')\n .option('-H, --header <header...>', 'Add custom headers (key:value)')\n .allowUnknownOption(true)\n .action(async (name: string, operation: string, options, command) => {\n const skill = getAPISkill();\n\n // Parse unknown options as API parameters\n const params: Record<string, unknown> = {};\n const args = command.args.slice(2); // Skip name and operation\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg.startsWith('--')) {\n const key = arg.slice(2);\n const nextArg = args[i + 1];\n if (nextArg && !nextArg.startsWith('--')) {\n params[key] = nextArg;\n i++;\n } else {\n params[key] = true;\n }\n }\n }\n\n // Parse headers\n const headers: Record<string, string> = {};\n if (options.header) {\n for (const h of options.header) {\n const [key, ...valueParts] = h.split(':');\n headers[key] = valueParts.join(':').trim();\n }\n }\n\n const result = await skill.exec(name, operation, params, {\n raw: options.raw,\n filter: options.filter,\n headers,\n });\n\n if (result.success) {\n if (typeof result.data === 'string') {\n console.log(result.data);\n } else {\n console.log(JSON.stringify(result.data, null, 2));\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Configure auth\n api\n .command('auth <name>')\n .description('Configure API authentication')\n .option('--token <token>', 'API token/key')\n .option('--env-var <name>', 'Environment variable name for token')\n .option('--oauth', 'Use OAuth2 flow')\n .option('--scopes <scopes>', 'OAuth2 scopes (comma-separated)')\n .action(async (name: string, options) => {\n const skill = getAPISkill();\n\n const result = await skill.auth(name, {\n token: options.token,\n envVar: options.envVar,\n oauth: options.oauth,\n scopes: options.scopes?.split(','),\n });\n\n if (result.success) {\n console.log(result.message);\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Sync API\n api\n .command('sync <name>')\n .description('Refresh API operations from spec')\n .action(async (name: string) => {\n const skill = getAPISkill();\n const result = await skill.sync(name);\n\n if (result.success) {\n console.log(result.message);\n if (result.data?.operations) {\n console.log(\n `Operations: ${(result.data.operations as string[]).join(', ')}`\n );\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Remove API\n api\n .command('remove <name>')\n .description('Remove a registered API')\n .action(async (name: string) => {\n const skill = getAPISkill();\n const result = await skill.remove(name);\n\n if (result.success) {\n console.log(result.message);\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Discover API from URL\n api\n .command('discover <url>')\n .description('Analyze a URL and discover API endpoints')\n .option('--register', 'Auto-register if API is discovered')\n .action(async (url: string, options) => {\n const discovery = getAPIDiscovery();\n\n // Use analyzeUrl directly for quick response (no network probing)\n const result = discovery.analyzeUrl(url);\n\n if (result) {\n console.log(`Discovered API: ${result.name}`);\n console.log(` Base URL: ${result.baseUrl}`);\n console.log(` Spec URL: ${result.specUrl || 'not found'}`);\n console.log(` Type: ${result.apiType || 'rest'}`);\n console.log(` Source: ${result.source}`);\n console.log(` Confidence: ${(result.confidence * 100).toFixed(0)}%`);\n\n if (result.apiType === 'graphql') {\n console.log(\n `\\nNote: This is a GraphQL API. Use a GraphQL client for queries.`\n );\n } else if (result.apiType === 'google-discovery') {\n console.log(\n `\\nNote: This uses Google Discovery format. Auth via gcloud CLI.`\n );\n }\n\n if (options.register) {\n await discovery.registerAPI(result);\n console.log(\n `\\nAPI registered. Use: stackmemory api exec ${result.name} <path>`\n );\n } else {\n console.log(\n `\\nTo register: stackmemory api add ${result.name} ${result.baseUrl}`\n );\n }\n } else {\n console.log('No API detected in this URL');\n }\n });\n\n // List discovered APIs\n api\n .command('discovered')\n .description('List all auto-discovered APIs')\n .action(() => {\n const discovery = getAPIDiscovery();\n const discovered = discovery.getDiscoveredAPIs();\n\n if (discovered.length === 0) {\n console.log('No APIs discovered yet.');\n console.log(\n 'Browse API documentation or use: stackmemory api discover <url>'\n );\n return;\n }\n\n console.log('Discovered APIs:');\n for (const api of discovered) {\n console.log(` ${api.name}`);\n console.log(` Base: ${api.baseUrl}`);\n console.log(` Spec: ${api.specUrl || 'none'}`);\n console.log(` Confidence: ${(api.confidence * 100).toFixed(0)}%`);\n }\n });\n\n // Register all discovered APIs\n api\n .command('register-discovered')\n .description('Register all discovered APIs')\n .action(async () => {\n const discovery = getAPIDiscovery();\n const discovered = discovery.getDiscoveredAPIs();\n\n if (discovered.length === 0) {\n console.log('No APIs to register. Use: stackmemory api discover <url>');\n return;\n }\n\n let registered = 0;\n for (const api of discovered) {\n if (await discovery.registerAPI(api)) {\n console.log(`Registered: ${api.name}`);\n registered++;\n }\n }\n\n console.log(`\\nRegistered ${registered}/${discovered.length} APIs`);\n });\n\n // Help\n api\n .command('help')\n .description('Show API skill help')\n .action(() => {\n const skill = getAPISkill();\n const discovery = getAPIDiscovery();\n console.log(skill.getHelp());\n console.log('\\n---\\n');\n console.log(discovery.getHelp());\n });\n\n return api;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["api"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cli/commands/auto-background.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * CLI command for managing auto-background settings\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { join } from 'path';\nimport {\n loadConfig,\n saveConfig,\n AutoBackgroundConfig,\n} from '../../hooks/auto-background.js';\n\n// __dirname provided by esbuild banner\n\nexport function createAutoBackgroundCommand(): Command {\n const cmd = new Command('auto-bg')\n .description('Manage auto-background settings for long-running commands')\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory auto-bg show Show current configuration\n stackmemory auto-bg enable Enable auto-backgrounding\n stackmemory auto-bg disable Disable auto-backgrounding\n stackmemory auto-bg add \"npm publish\" Add command to always-background list\n stackmemory auto-bg remove \"npm test\" Remove command from list\n stackmemory auto-bg timeout 10000 Set timeout to 10 seconds\n stackmemory auto-bg install Install Claude Code hook\n`\n );\n\n cmd\n .command('show')\n .description('Show current auto-background configuration')\n .action(() => {\n const config = loadConfig();\n console.log(chalk.blue('Auto-Background Configuration:'));\n console.log();\n console.log(\n ` ${chalk.gray('Enabled:')} ${config.enabled ? chalk.green('yes') : chalk.red('no')}`\n );\n console.log(` ${chalk.gray('Timeout:')} ${config.timeoutMs}ms`);\n console.log(\n ` ${chalk.gray('Verbose:')} ${config.verbose ? 'yes' : 'no'}`\n );\n console.log();\n console.log(chalk.blue('Always Background:'));\n config.alwaysBackground.forEach((p) => console.log(` - ${p}`));\n console.log();\n console.log(chalk.blue('Never Background:'));\n config.neverBackground.forEach((p) => console.log(` - ${p}`));\n });\n\n cmd\n .command('enable')\n .description('Enable auto-backgrounding')\n .action(() => {\n const config = loadConfig();\n config.enabled = true;\n saveConfig(config);\n console.log(chalk.green('Auto-background enabled'));\n });\n\n cmd\n .command('disable')\n .description('Disable auto-backgrounding')\n .action(() => {\n const config = loadConfig();\n config.enabled = false;\n saveConfig(config);\n console.log(chalk.yellow('Auto-background disabled'));\n });\n\n cmd\n .command('add <pattern>')\n .description('Add command pattern to always-background list')\n .action((pattern: string) => {\n const config = loadConfig();\n if (!config.alwaysBackground.includes(pattern)) {\n config.alwaysBackground.push(pattern);\n saveConfig(config);\n console.log(chalk.green(`Added: ${pattern}`));\n } else {\n console.log(chalk.yellow(`Already in list: ${pattern}`));\n }\n });\n\n cmd\n .command('remove <pattern>')\n .description('Remove command pattern from always-background list')\n .action((pattern: string) => {\n const config = loadConfig();\n const idx = config.alwaysBackground.indexOf(pattern);\n if (idx !== -1) {\n config.alwaysBackground.splice(idx, 1);\n saveConfig(config);\n console.log(chalk.green(`Removed: ${pattern}`));\n } else {\n console.log(chalk.yellow(`Not in list: ${pattern}`));\n }\n });\n\n cmd\n .command('timeout <ms>')\n .description('Set timeout threshold in milliseconds')\n .action((ms: string) => {\n const config = loadConfig();\n const timeout = parseInt(ms, 10);\n if (isNaN(timeout) || timeout < 0) {\n console.log(chalk.red('Invalid timeout value'));\n return;\n }\n config.timeoutMs = timeout;\n saveConfig(config);\n console.log(chalk.green(`Timeout set to ${timeout}ms`));\n });\n\n cmd\n .command('verbose [on|off]')\n .description('Enable/disable verbose logging')\n .action((value?: string) => {\n const config = loadConfig();\n if (value === undefined) {\n config.verbose = !config.verbose;\n } else {\n config.verbose = value === 'on' || value === 'true';\n }\n saveConfig(config);\n console.log(\n chalk.green(\n `Verbose logging ${config.verbose ? 'enabled' : 'disabled'}`\n )\n );\n });\n\n cmd\n .command('reset')\n .description('Reset configuration to defaults')\n .action(() => {\n const defaultConfig: AutoBackgroundConfig = {\n enabled: true,\n timeoutMs: 5000,\n alwaysBackground: [\n 'npm install',\n 'npm ci',\n 'yarn install',\n 'pnpm install',\n 'bun install',\n 'npm run build',\n 'yarn build',\n 'pnpm build',\n 'cargo build',\n 'go build',\n 'make',\n 'npm test',\n 'npm run test',\n 'yarn test',\n 'pytest',\n 'jest',\n 'vitest',\n 'cargo test',\n 'docker build',\n 'docker-compose up',\n 'docker compose up',\n 'git clone',\n 'git fetch --all',\n 'npx tsc',\n 'tsc --noEmit',\n 'eslint .',\n 'npm run lint',\n ],\n neverBackground: [\n 'vim',\n 'nvim',\n 'nano',\n 'less',\n 'more',\n 'top',\n 'htop',\n 'echo',\n 'cat',\n 'ls',\n 'pwd',\n 'cd',\n 'which',\n 'git status',\n 'git diff',\n 'git log',\n ],\n verbose: false,\n };\n saveConfig(defaultConfig);\n console.log(chalk.green('Configuration reset to defaults'));\n });\n\n cmd\n .command('install')\n .description('Install Claude Code hook for auto-backgrounding')\n .action(() => {\n try {\n // Find the install script\n const scriptPath = join(\n __dirname,\n '../../../scripts/install-auto-background-hook.sh'\n );\n execSync(`bash \"${scriptPath}\"`, { stdio: 'inherit' });\n } catch {\n console.error(chalk.red('Failed to install hook'));\n console.log(\n chalk.gray(\n 'Run manually: bash scripts/install-auto-background-hook.sh'\n )\n );\n }\n });\n\n return cmd;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cli/commands/cleanup-processes.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * CLI Command for Process Cleanup\n */\n\nimport { Command } from 'commander';\nimport {\n cleanupStaleProcesses,\n findStaleProcesses,\n getStackmemoryProcesses,\n} from '../../utils/process-cleanup.js';\n\nexport function createCleanupProcessesCommand(): Command {\n const cmd = new Command('cleanup-processes');\n cmd.description('Clean up stale stackmemory processes');\n\n cmd\n .option('--max-age <hours>', 'Max process age in hours (default: 24)', '24')\n .option('--dry-run', 'Show what would be killed without actually killing')\n .option('--all', 'Show all stackmemory processes (not just stale)')\n .option('--force', 'Kill without checking log activity')\n .action((options) => {\n const maxAgeHours = parseInt(options.maxAge, 10);\n\n if (options.all) {\n // Just list all processes\n const processes = getStackmemoryProcesses();\n\n if (processes.length === 0) {\n console.log('No stackmemory processes running');\n return;\n }\n\n console.log(`Found ${processes.length} stackmemory process(es):\\n`);\n for (const proc of processes) {\n const age =\n proc.ageHours < 1\n ? `${Math.round(proc.ageHours * 60)}m`\n : `${Math.round(proc.ageHours)}h`;\n console.log(` PID ${proc.pid} (${age} old)`);\n console.log(` ${proc.command}`);\n }\n return;\n }\n\n // Find and optionally kill stale processes\n const staleProcesses = options.force\n ? getStackmemoryProcesses().filter((p) => p.ageHours >= maxAgeHours)\n : findStaleProcesses(maxAgeHours);\n\n if (staleProcesses.length === 0) {\n console.log(`No stale processes older than ${maxAgeHours}h found`);\n return;\n }\n\n console.log(\n `Found ${staleProcesses.length} stale process(es) older than ${maxAgeHours}h:\\n`\n );\n\n for (const proc of staleProcesses) {\n const age = `${Math.round(proc.ageHours)}h`;\n console.log(` PID ${proc.pid} (${age} old)`);\n console.log(` ${proc.command}`);\n if (proc.lastLogActivity) {\n console.log(` Last log: ${proc.lastLogActivity.toISOString()}`);\n }\n }\n\n if (options.dryRun) {\n console.log('\\n[DRY RUN] No processes killed');\n return;\n }\n\n console.log('\\nKilling stale processes...');\n const result = cleanupStaleProcesses({ maxAgeHours, dryRun: false });\n\n console.log(`\\nKilled: ${result.killed.length}`);\n if (result.errors.length > 0) {\n console.log(`Errors: ${result.errors.length}`);\n for (const err of result.errors) {\n console.log(` PID ${err.pid}: ${err.error}`);\n }\n }\n });\n\n return cmd;\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAIA,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,SAAS,gCAAyC;AACvD,QAAM,MAAM,IAAI,QAAQ,mBAAmB;AAC3C,MAAI,YAAY,sCAAsC;AAEtD,MACG,OAAO,qBAAqB,0CAA0C,IAAI,EAC1E,OAAO,aAAa,oDAAoD,EACxE,OAAO,SAAS,iDAAiD,EACjE,OAAO,WAAW,oCAAoC,EACtD,OAAO,CAAC,YAAY;AACnB,UAAM,cAAc,SAAS,QAAQ,QAAQ,EAAE;AAE/C,QAAI,QAAQ,KAAK;AAEf,YAAM,YAAY,wBAAwB;AAE1C,UAAI,UAAU,WAAW,GAAG;AAC1B,gBAAQ,IAAI,kCAAkC;AAC9C;AAAA,MACF;AAEA,cAAQ,IAAI,SAAS,UAAU,MAAM;AAAA,CAA6B;AAClE,iBAAW,QAAQ,WAAW;AAC5B,cAAM,MACJ,KAAK,WAAW,IACZ,GAAG,KAAK,MAAM,KAAK,WAAW,EAAE,CAAC,MACjC,GAAG,KAAK,MAAM,KAAK,QAAQ,CAAC;AAClC,gBAAQ,IAAI,SAAS,KAAK,GAAG,KAAK,GAAG,OAAO;AAC5C,gBAAQ,IAAI,OAAO,KAAK,OAAO,EAAE;AAAA,MACnC;AACA;AAAA,IACF;AAGA,UAAM,iBAAiB,QAAQ,QAC3B,wBAAwB,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,WAAW,IACjE,mBAAmB,WAAW;AAElC,QAAI,eAAe,WAAW,GAAG;AAC/B,cAAQ,IAAI,iCAAiC,WAAW,SAAS;AACjE;AAAA,IACF;AAEA,YAAQ;AAAA,MACN,SAAS,eAAe,MAAM,iCAAiC,WAAW;AAAA;AAAA,IAC5E;AAEA,eAAW,QAAQ,gBAAgB;AACjC,YAAM,MAAM,GAAG,KAAK,MAAM,KAAK,QAAQ,CAAC;AACxC,cAAQ,IAAI,SAAS,KAAK,GAAG,KAAK,GAAG,OAAO;AAC5C,cAAQ,IAAI,OAAO,KAAK,OAAO,EAAE;AACjC,UAAI,KAAK,iBAAiB;AACxB,gBAAQ,IAAI,iBAAiB,KAAK,gBAAgB,YAAY,CAAC,EAAE;AAAA,MACnE;AAAA,IACF;AAEA,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAI,iCAAiC;AAC7C;AAAA,IACF;AAEA,YAAQ,IAAI,8BAA8B;AAC1C,UAAM,SAAS,sBAAsB,EAAE,aAAa,QAAQ,MAAM,CAAC;AAEnE,YAAQ,IAAI;AAAA,UAAa,OAAO,OAAO,MAAM,EAAE;AAC/C,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,cAAQ,IAAI,WAAW,OAAO,OAAO,MAAM,EAAE;AAC7C,iBAAW,OAAO,OAAO,QAAQ;AAC/B,gBAAQ,IAAI,SAAS,IAAI,GAAG,KAAK,IAAI,KAAK,EAAE;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,CAAC;AAEH,SAAO;AACT;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cli/commands/clear.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n/**\n * Clear command for StackMemory\n * Manages context clearing with ledger preservation\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport Database from 'better-sqlite3';\nimport { existsSync } from 'fs';\nimport { ClearSurvival } from '../../core/session/clear-survival.js';\nimport { FrameManager } from '../../core/context/index.js';\nimport { HandoffGenerator } from '../../core/session/handoff-generator.js';\nimport { sessionManager } from '../../core/session/session-manager.js';\nimport { getEnv, getOptionalEnv } from '../../utils/env.js';\n\nconst clearCommand = new Command('clear')\n .description('Manage context clearing with ledger preservation')\n .option('--save', 'Save continuity ledger before clearing')\n .option('--restore', 'Restore from continuity ledger')\n .option('--check', 'Check if clear is recommended')\n .option('--auto', 'Automatically save if needed and clear')\n .option('--status', 'Show current context usage')\n .option('--show-ledger', 'Display current ledger')\n .action(async (options) => {\n const spinner = ora();\n\n try {\n // Initialize managers\n const projectRoot = process.cwd();\n const dbPath = path.join(projectRoot, '.stackmemory', 'context.db');\n\n // Check if StackMemory is initialized\n if (!existsSync(dbPath)) {\n console.error(\n chalk.red('\u2717 StackMemory not initialized in this directory')\n );\n console.log(chalk.yellow('Run: stackmemory init'));\n process.exit(1);\n }\n\n const db = new Database(dbPath);\n\n // Initialize session manager\n await sessionManager.initialize();\n const session = await sessionManager.getOrCreateSession({\n projectPath: projectRoot,\n });\n\n const frameManager = new FrameManager(db, session.projectId);\n // For testing - use a mock handoff generator\n const handoffGenerator = {\n generateHandoff: () => Promise.resolve('Mock handoff'),\n getHandoffPath: () => 'mock.md',\n };\n // Create a stub DatabaseManager for ClearSurvival\n const dbManager = {\n getCurrentSessionId: () => Promise.resolve(session.id),\n getSession: () => Promise.resolve(session),\n getRecentTraces: () => Promise.resolve([]),\n getRecentFrames: () => Promise.resolve([]),\n addAnchor: () => Promise.resolve(),\n } as any;\n const clearSurvival = new ClearSurvival(\n frameManager,\n dbManager,\n handoffGenerator as any,\n projectRoot\n );\n\n // Handle different options\n if (options.status) {\n await showContextStatus(clearSurvival);\n } else if (options.check) {\n await checkIfClearRecommended(clearSurvival);\n } else if (options.save) {\n await saveLedger(clearSurvival, spinner);\n } else if (options.restore) {\n await restoreFromLedger(clearSurvival, spinner);\n } else if (options.showLedger) {\n await showLedger(projectRoot);\n } else if (options.auto) {\n await autoClear(clearSurvival, spinner);\n } else {\n // Default: Show status and options\n await showContextStatus(clearSurvival);\n console.log('\\nOptions:');\n console.log(' --status Show current context usage');\n console.log(' --check Check if clear is recommended');\n console.log(' --save Save continuity ledger');\n console.log(' --restore Restore from ledger');\n console.log(' --auto Auto-save if needed and clear');\n }\n } catch (error: unknown) {\n // Don't exit in tests - just log the error\n console.error(chalk.red('Error: ' + (error as Error).message));\n if (process.env['NODE_ENV'] !== 'test') {\n process.exit(1);\n }\n }\n });\n\nasync function showContextStatus(clearSurvival: ClearSurvival): Promise<void> {\n const usage = await clearSurvival.getContextUsage();\n const status = clearSurvival.assessContextStatus(usage);\n\n console.log(chalk.bold('\\n\uD83D\uDCCA Context Usage Status'));\n console.log('\u2500'.repeat(40));\n\n const percentage = Math.round(usage.percentageUsed);\n const statusColor = getStatusColor(status);\n\n console.log(`Usage: ${percentage}% ${getProgressBar(percentage)}`);\n console.log(`Status: ${statusColor}`);\n console.log(`Active Frames: ${usage.activeFrames}`);\n console.log(`Total Frames: ${usage.totalFrames}`);\n console.log(`Sessions: ${usage.sessionCount}`);\n\n if (status === 'critical' || status === 'saved') {\n console.log(\n chalk.yellow('\\n\u26A0\uFE0F Consider clearing context to improve performance')\n );\n console.log(chalk.cyan('Run: stackmemory clear --save'));\n }\n}\n\nasync function checkIfClearRecommended(\n clearSurvival: ClearSurvival\n): Promise<void> {\n const usage = await clearSurvival.getContextUsage();\n const status = clearSurvival.assessContextStatus(usage);\n\n if (status === 'critical' || status === 'saved') {\n console.log(chalk.yellow('\u2713 Clear recommended'));\n console.log(`Context usage: ${Math.round(usage.percentageUsed)}%`);\n process.exit(0);\n } else {\n console.log(chalk.green('\u2717 Clear not needed'));\n console.log(`Context usage: ${Math.round(usage.percentageUsed)}%`);\n process.exit(1);\n }\n}\n\nasync function saveLedger(\n clearSurvival: ClearSurvival,\n spinner: ora.Ora\n): Promise<void> {\n spinner.start('Saving continuity ledger...');\n\n const ledger = await clearSurvival.saveContinuityLedger();\n\n spinner.succeed(chalk.green('Continuity ledger saved'));\n\n // Show what was saved\n console.log('\\nSaved:');\n console.log(` \u2022 ${ledger.active_frame_stack?.length || 0} active frames`);\n console.log(` \u2022 ${ledger.key_decisions?.length || 0} key decisions`);\n console.log(` \u2022 ${ledger.active_tasks?.length || 0} active tasks`);\n}\n\nasync function restoreFromLedger(\n clearSurvival: ClearSurvival,\n spinner: ora.Ora\n): Promise<void> {\n spinner.start('Restoring from continuity ledger...');\n\n const success = await clearSurvival.restoreFromLedger();\n\n if (success) {\n spinner.succeed(chalk.green('Context restored from ledger'));\n } else {\n spinner.fail(chalk.red('Failed to restore from ledger'));\n }\n}\n\nasync function showLedger(projectRoot: string): Promise<void> {\n const ledgerPath = path.join(projectRoot, '.stackmemory', 'continuity.json');\n\n if (!existsSync(ledgerPath)) {\n console.log(chalk.yellow('No continuity ledger found'));\n return;\n }\n\n const ledger = JSON.parse(await fs.readFile(ledgerPath, 'utf-8'));\n\n console.log(chalk.bold('\\n\uD83D\uDCD6 Continuity Ledger'));\n console.log('\u2500'.repeat(40));\n console.log(`Created: ${new Date(ledger.timestamp).toLocaleString()}`);\n console.log(`Active Frames: ${ledger.activeFrames.length}`);\n console.log(`Key Decisions: ${ledger.decisions.length}`);\n\n if (ledger.activeFrames.length > 0) {\n console.log('\\nActive Work:');\n ledger.activeFrames.slice(0, 5).forEach((frame: any) => {\n console.log(` \u2022 ${frame.name} (${frame.type})`);\n });\n }\n\n if (ledger.decisions.length > 0) {\n console.log('\\nKey Decisions:');\n ledger.decisions.slice(0, 3).forEach((decision: any) => {\n console.log(` \u2022 ${decision.decision}`);\n });\n }\n}\n\nasync function autoClear(\n clearSurvival: ClearSurvival,\n spinner: ora.Ora\n): Promise<void> {\n const usage = await clearSurvival.getContextUsage();\n const status = clearSurvival.assessContextStatus(usage);\n\n if (status === 'critical' || status === 'saved') {\n spinner.start('Auto-saving ledger before clear...');\n await clearSurvival.saveContinuityLedger();\n spinner.succeed('Ledger saved');\n\n spinner.start('Clearing context...');\n // Note: Actual clear implementation would go here\n // For now, just simulate\n await new Promise((resolve) => setTimeout(resolve, 1000));\n spinner.succeed('Context cleared successfully');\n } else {\n console.log(chalk.green('Context usage is healthy, no clear needed'));\n }\n}\n\nfunction getProgressBar(percentage: number): string {\n const filled = Math.round(percentage / 5);\n const empty = 20 - filled;\n\n let bar = '[';\n bar += chalk.green('\u25A0').repeat(Math.min(filled, 10));\n bar += chalk.yellow('\u25A0').repeat(Math.max(0, Math.min(filled - 10, 5)));\n bar += chalk.red('\u25A0').repeat(Math.max(0, filled - 15));\n bar += chalk.gray('\u25A1').repeat(empty);\n bar += ']';\n\n return bar;\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return chalk.green('\u2713 Healthy (<50%)');\n case 'moderate':\n return chalk.blue('\u26A1 Moderate (50-70%)');\n case 'critical':\n return chalk.yellow('\u26A0\uFE0F Critical (70-85%)');\n case 'saved':\n return chalk.red('\uD83D\uDCBE Auto-saved (>85%)');\n default:\n return status;\n }\n}\n\n// Export for use in main CLI\nexport default clearCommand;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|