prism-pr 1.0.0-alpha.47
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 +964 -0
- package/bin/run.js +9 -0
- package/dist/ai/agents/architecture-reviewer.d.ts +3 -0
- package/dist/ai/agents/architecture-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/architecture-reviewer.js +67 -0
- package/dist/ai/agents/architecture-reviewer.js.map +1 -0
- package/dist/ai/agents/blade-reviewer.d.ts +3 -0
- package/dist/ai/agents/blade-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/blade-reviewer.js +59 -0
- package/dist/ai/agents/blade-reviewer.js.map +1 -0
- package/dist/ai/agents/config-reviewer.d.ts +3 -0
- package/dist/ai/agents/config-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/config-reviewer.js +106 -0
- package/dist/ai/agents/config-reviewer.js.map +1 -0
- package/dist/ai/agents/csharp-reviewer.d.ts +3 -0
- package/dist/ai/agents/csharp-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/csharp-reviewer.js +59 -0
- package/dist/ai/agents/csharp-reviewer.js.map +1 -0
- package/dist/ai/agents/css-reviewer.d.ts +3 -0
- package/dist/ai/agents/css-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/css-reviewer.js +65 -0
- package/dist/ai/agents/css-reviewer.js.map +1 -0
- package/dist/ai/agents/framework-rules/index.d.ts +33 -0
- package/dist/ai/agents/framework-rules/index.d.ts.map +1 -0
- package/dist/ai/agents/framework-rules/index.js +67 -0
- package/dist/ai/agents/framework-rules/index.js.map +1 -0
- package/dist/ai/agents/framework-rules/normalize.d.ts +40 -0
- package/dist/ai/agents/framework-rules/normalize.d.ts.map +1 -0
- package/dist/ai/agents/framework-rules/normalize.js +102 -0
- package/dist/ai/agents/framework-rules/normalize.js.map +1 -0
- package/dist/ai/agents/framework-rules/routing-map.d.ts +3 -0
- package/dist/ai/agents/framework-rules/routing-map.d.ts.map +1 -0
- package/dist/ai/agents/framework-rules/routing-map.js +15 -0
- package/dist/ai/agents/framework-rules/routing-map.js.map +1 -0
- package/dist/ai/agents/html-reviewer.d.ts +3 -0
- package/dist/ai/agents/html-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/html-reviewer.js +61 -0
- package/dist/ai/agents/html-reviewer.js.map +1 -0
- package/dist/ai/agents/performance-reviewer.d.ts +3 -0
- package/dist/ai/agents/performance-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/performance-reviewer.js +60 -0
- package/dist/ai/agents/performance-reviewer.js.map +1 -0
- package/dist/ai/agents/php-reviewer.d.ts +3 -0
- package/dist/ai/agents/php-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/php-reviewer.js +62 -0
- package/dist/ai/agents/php-reviewer.js.map +1 -0
- package/dist/ai/agents/prompts/architecture-reviewer.txt +39 -0
- package/dist/ai/agents/prompts/blade-reviewer.txt +39 -0
- package/dist/ai/agents/prompts/config-reviewer.txt +47 -0
- package/dist/ai/agents/prompts/csharp-reviewer.txt +39 -0
- package/dist/ai/agents/prompts/css-reviewer.txt +41 -0
- package/dist/ai/agents/prompts/html-reviewer.txt +43 -0
- package/dist/ai/agents/prompts/performance-reviewer.txt +38 -0
- package/dist/ai/agents/prompts/php-reviewer.txt +87 -0
- package/dist/ai/agents/prompts/python-reviewer.txt +42 -0
- package/dist/ai/agents/prompts/security-reviewer.txt +36 -0
- package/dist/ai/agents/prompts/sql-reviewer.txt +43 -0
- package/dist/ai/agents/prompts/testing-reviewer.txt +38 -0
- package/dist/ai/agents/prompts/ts-reviewer.txt +54 -0
- package/dist/ai/agents/prompts/ux-text-reviewer.txt +68 -0
- package/dist/ai/agents/python-reviewer.d.ts +3 -0
- package/dist/ai/agents/python-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/python-reviewer.js +59 -0
- package/dist/ai/agents/python-reviewer.js.map +1 -0
- package/dist/ai/agents/registry.d.ts +20 -0
- package/dist/ai/agents/registry.d.ts.map +1 -0
- package/dist/ai/agents/registry.js +65 -0
- package/dist/ai/agents/registry.js.map +1 -0
- package/dist/ai/agents/security-reviewer.d.ts +3 -0
- package/dist/ai/agents/security-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/security-reviewer.js +69 -0
- package/dist/ai/agents/security-reviewer.js.map +1 -0
- package/dist/ai/agents/shared/content-builder.d.ts +14 -0
- package/dist/ai/agents/shared/content-builder.d.ts.map +1 -0
- package/dist/ai/agents/shared/content-builder.js +158 -0
- package/dist/ai/agents/shared/content-builder.js.map +1 -0
- package/dist/ai/agents/shared/finding-schema.d.ts +54 -0
- package/dist/ai/agents/shared/finding-schema.d.ts.map +1 -0
- package/dist/ai/agents/shared/finding-schema.js +65 -0
- package/dist/ai/agents/shared/finding-schema.js.map +1 -0
- package/dist/ai/agents/shared/line-validator.d.ts +8 -0
- package/dist/ai/agents/shared/line-validator.d.ts.map +1 -0
- package/dist/ai/agents/shared/line-validator.js +12 -0
- package/dist/ai/agents/shared/line-validator.js.map +1 -0
- package/dist/ai/agents/shared/prompt-builder.d.ts +3 -0
- package/dist/ai/agents/shared/prompt-builder.d.ts.map +1 -0
- package/dist/ai/agents/shared/prompt-builder.js +68 -0
- package/dist/ai/agents/shared/prompt-builder.js.map +1 -0
- package/dist/ai/agents/sql-reviewer.d.ts +3 -0
- package/dist/ai/agents/sql-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/sql-reviewer.js +61 -0
- package/dist/ai/agents/sql-reviewer.js.map +1 -0
- package/dist/ai/agents/testing-reviewer.d.ts +3 -0
- package/dist/ai/agents/testing-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/testing-reviewer.js +80 -0
- package/dist/ai/agents/testing-reviewer.js.map +1 -0
- package/dist/ai/agents/ts-reviewer.d.ts +3 -0
- package/dist/ai/agents/ts-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/ts-reviewer.js +63 -0
- package/dist/ai/agents/ts-reviewer.js.map +1 -0
- package/dist/ai/agents/ux-text-reviewer.d.ts +3 -0
- package/dist/ai/agents/ux-text-reviewer.d.ts.map +1 -0
- package/dist/ai/agents/ux-text-reviewer.js +116 -0
- package/dist/ai/agents/ux-text-reviewer.js.map +1 -0
- package/dist/ai/orchestrator/agent-classifier.d.ts +28 -0
- package/dist/ai/orchestrator/agent-classifier.d.ts.map +1 -0
- package/dist/ai/orchestrator/agent-classifier.js +137 -0
- package/dist/ai/orchestrator/agent-classifier.js.map +1 -0
- package/dist/ai/orchestrator/consolidation.d.ts +12 -0
- package/dist/ai/orchestrator/consolidation.d.ts.map +1 -0
- package/dist/ai/orchestrator/consolidation.js +34 -0
- package/dist/ai/orchestrator/consolidation.js.map +1 -0
- package/dist/ai/orchestrator/context-analyzer.d.ts +47 -0
- package/dist/ai/orchestrator/context-analyzer.d.ts.map +1 -0
- package/dist/ai/orchestrator/context-analyzer.js +368 -0
- package/dist/ai/orchestrator/context-analyzer.js.map +1 -0
- package/dist/ai/orchestrator/deduplicator.d.ts +43 -0
- package/dist/ai/orchestrator/deduplicator.d.ts.map +1 -0
- package/dist/ai/orchestrator/deduplicator.js +97 -0
- package/dist/ai/orchestrator/deduplicator.js.map +1 -0
- package/dist/ai/orchestrator/orchestrator.d.ts +57 -0
- package/dist/ai/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/ai/orchestrator/orchestrator.js +181 -0
- package/dist/ai/orchestrator/orchestrator.js.map +1 -0
- package/dist/ai/orchestrator/rule-based-strategy.d.ts +20 -0
- package/dist/ai/orchestrator/rule-based-strategy.d.ts.map +1 -0
- package/dist/ai/orchestrator/rule-based-strategy.js +55 -0
- package/dist/ai/orchestrator/rule-based-strategy.js.map +1 -0
- package/dist/ai/orchestrator/semaphore.d.ts +25 -0
- package/dist/ai/orchestrator/semaphore.d.ts.map +1 -0
- package/dist/ai/orchestrator/semaphore.js +52 -0
- package/dist/ai/orchestrator/semaphore.js.map +1 -0
- package/dist/ai/orchestrator/severity-pipeline.d.ts +21 -0
- package/dist/ai/orchestrator/severity-pipeline.d.ts.map +1 -0
- package/dist/ai/orchestrator/severity-pipeline.js +69 -0
- package/dist/ai/orchestrator/severity-pipeline.js.map +1 -0
- package/dist/ai/orchestrator/strategy.d.ts +20 -0
- package/dist/ai/orchestrator/strategy.d.ts.map +1 -0
- package/dist/ai/orchestrator/strategy.js +2 -0
- package/dist/ai/orchestrator/strategy.js.map +1 -0
- package/dist/ai/providers/anthropic-provider.d.ts +14 -0
- package/dist/ai/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/ai/providers/anthropic-provider.js +108 -0
- package/dist/ai/providers/anthropic-provider.js.map +1 -0
- package/dist/ai/providers/claude-code-provider.d.ts +12 -0
- package/dist/ai/providers/claude-code-provider.d.ts.map +1 -0
- package/dist/ai/providers/claude-code-provider.js +103 -0
- package/dist/ai/providers/claude-code-provider.js.map +1 -0
- package/dist/ai/providers/errors.d.ts +22 -0
- package/dist/ai/providers/errors.d.ts.map +1 -0
- package/dist/ai/providers/errors.js +44 -0
- package/dist/ai/providers/errors.js.map +1 -0
- package/dist/ai/skills/skill-registry.d.ts +21 -0
- package/dist/ai/skills/skill-registry.d.ts.map +1 -0
- package/dist/ai/skills/skill-registry.js +27 -0
- package/dist/ai/skills/skill-registry.js.map +1 -0
- package/dist/ai/text-extractor/extractor.d.ts +15 -0
- package/dist/ai/text-extractor/extractor.d.ts.map +1 -0
- package/dist/ai/text-extractor/extractor.js +63 -0
- package/dist/ai/text-extractor/extractor.js.map +1 -0
- package/dist/ai/text-extractor/index.d.ts +4 -0
- package/dist/ai/text-extractor/index.d.ts.map +1 -0
- package/dist/ai/text-extractor/index.js +3 -0
- package/dist/ai/text-extractor/index.js.map +1 -0
- package/dist/ai/text-extractor/patterns.d.ts +21 -0
- package/dist/ai/text-extractor/patterns.d.ts.map +1 -0
- package/dist/ai/text-extractor/patterns.js +169 -0
- package/dist/ai/text-extractor/patterns.js.map +1 -0
- package/dist/ai/text-extractor/types.d.ts +47 -0
- package/dist/ai/text-extractor/types.d.ts.map +1 -0
- package/dist/ai/text-extractor/types.js +2 -0
- package/dist/ai/text-extractor/types.js.map +1 -0
- package/dist/bitbucket/client.d.ts +38 -0
- package/dist/bitbucket/client.d.ts.map +1 -0
- package/dist/bitbucket/client.js +448 -0
- package/dist/bitbucket/client.js.map +1 -0
- package/dist/bitbucket/errors.d.ts +75 -0
- package/dist/bitbucket/errors.d.ts.map +1 -0
- package/dist/bitbucket/errors.js +127 -0
- package/dist/bitbucket/errors.js.map +1 -0
- package/dist/bitbucket/mappers.d.ts +3 -0
- package/dist/bitbucket/mappers.d.ts.map +1 -0
- package/dist/bitbucket/mappers.js +14 -0
- package/dist/bitbucket/mappers.js.map +1 -0
- package/dist/commands/guard/check.d.ts +19 -0
- package/dist/commands/guard/check.d.ts.map +1 -0
- package/dist/commands/guard/check.js +224 -0
- package/dist/commands/guard/check.js.map +1 -0
- package/dist/commands/guard/index.d.ts +7 -0
- package/dist/commands/guard/index.d.ts.map +1 -0
- package/dist/commands/guard/index.js +65 -0
- package/dist/commands/guard/index.js.map +1 -0
- package/dist/commands/interactive.d.ts +10 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +88 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/login.d.ts +35 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +164 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +12 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +23 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/review/start.d.ts +22 -0
- package/dist/commands/review/start.d.ts.map +1 -0
- package/dist/commands/review/start.js +120 -0
- package/dist/commands/review/start.js.map +1 -0
- package/dist/commands/rules/push.d.ts +13 -0
- package/dist/commands/rules/push.d.ts.map +1 -0
- package/dist/commands/rules/push.js +75 -0
- package/dist/commands/rules/push.js.map +1 -0
- package/dist/commands/rules/stats.d.ts +14 -0
- package/dist/commands/rules/stats.d.ts.map +1 -0
- package/dist/commands/rules/stats.js +101 -0
- package/dist/commands/rules/stats.js.map +1 -0
- package/dist/commands/rules/sync.d.ts +15 -0
- package/dist/commands/rules/sync.d.ts.map +1 -0
- package/dist/commands/rules/sync.js +144 -0
- package/dist/commands/rules/sync.js.map +1 -0
- package/dist/config/config-manager.d.ts +14 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +85 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/convention-builder.d.ts +13 -0
- package/dist/config/convention-builder.d.ts.map +1 -0
- package/dist/config/convention-builder.js +31 -0
- package/dist/config/convention-builder.js.map +1 -0
- package/dist/config/credentials.d.ts +14 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +85 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/encryption.d.ts +20 -0
- package/dist/config/encryption.d.ts.map +1 -0
- package/dist/config/encryption.js +94 -0
- package/dist/config/encryption.js.map +1 -0
- package/dist/config/repo-config-loader.d.ts +34 -0
- package/dist/config/repo-config-loader.d.ts.map +1 -0
- package/dist/config/repo-config-loader.js +103 -0
- package/dist/config/repo-config-loader.js.map +1 -0
- package/dist/core/cli-workflow-callbacks.d.ts +35 -0
- package/dist/core/cli-workflow-callbacks.d.ts.map +1 -0
- package/dist/core/cli-workflow-callbacks.js +141 -0
- package/dist/core/cli-workflow-callbacks.js.map +1 -0
- package/dist/core/comment-publisher.d.ts +61 -0
- package/dist/core/comment-publisher.d.ts.map +1 -0
- package/dist/core/comment-publisher.js +172 -0
- package/dist/core/comment-publisher.js.map +1 -0
- package/dist/core/integrity-checker.d.ts +22 -0
- package/dist/core/integrity-checker.d.ts.map +1 -0
- package/dist/core/integrity-checker.js +83 -0
- package/dist/core/integrity-checker.js.map +1 -0
- package/dist/core/review-workflow.d.ts +34 -0
- package/dist/core/review-workflow.d.ts.map +1 -0
- package/dist/core/review-workflow.js +21 -0
- package/dist/core/review-workflow.js.map +1 -0
- package/dist/core/session-manager.d.ts +107 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +164 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/workflow-callbacks.d.ts +74 -0
- package/dist/core/workflow-callbacks.d.ts.map +1 -0
- package/dist/core/workflow-callbacks.js +2 -0
- package/dist/core/workflow-callbacks.js.map +1 -0
- package/dist/core/workflow-engine.d.ts +48 -0
- package/dist/core/workflow-engine.d.ts.map +1 -0
- package/dist/core/workflow-engine.js +442 -0
- package/dist/core/workflow-engine.js.map +1 -0
- package/dist/errors/base.d.ts +6 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +13 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/config-error.d.ts +5 -0
- package/dist/errors/config-error.d.ts.map +1 -0
- package/dist/errors/config-error.js +9 -0
- package/dist/errors/config-error.js.map +1 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +5 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/validation-error.d.ts +5 -0
- package/dist/errors/validation-error.d.ts.map +1 -0
- package/dist/errors/validation-error.js +9 -0
- package/dist/errors/validation-error.js.map +1 -0
- package/dist/errors/workflow-error.d.ts +6 -0
- package/dist/errors/workflow-error.d.ts.map +1 -0
- package/dist/errors/workflow-error.js +11 -0
- package/dist/errors/workflow-error.js.map +1 -0
- package/dist/guard/ast-grep-strategy.d.ts +25 -0
- package/dist/guard/ast-grep-strategy.d.ts.map +1 -0
- package/dist/guard/ast-grep-strategy.js +112 -0
- package/dist/guard/ast-grep-strategy.js.map +1 -0
- package/dist/guard/diff-pattern-matcher.d.ts +52 -0
- package/dist/guard/diff-pattern-matcher.d.ts.map +1 -0
- package/dist/guard/diff-pattern-matcher.js +325 -0
- package/dist/guard/diff-pattern-matcher.js.map +1 -0
- package/dist/guard/file-fetcher.d.ts +3 -0
- package/dist/guard/file-fetcher.d.ts.map +1 -0
- package/dist/guard/file-fetcher.js +21 -0
- package/dist/guard/file-fetcher.js.map +1 -0
- package/dist/guard/guard-engine.d.ts +8 -0
- package/dist/guard/guard-engine.d.ts.map +1 -0
- package/dist/guard/guard-engine.js +78 -0
- package/dist/guard/guard-engine.js.map +1 -0
- package/dist/guard/match-strategy.d.ts +14 -0
- package/dist/guard/match-strategy.d.ts.map +1 -0
- package/dist/guard/match-strategy.js +7 -0
- package/dist/guard/match-strategy.js.map +1 -0
- package/dist/guard/patterns-loader.d.ts +16 -0
- package/dist/guard/patterns-loader.d.ts.map +1 -0
- package/dist/guard/patterns-loader.js +61 -0
- package/dist/guard/patterns-loader.js.map +1 -0
- package/dist/guard/types.d.ts +61 -0
- package/dist/guard/types.d.ts.map +1 -0
- package/dist/guard/types.js +2 -0
- package/dist/guard/types.js.map +1 -0
- package/dist/memory/engram-client.d.ts +15 -0
- package/dist/memory/engram-client.d.ts.map +1 -0
- package/dist/memory/engram-client.js +167 -0
- package/dist/memory/engram-client.js.map +1 -0
- package/dist/memory/review-memory-service.d.ts +13 -0
- package/dist/memory/review-memory-service.d.ts.map +1 -0
- package/dist/memory/review-memory-service.js +43 -0
- package/dist/memory/review-memory-service.js.map +1 -0
- package/dist/persistence/database.d.ts +8 -0
- package/dist/persistence/database.d.ts.map +1 -0
- package/dist/persistence/database.js +58 -0
- package/dist/persistence/database.js.map +1 -0
- package/dist/persistence/false-positive-repository.d.ts +12 -0
- package/dist/persistence/false-positive-repository.d.ts.map +1 -0
- package/dist/persistence/false-positive-repository.js +58 -0
- package/dist/persistence/false-positive-repository.js.map +1 -0
- package/dist/persistence/migrations/0000_peaceful_blur.sql +66 -0
- package/dist/persistence/migrations/0001_phase3a_schema.sql +15 -0
- package/dist/persistence/migrations/0002_stack_profile.sql +1 -0
- package/dist/persistence/migrations/0003_known_workspaces.sql +5 -0
- package/dist/persistence/migrations/0004_review_memory.sql +24 -0
- package/dist/persistence/migrations/meta/0000_snapshot.json +468 -0
- package/dist/persistence/migrations/meta/_journal.json +41 -0
- package/dist/persistence/profile-repository.d.ts +33 -0
- package/dist/persistence/profile-repository.d.ts.map +1 -0
- package/dist/persistence/profile-repository.js +94 -0
- package/dist/persistence/profile-repository.js.map +1 -0
- package/dist/persistence/repository.d.ts +70 -0
- package/dist/persistence/repository.d.ts.map +1 -0
- package/dist/persistence/repository.js +225 -0
- package/dist/persistence/repository.js.map +1 -0
- package/dist/persistence/schema.d.ts +1333 -0
- package/dist/persistence/schema.d.ts.map +1 -0
- package/dist/persistence/schema.js +92 -0
- package/dist/persistence/schema.js.map +1 -0
- package/dist/persistence/workspace-repository.d.ts +14 -0
- package/dist/persistence/workspace-repository.d.ts.map +1 -0
- package/dist/persistence/workspace-repository.js +30 -0
- package/dist/persistence/workspace-repository.js.map +1 -0
- package/dist/rules-engine/finding-aggregator.d.ts +13 -0
- package/dist/rules-engine/finding-aggregator.d.ts.map +1 -0
- package/dist/rules-engine/finding-aggregator.js +135 -0
- package/dist/rules-engine/finding-aggregator.js.map +1 -0
- package/dist/rules-engine/pattern-generator.d.ts +26 -0
- package/dist/rules-engine/pattern-generator.d.ts.map +1 -0
- package/dist/rules-engine/pattern-generator.js +116 -0
- package/dist/rules-engine/pattern-generator.js.map +1 -0
- package/dist/rules-engine/rule-prompt-builder.d.ts +32 -0
- package/dist/rules-engine/rule-prompt-builder.d.ts.map +1 -0
- package/dist/rules-engine/rule-prompt-builder.js +124 -0
- package/dist/rules-engine/rule-prompt-builder.js.map +1 -0
- package/dist/rules-engine/types.d.ts +80 -0
- package/dist/rules-engine/types.d.ts.map +1 -0
- package/dist/rules-engine/types.js +18 -0
- package/dist/rules-engine/types.js.map +1 -0
- package/dist/rules-repo/rules-cache.d.ts +14 -0
- package/dist/rules-repo/rules-cache.d.ts.map +1 -0
- package/dist/rules-repo/rules-cache.js +43 -0
- package/dist/rules-repo/rules-cache.js.map +1 -0
- package/dist/rules-repo/rules-repo-client.d.ts +27 -0
- package/dist/rules-repo/rules-repo-client.d.ts.map +1 -0
- package/dist/rules-repo/rules-repo-client.js +85 -0
- package/dist/rules-repo/rules-repo-client.js.map +1 -0
- package/dist/rules-repo/types.d.ts +16 -0
- package/dist/rules-repo/types.d.ts.map +1 -0
- package/dist/rules-repo/types.js +10 -0
- package/dist/rules-repo/types.js.map +1 -0
- package/dist/stack-detector/ai-stack-fallback.d.ts +12 -0
- package/dist/stack-detector/ai-stack-fallback.d.ts.map +1 -0
- package/dist/stack-detector/ai-stack-fallback.js +67 -0
- package/dist/stack-detector/ai-stack-fallback.js.map +1 -0
- package/dist/stack-detector/ai-stack-schema.d.ts +28 -0
- package/dist/stack-detector/ai-stack-schema.d.ts.map +1 -0
- package/dist/stack-detector/ai-stack-schema.js +13 -0
- package/dist/stack-detector/ai-stack-schema.js.map +1 -0
- package/dist/stack-detector/formatter.d.ts +7 -0
- package/dist/stack-detector/formatter.d.ts.map +1 -0
- package/dist/stack-detector/formatter.js +37 -0
- package/dist/stack-detector/formatter.js.map +1 -0
- package/dist/stack-detector/index.d.ts +7 -0
- package/dist/stack-detector/index.d.ts.map +1 -0
- package/dist/stack-detector/index.js +5 -0
- package/dist/stack-detector/index.js.map +1 -0
- package/dist/stack-detector/merge-profiles.d.ts +5 -0
- package/dist/stack-detector/merge-profiles.d.ts.map +1 -0
- package/dist/stack-detector/merge-profiles.js +36 -0
- package/dist/stack-detector/merge-profiles.js.map +1 -0
- package/dist/stack-detector/parsers.d.ts +12 -0
- package/dist/stack-detector/parsers.d.ts.map +1 -0
- package/dist/stack-detector/parsers.js +259 -0
- package/dist/stack-detector/parsers.js.map +1 -0
- package/dist/stack-detector/stack-detector.d.ts +11 -0
- package/dist/stack-detector/stack-detector.d.ts.map +1 -0
- package/dist/stack-detector/stack-detector.js +83 -0
- package/dist/stack-detector/stack-detector.js.map +1 -0
- package/dist/stack-detector/types.d.ts +13 -0
- package/dist/stack-detector/types.d.ts.map +1 -0
- package/dist/stack-detector/types.js +2 -0
- package/dist/stack-detector/types.js.map +1 -0
- package/dist/tui/app.d.ts +9 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +45 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/callbacks/tui-workflow-callbacks.d.ts +32 -0
- package/dist/tui/callbacks/tui-workflow-callbacks.d.ts.map +1 -0
- package/dist/tui/callbacks/tui-workflow-callbacks.js +88 -0
- package/dist/tui/callbacks/tui-workflow-callbacks.js.map +1 -0
- package/dist/tui/components/key-hint.d.ts +7 -0
- package/dist/tui/components/key-hint.d.ts.map +1 -0
- package/dist/tui/components/key-hint.js +6 -0
- package/dist/tui/components/key-hint.js.map +1 -0
- package/dist/tui/components/scroll-list.d.ts +20 -0
- package/dist/tui/components/scroll-list.d.ts.map +1 -0
- package/dist/tui/components/scroll-list.js +85 -0
- package/dist/tui/components/scroll-list.js.map +1 -0
- package/dist/tui/components/searchable-list.d.ts +15 -0
- package/dist/tui/components/searchable-list.d.ts.map +1 -0
- package/dist/tui/components/searchable-list.js +97 -0
- package/dist/tui/components/searchable-list.js.map +1 -0
- package/dist/tui/components/severity-badge.d.ts +6 -0
- package/dist/tui/components/severity-badge.d.ts.map +1 -0
- package/dist/tui/components/severity-badge.js +17 -0
- package/dist/tui/components/severity-badge.js.map +1 -0
- package/dist/tui/components/severity-selector.d.ts +9 -0
- package/dist/tui/components/severity-selector.d.ts.map +1 -0
- package/dist/tui/components/severity-selector.js +29 -0
- package/dist/tui/components/severity-selector.js.map +1 -0
- package/dist/tui/components/spinner.d.ts +6 -0
- package/dist/tui/components/spinner.d.ts.map +1 -0
- package/dist/tui/components/spinner.js +19 -0
- package/dist/tui/components/spinner.js.map +1 -0
- package/dist/tui/components/status-bar.d.ts +10 -0
- package/dist/tui/components/status-bar.d.ts.map +1 -0
- package/dist/tui/components/status-bar.js +7 -0
- package/dist/tui/components/status-bar.js.map +1 -0
- package/dist/tui/deps-context.d.ts +27 -0
- package/dist/tui/deps-context.d.ts.map +1 -0
- package/dist/tui/deps-context.js +9 -0
- package/dist/tui/deps-context.js.map +1 -0
- package/dist/tui/error-boundary.d.ts +16 -0
- package/dist/tui/error-boundary.d.ts.map +1 -0
- package/dist/tui/error-boundary.js +30 -0
- package/dist/tui/error-boundary.js.map +1 -0
- package/dist/tui/hooks/use-agent-recommendations.d.ts +10 -0
- package/dist/tui/hooks/use-agent-recommendations.d.ts.map +1 -0
- package/dist/tui/hooks/use-agent-recommendations.js +66 -0
- package/dist/tui/hooks/use-agent-recommendations.js.map +1 -0
- package/dist/tui/hooks/use-auth.d.ts +14 -0
- package/dist/tui/hooks/use-auth.d.ts.map +1 -0
- package/dist/tui/hooks/use-auth.js +32 -0
- package/dist/tui/hooks/use-auth.js.map +1 -0
- package/dist/tui/hooks/use-bitbucket.d.ts +18 -0
- package/dist/tui/hooks/use-bitbucket.d.ts.map +1 -0
- package/dist/tui/hooks/use-bitbucket.js +31 -0
- package/dist/tui/hooks/use-bitbucket.js.map +1 -0
- package/dist/tui/hooks/use-review.d.ts +6 -0
- package/dist/tui/hooks/use-review.d.ts.map +1 -0
- package/dist/tui/hooks/use-review.js +24 -0
- package/dist/tui/hooks/use-review.js.map +1 -0
- package/dist/tui/hooks/use-session.d.ts +47 -0
- package/dist/tui/hooks/use-session.d.ts.map +1 -0
- package/dist/tui/hooks/use-session.js +17 -0
- package/dist/tui/hooks/use-session.js.map +1 -0
- package/dist/tui/screen-router.d.ts +3 -0
- package/dist/tui/screen-router.d.ts.map +1 -0
- package/dist/tui/screen-router.js +73 -0
- package/dist/tui/screen-router.js.map +1 -0
- package/dist/tui/screens/agent-select.d.ts +3 -0
- package/dist/tui/screens/agent-select.d.ts.map +1 -0
- package/dist/tui/screens/agent-select.js +173 -0
- package/dist/tui/screens/agent-select.js.map +1 -0
- package/dist/tui/screens/finding-detail.d.ts +3 -0
- package/dist/tui/screens/finding-detail.d.ts.map +1 -0
- package/dist/tui/screens/finding-detail.js +48 -0
- package/dist/tui/screens/finding-detail.js.map +1 -0
- package/dist/tui/screens/findings-list.d.ts +3 -0
- package/dist/tui/screens/findings-list.d.ts.map +1 -0
- package/dist/tui/screens/findings-list.js +108 -0
- package/dist/tui/screens/findings-list.js.map +1 -0
- package/dist/tui/screens/guard-detail.d.ts +3 -0
- package/dist/tui/screens/guard-detail.d.ts.map +1 -0
- package/dist/tui/screens/guard-detail.js +41 -0
- package/dist/tui/screens/guard-detail.js.map +1 -0
- package/dist/tui/screens/guard-home.d.ts +3 -0
- package/dist/tui/screens/guard-home.d.ts.map +1 -0
- package/dist/tui/screens/guard-home.js +81 -0
- package/dist/tui/screens/guard-home.js.map +1 -0
- package/dist/tui/screens/guard-results.d.ts +3 -0
- package/dist/tui/screens/guard-results.d.ts.map +1 -0
- package/dist/tui/screens/guard-results.js +103 -0
- package/dist/tui/screens/guard-results.js.map +1 -0
- package/dist/tui/screens/guard-running.d.ts +3 -0
- package/dist/tui/screens/guard-running.d.ts.map +1 -0
- package/dist/tui/screens/guard-running.js +92 -0
- package/dist/tui/screens/guard-running.js.map +1 -0
- package/dist/tui/screens/home.d.ts +3 -0
- package/dist/tui/screens/home.d.ts.map +1 -0
- package/dist/tui/screens/home.js +44 -0
- package/dist/tui/screens/home.js.map +1 -0
- package/dist/tui/screens/integrity-report.d.ts +3 -0
- package/dist/tui/screens/integrity-report.d.ts.map +1 -0
- package/dist/tui/screens/integrity-report.js +29 -0
- package/dist/tui/screens/integrity-report.js.map +1 -0
- package/dist/tui/screens/login.d.ts +3 -0
- package/dist/tui/screens/login.d.ts.map +1 -0
- package/dist/tui/screens/login.js +81 -0
- package/dist/tui/screens/login.js.map +1 -0
- package/dist/tui/screens/pr-list.d.ts +3 -0
- package/dist/tui/screens/pr-list.d.ts.map +1 -0
- package/dist/tui/screens/pr-list.js +76 -0
- package/dist/tui/screens/pr-list.js.map +1 -0
- package/dist/tui/screens/publish-confirm.d.ts +3 -0
- package/dist/tui/screens/publish-confirm.d.ts.map +1 -0
- package/dist/tui/screens/publish-confirm.js +42 -0
- package/dist/tui/screens/publish-confirm.js.map +1 -0
- package/dist/tui/screens/publishing.d.ts +3 -0
- package/dist/tui/screens/publishing.d.ts.map +1 -0
- package/dist/tui/screens/publishing.js +50 -0
- package/dist/tui/screens/publishing.js.map +1 -0
- package/dist/tui/screens/repo-select.d.ts +3 -0
- package/dist/tui/screens/repo-select.d.ts.map +1 -0
- package/dist/tui/screens/repo-select.js +76 -0
- package/dist/tui/screens/repo-select.js.map +1 -0
- package/dist/tui/screens/review-running.d.ts +3 -0
- package/dist/tui/screens/review-running.d.ts.map +1 -0
- package/dist/tui/screens/review-running.js +187 -0
- package/dist/tui/screens/review-running.js.map +1 -0
- package/dist/tui/screens/session-detail.d.ts +7 -0
- package/dist/tui/screens/session-detail.d.ts.map +1 -0
- package/dist/tui/screens/session-detail.js +28 -0
- package/dist/tui/screens/session-detail.js.map +1 -0
- package/dist/tui/screens/session-list.d.ts +7 -0
- package/dist/tui/screens/session-list.d.ts.map +1 -0
- package/dist/tui/screens/session-list.js +38 -0
- package/dist/tui/screens/session-list.js.map +1 -0
- package/dist/tui/screens/url-input.d.ts +3 -0
- package/dist/tui/screens/url-input.d.ts.map +1 -0
- package/dist/tui/screens/url-input.js +111 -0
- package/dist/tui/screens/url-input.js.map +1 -0
- package/dist/tui/screens/welcome.d.ts +3 -0
- package/dist/tui/screens/welcome.d.ts.map +1 -0
- package/dist/tui/screens/welcome.js +48 -0
- package/dist/tui/screens/welcome.js.map +1 -0
- package/dist/tui/screens/workspace-select.d.ts +3 -0
- package/dist/tui/screens/workspace-select.d.ts.map +1 -0
- package/dist/tui/screens/workspace-select.js +128 -0
- package/dist/tui/screens/workspace-select.js.map +1 -0
- package/dist/tui/state/router-context.d.ts +14 -0
- package/dist/tui/state/router-context.d.ts.map +1 -0
- package/dist/tui/state/router-context.js +9 -0
- package/dist/tui/state/router-context.js.map +1 -0
- package/dist/tui/state/router-reducer.d.ts +23 -0
- package/dist/tui/state/router-reducer.d.ts.map +1 -0
- package/dist/tui/state/router-reducer.js +21 -0
- package/dist/tui/state/router-reducer.js.map +1 -0
- package/dist/tui/state/tui-context.d.ts +11 -0
- package/dist/tui/state/tui-context.d.ts.map +1 -0
- package/dist/tui/state/tui-context.js +9 -0
- package/dist/tui/state/tui-context.js.map +1 -0
- package/dist/tui/state/tui-reducer.d.ts +212 -0
- package/dist/tui/state/tui-reducer.d.ts.map +1 -0
- package/dist/tui/state/tui-reducer.js +321 -0
- package/dist/tui/state/tui-reducer.js.map +1 -0
- package/dist/tui/utils/group-by-file.d.ts +7 -0
- package/dist/tui/utils/group-by-file.d.ts.map +1 -0
- package/dist/tui/utils/group-by-file.js +18 -0
- package/dist/tui/utils/group-by-file.js.map +1 -0
- package/dist/tui/utils/group-matches-by-file.d.ts +7 -0
- package/dist/tui/utils/group-matches-by-file.d.ts.map +1 -0
- package/dist/tui/utils/group-matches-by-file.js +18 -0
- package/dist/tui/utils/group-matches-by-file.js.map +1 -0
- package/dist/tui/utils/group-repos-by-project.d.ts +9 -0
- package/dist/tui/utils/group-repos-by-project.d.ts.map +1 -0
- package/dist/tui/utils/group-repos-by-project.js +48 -0
- package/dist/tui/utils/group-repos-by-project.js.map +1 -0
- package/dist/types/agent.d.ts +46 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/bitbucket.d.ts +90 -0
- package/dist/types/bitbucket.d.ts.map +1 -0
- package/dist/types/bitbucket.js +2 -0
- package/dist/types/bitbucket.js.map +1 -0
- package/dist/types/config.d.ts +17 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/diff.d.ts +24 -0
- package/dist/types/diff.d.ts.map +1 -0
- package/dist/types/diff.js +2 -0
- package/dist/types/diff.js.map +1 -0
- package/dist/types/engram.d.ts +29 -0
- package/dist/types/engram.d.ts.map +1 -0
- package/dist/types/engram.js +2 -0
- package/dist/types/engram.js.map +1 -0
- package/dist/types/false-positive.d.ts +12 -0
- package/dist/types/false-positive.d.ts.map +1 -0
- package/dist/types/false-positive.js +2 -0
- package/dist/types/false-positive.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/provider.d.ts +31 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +2 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/repo-config.d.ts +336 -0
- package/dist/types/repo-config.d.ts.map +1 -0
- package/dist/types/repo-config.js +62 -0
- package/dist/types/repo-config.js.map +1 -0
- package/dist/types/review-finding.d.ts +34 -0
- package/dist/types/review-finding.d.ts.map +1 -0
- package/dist/types/review-finding.js +11 -0
- package/dist/types/review-finding.js.map +1 -0
- package/dist/types/review-session.d.ts +21 -0
- package/dist/types/review-session.d.ts.map +1 -0
- package/dist/types/review-session.js +2 -0
- package/dist/types/review-session.js.map +1 -0
- package/dist/types/skill.d.ts +7 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +2 -0
- package/dist/types/skill.js.map +1 -0
- package/dist/utils/comment-formatter.d.ts +19 -0
- package/dist/utils/comment-formatter.d.ts.map +1 -0
- package/dist/utils/comment-formatter.js +53 -0
- package/dist/utils/comment-formatter.js.map +1 -0
- package/dist/utils/cost-estimator.d.ts +19 -0
- package/dist/utils/cost-estimator.d.ts.map +1 -0
- package/dist/utils/cost-estimator.js +32 -0
- package/dist/utils/cost-estimator.js.map +1 -0
- package/dist/utils/diff-parser.d.ts +7 -0
- package/dist/utils/diff-parser.d.ts.map +1 -0
- package/dist/utils/diff-parser.js +175 -0
- package/dist/utils/diff-parser.js.map +1 -0
- package/dist/utils/file-filter.d.ts +16 -0
- package/dist/utils/file-filter.d.ts.map +1 -0
- package/dist/utils/file-filter.js +64 -0
- package/dist/utils/file-filter.js.map +1 -0
- package/dist/utils/hash.d.ts +25 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +45 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +40 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/parse-bitbucket-url.d.ts +12 -0
- package/dist/utils/parse-bitbucket-url.d.ts.map +1 -0
- package/dist/utils/parse-bitbucket-url.js +41 -0
- package/dist/utils/parse-bitbucket-url.js.map +1 -0
- package/dist/utils/paths.d.ts +6 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +27 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/summary-generator.d.ts +17 -0
- package/dist/utils/summary-generator.d.ts.map +1 -0
- package/dist/utils/summary-generator.js +76 -0
- package/dist/utils/summary-generator.js.map +1 -0
- package/oclif.manifest.json +467 -0
- package/package.json +100 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Detect language from a file extension.
|
|
4
|
+
*/
|
|
5
|
+
function detectLanguage(ext) {
|
|
6
|
+
switch (ext.toLowerCase()) {
|
|
7
|
+
case '.ts':
|
|
8
|
+
case '.tsx':
|
|
9
|
+
case '.js':
|
|
10
|
+
case '.jsx':
|
|
11
|
+
return 'typescript';
|
|
12
|
+
case '.mts':
|
|
13
|
+
case '.cts':
|
|
14
|
+
case '.mjs':
|
|
15
|
+
case '.cjs':
|
|
16
|
+
return 'javascript';
|
|
17
|
+
case '.css':
|
|
18
|
+
case '.scss':
|
|
19
|
+
case '.sass':
|
|
20
|
+
case '.less':
|
|
21
|
+
return 'css';
|
|
22
|
+
case '.html':
|
|
23
|
+
case '.htm':
|
|
24
|
+
return 'html';
|
|
25
|
+
case '.cs':
|
|
26
|
+
return 'csharp';
|
|
27
|
+
case '.php':
|
|
28
|
+
return 'php';
|
|
29
|
+
case '.sql':
|
|
30
|
+
case '.pgsql':
|
|
31
|
+
case '.mysql':
|
|
32
|
+
return 'sql';
|
|
33
|
+
case '.py':
|
|
34
|
+
return 'python';
|
|
35
|
+
case '.go':
|
|
36
|
+
return 'go';
|
|
37
|
+
case '.json':
|
|
38
|
+
case '.yaml':
|
|
39
|
+
case '.yml':
|
|
40
|
+
case '.toml':
|
|
41
|
+
return 'config';
|
|
42
|
+
case '.md':
|
|
43
|
+
case '.txt':
|
|
44
|
+
return 'docs';
|
|
45
|
+
default:
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if a file is a test file based on path conventions.
|
|
51
|
+
*/
|
|
52
|
+
function isTestFile(filePath) {
|
|
53
|
+
const lower = filePath.toLowerCase();
|
|
54
|
+
const basename = path.basename(lower);
|
|
55
|
+
const testExtensions = [
|
|
56
|
+
'.test.ts', '.test.tsx', '.test.js',
|
|
57
|
+
'.spec.ts', '.spec.tsx', '.spec.js',
|
|
58
|
+
];
|
|
59
|
+
for (const ext of testExtensions) {
|
|
60
|
+
if (basename.endsWith(ext))
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
const normalized = lower.replace(/\\/g, '/');
|
|
64
|
+
return (normalized.includes('/__tests__/') ||
|
|
65
|
+
normalized.includes('/test/') ||
|
|
66
|
+
normalized.startsWith('test/'));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if a file is a stylesheet.
|
|
70
|
+
*/
|
|
71
|
+
function isStyleFile(filePath) {
|
|
72
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
73
|
+
if (['.css', '.scss', '.sass', '.less'].includes(ext))
|
|
74
|
+
return true;
|
|
75
|
+
const lower = filePath.toLowerCase();
|
|
76
|
+
return lower.endsWith('.styled.ts') || lower.endsWith('.styled.tsx');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if a file is an HTML file.
|
|
80
|
+
*/
|
|
81
|
+
function isHtmlFile(filePath) {
|
|
82
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
83
|
+
return ext === '.html' || ext === '.htm';
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a file is a SQL file.
|
|
87
|
+
*/
|
|
88
|
+
function isSqlFile(filePath) {
|
|
89
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
90
|
+
return ext === '.sql' || ext === '.pgsql' || ext === '.mysql';
|
|
91
|
+
}
|
|
92
|
+
// Config extensions set — used by isConfigFile().
|
|
93
|
+
const CONFIG_EXTENSIONS_CTX = new Set(['.json', '.yaml', '.yml', '.toml']);
|
|
94
|
+
// Lockfile basenames — excluded from config detection even though they have matching extensions.
|
|
95
|
+
const LOCKFILE_BASENAMES_CTX = new Set([
|
|
96
|
+
'package-lock.json',
|
|
97
|
+
'yarn.lock',
|
|
98
|
+
'pnpm-lock.yaml',
|
|
99
|
+
'composer.lock',
|
|
100
|
+
'gemfile.lock',
|
|
101
|
+
'cargo.lock',
|
|
102
|
+
'go.sum',
|
|
103
|
+
'poetry.lock',
|
|
104
|
+
'packages.lock.json',
|
|
105
|
+
]);
|
|
106
|
+
// UI text extensions set — .tsx and .jsx strongly correlate with user-facing text (JSX = UI components).
|
|
107
|
+
// Conservative subset: plain .ts/.js files are mostly logic, not UI text.
|
|
108
|
+
const UI_TEXT_EXTENSIONS = new Set(['.tsx', '.jsx']);
|
|
109
|
+
/**
|
|
110
|
+
* Check if a file contains JSX UI components (likely user-facing text).
|
|
111
|
+
* Used to trigger ux-text-reviewer recommendation.
|
|
112
|
+
*/
|
|
113
|
+
function isUiTextFile(filePath) {
|
|
114
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
115
|
+
return UI_TEXT_EXTENSIONS.has(ext);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if a file is a config file for context detection purposes.
|
|
119
|
+
* Lockfiles are explicitly excluded — they have config-format extensions but are not
|
|
120
|
+
* reviewable and would trigger false config-reviewer recommendations for lockfile-only PRs.
|
|
121
|
+
*/
|
|
122
|
+
function isConfigFile(filePath) {
|
|
123
|
+
const normalized = filePath.replace(/\\/g, '/').toLowerCase();
|
|
124
|
+
const basename = path.basename(normalized);
|
|
125
|
+
// Exclude lockfiles first
|
|
126
|
+
if (LOCKFILE_BASENAMES_CTX.has(basename))
|
|
127
|
+
return false;
|
|
128
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
129
|
+
if (CONFIG_EXTENSIONS_CTX.has(ext))
|
|
130
|
+
return true;
|
|
131
|
+
// .env.example variants
|
|
132
|
+
if (basename.includes('.env') && basename.endsWith('.example'))
|
|
133
|
+
return true;
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Analyze the diff files to detect what languages, file types, and patterns are present.
|
|
138
|
+
*/
|
|
139
|
+
export function analyzeContext(files) {
|
|
140
|
+
const languages = new Set();
|
|
141
|
+
const fileTypes = new Map();
|
|
142
|
+
let hasTests = false;
|
|
143
|
+
let hasStyles = false;
|
|
144
|
+
let hasCSharp = false;
|
|
145
|
+
let hasHtml = false;
|
|
146
|
+
let hasSql = false;
|
|
147
|
+
let hasConfig = false;
|
|
148
|
+
let hasUiText = false;
|
|
149
|
+
let hasPhp = false;
|
|
150
|
+
let hasBlade = false;
|
|
151
|
+
let hasPython = false;
|
|
152
|
+
let totalLines = 0;
|
|
153
|
+
for (const file of files) {
|
|
154
|
+
const ext = path.extname(file.newPath).toLowerCase();
|
|
155
|
+
// Count file types
|
|
156
|
+
fileTypes.set(ext, (fileTypes.get(ext) ?? 0) + 1);
|
|
157
|
+
// Detect language
|
|
158
|
+
const lang = detectLanguage(ext);
|
|
159
|
+
if (lang !== null) {
|
|
160
|
+
languages.add(lang);
|
|
161
|
+
}
|
|
162
|
+
// Special detection
|
|
163
|
+
if (isTestFile(file.newPath))
|
|
164
|
+
hasTests = true;
|
|
165
|
+
if (isStyleFile(file.newPath))
|
|
166
|
+
hasStyles = true;
|
|
167
|
+
if (ext === '.cs')
|
|
168
|
+
hasCSharp = true;
|
|
169
|
+
if (isHtmlFile(file.newPath))
|
|
170
|
+
hasHtml = true;
|
|
171
|
+
if (isSqlFile(file.newPath))
|
|
172
|
+
hasSql = true;
|
|
173
|
+
if (isConfigFile(file.newPath))
|
|
174
|
+
hasConfig = true;
|
|
175
|
+
if (isUiTextFile(file.newPath))
|
|
176
|
+
hasUiText = true;
|
|
177
|
+
// PHP / Blade detection — Blade MUST precede PHP because .blade.php has .php extension
|
|
178
|
+
if (file.newPath.toLowerCase().endsWith('.blade.php')) {
|
|
179
|
+
hasBlade = true;
|
|
180
|
+
}
|
|
181
|
+
else if (ext === '.php') {
|
|
182
|
+
hasPhp = true;
|
|
183
|
+
}
|
|
184
|
+
if (ext === '.py')
|
|
185
|
+
hasPython = true;
|
|
186
|
+
// Count addition lines
|
|
187
|
+
for (const hunk of file.hunks) {
|
|
188
|
+
totalLines += hunk.lines.filter((l) => l.type === 'addition').length;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
languages,
|
|
193
|
+
fileTypes,
|
|
194
|
+
hasTests,
|
|
195
|
+
hasStyles,
|
|
196
|
+
hasCSharp,
|
|
197
|
+
hasPhp,
|
|
198
|
+
hasBlade,
|
|
199
|
+
hasPython,
|
|
200
|
+
hasHtml,
|
|
201
|
+
hasSql,
|
|
202
|
+
hasConfig,
|
|
203
|
+
hasUiText,
|
|
204
|
+
totalFiles: files.length,
|
|
205
|
+
totalLines,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Recommend which agents to run based on detected context and available agents.
|
|
210
|
+
* Only returns IDs that exist in allAgents.
|
|
211
|
+
* @public
|
|
212
|
+
*/
|
|
213
|
+
export function getRecommendedAgents(context, allAgents) {
|
|
214
|
+
const availableIds = new Set(allAgents.map((a) => a.id));
|
|
215
|
+
const recommended = new Set();
|
|
216
|
+
const add = (id) => {
|
|
217
|
+
if (availableIds.has(id))
|
|
218
|
+
recommended.add(id);
|
|
219
|
+
};
|
|
220
|
+
// Always include security reviewer
|
|
221
|
+
add('security-reviewer');
|
|
222
|
+
// TypeScript/JavaScript files
|
|
223
|
+
if (context.languages.has('typescript') || context.languages.has('javascript')) {
|
|
224
|
+
add('ts-reviewer');
|
|
225
|
+
}
|
|
226
|
+
// Stylesheet files
|
|
227
|
+
if (context.hasStyles) {
|
|
228
|
+
add('css-reviewer');
|
|
229
|
+
}
|
|
230
|
+
// HTML files
|
|
231
|
+
if (context.hasHtml) {
|
|
232
|
+
add('html-reviewer');
|
|
233
|
+
}
|
|
234
|
+
// SQL files
|
|
235
|
+
if (context.hasSql) {
|
|
236
|
+
add('sql-reviewer');
|
|
237
|
+
}
|
|
238
|
+
// Config files
|
|
239
|
+
if (context.hasConfig) {
|
|
240
|
+
add('config-reviewer');
|
|
241
|
+
}
|
|
242
|
+
// C# files
|
|
243
|
+
if (context.hasCSharp) {
|
|
244
|
+
add('csharp-reviewer');
|
|
245
|
+
}
|
|
246
|
+
// PHP files (excluding Blade templates)
|
|
247
|
+
if (context.hasPhp) {
|
|
248
|
+
add('php-reviewer');
|
|
249
|
+
}
|
|
250
|
+
// Laravel Blade templates
|
|
251
|
+
if (context.hasBlade) {
|
|
252
|
+
add('blade-reviewer');
|
|
253
|
+
}
|
|
254
|
+
// Python files
|
|
255
|
+
if (context.hasPython) {
|
|
256
|
+
add('python-reviewer');
|
|
257
|
+
}
|
|
258
|
+
// Test files
|
|
259
|
+
if (context.hasTests) {
|
|
260
|
+
add('testing-reviewer');
|
|
261
|
+
}
|
|
262
|
+
// Architecture: multi-file or multi-language changes
|
|
263
|
+
if (context.totalFiles >= 5 || context.languages.size >= 2) {
|
|
264
|
+
add('architecture-reviewer');
|
|
265
|
+
}
|
|
266
|
+
// Performance: large diffs
|
|
267
|
+
if (context.totalLines >= 300 || context.totalFiles >= 8) {
|
|
268
|
+
add('performance-reviewer');
|
|
269
|
+
}
|
|
270
|
+
// UI text (JSX/TSX files likely contain user-facing strings)
|
|
271
|
+
if (context.hasUiText) {
|
|
272
|
+
add('ux-text-reviewer');
|
|
273
|
+
}
|
|
274
|
+
return Array.from(recommended);
|
|
275
|
+
}
|
|
276
|
+
// ── Stack-aware agent rules ────────────────────────────────────────────────────
|
|
277
|
+
// Keys are all lowercase. Values are agent IDs to add when the key matches.
|
|
278
|
+
const FRAMEWORK_AGENT_RULES = new Map([
|
|
279
|
+
['angular', ['ts-reviewer', 'architecture-reviewer', 'html-reviewer', 'ux-text-reviewer']],
|
|
280
|
+
['react', ['ts-reviewer', 'ux-text-reviewer']],
|
|
281
|
+
['next', ['ts-reviewer', 'ux-text-reviewer']],
|
|
282
|
+
['nextjs', ['ts-reviewer', 'ux-text-reviewer']],
|
|
283
|
+
['vue', ['ts-reviewer', 'html-reviewer', 'ux-text-reviewer']],
|
|
284
|
+
['svelte', ['ts-reviewer', 'ux-text-reviewer']],
|
|
285
|
+
['dotnet', ['csharp-reviewer', 'security-reviewer', 'html-reviewer']],
|
|
286
|
+
['.net', ['csharp-reviewer', 'security-reviewer', 'html-reviewer']],
|
|
287
|
+
['aspnet', ['csharp-reviewer', 'security-reviewer', 'html-reviewer']],
|
|
288
|
+
['asp.net', ['csharp-reviewer', 'security-reviewer', 'html-reviewer']],
|
|
289
|
+
['express', ['security-reviewer']],
|
|
290
|
+
['fastify', ['security-reviewer']],
|
|
291
|
+
['nest', ['security-reviewer']],
|
|
292
|
+
['nestjs', ['security-reviewer']],
|
|
293
|
+
['supabase', ['sql-reviewer', 'security-reviewer']],
|
|
294
|
+
['docker', ['config-reviewer', 'security-reviewer']],
|
|
295
|
+
['docker-compose', ['config-reviewer', 'security-reviewer']],
|
|
296
|
+
['kubernetes', ['config-reviewer', 'security-reviewer']],
|
|
297
|
+
['k8s', ['config-reviewer', 'security-reviewer']],
|
|
298
|
+
['terraform', ['config-reviewer', 'security-reviewer']],
|
|
299
|
+
['helm', ['config-reviewer', 'security-reviewer']],
|
|
300
|
+
['laravel', ['php-reviewer', 'blade-reviewer', 'security-reviewer']],
|
|
301
|
+
['django', ['python-reviewer', 'security-reviewer', 'architecture-reviewer']],
|
|
302
|
+
['fastapi', ['python-reviewer', 'security-reviewer', 'performance-reviewer']],
|
|
303
|
+
['ionic', ['ts-reviewer', 'html-reviewer', 'css-reviewer', 'performance-reviewer']],
|
|
304
|
+
]);
|
|
305
|
+
const LIBRARY_AGENT_RULES = new Map([
|
|
306
|
+
['rxjs', ['performance-reviewer']],
|
|
307
|
+
['ngrx', ['performance-reviewer']],
|
|
308
|
+
['drizzle', ['security-reviewer', 'performance-reviewer', 'sql-reviewer']],
|
|
309
|
+
['prisma', ['security-reviewer', 'performance-reviewer', 'sql-reviewer']],
|
|
310
|
+
['typeorm', ['security-reviewer', 'performance-reviewer', 'sql-reviewer']],
|
|
311
|
+
['entity-framework', ['security-reviewer', 'performance-reviewer', 'sql-reviewer']],
|
|
312
|
+
]);
|
|
313
|
+
/**
|
|
314
|
+
* Map from StackProfile (framework + keyLibraries) to additional agent IDs.
|
|
315
|
+
* Rules are ADDITIVE — they never remove agents, only suggest more.
|
|
316
|
+
* All matching is case-insensitive.
|
|
317
|
+
* Only returns IDs that exist in allAgents.
|
|
318
|
+
*/
|
|
319
|
+
export function getStackAwareAgents(stackProfile, allAgents) {
|
|
320
|
+
const availableIds = new Set(allAgents.map((a) => a.id));
|
|
321
|
+
const recommended = new Set();
|
|
322
|
+
const add = (id) => {
|
|
323
|
+
if (availableIds.has(id))
|
|
324
|
+
recommended.add(id);
|
|
325
|
+
};
|
|
326
|
+
// Match framework
|
|
327
|
+
if (stackProfile.framework !== null) {
|
|
328
|
+
const normalized = stackProfile.framework.toLowerCase();
|
|
329
|
+
const frameworkAgents = FRAMEWORK_AGENT_RULES.get(normalized);
|
|
330
|
+
if (frameworkAgents !== undefined) {
|
|
331
|
+
for (const id of frameworkAgents)
|
|
332
|
+
add(id);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Match each keyLibrary
|
|
336
|
+
for (const lib of stackProfile.keyLibraries) {
|
|
337
|
+
const normalized = lib.toLowerCase();
|
|
338
|
+
const libAgents = LIBRARY_AGENT_RULES.get(normalized);
|
|
339
|
+
if (libAgents !== undefined) {
|
|
340
|
+
for (const id of libAgents)
|
|
341
|
+
add(id);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return Array.from(recommended);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Resolve the final set of agent IDs using the priority chain:
|
|
348
|
+
* 1. config.agents (explicit override — highest priority)
|
|
349
|
+
* 2. Set union of context-recommended + stack-aware agents
|
|
350
|
+
* 3. Context-recommended agents only (when stackProfile is absent)
|
|
351
|
+
*
|
|
352
|
+
* Used by both WorkflowEngine (cost estimation) and RuleBasedStrategy.
|
|
353
|
+
*/
|
|
354
|
+
export function resolveAgentIds(context, allAgents, config, stackProfile) {
|
|
355
|
+
if (config?.agents !== undefined && config.agents.length > 0) {
|
|
356
|
+
const validIds = new Set(allAgents.map((a) => a.id));
|
|
357
|
+
const known = config.agents.filter((id) => validIds.has(id));
|
|
358
|
+
if (known.length > 0)
|
|
359
|
+
return known;
|
|
360
|
+
// All config agents unknown — fall through to merged logic
|
|
361
|
+
}
|
|
362
|
+
const contextAgents = getRecommendedAgents(context, allAgents);
|
|
363
|
+
if (stackProfile === undefined)
|
|
364
|
+
return contextAgents;
|
|
365
|
+
const stackAgents = getStackAwareAgents(stackProfile, allAgents);
|
|
366
|
+
return Array.from(new Set([...contextAgents, ...stackAgents]));
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=context-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-analyzer.js","sourceRoot":"","sources":["../../../src/ai/orchestrator/context-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ReviewFinding, BitbucketComment } from '../../types/index.js';
|
|
2
|
+
import type { PriorFinding } from '../../types/review-finding.js';
|
|
3
|
+
import type { FalsePositive } from '../../types/false-positive.js';
|
|
4
|
+
export declare class Deduplicator {
|
|
5
|
+
private readonly hashSet;
|
|
6
|
+
private readonly contentHashSet;
|
|
7
|
+
private readonly falsePositiveList;
|
|
8
|
+
/**
|
|
9
|
+
* Seed the dedup set with hashes derived from existing Bitbucket inline comments.
|
|
10
|
+
* Only comments with an `inline` field are considered for deduplication.
|
|
11
|
+
*/
|
|
12
|
+
addExistingComments(comments: BitbucketComment[]): void;
|
|
13
|
+
/**
|
|
14
|
+
* Seed the dedup set with hashes derived from prior review findings (from local DB).
|
|
15
|
+
*/
|
|
16
|
+
addPriorFindings(findings: PriorFinding[]): void;
|
|
17
|
+
/**
|
|
18
|
+
* Seed the false positive list. These findings will be suppressed during deduplication.
|
|
19
|
+
*/
|
|
20
|
+
addFalsePositives(fps: FalsePositive[]): void;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a finding matches any stored false positive.
|
|
23
|
+
* Required match: filePath + category.
|
|
24
|
+
* Optional narrowing: lineNumber (if set on FP) and agentId (if set on FP).
|
|
25
|
+
*/
|
|
26
|
+
private matchesFalsePositive;
|
|
27
|
+
/**
|
|
28
|
+
* Deduplicate a batch of findings.
|
|
29
|
+
* Order of checks:
|
|
30
|
+
* 1. FP suppression (false positive match → drop)
|
|
31
|
+
* 2. Content hash dedup (cross-agent: same file/line/title/problem → drop)
|
|
32
|
+
* 3. Text hash dedup (formatted markdown match → drop)
|
|
33
|
+
*
|
|
34
|
+
* Also catches intra-batch duplicates in all three layers.
|
|
35
|
+
*
|
|
36
|
+
* Returns { unique, dedupedCount }
|
|
37
|
+
*/
|
|
38
|
+
deduplicate(findings: ReviewFinding[]): {
|
|
39
|
+
unique: ReviewFinding[];
|
|
40
|
+
dedupedCount: number;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=deduplicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicator.d.ts","sourceRoot":"","sources":["../../../src/ai/orchestrator/deduplicator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IAEzD;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAYvD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAOhD;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,IAAI;IAI7C;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG;QAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;CAqC1F"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { computeDedupHash, computeContentHash } from '../../utils/hash.js';
|
|
2
|
+
import { formatFinding } from '../../utils/comment-formatter.js';
|
|
3
|
+
export class Deduplicator {
|
|
4
|
+
hashSet = new Set();
|
|
5
|
+
contentHashSet = new Set();
|
|
6
|
+
falsePositiveList = [];
|
|
7
|
+
/**
|
|
8
|
+
* Seed the dedup set with hashes derived from existing Bitbucket inline comments.
|
|
9
|
+
* Only comments with an `inline` field are considered for deduplication.
|
|
10
|
+
*/
|
|
11
|
+
addExistingComments(comments) {
|
|
12
|
+
for (const comment of comments) {
|
|
13
|
+
if (!comment.inline)
|
|
14
|
+
continue;
|
|
15
|
+
const hash = computeDedupHash(comment.inline.path, comment.inline.to, comment.content.raw);
|
|
16
|
+
this.hashSet.add(hash);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Seed the dedup set with hashes derived from prior review findings (from local DB).
|
|
21
|
+
*/
|
|
22
|
+
addPriorFindings(findings) {
|
|
23
|
+
for (const finding of findings) {
|
|
24
|
+
const hash = computeDedupHash(finding.filePath, finding.lineNumber, finding.formattedComment);
|
|
25
|
+
this.hashSet.add(hash);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Seed the false positive list. These findings will be suppressed during deduplication.
|
|
30
|
+
*/
|
|
31
|
+
addFalsePositives(fps) {
|
|
32
|
+
this.falsePositiveList.push(...fps);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a finding matches any stored false positive.
|
|
36
|
+
* Required match: filePath + category.
|
|
37
|
+
* Optional narrowing: lineNumber (if set on FP) and agentId (if set on FP).
|
|
38
|
+
*/
|
|
39
|
+
matchesFalsePositive(finding) {
|
|
40
|
+
for (const fp of this.falsePositiveList) {
|
|
41
|
+
if (fp.filePath !== finding.filePath)
|
|
42
|
+
continue;
|
|
43
|
+
if (fp.category !== finding.category)
|
|
44
|
+
continue;
|
|
45
|
+
if (fp.lineNumber !== undefined && fp.lineNumber !== finding.lineNumber)
|
|
46
|
+
continue;
|
|
47
|
+
if (fp.agentId !== undefined && fp.agentId !== finding.agentId)
|
|
48
|
+
continue;
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Deduplicate a batch of findings.
|
|
55
|
+
* Order of checks:
|
|
56
|
+
* 1. FP suppression (false positive match → drop)
|
|
57
|
+
* 2. Content hash dedup (cross-agent: same file/line/title/problem → drop)
|
|
58
|
+
* 3. Text hash dedup (formatted markdown match → drop)
|
|
59
|
+
*
|
|
60
|
+
* Also catches intra-batch duplicates in all three layers.
|
|
61
|
+
*
|
|
62
|
+
* Returns { unique, dedupedCount }
|
|
63
|
+
*/
|
|
64
|
+
deduplicate(findings) {
|
|
65
|
+
const unique = [];
|
|
66
|
+
let dedupedCount = 0;
|
|
67
|
+
// Use temporary sets to catch intra-batch duplicates
|
|
68
|
+
const batchHashes = new Set(this.hashSet);
|
|
69
|
+
const batchContentHashes = new Set(this.contentHashSet);
|
|
70
|
+
for (const finding of findings) {
|
|
71
|
+
// 1. False positive suppression
|
|
72
|
+
if (this.matchesFalsePositive(finding)) {
|
|
73
|
+
dedupedCount++;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// 2. Content hash dedup (cross-agent)
|
|
77
|
+
const contentHash = computeContentHash(finding);
|
|
78
|
+
if (batchContentHashes.has(contentHash)) {
|
|
79
|
+
dedupedCount++;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// 3. Text (formatted markdown) hash dedup
|
|
83
|
+
const formattedText = formatFinding(finding);
|
|
84
|
+
const hash = computeDedupHash(finding.filePath, finding.lineNumber, formattedText);
|
|
85
|
+
if (batchHashes.has(hash)) {
|
|
86
|
+
dedupedCount++;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
batchHashes.add(hash);
|
|
90
|
+
batchContentHashes.add(contentHash);
|
|
91
|
+
unique.push(finding);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { unique, dedupedCount };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=deduplicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicator.js","sourceRoot":"","sources":["../../../src/ai/orchestrator/deduplicator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Logger } from '../../utils/logger.js';
|
|
2
|
+
import type { ModelProvider, DiffFile, PRMetadata, BitbucketComment, ReviewFinding, TokenUsage } from '../../types/index.js';
|
|
3
|
+
import type { PriorFinding } from '../../types/review-finding.js';
|
|
4
|
+
import type { RepoConfig, SeverityOverrideRule } from '../../types/repo-config.js';
|
|
5
|
+
import type { FindingSeverity } from '../../types/review-finding.js';
|
|
6
|
+
import type { ReviewStrategy } from './strategy.js';
|
|
7
|
+
import type { StackProfile } from '../../stack-detector/types.js';
|
|
8
|
+
export interface OrchestratorInput {
|
|
9
|
+
files: DiffFile[];
|
|
10
|
+
prMetadata: PRMetadata;
|
|
11
|
+
existingComments: BitbucketComment[];
|
|
12
|
+
priorReviewFindings: PriorFinding[];
|
|
13
|
+
projectContext?: string;
|
|
14
|
+
/** Pre-built convention text (bullet list) injected into each agent's context */
|
|
15
|
+
conventions?: string;
|
|
16
|
+
agentFilter?: string[];
|
|
17
|
+
/** Resolved tech stack profile forwarded from WorkflowEngine for agent selection */
|
|
18
|
+
stackProfile?: StackProfile;
|
|
19
|
+
/** Override rules applied to remap finding severities after consolidation */
|
|
20
|
+
severityOverrides?: SeverityOverrideRule[];
|
|
21
|
+
/** Minimum severity threshold — findings below this level are excluded */
|
|
22
|
+
minSeverity?: FindingSeverity;
|
|
23
|
+
}
|
|
24
|
+
export interface AgentRunResult {
|
|
25
|
+
agentId: string;
|
|
26
|
+
status: 'success' | 'failed';
|
|
27
|
+
error?: string;
|
|
28
|
+
usage: TokenUsage;
|
|
29
|
+
}
|
|
30
|
+
export interface OrchestratorResult {
|
|
31
|
+
findings: ReviewFinding[];
|
|
32
|
+
dedupedCount: number;
|
|
33
|
+
agentResults: AgentRunResult[];
|
|
34
|
+
totalUsage: TokenUsage;
|
|
35
|
+
}
|
|
36
|
+
export type AgentStatus = 'pending' | 'running' | 'complete' | 'failed';
|
|
37
|
+
export interface AgentProgressEvent {
|
|
38
|
+
agentId: string;
|
|
39
|
+
status: AgentStatus;
|
|
40
|
+
agentIndex: number;
|
|
41
|
+
totalAgents: number;
|
|
42
|
+
findingsCount?: number;
|
|
43
|
+
durationMs?: number;
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface OrchestratorOptions {
|
|
47
|
+
repoConfig?: RepoConfig;
|
|
48
|
+
concurrency?: number;
|
|
49
|
+
onAgentProgress?: (event: AgentProgressEvent) => void;
|
|
50
|
+
}
|
|
51
|
+
export declare class ReviewOrchestrator {
|
|
52
|
+
private readonly logger;
|
|
53
|
+
private readonly strategy?;
|
|
54
|
+
constructor(logger: Logger, strategy?: ReviewStrategy | undefined);
|
|
55
|
+
run(input: OrchestratorInput, provider: ModelProvider, options?: OrchestratorOptions): Promise<OrchestratorResult>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/ai/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,UAAU,EACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,mBAAmB,EAAE,YAAY,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,oFAAoF;IACpF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC3C,0EAA0E;IAC1E,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;CACxB;AAWD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACvD;AAOD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBADT,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,cAAc,YAAA;IAGtC,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAmLzH"}
|