@stackmemoryai/stackmemory 0.5.59 → 0.5.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -1
- package/dist/src/cli/claude-sm.js +130 -50
- package/dist/src/cli/claude-sm.js.map +2 -2
- package/dist/src/cli/index.js +18 -3
- package/dist/src/cli/index.js.map +3 -3
- package/dist/src/core/extensions/custom-tools.js +567 -0
- package/dist/src/core/extensions/custom-tools.js.map +7 -0
- package/dist/src/core/extensions/index.js +55 -0
- package/dist/src/core/extensions/index.js.map +7 -0
- package/dist/src/core/extensions/loader.js +709 -0
- package/dist/src/core/extensions/loader.js.map +7 -0
- package/dist/src/core/extensions/plugin-system.js +506 -0
- package/dist/src/core/extensions/plugin-system.js.map +7 -0
- package/dist/src/core/extensions/provider-adapter.js +617 -0
- package/dist/src/core/extensions/provider-adapter.js.map +7 -0
- package/dist/src/core/extensions/sandbox-runtime.js +664 -0
- package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +32 -6
- package/dist/src/core/storage/chromadb-adapter.js.map +2 -2
- package/dist/src/skills/repo-ingestion-skill.js +35 -12
- package/dist/src/skills/repo-ingestion-skill.js.map +2 -2
- package/package.json +11 -7
- package/scripts/background-sync-manager.js +145 -83
- package/scripts/claude-sm-autostart.js +17 -12
- package/scripts/gepa/README.md +275 -0
- package/scripts/gepa/config.json +53 -0
- package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
- package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
- package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
- package/scripts/gepa/generations/gen-000/baseline.md +124 -0
- package/scripts/gepa/hooks/auto-optimize.js +494 -0
- package/scripts/gepa/hooks/eval-tracker.js +203 -0
- package/scripts/gepa/hooks/reflect.js +311 -0
- package/scripts/gepa/optimize.js +611 -0
- package/scripts/gepa/state.json +14 -0
- package/scripts/test-pre-publish-quick.sh +1 -1
- package/dist/agents/core/agent-task-manager.js +0 -527
- package/dist/agents/core/agent-task-manager.js.map +0 -7
- package/dist/agents/testing-agent.js +0 -614
- package/dist/agents/testing-agent.js.map +0 -7
- package/dist/agents/verifiers/base-verifier.js +0 -133
- package/dist/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/agents/verifiers/formatter-verifier.js +0 -130
- package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/agents/verifiers/llm-judge.js +0 -252
- package/dist/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/cli/auto-detect.js +0 -321
- package/dist/cli/auto-detect.js.map +0 -7
- package/dist/cli/browser-test.js +0 -33
- package/dist/cli/browser-test.js.map +0 -7
- package/dist/cli/claude-sm-danger.js +0 -21
- package/dist/cli/claude-sm-danger.js.map +0 -7
- package/dist/cli/claude-sm.js +0 -1156
- package/dist/cli/claude-sm.js.map +0 -7
- package/dist/cli/codex-sm-danger.js +0 -21
- package/dist/cli/codex-sm-danger.js.map +0 -7
- package/dist/cli/codex-sm.js +0 -349
- package/dist/cli/codex-sm.js.map +0 -7
- package/dist/cli/commands/api.js +0 -232
- package/dist/cli/commands/api.js.map +0 -7
- package/dist/cli/commands/auto-background.js +0 -180
- package/dist/cli/commands/auto-background.js.map +0 -7
- package/dist/cli/commands/cleanup-processes.js +0 -68
- package/dist/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/cli/commands/clear.js +0 -202
- package/dist/cli/commands/clear.js.map +0 -7
- package/dist/cli/commands/config.js +0 -445
- package/dist/cli/commands/config.js.map +0 -7
- package/dist/cli/commands/context-rehydrate.js +0 -751
- package/dist/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/cli/commands/context.js +0 -343
- package/dist/cli/commands/context.js.map +0 -7
- package/dist/cli/commands/daemon.js +0 -392
- package/dist/cli/commands/daemon.js.map +0 -7
- package/dist/cli/commands/dashboard.js +0 -210
- package/dist/cli/commands/dashboard.js.map +0 -7
- package/dist/cli/commands/db.js +0 -147
- package/dist/cli/commands/db.js.map +0 -7
- package/dist/cli/commands/decision.js +0 -266
- package/dist/cli/commands/decision.js.map +0 -7
- package/dist/cli/commands/discovery.js +0 -279
- package/dist/cli/commands/discovery.js.map +0 -7
- package/dist/cli/commands/handoff.js +0 -624
- package/dist/cli/commands/handoff.js.map +0 -7
- package/dist/cli/commands/hooks.js +0 -298
- package/dist/cli/commands/hooks.js.map +0 -7
- package/dist/cli/commands/linear-unified.js +0 -353
- package/dist/cli/commands/linear-unified.js.map +0 -7
- package/dist/cli/commands/linear.js +0 -529
- package/dist/cli/commands/linear.js.map +0 -7
- package/dist/cli/commands/log.js +0 -169
- package/dist/cli/commands/log.js.map +0 -7
- package/dist/cli/commands/login.js +0 -172
- package/dist/cli/commands/login.js.map +0 -7
- package/dist/cli/commands/migrate.js +0 -240
- package/dist/cli/commands/migrate.js.map +0 -7
- package/dist/cli/commands/model.js +0 -533
- package/dist/cli/commands/model.js.map +0 -7
- package/dist/cli/commands/monitor.js +0 -313
- package/dist/cli/commands/monitor.js.map +0 -7
- package/dist/cli/commands/onboard.js +0 -536
- package/dist/cli/commands/onboard.js.map +0 -7
- package/dist/cli/commands/projects.js +0 -199
- package/dist/cli/commands/projects.js.map +0 -7
- package/dist/cli/commands/quality.js +0 -413
- package/dist/cli/commands/quality.js.map +0 -7
- package/dist/cli/commands/ralph.js +0 -909
- package/dist/cli/commands/ralph.js.map +0 -7
- package/dist/cli/commands/retrieval.js +0 -248
- package/dist/cli/commands/retrieval.js.map +0 -7
- package/dist/cli/commands/search.js +0 -173
- package/dist/cli/commands/search.js.map +0 -7
- package/dist/cli/commands/service.js +0 -749
- package/dist/cli/commands/service.js.map +0 -7
- package/dist/cli/commands/session.js +0 -200
- package/dist/cli/commands/session.js.map +0 -7
- package/dist/cli/commands/settings.js +0 -306
- package/dist/cli/commands/settings.js.map +0 -7
- package/dist/cli/commands/setup.js +0 -701
- package/dist/cli/commands/setup.js.map +0 -7
- package/dist/cli/commands/shell.js +0 -249
- package/dist/cli/commands/shell.js.map +0 -7
- package/dist/cli/commands/signup.js +0 -50
- package/dist/cli/commands/signup.js.map +0 -7
- package/dist/cli/commands/skills.js +0 -470
- package/dist/cli/commands/skills.js.map +0 -7
- package/dist/cli/commands/sms-notify.js +0 -795
- package/dist/cli/commands/sms-notify.js.map +0 -7
- package/dist/cli/commands/storage-tier.js +0 -183
- package/dist/cli/commands/storage-tier.js.map +0 -7
- package/dist/cli/commands/storage.js +0 -360
- package/dist/cli/commands/storage.js.map +0 -7
- package/dist/cli/commands/sweep.js +0 -249
- package/dist/cli/commands/sweep.js.map +0 -7
- package/dist/cli/commands/tasks.js +0 -213
- package/dist/cli/commands/tasks.js.map +0 -7
- package/dist/cli/commands/test.js +0 -286
- package/dist/cli/commands/test.js.map +0 -7
- package/dist/cli/commands/workflow.js +0 -142
- package/dist/cli/commands/workflow.js.map +0 -7
- package/dist/cli/commands/worktree.js +0 -319
- package/dist/cli/commands/worktree.js.map +0 -7
- package/dist/cli/index.js +0 -594
- package/dist/cli/index.js.map +0 -7
- package/dist/cli/opencode-sm.js +0 -448
- package/dist/cli/opencode-sm.js.map +0 -7
- package/dist/cli/utils/viewer.js +0 -96
- package/dist/cli/utils/viewer.js.map +0 -7
- package/dist/core/analytics/team-analytics.js +0 -378
- package/dist/core/analytics/team-analytics.js.map +0 -7
- package/dist/core/config/config-manager.js +0 -398
- package/dist/core/config/config-manager.js.map +0 -7
- package/dist/core/config/feature-flags.js +0 -76
- package/dist/core/config/feature-flags.js.map +0 -7
- package/dist/core/config/storage-config.js +0 -115
- package/dist/core/config/storage-config.js.map +0 -7
- package/dist/core/config/types.js +0 -144
- package/dist/core/config/types.js.map +0 -7
- package/dist/core/context/auto-context.js +0 -80
- package/dist/core/context/auto-context.js.map +0 -7
- package/dist/core/context/dual-stack-manager.js +0 -870
- package/dist/core/context/dual-stack-manager.js.map +0 -7
- package/dist/core/context/enhanced-rehydration.js +0 -994
- package/dist/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/core/context/frame-database.js +0 -479
- package/dist/core/context/frame-database.js.map +0 -7
- package/dist/core/context/frame-digest.js +0 -250
- package/dist/core/context/frame-digest.js.map +0 -7
- package/dist/core/context/frame-handoff-manager.js +0 -778
- package/dist/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/core/context/frame-lifecycle-hooks.js +0 -119
- package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
- package/dist/core/context/frame-manager.js +0 -1069
- package/dist/core/context/frame-manager.js.map +0 -7
- package/dist/core/context/frame-recovery.js +0 -302
- package/dist/core/context/frame-recovery.js.map +0 -7
- package/dist/core/context/frame-stack.js +0 -314
- package/dist/core/context/frame-stack.js.map +0 -7
- package/dist/core/context/frame-types.js +0 -5
- package/dist/core/context/frame-types.js.map +0 -7
- package/dist/core/context/incremental-gc.js +0 -290
- package/dist/core/context/incremental-gc.js.map +0 -7
- package/dist/core/context/index.js +0 -25
- package/dist/core/context/index.js.map +0 -7
- package/dist/core/context/model-aware-compaction.js +0 -623
- package/dist/core/context/model-aware-compaction.js.map +0 -7
- package/dist/core/context/permission-manager.js +0 -185
- package/dist/core/context/permission-manager.js.map +0 -7
- package/dist/core/context/recursive-context-manager.js +0 -592
- package/dist/core/context/recursive-context-manager.js.map +0 -7
- package/dist/core/context/refactored-frame-manager.js +0 -754
- package/dist/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/core/context/shared-context-layer.js +0 -621
- package/dist/core/context/shared-context-layer.js.map +0 -7
- package/dist/core/context/stack-merge-resolver.js +0 -749
- package/dist/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/core/context/validation.js +0 -130
- package/dist/core/context/validation.js.map +0 -7
- package/dist/core/database/batch-operations.js +0 -384
- package/dist/core/database/batch-operations.js.map +0 -7
- package/dist/core/database/connection-pool.js +0 -330
- package/dist/core/database/connection-pool.js.map +0 -7
- package/dist/core/database/database-adapter.js +0 -60
- package/dist/core/database/database-adapter.js.map +0 -7
- package/dist/core/database/migration-manager.js +0 -614
- package/dist/core/database/migration-manager.js.map +0 -7
- package/dist/core/database/paradedb-adapter.js +0 -990
- package/dist/core/database/paradedb-adapter.js.map +0 -7
- package/dist/core/database/query-cache.js +0 -298
- package/dist/core/database/query-cache.js.map +0 -7
- package/dist/core/database/query-router.js +0 -430
- package/dist/core/database/query-router.js.map +0 -7
- package/dist/core/database/sqlite-adapter.js +0 -738
- package/dist/core/database/sqlite-adapter.js.map +0 -7
- package/dist/core/digest/enhanced-hybrid-digest.js +0 -277
- package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/core/digest/frame-digest-integration.js +0 -176
- package/dist/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/core/digest/hybrid-digest-generator.js +0 -553
- package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/core/digest/index.js +0 -9
- package/dist/core/digest/index.js.map +0 -7
- package/dist/core/digest/types.js +0 -25
- package/dist/core/digest/types.js.map +0 -7
- package/dist/core/errors/error-utils.js +0 -208
- package/dist/core/errors/error-utils.js.map +0 -7
- package/dist/core/errors/index.js +0 -521
- package/dist/core/errors/index.js.map +0 -7
- package/dist/core/errors/recovery.js +0 -269
- package/dist/core/errors/recovery.js.map +0 -7
- package/dist/core/execution/parallel-executor.js +0 -258
- package/dist/core/execution/parallel-executor.js.map +0 -7
- package/dist/core/frame/workflow-templates.js +0 -319
- package/dist/core/frame/workflow-templates.js.map +0 -7
- package/dist/core/merge/conflict-detector.js +0 -431
- package/dist/core/merge/conflict-detector.js.map +0 -7
- package/dist/core/merge/index.js +0 -9
- package/dist/core/merge/index.js.map +0 -7
- package/dist/core/merge/resolution-engine.js +0 -558
- package/dist/core/merge/resolution-engine.js.map +0 -7
- package/dist/core/merge/stack-diff.js +0 -532
- package/dist/core/merge/stack-diff.js.map +0 -7
- package/dist/core/merge/unified-merge-resolver.js +0 -303
- package/dist/core/merge/unified-merge-resolver.js.map +0 -7
- package/dist/core/models/fallback-monitor.js +0 -232
- package/dist/core/models/fallback-monitor.js.map +0 -7
- package/dist/core/models/model-router.js +0 -340
- package/dist/core/models/model-router.js.map +0 -7
- package/dist/core/monitoring/error-handler.js +0 -49
- package/dist/core/monitoring/error-handler.js.map +0 -7
- package/dist/core/monitoring/logger.js +0 -202
- package/dist/core/monitoring/logger.js.map +0 -7
- package/dist/core/monitoring/metrics.js +0 -172
- package/dist/core/monitoring/metrics.js.map +0 -7
- package/dist/core/monitoring/progress-tracker.js +0 -189
- package/dist/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/core/monitoring/session-monitor.js +0 -300
- package/dist/core/monitoring/session-monitor.js.map +0 -7
- package/dist/core/performance/context-cache.js +0 -273
- package/dist/core/performance/context-cache.js.map +0 -7
- package/dist/core/performance/index.js +0 -11
- package/dist/core/performance/index.js.map +0 -7
- package/dist/core/performance/lazy-context-loader.js +0 -327
- package/dist/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/core/performance/monitor.js +0 -221
- package/dist/core/performance/monitor.js.map +0 -7
- package/dist/core/performance/optimized-frame-context.js +0 -345
- package/dist/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/core/performance/performance-benchmark.js +0 -277
- package/dist/core/performance/performance-benchmark.js.map +0 -7
- package/dist/core/performance/performance-profiler.js +0 -370
- package/dist/core/performance/performance-profiler.js.map +0 -7
- package/dist/core/performance/streaming-jsonl-parser.js +0 -195
- package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/core/persistence/postgres-adapter.js +0 -349
- package/dist/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/core/projects/project-isolation.js +0 -201
- package/dist/core/projects/project-isolation.js.map +0 -7
- package/dist/core/projects/project-manager.js +0 -697
- package/dist/core/projects/project-manager.js.map +0 -7
- package/dist/core/query/query-parser.js +0 -370
- package/dist/core/query/query-parser.js.map +0 -7
- package/dist/core/query/query-templates.js +0 -321
- package/dist/core/query/query-templates.js.map +0 -7
- package/dist/core/retrieval/context-retriever.js +0 -479
- package/dist/core/retrieval/context-retriever.js.map +0 -7
- package/dist/core/retrieval/graph-retrieval.js +0 -662
- package/dist/core/retrieval/graph-retrieval.js.map +0 -7
- package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
- package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
- package/dist/core/retrieval/index.js +0 -8
- package/dist/core/retrieval/index.js.map +0 -7
- package/dist/core/retrieval/llm-context-retrieval.js +0 -613
- package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/core/retrieval/llm-provider.js +0 -151
- package/dist/core/retrieval/llm-provider.js.map +0 -7
- package/dist/core/retrieval/retrieval-audit.js +0 -236
- package/dist/core/retrieval/retrieval-audit.js.map +0 -7
- package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
- package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
- package/dist/core/retrieval/summary-generator.js +0 -589
- package/dist/core/retrieval/summary-generator.js.map +0 -7
- package/dist/core/retrieval/types.js +0 -21
- package/dist/core/retrieval/types.js.map +0 -7
- package/dist/core/security/index.js +0 -35
- package/dist/core/security/index.js.map +0 -7
- package/dist/core/security/input-sanitizer.js +0 -321
- package/dist/core/security/input-sanitizer.js.map +0 -7
- package/dist/core/session/clear-survival.js +0 -465
- package/dist/core/session/clear-survival.js.map +0 -7
- package/dist/core/session/enhanced-handoff.js +0 -792
- package/dist/core/session/enhanced-handoff.js.map +0 -7
- package/dist/core/session/handoff-generator.js +0 -343
- package/dist/core/session/handoff-generator.js.map +0 -7
- package/dist/core/session/index.js +0 -15
- package/dist/core/session/index.js.map +0 -7
- package/dist/core/session/session-manager.js +0 -347
- package/dist/core/session/session-manager.js.map +0 -7
- package/dist/core/skills/index.js +0 -7
- package/dist/core/skills/index.js.map +0 -7
- package/dist/core/skills/skill-storage.js +0 -764
- package/dist/core/skills/skill-storage.js.map +0 -7
- package/dist/core/skills/types.js +0 -193
- package/dist/core/skills/types.js.map +0 -7
- package/dist/core/storage/chromadb-adapter.js +0 -354
- package/dist/core/storage/chromadb-adapter.js.map +0 -7
- package/dist/core/storage/infinite-storage.js +0 -510
- package/dist/core/storage/infinite-storage.js.map +0 -7
- package/dist/core/storage/railway-optimized-storage.js +0 -591
- package/dist/core/storage/railway-optimized-storage.js.map +0 -7
- package/dist/core/storage/remote-storage.js +0 -489
- package/dist/core/storage/remote-storage.js.map +0 -7
- package/dist/core/storage/two-tier-storage.js +0 -766
- package/dist/core/storage/two-tier-storage.js.map +0 -7
- package/dist/core/trace/cli-trace-wrapper.js +0 -132
- package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/core/trace/db-trace-wrapper.js +0 -247
- package/dist/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/core/trace/debug-trace.js +0 -417
- package/dist/core/trace/debug-trace.js.map +0 -7
- package/dist/core/trace/index.js +0 -109
- package/dist/core/trace/index.js.map +0 -7
- package/dist/core/trace/linear-api-wrapper.js +0 -178
- package/dist/core/trace/linear-api-wrapper.js.map +0 -7
- package/dist/core/trace/trace-demo.js +0 -154
- package/dist/core/trace/trace-demo.js.map +0 -7
- package/dist/core/trace/trace-detector.demo.js +0 -142
- package/dist/core/trace/trace-detector.demo.js.map +0 -7
- package/dist/core/trace/trace-detector.js +0 -528
- package/dist/core/trace/trace-detector.js.map +0 -7
- package/dist/core/trace/trace-store.js +0 -345
- package/dist/core/trace/trace-store.js.map +0 -7
- package/dist/core/trace/types.js +0 -77
- package/dist/core/trace/types.js.map +0 -7
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -7
- package/dist/core/utils/async-mutex.js +0 -114
- package/dist/core/utils/async-mutex.js.map +0 -7
- package/dist/core/utils/compression.js +0 -83
- package/dist/core/utils/compression.js.map +0 -7
- package/dist/core/utils/update-checker.js +0 -218
- package/dist/core/utils/update-checker.js.map +0 -7
- package/dist/core/worktree/worktree-manager.js +0 -465
- package/dist/core/worktree/worktree-manager.js.map +0 -7
- package/dist/daemon/daemon-config.js +0 -149
- package/dist/daemon/daemon-config.js.map +0 -7
- package/dist/daemon/services/context-service.js +0 -122
- package/dist/daemon/services/context-service.js.map +0 -7
- package/dist/daemon/services/linear-service.js +0 -136
- package/dist/daemon/services/linear-service.js.map +0 -7
- package/dist/daemon/session-daemon.js +0 -312
- package/dist/daemon/session-daemon.js.map +0 -7
- package/dist/daemon/unified-daemon.js +0 -276
- package/dist/daemon/unified-daemon.js.map +0 -7
- package/dist/features/analytics/api/analytics-api.js +0 -287
- package/dist/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/features/analytics/core/analytics-service.js +0 -282
- package/dist/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/features/analytics/index.js +0 -18
- package/dist/features/analytics/index.js.map +0 -7
- package/dist/features/analytics/queries/metrics-queries.js +0 -277
- package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/features/analytics/types/metrics.js +0 -5
- package/dist/features/analytics/types/metrics.js.map +0 -7
- package/dist/features/browser/browser-mcp.js +0 -492
- package/dist/features/browser/browser-mcp.js.map +0 -7
- package/dist/features/sweep/index.js +0 -20
- package/dist/features/sweep/index.js.map +0 -7
- package/dist/features/sweep/prediction-client.js +0 -155
- package/dist/features/sweep/prediction-client.js.map +0 -7
- package/dist/features/sweep/prompt-builder.js +0 -85
- package/dist/features/sweep/prompt-builder.js.map +0 -7
- package/dist/features/sweep/pty-wrapper.js +0 -171
- package/dist/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/features/sweep/state-watcher.js +0 -87
- package/dist/features/sweep/state-watcher.js.map +0 -7
- package/dist/features/sweep/status-bar.js +0 -88
- package/dist/features/sweep/status-bar.js.map +0 -7
- package/dist/features/sweep/sweep-server-manager.js +0 -226
- package/dist/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/features/sweep/tab-interceptor.js +0 -38
- package/dist/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/features/sweep/types.js +0 -18
- package/dist/features/sweep/types.js.map +0 -7
- package/dist/features/tasks/linear-task-manager.js +0 -487
- package/dist/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/features/tasks/task-aware-context.js +0 -410
- package/dist/features/tasks/task-aware-context.js.map +0 -7
- package/dist/features/tui/simple-monitor.js +0 -116
- package/dist/features/tui/simple-monitor.js.map +0 -7
- package/dist/features/tui/swarm-monitor.js +0 -648
- package/dist/features/tui/swarm-monitor.js.map +0 -7
- package/dist/features/web/client/stores/task-store.js +0 -26
- package/dist/features/web/client/stores/task-store.js.map +0 -7
- package/dist/features/web/server/index.js +0 -194
- package/dist/features/web/server/index.js.map +0 -7
- package/dist/hooks/auto-background.js +0 -151
- package/dist/hooks/auto-background.js.map +0 -7
- package/dist/hooks/claude-code-whatsapp-hook.js +0 -197
- package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/hooks/config.js +0 -150
- package/dist/hooks/config.js.map +0 -7
- package/dist/hooks/daemon.js +0 -364
- package/dist/hooks/daemon.js.map +0 -7
- package/dist/hooks/events.js +0 -58
- package/dist/hooks/events.js.map +0 -7
- package/dist/hooks/index.js +0 -12
- package/dist/hooks/index.js.map +0 -7
- package/dist/hooks/linear-task-picker.js +0 -186
- package/dist/hooks/linear-task-picker.js.map +0 -7
- package/dist/hooks/schemas.js +0 -197
- package/dist/hooks/schemas.js.map +0 -7
- package/dist/hooks/secure-fs.js +0 -49
- package/dist/hooks/secure-fs.js.map +0 -7
- package/dist/hooks/security-logger.js +0 -155
- package/dist/hooks/security-logger.js.map +0 -7
- package/dist/hooks/session-summary.js +0 -222
- package/dist/hooks/session-summary.js.map +0 -7
- package/dist/hooks/sms-action-runner.js +0 -371
- package/dist/hooks/sms-action-runner.js.map +0 -7
- package/dist/hooks/sms-notify.js +0 -506
- package/dist/hooks/sms-notify.js.map +0 -7
- package/dist/hooks/sms-watcher.js +0 -93
- package/dist/hooks/sms-watcher.js.map +0 -7
- package/dist/hooks/sms-webhook.js +0 -555
- package/dist/hooks/sms-webhook.js.map +0 -7
- package/dist/hooks/whatsapp-commands.js +0 -479
- package/dist/hooks/whatsapp-commands.js.map +0 -7
- package/dist/hooks/whatsapp-scheduler.js +0 -317
- package/dist/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/hooks/whatsapp-sync.js +0 -409
- package/dist/hooks/whatsapp-sync.js.map +0 -7
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -7
- package/dist/integrations/anthropic/client.js +0 -263
- package/dist/integrations/anthropic/client.js.map +0 -7
- package/dist/integrations/claude-code/agent-bridge.js +0 -768
- package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -459
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/integrations/claude-code/lifecycle-hooks.js +0 -254
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/integrations/claude-code/post-task-hooks.js +0 -545
- package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client-stub.js +0 -20
- package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client.js +0 -511
- package/dist/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/integrations/claude-code/task-coordinator.js +0 -360
- package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/integrations/linear/auth.js +0 -337
- package/dist/integrations/linear/auth.js.map +0 -7
- package/dist/integrations/linear/auto-sync.js +0 -258
- package/dist/integrations/linear/auto-sync.js.map +0 -7
- package/dist/integrations/linear/client.js +0 -634
- package/dist/integrations/linear/client.js.map +0 -7
- package/dist/integrations/linear/config.js +0 -130
- package/dist/integrations/linear/config.js.map +0 -7
- package/dist/integrations/linear/migration.js +0 -361
- package/dist/integrations/linear/migration.js.map +0 -7
- package/dist/integrations/linear/oauth-server.js +0 -454
- package/dist/integrations/linear/oauth-server.js.map +0 -7
- package/dist/integrations/linear/rest-client.js +0 -213
- package/dist/integrations/linear/rest-client.js.map +0 -7
- package/dist/integrations/linear/sync-manager.js +0 -236
- package/dist/integrations/linear/sync-manager.js.map +0 -7
- package/dist/integrations/linear/sync-service.js +0 -231
- package/dist/integrations/linear/sync-service.js.map +0 -7
- package/dist/integrations/linear/sync.js +0 -782
- package/dist/integrations/linear/sync.js.map +0 -7
- package/dist/integrations/linear/types.js +0 -5
- package/dist/integrations/linear/types.js.map +0 -7
- package/dist/integrations/linear/unified-sync.js +0 -589
- package/dist/integrations/linear/unified-sync.js.map +0 -7
- package/dist/integrations/linear/webhook-handler.js +0 -219
- package/dist/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/integrations/linear/webhook-server.js +0 -218
- package/dist/integrations/linear/webhook-server.js.map +0 -7
- package/dist/integrations/linear/webhook.js +0 -291
- package/dist/integrations/linear/webhook.js.map +0 -7
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +0 -266
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/context-handlers.js +0 -257
- package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/discovery-handlers.js +0 -497
- package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/index.js +0 -166
- package/dist/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/integrations/mcp/handlers/linear-handlers.js +0 -247
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/skill-handlers.js +0 -529
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/task-handlers.js +0 -239
- package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/trace-handlers.js +0 -308
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/integrations/mcp/index.js +0 -23
- package/dist/integrations/mcp/index.js.map +0 -7
- package/dist/integrations/mcp/middleware/tool-scoring.js +0 -356
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/integrations/mcp/refactored-server.js +0 -374
- package/dist/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/integrations/mcp/remote-server.js +0 -682
- package/dist/integrations/mcp/remote-server.js.map +0 -7
- package/dist/integrations/mcp/schemas.js +0 -147
- package/dist/integrations/mcp/schemas.js.map +0 -7
- package/dist/integrations/mcp/server.js +0 -1975
- package/dist/integrations/mcp/server.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions-code.js +0 -125
- package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions.js +0 -702
- package/dist/integrations/mcp/tool-definitions.js.map +0 -7
- package/dist/integrations/mcp/trace-test.js +0 -48
- package/dist/integrations/mcp/trace-test.js.map +0 -7
- package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
- package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
- package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
- package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -860
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/integrations/ralph/context/context-budget-manager.js +0 -301
- package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +0 -360
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +0 -410
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/integrations/ralph/index.js +0 -18
- package/dist/integrations/ralph/index.js.map +0 -7
- package/dist/integrations/ralph/learning/pattern-learner.js +0 -401
- package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +0 -294
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-registry.js +0 -108
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -463
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -400
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +0 -473
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +0 -388
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/integrations/ralph/performance/performance-optimizer.js +0 -358
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
- package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
- package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
- package/dist/integrations/ralph/recovery/crash-recovery.js +0 -462
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/integrations/ralph/state/state-reconciler.js +0 -404
- package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +0 -428
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +0 -996
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/integrations/ralph/types.js +0 -5
- package/dist/integrations/ralph/types.js.map +0 -7
- package/dist/integrations/ralph/visualization/ralph-debugger.js +0 -585
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/mcp/stackmemory-mcp-server.js +0 -554
- package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/middleware/exponential-rate-limiter.js +0 -289
- package/dist/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/models/user.model.js +0 -358
- package/dist/models/user.model.js.map +0 -7
- package/dist/servers/production/auth-middleware.js +0 -528
- package/dist/servers/production/auth-middleware.js.map +0 -7
- package/dist/servers/railway/config.js +0 -55
- package/dist/servers/railway/config.js.map +0 -7
- package/dist/servers/railway/index-enhanced.js +0 -160
- package/dist/servers/railway/index-enhanced.js.map +0 -7
- package/dist/servers/railway/index.js +0 -1349
- package/dist/servers/railway/index.js.map +0 -7
- package/dist/servers/railway/simple.js +0 -64
- package/dist/servers/railway/simple.js.map +0 -7
- package/dist/servers/railway/storage-test.js +0 -459
- package/dist/servers/railway/storage-test.js.map +0 -7
- package/dist/services/config-service.js +0 -65
- package/dist/services/config-service.js.map +0 -7
- package/dist/services/context-service.js +0 -194
- package/dist/services/context-service.js.map +0 -7
- package/dist/skills/api-discovery.js +0 -354
- package/dist/skills/api-discovery.js.map +0 -7
- package/dist/skills/api-skill.js +0 -475
- package/dist/skills/api-skill.js.map +0 -7
- package/dist/skills/claude-skills.js +0 -1061
- package/dist/skills/claude-skills.js.map +0 -7
- package/dist/skills/dashboard-launcher.js +0 -216
- package/dist/skills/dashboard-launcher.js.map +0 -7
- package/dist/skills/recursive-agent-orchestrator.js +0 -575
- package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
- package/dist/skills/repo-ingestion-skill.js +0 -609
- package/dist/skills/repo-ingestion-skill.js.map +0 -7
- package/dist/skills/security-secrets-scanner.js +0 -284
- package/dist/skills/security-secrets-scanner.js.map +0 -7
- package/dist/skills/unified-rlm-orchestrator.js +0 -404
- package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -7
- package/dist/utils/env.js +0 -50
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/formatting.js +0 -62
- package/dist/utils/formatting.js.map +0 -7
- package/dist/utils/process-cleanup.js +0 -136
- package/dist/utils/process-cleanup.js.map +0 -7
- package/dist/validation/schemas.js +0 -222
- package/dist/validation/schemas.js.map +0 -7
- /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
- /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
|
@@ -1,592 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { logger } from "../monitoring/logger.js";
|
|
6
|
-
import { ValidationError, ErrorCode } from "../errors/index.js";
|
|
7
|
-
import * as fs from "fs";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
class RecursiveContextManager {
|
|
10
|
-
dualStackManager;
|
|
11
|
-
contextRetriever;
|
|
12
|
-
// Context cache for sharing between agents
|
|
13
|
-
sharedContextCache = /* @__PURE__ */ new Map();
|
|
14
|
-
// Agent-specific configurations
|
|
15
|
-
agentConfigs;
|
|
16
|
-
constructor(dualStackManager, contextRetriever) {
|
|
17
|
-
this.dualStackManager = dualStackManager;
|
|
18
|
-
this.contextRetriever = contextRetriever;
|
|
19
|
-
this.agentConfigs = this.initializeAgentConfigs();
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Initialize agent-specific context configurations
|
|
23
|
-
*/
|
|
24
|
-
initializeAgentConfigs() {
|
|
25
|
-
const configs = /* @__PURE__ */ new Map();
|
|
26
|
-
configs.set("planning", {
|
|
27
|
-
agent: "planning",
|
|
28
|
-
maxTokens: 2e4,
|
|
29
|
-
priorityWeights: {
|
|
30
|
-
recent: 0.3,
|
|
31
|
-
relevant: 0.4,
|
|
32
|
-
dependency: 0.2,
|
|
33
|
-
error: 0.05,
|
|
34
|
-
test: 0.05
|
|
35
|
-
},
|
|
36
|
-
includeTypes: ["frame", "documentation", "config"],
|
|
37
|
-
excludeTypes: []
|
|
38
|
-
});
|
|
39
|
-
configs.set("code", {
|
|
40
|
-
agent: "code",
|
|
41
|
-
maxTokens: 3e4,
|
|
42
|
-
priorityWeights: {
|
|
43
|
-
recent: 0.2,
|
|
44
|
-
relevant: 0.5,
|
|
45
|
-
dependency: 0.2,
|
|
46
|
-
error: 0.05,
|
|
47
|
-
test: 0.05
|
|
48
|
-
},
|
|
49
|
-
includeTypes: ["code", "frame", "test"],
|
|
50
|
-
excludeTypes: ["documentation"]
|
|
51
|
-
});
|
|
52
|
-
configs.set("testing", {
|
|
53
|
-
agent: "testing",
|
|
54
|
-
maxTokens: 25e3,
|
|
55
|
-
priorityWeights: {
|
|
56
|
-
recent: 0.1,
|
|
57
|
-
relevant: 0.3,
|
|
58
|
-
dependency: 0.1,
|
|
59
|
-
error: 0.1,
|
|
60
|
-
test: 0.4
|
|
61
|
-
},
|
|
62
|
-
includeTypes: ["code", "test", "frame"],
|
|
63
|
-
excludeTypes: ["documentation", "config"]
|
|
64
|
-
});
|
|
65
|
-
configs.set("linting", {
|
|
66
|
-
agent: "linting",
|
|
67
|
-
maxTokens: 15e3,
|
|
68
|
-
priorityWeights: {
|
|
69
|
-
recent: 0.2,
|
|
70
|
-
relevant: 0.4,
|
|
71
|
-
dependency: 0.1,
|
|
72
|
-
error: 0.2,
|
|
73
|
-
test: 0.1
|
|
74
|
-
},
|
|
75
|
-
includeTypes: ["code", "config"],
|
|
76
|
-
excludeTypes: ["documentation", "test"]
|
|
77
|
-
});
|
|
78
|
-
configs.set("review", {
|
|
79
|
-
agent: "review",
|
|
80
|
-
maxTokens: 25e3,
|
|
81
|
-
priorityWeights: {
|
|
82
|
-
recent: 0.3,
|
|
83
|
-
relevant: 0.3,
|
|
84
|
-
dependency: 0.1,
|
|
85
|
-
error: 0.2,
|
|
86
|
-
test: 0.1
|
|
87
|
-
},
|
|
88
|
-
includeTypes: ["code", "test", "frame", "documentation"],
|
|
89
|
-
excludeTypes: []
|
|
90
|
-
});
|
|
91
|
-
configs.set("context", {
|
|
92
|
-
agent: "context",
|
|
93
|
-
maxTokens: 1e4,
|
|
94
|
-
priorityWeights: {
|
|
95
|
-
recent: 0.1,
|
|
96
|
-
relevant: 0.6,
|
|
97
|
-
dependency: 0.2,
|
|
98
|
-
error: 0.05,
|
|
99
|
-
test: 0.05
|
|
100
|
-
},
|
|
101
|
-
includeTypes: ["frame", "documentation"],
|
|
102
|
-
excludeTypes: []
|
|
103
|
-
});
|
|
104
|
-
configs.set("improve", {
|
|
105
|
-
agent: "improve",
|
|
106
|
-
maxTokens: 3e4,
|
|
107
|
-
priorityWeights: {
|
|
108
|
-
recent: 0.3,
|
|
109
|
-
relevant: 0.4,
|
|
110
|
-
dependency: 0.1,
|
|
111
|
-
error: 0.15,
|
|
112
|
-
test: 0.05
|
|
113
|
-
},
|
|
114
|
-
includeTypes: ["code", "test", "frame"],
|
|
115
|
-
excludeTypes: ["documentation"]
|
|
116
|
-
});
|
|
117
|
-
configs.set("publish", {
|
|
118
|
-
agent: "publish",
|
|
119
|
-
maxTokens: 15e3,
|
|
120
|
-
priorityWeights: {
|
|
121
|
-
recent: 0.4,
|
|
122
|
-
relevant: 0.2,
|
|
123
|
-
dependency: 0.1,
|
|
124
|
-
error: 0.2,
|
|
125
|
-
test: 0.1
|
|
126
|
-
},
|
|
127
|
-
includeTypes: ["config", "frame"],
|
|
128
|
-
excludeTypes: ["code", "test"]
|
|
129
|
-
});
|
|
130
|
-
return configs;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Prepare context for a specific agent type
|
|
134
|
-
*/
|
|
135
|
-
async prepareAgentContext(agentType, baseContext, _maxTokens) {
|
|
136
|
-
const config = this.agentConfigs.get(agentType);
|
|
137
|
-
if (!config) {
|
|
138
|
-
throw new ValidationError(
|
|
139
|
-
`Unknown agent type: ${agentType}`,
|
|
140
|
-
ErrorCode.VALIDATION_FAILED,
|
|
141
|
-
{ agentType }
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
logger.debug(`Preparing context for ${agentType} agent`, { maxTokens });
|
|
145
|
-
const chunks = await this.collectRelevantChunks(
|
|
146
|
-
baseContext,
|
|
147
|
-
config,
|
|
148
|
-
maxTokens
|
|
149
|
-
);
|
|
150
|
-
const sortedChunks = this.prioritizeChunks(chunks, config.priorityWeights);
|
|
151
|
-
const selectedChunks = this.fitChunksToTokenBudget(sortedChunks, maxTokens);
|
|
152
|
-
const agentContext = {
|
|
153
|
-
...baseContext,
|
|
154
|
-
chunks: selectedChunks.map((c) => ({
|
|
155
|
-
type: c.type,
|
|
156
|
-
content: c.content,
|
|
157
|
-
metadata: c.metadata
|
|
158
|
-
}))
|
|
159
|
-
};
|
|
160
|
-
this.sharedContextCache.set(`${agentType}-${Date.now()}`, selectedChunks);
|
|
161
|
-
logger.debug(`Prepared context for ${agentType}`, {
|
|
162
|
-
chunksSelected: selectedChunks.length,
|
|
163
|
-
totalSize: selectedChunks.reduce((sum, c) => sum + c.metadata.size, 0)
|
|
164
|
-
});
|
|
165
|
-
return agentContext;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Chunk large codebase for processing
|
|
169
|
-
*/
|
|
170
|
-
async chunkCodebase(rootPath, strategy) {
|
|
171
|
-
const chunks = [];
|
|
172
|
-
logger.info("Chunking codebase", { rootPath, strategy: strategy.type });
|
|
173
|
-
switch (strategy.type) {
|
|
174
|
-
case "file":
|
|
175
|
-
chunks.push(...await this.chunkByFile(rootPath, strategy));
|
|
176
|
-
break;
|
|
177
|
-
case "semantic":
|
|
178
|
-
chunks.push(...await this.chunkBySemantic(rootPath, strategy));
|
|
179
|
-
break;
|
|
180
|
-
case "size":
|
|
181
|
-
chunks.push(...await this.chunkBySize(rootPath, strategy));
|
|
182
|
-
break;
|
|
183
|
-
default:
|
|
184
|
-
throw new ValidationError(
|
|
185
|
-
`Unknown chunking strategy: ${strategy.type}`,
|
|
186
|
-
ErrorCode.VALIDATION_FAILED,
|
|
187
|
-
{ strategyType: strategy.type }
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
logger.info("Codebase chunked", {
|
|
191
|
-
totalChunks: chunks.length,
|
|
192
|
-
totalSize: chunks.reduce((sum, c) => sum + c.metadata.size, 0)
|
|
193
|
-
});
|
|
194
|
-
return chunks;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Chunk by file boundaries
|
|
198
|
-
*/
|
|
199
|
-
async chunkByFile(rootPath, strategy) {
|
|
200
|
-
const chunks = [];
|
|
201
|
-
const files = await this.walkDirectory(rootPath);
|
|
202
|
-
for (const file of files) {
|
|
203
|
-
const content = await fs.promises.readFile(file, "utf-8");
|
|
204
|
-
if (content.length > strategy.maxChunkSize) {
|
|
205
|
-
const fileChunks = this.splitLargeFile(file, content, strategy);
|
|
206
|
-
chunks.push(...fileChunks);
|
|
207
|
-
} else {
|
|
208
|
-
chunks.push({
|
|
209
|
-
id: `file-${path.basename(file)}`,
|
|
210
|
-
type: "code",
|
|
211
|
-
content,
|
|
212
|
-
metadata: {
|
|
213
|
-
filePath: file,
|
|
214
|
-
language: this.detectLanguage(file),
|
|
215
|
-
size: content.length,
|
|
216
|
-
score: 0.5
|
|
217
|
-
},
|
|
218
|
-
boundaries: {
|
|
219
|
-
start: 0,
|
|
220
|
-
end: content.length
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return chunks;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Chunk by semantic boundaries (classes, functions)
|
|
229
|
-
*/
|
|
230
|
-
async chunkBySemantic(rootPath, strategy) {
|
|
231
|
-
const chunks = [];
|
|
232
|
-
const files = await this.walkDirectory(rootPath);
|
|
233
|
-
for (const file of files) {
|
|
234
|
-
const content = await fs.promises.readFile(file, "utf-8");
|
|
235
|
-
const language = this.detectLanguage(file);
|
|
236
|
-
const semanticUnits = this.extractSemanticUnits(content, language);
|
|
237
|
-
for (const unit of semanticUnits) {
|
|
238
|
-
if (unit.content.length <= strategy.maxChunkSize) {
|
|
239
|
-
chunks.push({
|
|
240
|
-
id: `semantic-${file}-${unit.name}`,
|
|
241
|
-
type: "code",
|
|
242
|
-
content: unit.content,
|
|
243
|
-
metadata: {
|
|
244
|
-
filePath: file,
|
|
245
|
-
language,
|
|
246
|
-
size: unit.content.length,
|
|
247
|
-
score: unit.importance
|
|
248
|
-
},
|
|
249
|
-
boundaries: {
|
|
250
|
-
start: unit.start,
|
|
251
|
-
end: unit.end
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
return chunks;
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Chunk by fixed size with overlap
|
|
261
|
-
*/
|
|
262
|
-
async chunkBySize(rootPath, strategy) {
|
|
263
|
-
const chunks = [];
|
|
264
|
-
const files = await this.walkDirectory(rootPath);
|
|
265
|
-
for (const file of files) {
|
|
266
|
-
const content = await fs.promises.readFile(file, "utf-8");
|
|
267
|
-
const lines = content.split("\n");
|
|
268
|
-
let currentChunk = "";
|
|
269
|
-
let startLine = 0;
|
|
270
|
-
for (let i = 0; i < lines.length; i++) {
|
|
271
|
-
currentChunk += lines[i] + "\n";
|
|
272
|
-
if (currentChunk.length >= strategy.maxChunkSize) {
|
|
273
|
-
chunks.push({
|
|
274
|
-
id: `size-${file}-${startLine}`,
|
|
275
|
-
type: "code",
|
|
276
|
-
content: currentChunk,
|
|
277
|
-
metadata: {
|
|
278
|
-
filePath: file,
|
|
279
|
-
language: this.detectLanguage(file),
|
|
280
|
-
size: currentChunk.length,
|
|
281
|
-
score: 0.5
|
|
282
|
-
},
|
|
283
|
-
boundaries: {
|
|
284
|
-
start: startLine,
|
|
285
|
-
end: i,
|
|
286
|
-
overlap: strategy.overlapSize
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
const overlapLines = Math.floor(strategy.overlapSize / 50);
|
|
290
|
-
startLine = Math.max(0, i - overlapLines);
|
|
291
|
-
currentChunk = lines.slice(startLine, i + 1).join("\n");
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
if (currentChunk.trim()) {
|
|
295
|
-
chunks.push({
|
|
296
|
-
id: `size-${file}-${startLine}`,
|
|
297
|
-
type: "code",
|
|
298
|
-
content: currentChunk,
|
|
299
|
-
metadata: {
|
|
300
|
-
filePath: file,
|
|
301
|
-
language: this.detectLanguage(file),
|
|
302
|
-
size: currentChunk.length,
|
|
303
|
-
score: 0.5
|
|
304
|
-
},
|
|
305
|
-
boundaries: {
|
|
306
|
-
start: startLine,
|
|
307
|
-
end: lines.length - 1
|
|
308
|
-
}
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
return chunks;
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Collect relevant chunks for agent context
|
|
316
|
-
*/
|
|
317
|
-
async collectRelevantChunks(baseContext, config, _maxTokens) {
|
|
318
|
-
const chunks = [];
|
|
319
|
-
if (config.includeTypes.includes("frame")) {
|
|
320
|
-
const recentFrames = await this.getRecentFrameChunks(10);
|
|
321
|
-
chunks.push(...recentFrames);
|
|
322
|
-
}
|
|
323
|
-
if (config.includeTypes.includes("code") && baseContext.files) {
|
|
324
|
-
const codeChunks = await this.getCodeChunks(baseContext.files);
|
|
325
|
-
chunks.push(...codeChunks);
|
|
326
|
-
}
|
|
327
|
-
if (config.includeTypes.includes("test") && baseContext.testFiles) {
|
|
328
|
-
const testChunks = await this.getTestChunks(baseContext.testFiles);
|
|
329
|
-
chunks.push(...testChunks);
|
|
330
|
-
}
|
|
331
|
-
if (baseContext.query) {
|
|
332
|
-
const searchResults = await this.contextRetriever.retrieve({
|
|
333
|
-
query: baseContext.query,
|
|
334
|
-
limit: 20
|
|
335
|
-
});
|
|
336
|
-
for (const result of searchResults) {
|
|
337
|
-
chunks.push({
|
|
338
|
-
id: `search-${result.frameId}`,
|
|
339
|
-
type: "frame",
|
|
340
|
-
content: result.content,
|
|
341
|
-
metadata: {
|
|
342
|
-
frameId: result.frameId,
|
|
343
|
-
size: result.content.length,
|
|
344
|
-
score: result.score,
|
|
345
|
-
timestamp: new Date(result.timestamp)
|
|
346
|
-
},
|
|
347
|
-
boundaries: {}
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
const cachedChunks = this.getRelevantCachedChunks(config.agent);
|
|
352
|
-
chunks.push(...cachedChunks);
|
|
353
|
-
return chunks;
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Prioritize chunks based on agent weights
|
|
357
|
-
*/
|
|
358
|
-
prioritizeChunks(chunks, weights) {
|
|
359
|
-
return chunks.map((chunk) => {
|
|
360
|
-
let priority = 0;
|
|
361
|
-
if (chunk.metadata.timestamp) {
|
|
362
|
-
const age = Date.now() - chunk.metadata.timestamp.getTime();
|
|
363
|
-
const recentScore = Math.max(0, 1 - age / (24 * 60 * 60 * 1e3));
|
|
364
|
-
priority += recentScore * weights.recent;
|
|
365
|
-
}
|
|
366
|
-
priority += (chunk.metadata.score || 0.5) * weights.relevant;
|
|
367
|
-
if (chunk.type === "test") {
|
|
368
|
-
priority += weights.test;
|
|
369
|
-
}
|
|
370
|
-
if (chunk.metadata.filePath?.includes("error")) {
|
|
371
|
-
priority += weights.error;
|
|
372
|
-
}
|
|
373
|
-
return { ...chunk, priority };
|
|
374
|
-
}).sort((a, b) => b.priority - a.priority);
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Fit chunks within token budget
|
|
378
|
-
*/
|
|
379
|
-
fitChunksToTokenBudget(chunks, _maxTokens) {
|
|
380
|
-
const selected = [];
|
|
381
|
-
let totalTokens = 0;
|
|
382
|
-
const estimateTokens = (text) => Math.ceil(text.length / 4);
|
|
383
|
-
for (const chunk of chunks) {
|
|
384
|
-
const chunkTokens = estimateTokens(chunk.content);
|
|
385
|
-
if (totalTokens + chunkTokens <= maxTokens) {
|
|
386
|
-
selected.push(chunk);
|
|
387
|
-
totalTokens += chunkTokens;
|
|
388
|
-
} else if (selected.length === 0) {
|
|
389
|
-
const truncatedContent = chunk.content.slice(0, maxTokens * 4);
|
|
390
|
-
selected.push({
|
|
391
|
-
...chunk,
|
|
392
|
-
content: truncatedContent,
|
|
393
|
-
metadata: {
|
|
394
|
-
...chunk.metadata,
|
|
395
|
-
size: truncatedContent.length
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
break;
|
|
399
|
-
} else {
|
|
400
|
-
break;
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
return selected;
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Helper methods
|
|
407
|
-
*/
|
|
408
|
-
async walkDirectory(dir) {
|
|
409
|
-
const files = [];
|
|
410
|
-
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
411
|
-
for (const entry of entries) {
|
|
412
|
-
const fullPath = path.join(dir, entry.name);
|
|
413
|
-
if (entry.isDirectory()) {
|
|
414
|
-
if (!["node_modules", ".git", "dist", "build"].includes(entry.name)) {
|
|
415
|
-
files.push(...await this.walkDirectory(fullPath));
|
|
416
|
-
}
|
|
417
|
-
} else if (entry.isFile()) {
|
|
418
|
-
if (/\.(ts|tsx|js|jsx|py|java|go|rs|cpp|c|h)$/.test(entry.name)) {
|
|
419
|
-
files.push(fullPath);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
return files;
|
|
424
|
-
}
|
|
425
|
-
detectLanguage(filePath) {
|
|
426
|
-
const ext = path.extname(filePath);
|
|
427
|
-
const langMap = {
|
|
428
|
-
".ts": "typescript",
|
|
429
|
-
".tsx": "typescript",
|
|
430
|
-
".js": "javascript",
|
|
431
|
-
".jsx": "javascript",
|
|
432
|
-
".py": "python",
|
|
433
|
-
".java": "java",
|
|
434
|
-
".go": "go",
|
|
435
|
-
".rs": "rust",
|
|
436
|
-
".cpp": "cpp",
|
|
437
|
-
".c": "c",
|
|
438
|
-
".h": "c"
|
|
439
|
-
};
|
|
440
|
-
return langMap[ext] || "unknown";
|
|
441
|
-
}
|
|
442
|
-
splitLargeFile(filePath, content, strategy) {
|
|
443
|
-
const chunks = [];
|
|
444
|
-
const lines = content.split("\n");
|
|
445
|
-
const linesPerChunk = Math.ceil(strategy.maxChunkSize / 50);
|
|
446
|
-
for (let i = 0; i < lines.length; i += linesPerChunk) {
|
|
447
|
-
const chunkLines = lines.slice(i, i + linesPerChunk);
|
|
448
|
-
const chunkContent = chunkLines.join("\n");
|
|
449
|
-
chunks.push({
|
|
450
|
-
id: `file-${path.basename(filePath)}-part-${i}`,
|
|
451
|
-
type: "code",
|
|
452
|
-
content: chunkContent,
|
|
453
|
-
metadata: {
|
|
454
|
-
filePath,
|
|
455
|
-
language: this.detectLanguage(filePath),
|
|
456
|
-
size: chunkContent.length,
|
|
457
|
-
score: 0.5
|
|
458
|
-
},
|
|
459
|
-
boundaries: {
|
|
460
|
-
start: i,
|
|
461
|
-
end: Math.min(i + linesPerChunk, lines.length),
|
|
462
|
-
overlap: strategy.overlapSize
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
}
|
|
466
|
-
return chunks;
|
|
467
|
-
}
|
|
468
|
-
extractSemanticUnits(content, language) {
|
|
469
|
-
const units = [];
|
|
470
|
-
if (language === "typescript" || language === "javascript") {
|
|
471
|
-
const classRegex = /class\s+(\w+)[^{]*\{[^}]+\}/g;
|
|
472
|
-
let match;
|
|
473
|
-
while ((match = classRegex.exec(content)) !== null) {
|
|
474
|
-
units.push({
|
|
475
|
-
name: match[1],
|
|
476
|
-
content: match[0],
|
|
477
|
-
start: match.index,
|
|
478
|
-
end: match.index + match[0].length,
|
|
479
|
-
importance: 0.8
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
const funcRegex = /(?:function|const|let)\s+(\w+)\s*=?\s*(?:\([^)]*\)|\w+)\s*(?:=>|{)[^}]+}/g;
|
|
483
|
-
while ((match = funcRegex.exec(content)) !== null) {
|
|
484
|
-
units.push({
|
|
485
|
-
name: match[1],
|
|
486
|
-
content: match[0],
|
|
487
|
-
start: match.index,
|
|
488
|
-
end: match.index + match[0].length,
|
|
489
|
-
importance: 0.6
|
|
490
|
-
});
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
return units;
|
|
494
|
-
}
|
|
495
|
-
async getRecentFrameChunks(limit) {
|
|
496
|
-
const activeStack = this.dualStackManager.getActiveStack();
|
|
497
|
-
const frames = await activeStack.getAllFrames();
|
|
498
|
-
return frames.slice(-limit).map((frame) => ({
|
|
499
|
-
id: `frame-${frame.frameId}`,
|
|
500
|
-
type: "frame",
|
|
501
|
-
content: JSON.stringify(frame, null, 2),
|
|
502
|
-
metadata: {
|
|
503
|
-
frameId: frame.frameId,
|
|
504
|
-
size: JSON.stringify(frame).length,
|
|
505
|
-
score: 0.7,
|
|
506
|
-
timestamp: new Date(frame.timestamp)
|
|
507
|
-
},
|
|
508
|
-
boundaries: {}
|
|
509
|
-
}));
|
|
510
|
-
}
|
|
511
|
-
async getCodeChunks(files) {
|
|
512
|
-
const chunks = [];
|
|
513
|
-
for (const file of files) {
|
|
514
|
-
if (fs.existsSync(file)) {
|
|
515
|
-
const content = await fs.promises.readFile(file, "utf-8");
|
|
516
|
-
chunks.push({
|
|
517
|
-
id: `code-${path.basename(file)}`,
|
|
518
|
-
type: "code",
|
|
519
|
-
content,
|
|
520
|
-
metadata: {
|
|
521
|
-
filePath: file,
|
|
522
|
-
language: this.detectLanguage(file),
|
|
523
|
-
size: content.length,
|
|
524
|
-
score: 0.8
|
|
525
|
-
},
|
|
526
|
-
boundaries: {}
|
|
527
|
-
});
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
return chunks;
|
|
531
|
-
}
|
|
532
|
-
async getTestChunks(testFiles) {
|
|
533
|
-
const chunks = [];
|
|
534
|
-
for (const file of testFiles) {
|
|
535
|
-
if (fs.existsSync(file)) {
|
|
536
|
-
const content = await fs.promises.readFile(file, "utf-8");
|
|
537
|
-
chunks.push({
|
|
538
|
-
id: `test-${path.basename(file)}`,
|
|
539
|
-
type: "test",
|
|
540
|
-
content,
|
|
541
|
-
metadata: {
|
|
542
|
-
filePath: file,
|
|
543
|
-
language: this.detectLanguage(file),
|
|
544
|
-
size: content.length,
|
|
545
|
-
score: 0.7
|
|
546
|
-
},
|
|
547
|
-
boundaries: {}
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
return chunks;
|
|
552
|
-
}
|
|
553
|
-
getRelevantCachedChunks(agentType) {
|
|
554
|
-
const relevantChunks = [];
|
|
555
|
-
for (const [key, chunks] of this.sharedContextCache.entries()) {
|
|
556
|
-
const timestamp = parseInt(key.split("-").pop() || "0");
|
|
557
|
-
if (Date.now() - timestamp > 5 * 60 * 1e3) {
|
|
558
|
-
continue;
|
|
559
|
-
}
|
|
560
|
-
if (agentType === "review" || agentType === "improve") {
|
|
561
|
-
relevantChunks.push(...chunks.filter((c) => c.type === "code"));
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
return relevantChunks;
|
|
565
|
-
}
|
|
566
|
-
/**
|
|
567
|
-
* Clear context cache
|
|
568
|
-
*/
|
|
569
|
-
clearCache() {
|
|
570
|
-
this.sharedContextCache.clear();
|
|
571
|
-
logger.debug("Context cache cleared");
|
|
572
|
-
}
|
|
573
|
-
/**
|
|
574
|
-
* Get cache statistics
|
|
575
|
-
*/
|
|
576
|
-
getCacheStats() {
|
|
577
|
-
const stats = {
|
|
578
|
-
cacheSize: this.sharedContextCache.size,
|
|
579
|
-
totalChunks: 0,
|
|
580
|
-
totalBytes: 0
|
|
581
|
-
};
|
|
582
|
-
for (const chunks of this.sharedContextCache.values()) {
|
|
583
|
-
stats.totalChunks += chunks.length;
|
|
584
|
-
stats.totalBytes += chunks.reduce((sum, c) => sum + c.metadata.size, 0);
|
|
585
|
-
}
|
|
586
|
-
return stats;
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
export {
|
|
590
|
-
RecursiveContextManager
|
|
591
|
-
};
|
|
592
|
-
//# sourceMappingURL=recursive-context-manager.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/core/context/recursive-context-manager.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Recursive Context Manager for RLM\n *\n * Handles context chunking, decomposition, and distribution\n * for recursive agent execution\n */\n\nimport { DualStackManager } from './dual-stack-manager.js';\nimport { ContextRetriever } from '../retrieval/context-retriever.js';\nimport { logger } from '../monitoring/logger.js';\nimport { ValidationError, ErrorCode } from '../errors/index.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { SubagentType } from '../../skills/recursive-agent-orchestrator.js';\n\nexport interface ContextChunk {\n id: string;\n type: 'code' | 'frame' | 'documentation' | 'test' | 'config';\n content: string;\n metadata: {\n filePath?: string;\n frameId?: string;\n language?: string;\n size: number;\n score: number;\n timestamp?: Date;\n };\n boundaries: {\n start?: number;\n end?: number;\n overlap?: number;\n };\n}\n\nexport interface ChunkingStrategy {\n type: 'file' | 'semantic' | 'size' | 'time';\n maxChunkSize: number;\n overlapSize: number;\n priorityThreshold: number;\n}\n\nexport interface AgentContextConfig {\n agent: SubagentType;\n _maxTokens: number;\n priorityWeights: {\n recent: number;\n relevant: number;\n dependency: number;\n error: number;\n test: number;\n };\n includeTypes: string[];\n excludeTypes: string[];\n}\n\n/**\n * Manages context for recursive agent execution\n */\nexport class RecursiveContextManager {\n private dualStackManager: DualStackManager;\n private contextRetriever: ContextRetriever;\n\n // Context cache for sharing between agents\n private sharedContextCache: Map<string, ContextChunk[]> = new Map();\n\n // Agent-specific configurations\n private agentConfigs: Map<SubagentType, AgentContextConfig>;\n\n constructor(\n dualStackManager: DualStackManager,\n contextRetriever: ContextRetriever\n ) {\n this.dualStackManager = dualStackManager;\n this.contextRetriever = contextRetriever;\n this.agentConfigs = this.initializeAgentConfigs();\n }\n\n /**\n * Initialize agent-specific context configurations\n */\n private initializeAgentConfigs(): Map<SubagentType, AgentContextConfig> {\n const configs = new Map<SubagentType, AgentContextConfig>();\n\n // Planning agent needs broad context\n configs.set('planning', {\n agent: 'planning',\n maxTokens: 20000,\n priorityWeights: {\n recent: 0.3,\n relevant: 0.4,\n dependency: 0.2,\n error: 0.05,\n test: 0.05,\n },\n includeTypes: ['frame', 'documentation', 'config'],\n excludeTypes: [],\n });\n\n // Code agent needs implementation context\n configs.set('code', {\n agent: 'code',\n maxTokens: 30000,\n priorityWeights: {\n recent: 0.2,\n relevant: 0.5,\n dependency: 0.2,\n error: 0.05,\n test: 0.05,\n },\n includeTypes: ['code', 'frame', 'test'],\n excludeTypes: ['documentation'],\n });\n\n // Testing agent needs code and existing tests\n configs.set('testing', {\n agent: 'testing',\n maxTokens: 25000,\n priorityWeights: {\n recent: 0.1,\n relevant: 0.3,\n dependency: 0.1,\n error: 0.1,\n test: 0.4,\n },\n includeTypes: ['code', 'test', 'frame'],\n excludeTypes: ['documentation', 'config'],\n });\n\n // Linting agent needs code and config\n configs.set('linting', {\n agent: 'linting',\n maxTokens: 15000,\n priorityWeights: {\n recent: 0.2,\n relevant: 0.4,\n dependency: 0.1,\n error: 0.2,\n test: 0.1,\n },\n includeTypes: ['code', 'config'],\n excludeTypes: ['documentation', 'test'],\n });\n\n // Review agent needs comprehensive context\n configs.set('review', {\n agent: 'review',\n maxTokens: 25000,\n priorityWeights: {\n recent: 0.3,\n relevant: 0.3,\n dependency: 0.1,\n error: 0.2,\n test: 0.1,\n },\n includeTypes: ['code', 'test', 'frame', 'documentation'],\n excludeTypes: [],\n });\n\n // Context agent for searching\n configs.set('context', {\n agent: 'context',\n maxTokens: 10000,\n priorityWeights: {\n recent: 0.1,\n relevant: 0.6,\n dependency: 0.2,\n error: 0.05,\n test: 0.05,\n },\n includeTypes: ['frame', 'documentation'],\n excludeTypes: [],\n });\n\n // Improvement agent needs review context\n configs.set('improve', {\n agent: 'improve',\n maxTokens: 30000,\n priorityWeights: {\n recent: 0.3,\n relevant: 0.4,\n dependency: 0.1,\n error: 0.15,\n test: 0.05,\n },\n includeTypes: ['code', 'test', 'frame'],\n excludeTypes: ['documentation'],\n });\n\n // Publish agent needs build/config context\n configs.set('publish', {\n agent: 'publish',\n maxTokens: 15000,\n priorityWeights: {\n recent: 0.4,\n relevant: 0.2,\n dependency: 0.1,\n error: 0.2,\n test: 0.1,\n },\n includeTypes: ['config', 'frame'],\n excludeTypes: ['code', 'test'],\n });\n\n return configs;\n }\n\n /**\n * Prepare context for a specific agent type\n */\n async prepareAgentContext(\n agentType: SubagentType,\n baseContext: Record<string, any>,\n _maxTokens: number\n ): Promise<Record<string, any>> {\n const config = this.agentConfigs.get(agentType);\n if (!config) {\n throw new ValidationError(\n `Unknown agent type: ${agentType}`,\n ErrorCode.VALIDATION_FAILED,\n { agentType }\n );\n }\n\n logger.debug(`Preparing context for ${agentType} agent`, { maxTokens });\n\n // Collect relevant chunks\n const chunks = await this.collectRelevantChunks(\n baseContext,\n config,\n maxTokens\n );\n\n // Sort by priority\n const sortedChunks = this.prioritizeChunks(chunks, config.priorityWeights);\n\n // Fit within token budget\n const selectedChunks = this.fitChunksToTokenBudget(sortedChunks, maxTokens);\n\n // Build agent context\n const agentContext: Record<string, any> = {\n ...baseContext,\n chunks: selectedChunks.map((c) => ({\n type: c.type,\n content: c.content,\n metadata: c.metadata,\n })),\n };\n\n // Cache for potential reuse\n this.sharedContextCache.set(`${agentType}-${Date.now()}`, selectedChunks);\n\n logger.debug(`Prepared context for ${agentType}`, {\n chunksSelected: selectedChunks.length,\n totalSize: selectedChunks.reduce((sum, c) => sum + c.metadata.size, 0),\n });\n\n return agentContext;\n }\n\n /**\n * Chunk large codebase for processing\n */\n async chunkCodebase(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n logger.info('Chunking codebase', { rootPath, strategy: strategy.type });\n\n switch (strategy.type) {\n case 'file':\n chunks.push(...(await this.chunkByFile(rootPath, strategy)));\n break;\n\n case 'semantic':\n chunks.push(...(await this.chunkBySemantic(rootPath, strategy)));\n break;\n\n case 'size':\n chunks.push(...(await this.chunkBySize(rootPath, strategy)));\n break;\n\n default:\n throw new ValidationError(\n `Unknown chunking strategy: ${strategy.type}`,\n ErrorCode.VALIDATION_FAILED,\n { strategyType: strategy.type }\n );\n }\n\n logger.info('Codebase chunked', {\n totalChunks: chunks.length,\n totalSize: chunks.reduce((sum, c) => sum + c.metadata.size, 0),\n });\n\n return chunks;\n }\n\n /**\n * Chunk by file boundaries\n */\n private async chunkByFile(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n const files = await this.walkDirectory(rootPath);\n\n for (const file of files) {\n const content = await fs.promises.readFile(file, 'utf-8');\n\n // Skip files larger than max chunk size\n if (content.length > strategy.maxChunkSize) {\n // Split large files\n const fileChunks = this.splitLargeFile(file, content, strategy);\n chunks.push(...fileChunks);\n } else {\n chunks.push({\n id: `file-${path.basename(file)}`,\n type: 'code',\n content,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: content.length,\n score: 0.5,\n },\n boundaries: {\n start: 0,\n end: content.length,\n },\n });\n }\n }\n\n return chunks;\n }\n\n /**\n * Chunk by semantic boundaries (classes, functions)\n */\n private async chunkBySemantic(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n const files = await this.walkDirectory(rootPath);\n\n for (const file of files) {\n const content = await fs.promises.readFile(file, 'utf-8');\n const language = this.detectLanguage(file);\n\n // Extract semantic units based on language\n const semanticUnits = this.extractSemanticUnits(content, language);\n\n for (const unit of semanticUnits) {\n if (unit.content.length <= strategy.maxChunkSize) {\n chunks.push({\n id: `semantic-${file}-${unit.name}`,\n type: 'code',\n content: unit.content,\n metadata: {\n filePath: file,\n language,\n size: unit.content.length,\n score: unit.importance,\n },\n boundaries: {\n start: unit.start,\n end: unit.end,\n },\n });\n }\n }\n }\n\n return chunks;\n }\n\n /**\n * Chunk by fixed size with overlap\n */\n private async chunkBySize(\n rootPath: string,\n strategy: ChunkingStrategy\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n const files = await this.walkDirectory(rootPath);\n\n for (const file of files) {\n const content = await fs.promises.readFile(file, 'utf-8');\n const lines = content.split('\\n');\n\n let currentChunk = '';\n let startLine = 0;\n\n for (let i = 0; i < lines.length; i++) {\n currentChunk += lines[i] + '\\n';\n\n if (currentChunk.length >= strategy.maxChunkSize) {\n chunks.push({\n id: `size-${file}-${startLine}`,\n type: 'code',\n content: currentChunk,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: currentChunk.length,\n score: 0.5,\n },\n boundaries: {\n start: startLine,\n end: i,\n overlap: strategy.overlapSize,\n },\n });\n\n // Move window with overlap\n const overlapLines = Math.floor(strategy.overlapSize / 50); // Estimate lines\n startLine = Math.max(0, i - overlapLines);\n currentChunk = lines.slice(startLine, i + 1).join('\\n');\n }\n }\n\n // Add remaining chunk\n if (currentChunk.trim()) {\n chunks.push({\n id: `size-${file}-${startLine}`,\n type: 'code',\n content: currentChunk,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: currentChunk.length,\n score: 0.5,\n },\n boundaries: {\n start: startLine,\n end: lines.length - 1,\n },\n });\n }\n }\n\n return chunks;\n }\n\n /**\n * Collect relevant chunks for agent context\n */\n private async collectRelevantChunks(\n baseContext: Record<string, any>,\n config: AgentContextConfig,\n _maxTokens: number\n ): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n // Get recent frames\n if (config.includeTypes.includes('frame')) {\n const recentFrames = await this.getRecentFrameChunks(10);\n chunks.push(...recentFrames);\n }\n\n // Get relevant code files\n if (config.includeTypes.includes('code') && baseContext.files) {\n const codeChunks = await this.getCodeChunks(baseContext.files);\n chunks.push(...codeChunks);\n }\n\n // Get test files\n if (config.includeTypes.includes('test') && baseContext.testFiles) {\n const testChunks = await this.getTestChunks(baseContext.testFiles);\n chunks.push(...testChunks);\n }\n\n // Search for relevant context\n if (baseContext.query) {\n const searchResults = await this.contextRetriever.retrieve({\n query: baseContext.query,\n limit: 20,\n });\n\n for (const result of searchResults) {\n chunks.push({\n id: `search-${result.frameId}`,\n type: 'frame',\n content: result.content,\n metadata: {\n frameId: result.frameId,\n size: result.content.length,\n score: result.score,\n timestamp: new Date(result.timestamp),\n },\n boundaries: {},\n });\n }\n }\n\n // Check shared cache for relevant chunks\n const cachedChunks = this.getRelevantCachedChunks(config.agent);\n chunks.push(...cachedChunks);\n\n return chunks;\n }\n\n /**\n * Prioritize chunks based on agent weights\n */\n private prioritizeChunks(\n chunks: ContextChunk[],\n weights: AgentContextConfig['priorityWeights']\n ): ContextChunk[] {\n return chunks\n .map((chunk) => {\n let priority = 0;\n\n // Recent weight\n if (chunk.metadata.timestamp) {\n const age = Date.now() - chunk.metadata.timestamp.getTime();\n const recentScore = Math.max(0, 1 - age / (24 * 60 * 60 * 1000)); // Decay over 24h\n priority += recentScore * weights.recent;\n }\n\n // Relevance weight\n priority += (chunk.metadata.score || 0.5) * weights.relevant;\n\n // Type-specific weights\n if (chunk.type === 'test') {\n priority += weights.test;\n }\n if (chunk.metadata.filePath?.includes('error')) {\n priority += weights.error;\n }\n\n return { ...chunk, priority };\n })\n .sort((a, b) => (b as any).priority - (a as any).priority);\n }\n\n /**\n * Fit chunks within token budget\n */\n private fitChunksToTokenBudget(\n chunks: ContextChunk[],\n _maxTokens: number\n ): ContextChunk[] {\n const selected: ContextChunk[] = [];\n let totalTokens = 0;\n\n // Rough token estimation (1 token \u2248 4 chars)\n const estimateTokens = (text: string) => Math.ceil(text.length / 4);\n\n for (const chunk of chunks) {\n const chunkTokens = estimateTokens(chunk.content);\n\n if (totalTokens + chunkTokens <= maxTokens) {\n selected.push(chunk);\n totalTokens += chunkTokens;\n } else if (selected.length === 0) {\n // Always include at least one chunk, truncated if necessary\n const truncatedContent = chunk.content.slice(0, maxTokens * 4);\n selected.push({\n ...chunk,\n content: truncatedContent,\n metadata: {\n ...chunk.metadata,\n size: truncatedContent.length,\n },\n });\n break;\n } else {\n break;\n }\n }\n\n return selected;\n }\n\n /**\n * Helper methods\n */\n\n private async walkDirectory(dir: string): Promise<string[]> {\n const files: string[] = [];\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Skip node_modules, .git, etc\n if (!['node_modules', '.git', 'dist', 'build'].includes(entry.name)) {\n files.push(...(await this.walkDirectory(fullPath)));\n }\n } else if (entry.isFile()) {\n // Include code files\n if (/\\.(ts|tsx|js|jsx|py|java|go|rs|cpp|c|h)$/.test(entry.name)) {\n files.push(fullPath);\n }\n }\n }\n\n return files;\n }\n\n private detectLanguage(filePath: string): string {\n const ext = path.extname(filePath);\n const langMap: Record<string, string> = {\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.js': 'javascript',\n '.jsx': 'javascript',\n '.py': 'python',\n '.java': 'java',\n '.go': 'go',\n '.rs': 'rust',\n '.cpp': 'cpp',\n '.c': 'c',\n '.h': 'c',\n };\n return langMap[ext] || 'unknown';\n }\n\n private splitLargeFile(\n filePath: string,\n content: string,\n strategy: ChunkingStrategy\n ): ContextChunk[] {\n const chunks: ContextChunk[] = [];\n const lines = content.split('\\n');\n const linesPerChunk = Math.ceil(strategy.maxChunkSize / 50); // Estimate\n\n for (let i = 0; i < lines.length; i += linesPerChunk) {\n const chunkLines = lines.slice(i, i + linesPerChunk);\n const chunkContent = chunkLines.join('\\n');\n\n chunks.push({\n id: `file-${path.basename(filePath)}-part-${i}`,\n type: 'code',\n content: chunkContent,\n metadata: {\n filePath,\n language: this.detectLanguage(filePath),\n size: chunkContent.length,\n score: 0.5,\n },\n boundaries: {\n start: i,\n end: Math.min(i + linesPerChunk, lines.length),\n overlap: strategy.overlapSize,\n },\n });\n }\n\n return chunks;\n }\n\n private extractSemanticUnits(\n content: string,\n language: string\n ): Array<{\n name: string;\n content: string;\n start: number;\n end: number;\n importance: number;\n }> {\n const units: Array<{\n name: string;\n content: string;\n start: number;\n end: number;\n importance: number;\n }> = [];\n\n // Simple regex-based extraction (would need proper AST parsing for production)\n if (language === 'typescript' || language === 'javascript') {\n // Extract classes\n const classRegex = /class\\s+(\\w+)[^{]*\\{[^}]+\\}/g;\n let match;\n while ((match = classRegex.exec(content)) !== null) {\n units.push({\n name: match[1],\n content: match[0],\n start: match.index,\n end: match.index + match[0].length,\n importance: 0.8,\n });\n }\n\n // Extract functions\n const funcRegex =\n /(?:function|const|let)\\s+(\\w+)\\s*=?\\s*(?:\\([^)]*\\)|\\w+)\\s*(?:=>|{)[^}]+}/g;\n while ((match = funcRegex.exec(content)) !== null) {\n units.push({\n name: match[1],\n content: match[0],\n start: match.index,\n end: match.index + match[0].length,\n importance: 0.6,\n });\n }\n }\n\n return units;\n }\n\n private async getRecentFrameChunks(limit: number): Promise<ContextChunk[]> {\n const activeStack = this.dualStackManager.getActiveStack();\n const frames = await activeStack.getAllFrames();\n\n return frames.slice(-limit).map((frame) => ({\n id: `frame-${frame.frameId}`,\n type: 'frame',\n content: JSON.stringify(frame, null, 2),\n metadata: {\n frameId: frame.frameId,\n size: JSON.stringify(frame).length,\n score: 0.7,\n timestamp: new Date(frame.timestamp),\n },\n boundaries: {},\n }));\n }\n\n private async getCodeChunks(files: string[]): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n for (const file of files) {\n if (fs.existsSync(file)) {\n const content = await fs.promises.readFile(file, 'utf-8');\n chunks.push({\n id: `code-${path.basename(file)}`,\n type: 'code',\n content,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: content.length,\n score: 0.8,\n },\n boundaries: {},\n });\n }\n }\n\n return chunks;\n }\n\n private async getTestChunks(testFiles: string[]): Promise<ContextChunk[]> {\n const chunks: ContextChunk[] = [];\n\n for (const file of testFiles) {\n if (fs.existsSync(file)) {\n const content = await fs.promises.readFile(file, 'utf-8');\n chunks.push({\n id: `test-${path.basename(file)}`,\n type: 'test',\n content,\n metadata: {\n filePath: file,\n language: this.detectLanguage(file),\n size: content.length,\n score: 0.7,\n },\n boundaries: {},\n });\n }\n }\n\n return chunks;\n }\n\n private getRelevantCachedChunks(agentType: SubagentType): ContextChunk[] {\n const relevantChunks: ContextChunk[] = [];\n\n // Get chunks from cache that might be relevant\n for (const [key, chunks] of this.sharedContextCache.entries()) {\n // Skip very old cache entries\n const timestamp = parseInt(key.split('-').pop() || '0');\n if (Date.now() - timestamp > 5 * 60 * 1000) {\n // 5 minutes\n continue;\n }\n\n // Add relevant chunks based on agent type\n if (agentType === 'review' || agentType === 'improve') {\n relevantChunks.push(...chunks.filter((c) => c.type === 'code'));\n }\n }\n\n return relevantChunks;\n }\n\n /**\n * Clear context cache\n */\n clearCache(): void {\n this.sharedContextCache.clear();\n logger.debug('Context cache cleared');\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats() {\n const stats = {\n cacheSize: this.sharedContextCache.size,\n totalChunks: 0,\n totalBytes: 0,\n };\n\n for (const chunks of this.sharedContextCache.values()) {\n stats.totalChunks += chunks.length;\n stats.totalBytes += chunks.reduce((sum, c) => sum + c.metadata.size, 0);\n }\n\n return stats;\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;AASA,SAAS,cAAc;AACvB,SAAS,iBAAiB,iBAAiB;AAC3C,YAAY,QAAQ;AACpB,YAAY,UAAU;AA8Cf,MAAM,wBAAwB;AAAA,EAC3B;AAAA,EACA;AAAA;AAAA,EAGA,qBAAkD,oBAAI,IAAI;AAAA;AAAA,EAG1D;AAAA,EAER,YACE,kBACA,kBACA;AACA,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AACxB,SAAK,eAAe,KAAK,uBAAuB;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAAgE;AACtE,UAAM,UAAU,oBAAI,IAAsC;AAG1D,YAAQ,IAAI,YAAY;AAAA,MACtB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,SAAS,iBAAiB,QAAQ;AAAA,MACjD,cAAc,CAAC;AAAA,IACjB,CAAC;AAGD,YAAQ,IAAI,QAAQ;AAAA,MAClB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,QAAQ,SAAS,MAAM;AAAA,MACtC,cAAc,CAAC,eAAe;AAAA,IAChC,CAAC;AAGD,YAAQ,IAAI,WAAW;AAAA,MACrB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,QAAQ,QAAQ,OAAO;AAAA,MACtC,cAAc,CAAC,iBAAiB,QAAQ;AAAA,IAC1C,CAAC;AAGD,YAAQ,IAAI,WAAW;AAAA,MACrB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,QAAQ,QAAQ;AAAA,MAC/B,cAAc,CAAC,iBAAiB,MAAM;AAAA,IACxC,CAAC;AAGD,YAAQ,IAAI,UAAU;AAAA,MACpB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,QAAQ,QAAQ,SAAS,eAAe;AAAA,MACvD,cAAc,CAAC;AAAA,IACjB,CAAC;AAGD,YAAQ,IAAI,WAAW;AAAA,MACrB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,SAAS,eAAe;AAAA,MACvC,cAAc,CAAC;AAAA,IACjB,CAAC;AAGD,YAAQ,IAAI,WAAW;AAAA,MACrB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,QAAQ,QAAQ,OAAO;AAAA,MACtC,cAAc,CAAC,eAAe;AAAA,IAChC,CAAC;AAGD,YAAQ,IAAI,WAAW;AAAA,MACrB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc,CAAC,UAAU,OAAO;AAAA,MAChC,cAAc,CAAC,QAAQ,MAAM;AAAA,IAC/B,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,WACA,aACA,YAC8B;AAC9B,UAAM,SAAS,KAAK,aAAa,IAAI,SAAS;AAC9C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR,uBAAuB,SAAS;AAAA,QAChC,UAAU;AAAA,QACV,EAAE,UAAU;AAAA,MACd;AAAA,IACF;AAEA,WAAO,MAAM,yBAAyB,SAAS,UAAU,EAAE,UAAU,CAAC;AAGtE,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,UAAM,eAAe,KAAK,iBAAiB,QAAQ,OAAO,eAAe;AAGzE,UAAM,iBAAiB,KAAK,uBAAuB,cAAc,SAAS;AAG1E,UAAM,eAAoC;AAAA,MACxC,GAAG;AAAA,MACH,QAAQ,eAAe,IAAI,CAAC,OAAO;AAAA,QACjC,MAAM,EAAE;AAAA,QACR,SAAS,EAAE;AAAA,QACX,UAAU,EAAE;AAAA,MACd,EAAE;AAAA,IACJ;AAGA,SAAK,mBAAmB,IAAI,GAAG,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,cAAc;AAExE,WAAO,MAAM,wBAAwB,SAAS,IAAI;AAAA,MAChD,gBAAgB,eAAe;AAAA,MAC/B,WAAW,eAAe,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,IACvE,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJ,UACA,UACyB;AACzB,UAAM,SAAyB,CAAC;AAEhC,WAAO,KAAK,qBAAqB,EAAE,UAAU,UAAU,SAAS,KAAK,CAAC;AAEtE,YAAQ,SAAS,MAAM;AAAA,MACrB,KAAK;AACH,eAAO,KAAK,GAAI,MAAM,KAAK,YAAY,UAAU,QAAQ,CAAE;AAC3D;AAAA,MAEF,KAAK;AACH,eAAO,KAAK,GAAI,MAAM,KAAK,gBAAgB,UAAU,QAAQ,CAAE;AAC/D;AAAA,MAEF,KAAK;AACH,eAAO,KAAK,GAAI,MAAM,KAAK,YAAY,UAAU,QAAQ,CAAE;AAC3D;AAAA,MAEF;AACE,cAAM,IAAI;AAAA,UACR,8BAA8B,SAAS,IAAI;AAAA,UAC3C,UAAU;AAAA,UACV,EAAE,cAAc,SAAS,KAAK;AAAA,QAChC;AAAA,IACJ;AAEA,WAAO,KAAK,oBAAoB;AAAA,MAC9B,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,IAC/D,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YACZ,UACA,UACyB;AACzB,UAAM,SAAyB,CAAC;AAChC,UAAM,QAAQ,MAAM,KAAK,cAAc,QAAQ;AAE/C,eAAW,QAAQ,OAAO;AACxB,YAAM,UAAU,MAAM,GAAG,SAAS,SAAS,MAAM,OAAO;AAGxD,UAAI,QAAQ,SAAS,SAAS,cAAc;AAE1C,cAAM,aAAa,KAAK,eAAe,MAAM,SAAS,QAAQ;AAC9D,eAAO,KAAK,GAAG,UAAU;AAAA,MAC3B,OAAO;AACL,eAAO,KAAK;AAAA,UACV,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC;AAAA,UAC/B,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,YACR,UAAU;AAAA,YACV,UAAU,KAAK,eAAe,IAAI;AAAA,YAClC,MAAM,QAAQ;AAAA,YACd,OAAO;AAAA,UACT;AAAA,UACA,YAAY;AAAA,YACV,OAAO;AAAA,YACP,KAAK,QAAQ;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBACZ,UACA,UACyB;AACzB,UAAM,SAAyB,CAAC;AAChC,UAAM,QAAQ,MAAM,KAAK,cAAc,QAAQ;AAE/C,eAAW,QAAQ,OAAO;AACxB,YAAM,UAAU,MAAM,GAAG,SAAS,SAAS,MAAM,OAAO;AACxD,YAAM,WAAW,KAAK,eAAe,IAAI;AAGzC,YAAM,gBAAgB,KAAK,qBAAqB,SAAS,QAAQ;AAEjE,iBAAW,QAAQ,eAAe;AAChC,YAAI,KAAK,QAAQ,UAAU,SAAS,cAAc;AAChD,iBAAO,KAAK;AAAA,YACV,IAAI,YAAY,IAAI,IAAI,KAAK,IAAI;AAAA,YACjC,MAAM;AAAA,YACN,SAAS,KAAK;AAAA,YACd,UAAU;AAAA,cACR,UAAU;AAAA,cACV;AAAA,cACA,MAAM,KAAK,QAAQ;AAAA,cACnB,OAAO,KAAK;AAAA,YACd;AAAA,YACA,YAAY;AAAA,cACV,OAAO,KAAK;AAAA,cACZ,KAAK,KAAK;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YACZ,UACA,UACyB;AACzB,UAAM,SAAyB,CAAC;AAChC,UAAM,QAAQ,MAAM,KAAK,cAAc,QAAQ;AAE/C,eAAW,QAAQ,OAAO;AACxB,YAAM,UAAU,MAAM,GAAG,SAAS,SAAS,MAAM,OAAO;AACxD,YAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,UAAI,eAAe;AACnB,UAAI,YAAY;AAEhB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,wBAAgB,MAAM,CAAC,IAAI;AAE3B,YAAI,aAAa,UAAU,SAAS,cAAc;AAChD,iBAAO,KAAK;AAAA,YACV,IAAI,QAAQ,IAAI,IAAI,SAAS;AAAA,YAC7B,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU;AAAA,cACR,UAAU;AAAA,cACV,UAAU,KAAK,eAAe,IAAI;AAAA,cAClC,MAAM,aAAa;AAAA,cACnB,OAAO;AAAA,YACT;AAAA,YACA,YAAY;AAAA,cACV,OAAO;AAAA,cACP,KAAK;AAAA,cACL,SAAS,SAAS;AAAA,YACpB;AAAA,UACF,CAAC;AAGD,gBAAM,eAAe,KAAK,MAAM,SAAS,cAAc,EAAE;AACzD,sBAAY,KAAK,IAAI,GAAG,IAAI,YAAY;AACxC,yBAAe,MAAM,MAAM,WAAW,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA,QACxD;AAAA,MACF;AAGA,UAAI,aAAa,KAAK,GAAG;AACvB,eAAO,KAAK;AAAA,UACV,IAAI,QAAQ,IAAI,IAAI,SAAS;AAAA,UAC7B,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,YACR,UAAU;AAAA,YACV,UAAU,KAAK,eAAe,IAAI;AAAA,YAClC,MAAM,aAAa;AAAA,YACnB,OAAO;AAAA,UACT;AAAA,UACA,YAAY;AAAA,YACV,OAAO;AAAA,YACP,KAAK,MAAM,SAAS;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,sBACZ,aACA,QACA,YACyB;AACzB,UAAM,SAAyB,CAAC;AAGhC,QAAI,OAAO,aAAa,SAAS,OAAO,GAAG;AACzC,YAAM,eAAe,MAAM,KAAK,qBAAqB,EAAE;AACvD,aAAO,KAAK,GAAG,YAAY;AAAA,IAC7B;AAGA,QAAI,OAAO,aAAa,SAAS,MAAM,KAAK,YAAY,OAAO;AAC7D,YAAM,aAAa,MAAM,KAAK,cAAc,YAAY,KAAK;AAC7D,aAAO,KAAK,GAAG,UAAU;AAAA,IAC3B;AAGA,QAAI,OAAO,aAAa,SAAS,MAAM,KAAK,YAAY,WAAW;AACjE,YAAM,aAAa,MAAM,KAAK,cAAc,YAAY,SAAS;AACjE,aAAO,KAAK,GAAG,UAAU;AAAA,IAC3B;AAGA,QAAI,YAAY,OAAO;AACrB,YAAM,gBAAgB,MAAM,KAAK,iBAAiB,SAAS;AAAA,QACzD,OAAO,YAAY;AAAA,QACnB,OAAO;AAAA,MACT,CAAC;AAED,iBAAW,UAAU,eAAe;AAClC,eAAO,KAAK;AAAA,UACV,IAAI,UAAU,OAAO,OAAO;AAAA,UAC5B,MAAM;AAAA,UACN,SAAS,OAAO;AAAA,UAChB,UAAU;AAAA,YACR,SAAS,OAAO;AAAA,YAChB,MAAM,OAAO,QAAQ;AAAA,YACrB,OAAO,OAAO;AAAA,YACd,WAAW,IAAI,KAAK,OAAO,SAAS;AAAA,UACtC;AAAA,UACA,YAAY,CAAC;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM,eAAe,KAAK,wBAAwB,OAAO,KAAK;AAC9D,WAAO,KAAK,GAAG,YAAY;AAE3B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBACN,QACA,SACgB;AAChB,WAAO,OACJ,IAAI,CAAC,UAAU;AACd,UAAI,WAAW;AAGf,UAAI,MAAM,SAAS,WAAW;AAC5B,cAAM,MAAM,KAAK,IAAI,IAAI,MAAM,SAAS,UAAU,QAAQ;AAC1D,cAAM,cAAc,KAAK,IAAI,GAAG,IAAI,OAAO,KAAK,KAAK,KAAK,IAAK;AAC/D,oBAAY,cAAc,QAAQ;AAAA,MACpC;AAGA,mBAAa,MAAM,SAAS,SAAS,OAAO,QAAQ;AAGpD,UAAI,MAAM,SAAS,QAAQ;AACzB,oBAAY,QAAQ;AAAA,MACtB;AACA,UAAI,MAAM,SAAS,UAAU,SAAS,OAAO,GAAG;AAC9C,oBAAY,QAAQ;AAAA,MACtB;AAEA,aAAO,EAAE,GAAG,OAAO,SAAS;AAAA,IAC9B,CAAC,EACA,KAAK,CAAC,GAAG,MAAO,EAAU,WAAY,EAAU,QAAQ;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKQ,uBACN,QACA,YACgB;AAChB,UAAM,WAA2B,CAAC;AAClC,QAAI,cAAc;AAGlB,UAAM,iBAAiB,CAAC,SAAiB,KAAK,KAAK,KAAK,SAAS,CAAC;AAElE,eAAW,SAAS,QAAQ;AAC1B,YAAM,cAAc,eAAe,MAAM,OAAO;AAEhD,UAAI,cAAc,eAAe,WAAW;AAC1C,iBAAS,KAAK,KAAK;AACnB,uBAAe;AAAA,MACjB,WAAW,SAAS,WAAW,GAAG;AAEhC,cAAM,mBAAmB,MAAM,QAAQ,MAAM,GAAG,YAAY,CAAC;AAC7D,iBAAS,KAAK;AAAA,UACZ,GAAG;AAAA,UACH,SAAS;AAAA,UACT,UAAU;AAAA,YACR,GAAG,MAAM;AAAA,YACT,MAAM,iBAAiB;AAAA,UACzB;AAAA,QACF,CAAC;AACD;AAAA,MACF,OAAO;AACL;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,KAAgC;AAC1D,UAAM,QAAkB,CAAC;AACzB,UAAM,UAAU,MAAM,GAAG,SAAS,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAEtE,eAAW,SAAS,SAAS;AAC3B,YAAM,WAAW,KAAK,KAAK,KAAK,MAAM,IAAI;AAE1C,UAAI,MAAM,YAAY,GAAG;AAEvB,YAAI,CAAC,CAAC,gBAAgB,QAAQ,QAAQ,OAAO,EAAE,SAAS,MAAM,IAAI,GAAG;AACnE,gBAAM,KAAK,GAAI,MAAM,KAAK,cAAc,QAAQ,CAAE;AAAA,QACpD;AAAA,MACF,WAAW,MAAM,OAAO,GAAG;AAEzB,YAAI,2CAA2C,KAAK,MAAM,IAAI,GAAG;AAC/D,gBAAM,KAAK,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,UAA0B;AAC/C,UAAM,MAAM,KAAK,QAAQ,QAAQ;AACjC,UAAM,UAAkC;AAAA,MACtC,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AACA,WAAO,QAAQ,GAAG,KAAK;AAAA,EACzB;AAAA,EAEQ,eACN,UACA,SACA,UACgB;AAChB,UAAM,SAAyB,CAAC;AAChC,UAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,UAAM,gBAAgB,KAAK,KAAK,SAAS,eAAe,EAAE;AAE1D,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,eAAe;AACpD,YAAM,aAAa,MAAM,MAAM,GAAG,IAAI,aAAa;AACnD,YAAM,eAAe,WAAW,KAAK,IAAI;AAEzC,aAAO,KAAK;AAAA,QACV,IAAI,QAAQ,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC;AAAA,QAC7C,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA,UAAU,KAAK,eAAe,QAAQ;AAAA,UACtC,MAAM,aAAa;AAAA,UACnB,OAAO;AAAA,QACT;AAAA,QACA,YAAY;AAAA,UACV,OAAO;AAAA,UACP,KAAK,KAAK,IAAI,IAAI,eAAe,MAAM,MAAM;AAAA,UAC7C,SAAS,SAAS;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,qBACN,SACA,UAOC;AACD,UAAM,QAMD,CAAC;AAGN,QAAI,aAAa,gBAAgB,aAAa,cAAc;AAE1D,YAAM,aAAa;AACnB,UAAI;AACJ,cAAQ,QAAQ,WAAW,KAAK,OAAO,OAAO,MAAM;AAClD,cAAM,KAAK;AAAA,UACT,MAAM,MAAM,CAAC;AAAA,UACb,SAAS,MAAM,CAAC;AAAA,UAChB,OAAO,MAAM;AAAA,UACb,KAAK,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,UAC5B,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAGA,YAAM,YACJ;AACF,cAAQ,QAAQ,UAAU,KAAK,OAAO,OAAO,MAAM;AACjD,cAAM,KAAK;AAAA,UACT,MAAM,MAAM,CAAC;AAAA,UACb,SAAS,MAAM,CAAC;AAAA,UAChB,OAAO,MAAM;AAAA,UACb,KAAK,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,UAC5B,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,qBAAqB,OAAwC;AACzE,UAAM,cAAc,KAAK,iBAAiB,eAAe;AACzD,UAAM,SAAS,MAAM,YAAY,aAAa;AAE9C,WAAO,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW;AAAA,MAC1C,IAAI,SAAS,MAAM,OAAO;AAAA,MAC1B,MAAM;AAAA,MACN,SAAS,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,MACtC,UAAU;AAAA,QACR,SAAS,MAAM;AAAA,QACf,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,QAC5B,OAAO;AAAA,QACP,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACrC;AAAA,MACA,YAAY,CAAC;AAAA,IACf,EAAE;AAAA,EACJ;AAAA,EAEA,MAAc,cAAc,OAA0C;AACpE,UAAM,SAAyB,CAAC;AAEhC,eAAW,QAAQ,OAAO;AACxB,UAAI,GAAG,WAAW,IAAI,GAAG;AACvB,cAAM,UAAU,MAAM,GAAG,SAAS,SAAS,MAAM,OAAO;AACxD,eAAO,KAAK;AAAA,UACV,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC;AAAA,UAC/B,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,YACR,UAAU;AAAA,YACV,UAAU,KAAK,eAAe,IAAI;AAAA,YAClC,MAAM,QAAQ;AAAA,YACd,OAAO;AAAA,UACT;AAAA,UACA,YAAY,CAAC;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,WAA8C;AACxE,UAAM,SAAyB,CAAC;AAEhC,eAAW,QAAQ,WAAW;AAC5B,UAAI,GAAG,WAAW,IAAI,GAAG;AACvB,cAAM,UAAU,MAAM,GAAG,SAAS,SAAS,MAAM,OAAO;AACxD,eAAO,KAAK;AAAA,UACV,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC;AAAA,UAC/B,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,YACR,UAAU;AAAA,YACV,UAAU,KAAK,eAAe,IAAI;AAAA,YAClC,MAAM,QAAQ;AAAA,YACd,OAAO;AAAA,UACT;AAAA,UACA,YAAY,CAAC;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,wBAAwB,WAAyC;AACvE,UAAM,iBAAiC,CAAC;AAGxC,eAAW,CAAC,KAAK,MAAM,KAAK,KAAK,mBAAmB,QAAQ,GAAG;AAE7D,YAAM,YAAY,SAAS,IAAI,MAAM,GAAG,EAAE,IAAI,KAAK,GAAG;AACtD,UAAI,KAAK,IAAI,IAAI,YAAY,IAAI,KAAK,KAAM;AAE1C;AAAA,MACF;AAGA,UAAI,cAAc,YAAY,cAAc,WAAW;AACrD,uBAAe,KAAK,GAAG,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,MAChE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAmB;AACjB,SAAK,mBAAmB,MAAM;AAC9B,WAAO,MAAM,uBAAuB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,UAAM,QAAQ;AAAA,MACZ,WAAW,KAAK,mBAAmB;AAAA,MACnC,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAEA,eAAW,UAAU,KAAK,mBAAmB,OAAO,GAAG;AACrD,YAAM,eAAe,OAAO;AAC5B,YAAM,cAAc,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,IACxE;AAEA,WAAO;AAAA,EACT;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|