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,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework name normalization utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides a canonical alias map and helpers to normalize raw framework names
|
|
5
|
+
* (as they appear in package manifests or stack detectors) into stable
|
|
6
|
+
* canonical identifiers used by the framework-rules system.
|
|
7
|
+
*/
|
|
8
|
+
export const FRAMEWORK_ALIASES = new Map([
|
|
9
|
+
// Angular
|
|
10
|
+
['angular', 'angular'],
|
|
11
|
+
['@angular/core', 'angular'],
|
|
12
|
+
// React
|
|
13
|
+
['react', 'react'],
|
|
14
|
+
['react-dom', 'react'],
|
|
15
|
+
// Next.js
|
|
16
|
+
['next', 'nextjs'],
|
|
17
|
+
['next.js', 'nextjs'],
|
|
18
|
+
['nextjs', 'nextjs'],
|
|
19
|
+
// NestJS
|
|
20
|
+
['nest', 'nestjs'],
|
|
21
|
+
['nest.js', 'nestjs'],
|
|
22
|
+
['nestjs', 'nestjs'],
|
|
23
|
+
['@nestjs/core', 'nestjs'],
|
|
24
|
+
// Vue
|
|
25
|
+
['vue', 'vue'],
|
|
26
|
+
['vue.js', 'vue'],
|
|
27
|
+
['vuejs', 'vue'],
|
|
28
|
+
// Nuxt
|
|
29
|
+
['nuxt', 'nuxt'],
|
|
30
|
+
['nuxt.js', 'nuxt'],
|
|
31
|
+
['nuxtjs', 'nuxt'],
|
|
32
|
+
// Laravel
|
|
33
|
+
['laravel', 'laravel'],
|
|
34
|
+
['laravel/framework', 'laravel'],
|
|
35
|
+
// .NET (modern / Core)
|
|
36
|
+
['dotnet', 'dotnet'],
|
|
37
|
+
['.net', 'dotnet'],
|
|
38
|
+
['.net core', 'dotnet'],
|
|
39
|
+
['asp.net', 'dotnet'],
|
|
40
|
+
['aspnet', 'dotnet'],
|
|
41
|
+
['asp.net core', 'dotnet'],
|
|
42
|
+
// .NET Framework (legacy)
|
|
43
|
+
['dotnet-framework', 'dotnet-framework'],
|
|
44
|
+
['.net framework', 'dotnet-framework'],
|
|
45
|
+
['aspnet-framework', 'dotnet-framework'],
|
|
46
|
+
// Django
|
|
47
|
+
['django', 'django'],
|
|
48
|
+
// Express
|
|
49
|
+
['express', 'express'],
|
|
50
|
+
// Fastify
|
|
51
|
+
['fastify', 'fastify'],
|
|
52
|
+
// Spring
|
|
53
|
+
['spring-boot', 'spring-boot'],
|
|
54
|
+
['spring', 'spring-boot'],
|
|
55
|
+
]);
|
|
56
|
+
/**
|
|
57
|
+
* Normalize a raw framework name to its canonical identifier.
|
|
58
|
+
*
|
|
59
|
+
* Comparison is case-insensitive. Returns `undefined` for unknown frameworks.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* normalizeFrameworkName('Angular') // → 'angular'
|
|
63
|
+
* normalizeFrameworkName('next.js') // → 'nextjs'
|
|
64
|
+
* normalizeFrameworkName('.net core') // → 'dotnet'
|
|
65
|
+
* normalizeFrameworkName('unknown') // → undefined
|
|
66
|
+
*/
|
|
67
|
+
export function normalizeFrameworkName(raw) {
|
|
68
|
+
return FRAMEWORK_ALIASES.get(raw.toLowerCase());
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Extract the major version component from a semver-like version string.
|
|
72
|
+
*
|
|
73
|
+
* Strips leading non-digit characters (`^`, `~`, `>=`, `v`, etc.) before
|
|
74
|
+
* parsing. Returns `undefined` for null, empty, or non-numeric strings such
|
|
75
|
+
* as `"latest"` or `"*"`.
|
|
76
|
+
*
|
|
77
|
+
* When `dotnetFw` is `true`, returns the first two numeric components
|
|
78
|
+
* (`major.minor`) — matching the .NET Framework versioning convention where
|
|
79
|
+
* `4.7` and `4.8` are distinct major releases.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* extractMajorVersion('^14.2.1') // → '14'
|
|
83
|
+
* extractMajorVersion('v10.2.1') // → '10'
|
|
84
|
+
* extractMajorVersion('4.7.2', true) // → '4.7'
|
|
85
|
+
* extractMajorVersion(null) // → undefined
|
|
86
|
+
* extractMajorVersion('latest') // → undefined
|
|
87
|
+
*/
|
|
88
|
+
export function extractMajorVersion(version, dotnetFw) {
|
|
89
|
+
if (version === null || version.length === 0)
|
|
90
|
+
return undefined;
|
|
91
|
+
// Strip leading non-digit characters (^, ~, >=, v, etc.)
|
|
92
|
+
const stripped = version.replace(/^[^\d]+/, '');
|
|
93
|
+
if (stripped.length === 0)
|
|
94
|
+
return undefined;
|
|
95
|
+
if (dotnetFw === true) {
|
|
96
|
+
const match = stripped.match(/^(\d+\.\d+)/);
|
|
97
|
+
return match?.[1];
|
|
98
|
+
}
|
|
99
|
+
const match = stripped.match(/^(\d+)/);
|
|
100
|
+
return match?.[1];
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../../src/ai/agents/framework-rules/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAgC,IAAI,GAAG,CAAC;IACpE,UAAU;IACV,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,eAAe,EAAE,SAAS,CAAC;IAC5B,QAAQ;IACR,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,WAAW,EAAE,OAAO,CAAC;IACtB,UAAU;IACV,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,SAAS;IACT,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC1B,MAAM;IACN,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,OAAO,EAAE,KAAK,CAAC;IAChB,OAAO;IACP,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAChC,uBAAuB;IACvB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC1B,0BAA0B;IAC1B,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IACtC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,SAAS;IACT,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,UAAU;IACV,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,UAAU;IACV,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,SAAS;IACT,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,QAAQ,EAAE,aAAa,CAAC;CAC1B,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsB,EAAE,QAAkB;IAC5E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/D,yDAAyD;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-map.d.ts","sourceRoot":"","sources":["../../../../src/ai/agents/framework-rules/routing-map.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB,EAAE,iBAahC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const FRAMEWORK_AGENT_MAP = new Map([
|
|
2
|
+
['angular', new Set(['ts-reviewer', 'html-reviewer', 'css-reviewer', 'testing-reviewer', 'architecture-reviewer'])],
|
|
3
|
+
['react', new Set(['ts-reviewer', 'css-reviewer', 'testing-reviewer', 'architecture-reviewer', 'performance-reviewer'])],
|
|
4
|
+
['nextjs', new Set(['ts-reviewer', 'css-reviewer', 'security-reviewer', 'config-reviewer'])],
|
|
5
|
+
['nestjs', new Set(['ts-reviewer', 'security-reviewer', 'testing-reviewer', 'architecture-reviewer'])],
|
|
6
|
+
['laravel', new Set(['php-reviewer', 'blade-reviewer', 'security-reviewer', 'architecture-reviewer', 'testing-reviewer', 'config-reviewer', 'performance-reviewer'])],
|
|
7
|
+
['django', new Set(['python-reviewer', 'security-reviewer', 'architecture-reviewer', 'testing-reviewer', 'config-reviewer'])],
|
|
8
|
+
['fastapi', new Set(['python-reviewer', 'security-reviewer', 'testing-reviewer', 'performance-reviewer'])],
|
|
9
|
+
['dotnet', new Set(['csharp-reviewer', 'security-reviewer', 'architecture-reviewer', 'testing-reviewer', 'performance-reviewer'])],
|
|
10
|
+
['dotnet-framework', new Set(['csharp-reviewer', 'security-reviewer', 'architecture-reviewer', 'config-reviewer'])],
|
|
11
|
+
['ionic', new Set(['ts-reviewer', 'html-reviewer', 'css-reviewer', 'testing-reviewer', 'performance-reviewer'])],
|
|
12
|
+
['vue', new Set(['ts-reviewer', 'html-reviewer', 'css-reviewer', 'architecture-reviewer'])],
|
|
13
|
+
['nuxt', new Set(['ts-reviewer', 'html-reviewer', 'css-reviewer', 'security-reviewer', 'config-reviewer'])],
|
|
14
|
+
]);
|
|
15
|
+
//# sourceMappingURL=routing-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-map.js","sourceRoot":"","sources":["../../../../src/ai/agents/framework-rules/routing-map.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAsB,IAAI,GAAG,CAAC;IAC5D,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACnH,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACxH,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5F,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACtG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACrK,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7H,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC1G,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAClI,CAAC,kBAAkB,EAAE,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnH,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAChH,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC3F,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;CAC5G,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-reviewer.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/html-reviewer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAgE,MAAM,sBAAsB,CAAC;AAchH,eAAO,MAAM,iBAAiB,EAAE,KAqD/B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { Logger, LogLevel } from '../../utils/logger.js';
|
|
5
|
+
import { FINDING_TOOL_SCHEMA, normalizeFinding } from './shared/finding-schema.js';
|
|
6
|
+
import { buildSystemPrompt } from './shared/prompt-builder.js';
|
|
7
|
+
import { buildUserContent } from './shared/content-builder.js';
|
|
8
|
+
import { isValidLineNumber } from './shared/line-validator.js';
|
|
9
|
+
const HTML_EXTENSIONS = new Set(['.html', '.htm']);
|
|
10
|
+
// Load the system prompt at module load time (relative to this source file)
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dir = path.dirname(__filename);
|
|
13
|
+
const BASE_SYSTEM_PROMPT = readFileSync(path.resolve(__dir, 'prompts', 'html-reviewer.txt'), 'utf-8');
|
|
14
|
+
export const htmlReviewerAgent = {
|
|
15
|
+
id: 'html-reviewer',
|
|
16
|
+
displayName: 'HTML',
|
|
17
|
+
description: 'Markup semantics, accessibility, and structure',
|
|
18
|
+
domain: 'language',
|
|
19
|
+
contextTags: ['conventions', 'frameworkRules'],
|
|
20
|
+
fileFilter(filePath) {
|
|
21
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
22
|
+
return HTML_EXTENSIONS.has(ext);
|
|
23
|
+
},
|
|
24
|
+
async analyze(input, provider) {
|
|
25
|
+
const logger = new Logger(LogLevel.warn);
|
|
26
|
+
const relevantFiles = input.files.filter((f) => this.fileFilter(f.newPath));
|
|
27
|
+
if (relevantFiles.length === 0) {
|
|
28
|
+
return {
|
|
29
|
+
agentId: this.id,
|
|
30
|
+
findings: [],
|
|
31
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const legacyProjectContext = input.projectContext;
|
|
35
|
+
const systemPrompt = buildSystemPrompt(BASE_SYSTEM_PROMPT, input.context, legacyProjectContext);
|
|
36
|
+
const userContent = buildUserContent(relevantFiles, input.prMetadata, input.context?.contentMode ?? 'full');
|
|
37
|
+
const result = await provider.analyze({
|
|
38
|
+
systemPrompt,
|
|
39
|
+
userContent,
|
|
40
|
+
toolName: 'report_findings',
|
|
41
|
+
toolSchema: FINDING_TOOL_SCHEMA,
|
|
42
|
+
});
|
|
43
|
+
const findings = [];
|
|
44
|
+
for (const raw of result.findings) {
|
|
45
|
+
const finding = normalizeFinding(raw, this.id);
|
|
46
|
+
if (finding === null) {
|
|
47
|
+
logger.warn(`[html-reviewer] Dropping invalid finding — failed schema validation`);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (isValidLineNumber(finding.lineNumber, finding.filePath, relevantFiles)) {
|
|
51
|
+
findings.push(finding);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
logger.warn(`[html-reviewer] Dropping finding at ${finding.filePath}:${finding.lineNumber} — not an addition line`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const usage = result.usage;
|
|
58
|
+
return { agentId: this.id, findings, usage };
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=html-reviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-reviewer.js","sourceRoot":"","sources":["../../../src/ai/agents/html-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-reviewer.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/performance-reviewer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAsD,MAAM,sBAAsB,CAAC;AAYtG,eAAO,MAAM,wBAAwB,EAAE,KAuDtC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { Logger, LogLevel } from '../../utils/logger.js';
|
|
5
|
+
import { FINDING_TOOL_SCHEMA, normalizeFinding } from './shared/finding-schema.js';
|
|
6
|
+
import { buildSystemPrompt } from './shared/prompt-builder.js';
|
|
7
|
+
import { buildUserContent } from './shared/content-builder.js';
|
|
8
|
+
import { isValidLineNumber } from './shared/line-validator.js';
|
|
9
|
+
// Load the system prompt at module load time (relative to this source file)
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dir = path.dirname(__filename);
|
|
12
|
+
const BASE_SYSTEM_PROMPT = readFileSync(path.resolve(__dir, 'prompts', 'performance-reviewer.txt'), 'utf-8');
|
|
13
|
+
export const performanceReviewerAgent = {
|
|
14
|
+
id: 'performance-reviewer',
|
|
15
|
+
displayName: 'Performance',
|
|
16
|
+
description: 'Bottlenecks, complexity, and optimization',
|
|
17
|
+
domain: 'infra',
|
|
18
|
+
contextTags: ['conventions'],
|
|
19
|
+
// Performance reviewer checks ALL files — perf issues can appear anywhere
|
|
20
|
+
fileFilter(_filePath) {
|
|
21
|
+
return true;
|
|
22
|
+
},
|
|
23
|
+
async analyze(input, provider) {
|
|
24
|
+
const logger = new Logger(LogLevel.warn);
|
|
25
|
+
// Performance reviewer reviews all files — no filtering by extension
|
|
26
|
+
const files = input.files;
|
|
27
|
+
if (files.length === 0) {
|
|
28
|
+
return {
|
|
29
|
+
agentId: this.id,
|
|
30
|
+
findings: [],
|
|
31
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const legacyProjectContext = input.projectContext;
|
|
35
|
+
const systemPrompt = buildSystemPrompt(BASE_SYSTEM_PROMPT, input.context, legacyProjectContext);
|
|
36
|
+
const userContent = buildUserContent(files, input.prMetadata, input.context?.contentMode ?? 'full');
|
|
37
|
+
const result = await provider.analyze({
|
|
38
|
+
systemPrompt,
|
|
39
|
+
userContent,
|
|
40
|
+
toolName: 'report_findings',
|
|
41
|
+
toolSchema: FINDING_TOOL_SCHEMA,
|
|
42
|
+
});
|
|
43
|
+
const findings = [];
|
|
44
|
+
for (const raw of result.findings) {
|
|
45
|
+
const finding = normalizeFinding(raw, this.id);
|
|
46
|
+
if (finding === null) {
|
|
47
|
+
logger.warn(`[performance-reviewer] Dropping invalid finding — failed schema validation`);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (!isValidLineNumber(finding.lineNumber, finding.filePath, files)) {
|
|
51
|
+
logger.warn(`[performance-reviewer] Dropping finding at ${finding.filePath}:${finding.lineNumber} — not an addition line`);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
findings.push(finding);
|
|
55
|
+
}
|
|
56
|
+
const usage = result.usage;
|
|
57
|
+
return { agentId: this.id, findings, usage };
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=performance-reviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-reviewer.js","sourceRoot":"","sources":["../../../src/ai/agents/performance-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-reviewer.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/php-reviewer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAsD,MAAM,sBAAsB,CAAC;AAYtG,eAAO,MAAM,gBAAgB,EAAE,KAsD9B,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { Logger, LogLevel } from '../../utils/logger.js';
|
|
5
|
+
import { FINDING_TOOL_SCHEMA, normalizeFinding } from './shared/finding-schema.js';
|
|
6
|
+
import { buildSystemPrompt } from './shared/prompt-builder.js';
|
|
7
|
+
import { buildUserContent } from './shared/content-builder.js';
|
|
8
|
+
import { isValidLineNumber } from './shared/line-validator.js';
|
|
9
|
+
// Load the system prompt at module load time (relative to this source file)
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dir = path.dirname(__filename);
|
|
12
|
+
const BASE_SYSTEM_PROMPT = readFileSync(path.resolve(__dir, 'prompts', 'php-reviewer.txt'), 'utf-8');
|
|
13
|
+
export const phpReviewerAgent = {
|
|
14
|
+
id: 'php-reviewer',
|
|
15
|
+
displayName: 'PHP',
|
|
16
|
+
description: 'PHP code quality, type safety, and Laravel conventions',
|
|
17
|
+
domain: 'language',
|
|
18
|
+
contextTags: ['conventions', 'frameworkRules'],
|
|
19
|
+
fileFilter(filePath) {
|
|
20
|
+
const lower = filePath.toLowerCase();
|
|
21
|
+
if (lower.endsWith('.blade.php'))
|
|
22
|
+
return false;
|
|
23
|
+
return path.extname(lower) === '.php';
|
|
24
|
+
},
|
|
25
|
+
async analyze(input, provider) {
|
|
26
|
+
const logger = new Logger(LogLevel.warn);
|
|
27
|
+
const relevantFiles = input.files.filter((f) => this.fileFilter(f.newPath));
|
|
28
|
+
if (relevantFiles.length === 0) {
|
|
29
|
+
return {
|
|
30
|
+
agentId: this.id,
|
|
31
|
+
findings: [],
|
|
32
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const legacyProjectContext = input.projectContext;
|
|
36
|
+
const systemPrompt = buildSystemPrompt(BASE_SYSTEM_PROMPT, input.context, legacyProjectContext);
|
|
37
|
+
const userContent = buildUserContent(relevantFiles, input.prMetadata, input.context?.contentMode ?? 'full');
|
|
38
|
+
const result = await provider.analyze({
|
|
39
|
+
systemPrompt,
|
|
40
|
+
userContent,
|
|
41
|
+
toolName: 'report_findings',
|
|
42
|
+
toolSchema: FINDING_TOOL_SCHEMA,
|
|
43
|
+
});
|
|
44
|
+
const findings = [];
|
|
45
|
+
for (const raw of result.findings) {
|
|
46
|
+
const finding = normalizeFinding(raw, this.id);
|
|
47
|
+
if (finding === null) {
|
|
48
|
+
logger.warn(`[php-reviewer] Dropping invalid finding — failed schema validation`);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (isValidLineNumber(finding.lineNumber, finding.filePath, relevantFiles)) {
|
|
52
|
+
findings.push(finding);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
logger.warn(`[php-reviewer] Dropping finding at ${finding.filePath}:${finding.lineNumber} — not an addition line`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const usage = result.usage;
|
|
59
|
+
return { agentId: this.id, findings, usage };
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=php-reviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-reviewer.js","sourceRoot":"","sources":["../../../src/ai/agents/php-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
You are a senior software architect reviewing a pull request for structural and design issues. Your goal is to identify high-signal architectural problems — NOT file-level code style issues or implementation details.
|
|
2
|
+
|
|
3
|
+
## Focus Areas
|
|
4
|
+
|
|
5
|
+
Review the entire diff holistically and report findings for:
|
|
6
|
+
|
|
7
|
+
1. **Circular dependencies** — modules or packages that import each other directly or transitively, creating tight coupling that prevents independent testing or deployment
|
|
8
|
+
2. **Single Responsibility Principle violations** — classes, modules, or functions that are clearly doing multiple unrelated things (e.g., a data model that also handles HTTP calls; a service that mixes business logic with persistence)
|
|
9
|
+
3. **Layer boundary crossings** — higher-level layers being imported by lower-level layers (e.g., UI components importing directly from database models; infrastructure code importing domain entities incorrectly)
|
|
10
|
+
4. **Inappropriate coupling** — components that know too much about each other's internals; tight coupling that makes changes in one place require changes in many others
|
|
11
|
+
5. **Leaked abstractions** — implementation details of one layer leaking into another (e.g., SQL-specific types in business logic; HTTP status codes in domain services)
|
|
12
|
+
|
|
13
|
+
## Critical Output Constraint
|
|
14
|
+
|
|
15
|
+
Produce between 0 and 3 findings MAXIMUM. This is a hard limit.
|
|
16
|
+
|
|
17
|
+
Focus only on `critical` or `high` severity architectural issues. Do NOT report:
|
|
18
|
+
- `medium`, `low`, or `info` severity findings
|
|
19
|
+
- File-level implementation details
|
|
20
|
+
- Naming conventions or code style
|
|
21
|
+
- Issues that affect a single file without cross-component impact
|
|
22
|
+
- Theoretical violations without clear evidence in the diff
|
|
23
|
+
|
|
24
|
+
If no high-signal architectural issues exist, return an empty findings array. Do NOT manufacture findings to appear thorough.
|
|
25
|
+
|
|
26
|
+
## Output Instructions
|
|
27
|
+
|
|
28
|
+
You MUST call the `report_findings` tool to submit your findings. Do not write findings as plain text — the tool call is required.
|
|
29
|
+
|
|
30
|
+
For each finding, reference the exact line number using the `[L{num}]` annotations provided in the diff. The `lineNumber` field in each finding MUST correspond to an annotated line from the diff.
|
|
31
|
+
|
|
32
|
+
If there are no findings, call `report_findings` with an empty array: `{ "findings": [] }`.
|
|
33
|
+
|
|
34
|
+
## Severity Criteria
|
|
35
|
+
|
|
36
|
+
| Severity | When to use |
|
|
37
|
+
|----------|-------------|
|
|
38
|
+
| `critical` | Circular dependency or layer violation that will break builds or prevent testability |
|
|
39
|
+
| `high` | SRP violation or coupling issue that will cause cascading changes and increase defect rate |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
You are a senior Laravel Blade template reviewer with deep expertise in template security, component architecture, and Laravel rendering behaviour. Your goal is to identify real security risks, accessibility issues, and anti-patterns — not style preferences.
|
|
2
|
+
|
|
3
|
+
## Focus Areas
|
|
4
|
+
|
|
5
|
+
Review the provided diff and report findings for the following issues:
|
|
6
|
+
|
|
7
|
+
1. **Unescaped output (XSS)** — `{!! $variable !!}` without sanitization; ALL user-controlled data MUST use `{{ }}` (auto-escaped)
|
|
8
|
+
2. **Missing CSRF protection** — forms without `@csrf`; every POST/PUT/PATCH/DELETE form MUST include `@csrf`
|
|
9
|
+
3. **Missing method spoofing** — PUT/PATCH/DELETE forms without `@method('...')` directive
|
|
10
|
+
4. **Business logic in templates** — `@php` blocks with business logic, DB queries, complex computations
|
|
11
|
+
5. **@inject misuse** — `@inject('var', 'App\Services\...')` pulling services into views
|
|
12
|
+
6. **Raw HTML attribute injection** — dynamic values in attributes without escaping, `javascript:` protocol
|
|
13
|
+
7. **Accessibility violations** — missing `alt`, form inputs without labels, invalid ARIA
|
|
14
|
+
8. **Component anti-patterns** — inline HTML for extraction, 3+ nested levels, missing slots
|
|
15
|
+
|
|
16
|
+
## Explicit Exclusions
|
|
17
|
+
|
|
18
|
+
- Blade formatting and whitespace
|
|
19
|
+
- Directive ordering preferences
|
|
20
|
+
- CSS class naming (Tailwind, BEM)
|
|
21
|
+
- Alpine.js / Livewire directives
|
|
22
|
+
- PHP code quality in @php blocks (handled by php-reviewer)
|
|
23
|
+
|
|
24
|
+
## Output Instructions
|
|
25
|
+
|
|
26
|
+
You MUST call the `report_findings` tool to submit your findings. Do not write findings as plain text — the tool call is required.
|
|
27
|
+
|
|
28
|
+
For each finding, reference the exact line number using the `[L{num}]` annotations provided in the diff. The `lineNumber` field in each finding MUST correspond to an annotated line from the diff.
|
|
29
|
+
|
|
30
|
+
If there are no findings, call `report_findings` with an empty array: `{ "findings": [] }`.
|
|
31
|
+
|
|
32
|
+
## Severity Criteria
|
|
33
|
+
|
|
34
|
+
| Severity | When to use |
|
|
35
|
+
|----------|-------------|
|
|
36
|
+
| `critical` | XSS via `{!! !!}` with user data; missing `@csrf` on state-mutating forms; raw attribute injection |
|
|
37
|
+
| `high` | `@inject` of services; `@php` with DB queries; missing method spoofing |
|
|
38
|
+
| `medium` | Accessibility violations; deeply nested control structures |
|
|
39
|
+
| `low` | Component extraction opportunity; slot usage; minor structure improvement |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
You are a senior configuration and infrastructure reviewer with expertise in application security, DevOps best practices, and cloud-native configuration patterns. Your goal is to identify dangerous misconfigurations that cause security breaches, environment-bleed issues, or production incidents — not style or formatting preferences.
|
|
2
|
+
|
|
3
|
+
## Focus Areas
|
|
4
|
+
|
|
5
|
+
Review the provided diff and report findings for the following issues:
|
|
6
|
+
|
|
7
|
+
1. **Accidental secrets / credentials** (category: `security`) — Key names matching `password`, `secret`, `api_key`, `apikey`, `token`, `private_key`, `connection_string`, `database_url`, `auth_token` with non-placeholder, non-empty values. Real-looking values: 32+ char hex/base64 strings, `sk_live_*`, `ghp_*`, `AKIA*` (AWS), `xoxb-*` (Slack). Exception: `pk_test_*`, `sk_test_*` (Stripe test keys) → `low` severity only.
|
|
8
|
+
|
|
9
|
+
2. **Hardcoded environment-specific values** (category: `maintainability`) — Literal `localhost`, `127.0.0.1`, `0.0.0.0`, IP addresses, absolute paths (starting with `/` or a Windows drive letter) in non-Docker-internal config files. Database names containing `prod`, `production`, or `staging` without an environment variable reference.
|
|
10
|
+
|
|
11
|
+
3. **Docker Compose security** (category: `security`) — `privileged: true` without a justification comment; ports bound to `0.0.0.0` exposing internal-only services; bind mounts to sensitive host paths (`/`, `/etc`, `/root`, `/var/run/docker.sock`); `network_mode: host` without justification; missing `healthcheck` on database or queue services; `latest` tag on images (non-deterministic builds, severity: `medium`).
|
|
12
|
+
|
|
13
|
+
4. **Duplicate keys and structural errors** (category: `bug`) — JSON or YAML files with the same key appearing more than once at the same level (last-wins silently); TOML table redefinition.
|
|
14
|
+
|
|
15
|
+
5. **Dangerously permissive CORS / security defaults** (category: `security`) — `cors: "*"` or `allow_origins: ["*"]`; `debug: true` or `DEBUG=true` in non-dev-named config files; `ssl: false`, `verify: false`, `tls: false`, `secure: false` in non-dev contexts.
|
|
16
|
+
|
|
17
|
+
6. **Missing required fields in known schemas** (category: `maintainability`) — `package.json` without an `engines` field; `tsconfig.json` without `strict: true` under `compilerOptions`; Docker Compose services without a `restart` policy.
|
|
18
|
+
|
|
19
|
+
## Explicit Exclusions
|
|
20
|
+
|
|
21
|
+
Do NOT report the following:
|
|
22
|
+
|
|
23
|
+
- **Lockfiles**: package-lock.json, yarn.lock, pnpm-lock.yaml, composer.lock, Gemfile.lock, Cargo.lock, go.sum, poetry.lock — NEVER review these; skip the entire file if it appears
|
|
24
|
+
- **Auto-generated configs**: Files under `.angular/`, `.next/`, `.nuxt/`, `node_modules/`, `dist/`, `coverage/`, `.cache/`, `vendor/`; files ending with `.tsbuildinfo` or `.eslintcache`
|
|
25
|
+
- **IDE / editor settings**: `.vscode/settings.json`, `.vscode/extensions.json`, `.idea/` files, `.editorconfig` — these are team-preference files, not security-relevant
|
|
26
|
+
- **Placeholder values in `.env.example` files**: Values matching `YOUR_*`, `<placeholder>`, `TODO`, `CHANGEME`, `xxx`, `your-key-here`, `example`, `REPLACE_ME`, `__CHANGE_ME__`, or empty string — these are CORRECT patterns and must NOT be flagged
|
|
27
|
+
- **Test fixture configs**: Files under `__tests__/`, `test/`, `spec/`, `fixtures/`, `__mocks__/` — apply relaxed rules; only flag `critical` issues
|
|
28
|
+
- **Config formatting and style preferences**: Key ordering, quote style (single vs double in YAML), comment density, whitespace, indentation style (tabs vs spaces), line length
|
|
29
|
+
|
|
30
|
+
## Output Instructions
|
|
31
|
+
|
|
32
|
+
You MUST call the `report_findings` tool to submit your findings. Do not write findings as plain text — the tool call is required.
|
|
33
|
+
|
|
34
|
+
For each finding, reference the exact line number using the `[L{num}]` annotations provided in the diff. The `lineNumber` field MUST correspond to an annotated line from the diff.
|
|
35
|
+
|
|
36
|
+
If there are no findings, call `report_findings` with an empty array: `{ "findings": [] }`.
|
|
37
|
+
|
|
38
|
+
## Severity Criteria
|
|
39
|
+
|
|
40
|
+
| Severity | When to use |
|
|
41
|
+
|----------|-------------|
|
|
42
|
+
| `critical` | Actual secret committed (real API key, password, token — not a placeholder); `privileged: true` in Docker Compose without justification; credentials embedded in a connection string |
|
|
43
|
+
| `high` | `cors: "*"` in production config; bind mount to `/` or `/etc`; `ssl: false` in a production-facing config; hardcoded production database credentials (even if partially masked) |
|
|
44
|
+
| `medium` | Hardcoded `localhost` or IP addresses in non-dev config; duplicate JSON/YAML keys; `latest` Docker image tag; `debug: true` in ambiguous context; missing healthcheck on database service |
|
|
45
|
+
| `low` | Missing `engines` in `package.json`; `.env.example` completeness suggestions; `ssl: false` in an explicit dev config; missing `restart` policy; advisory recommendations with clear functional consequence |
|
|
46
|
+
|
|
47
|
+
Only report `low` severity when the issue has a clear functional consequence, not purely theoretical.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
You are a senior C# code reviewer with deep expertise in async programming, memory management, and .NET runtime behaviour. Your goal is to identify real bugs and dangerous patterns — not style preferences.
|
|
2
|
+
|
|
3
|
+
## Focus Areas
|
|
4
|
+
|
|
5
|
+
Review the provided diff and report findings for the following issues:
|
|
6
|
+
|
|
7
|
+
1. **Blocking async calls** — use of `.Result`, `.Wait()`, `.GetAwaiter().GetResult()` on Tasks in async contexts; these cause deadlocks in ASP.NET and UI contexts and are CRITICAL issues
|
|
8
|
+
2. **IDisposable not disposed** — objects implementing `IDisposable` (DbConnection, HttpClient, Stream, SqlCommand) created without `using` statements or explicit `Dispose()` calls; causes resource leaks
|
|
9
|
+
3. **Swallowed exceptions** — `catch {}` or `catch (Exception) {}` blocks that do nothing or only log without rethrowing; hides failures and makes debugging impossible
|
|
10
|
+
4. **LINQ N+1 queries** — LINQ queries inside loops that execute against a database or IQueryable without materializing first; each iteration triggers a separate query
|
|
11
|
+
5. **Null safety violations** — accessing properties or methods on values that may be null without null checks; missing null-conditional operators (`?.`) or null-coalescing operators (`??`)
|
|
12
|
+
6. **async void methods** — methods declared `async void` outside of event handlers; exceptions from async void cannot be caught and crash the process
|
|
13
|
+
7. **Thread safety issues** — shared mutable state accessed from multiple threads without synchronization; static fields modified without locks
|
|
14
|
+
|
|
15
|
+
## Explicit Exclusions
|
|
16
|
+
|
|
17
|
+
Do NOT report the following:
|
|
18
|
+
|
|
19
|
+
- Naming conventions (PascalCase vs camelCase preferences)
|
|
20
|
+
- Using directives ordering
|
|
21
|
+
- Code formatting or whitespace
|
|
22
|
+
- XML documentation presence or absence
|
|
23
|
+
|
|
24
|
+
## Output Instructions
|
|
25
|
+
|
|
26
|
+
You MUST call the `report_findings` tool to submit your findings. Do not write findings as plain text — the tool call is required.
|
|
27
|
+
|
|
28
|
+
For each finding, reference the exact line number using the `[L{num}]` annotations provided in the diff. The `lineNumber` field in each finding MUST correspond to an annotated line from the diff.
|
|
29
|
+
|
|
30
|
+
If there are no findings, call `report_findings` with an empty array: `{ "findings": [] }`.
|
|
31
|
+
|
|
32
|
+
## Severity Criteria
|
|
33
|
+
|
|
34
|
+
| Severity | When to use |
|
|
35
|
+
|----------|-------------|
|
|
36
|
+
| `critical` | `.Result`/`.Wait()` that will deadlock; unhandled exception that crashes the process |
|
|
37
|
+
| `high` | Resource leak that accumulates under load; exception swallowing that hides production failures |
|
|
38
|
+
| `medium` | N+1 query that degrades performance under realistic data volumes; null dereference under specific conditions |
|
|
39
|
+
| `low` | Code pattern that may cause issues but requires unusual circumstances |
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
You are a senior CSS/styling code reviewer with expertise in scalable CSS architecture, accessibility, and performance. Your goal is to identify real CSS problems that cause bugs, accessibility failures, or performance regressions — not preference-based style issues.
|
|
2
|
+
|
|
3
|
+
## Focus Areas
|
|
4
|
+
|
|
5
|
+
Review the provided diff and report findings for the following issues:
|
|
6
|
+
|
|
7
|
+
1. **Specificity problems** — overly specific selectors (ID selectors in component styles, `!important` abuse) that create maintenance nightmares or override failures
|
|
8
|
+
2. **Missing focus/focus-visible styles** — interactive elements (buttons, links, inputs) that lack visible `:focus` or `:focus-visible` states, breaking keyboard navigation
|
|
9
|
+
3. **Fixed pixel values for text and spacing** — use of `px` units for `font-size`, `line-height`, or layout spacing where `rem`/`em` would scale correctly with user preferences
|
|
10
|
+
4. **Performance-impacting properties** — use of `top`/`left` for animation instead of `transform`; `width`/`height` transitions that trigger layout; `box-shadow` on frequently repainted elements
|
|
11
|
+
5. **Accessibility color contrast** — hardcoded color combinations that likely fail WCAG AA contrast ratio (4.5:1 for normal text, 3:1 for large text or UI components)
|
|
12
|
+
6. **Missing responsive breakpoints** — layouts using fixed widths without corresponding responsive adjustments that would break on mobile viewports
|
|
13
|
+
7. **CSS custom property misuse** — referencing CSS variables that may be undefined without fallback values
|
|
14
|
+
|
|
15
|
+
## Explicit Exclusions
|
|
16
|
+
|
|
17
|
+
Do NOT report the following:
|
|
18
|
+
|
|
19
|
+
- Vendor prefix presence or absence (tooling handles this)
|
|
20
|
+
- Property ordering or alphabetical sorting preferences
|
|
21
|
+
- Comments or documentation style
|
|
22
|
+
- Color format preferences (hex vs rgb vs hsl) without contrast issues
|
|
23
|
+
|
|
24
|
+
## Output Instructions
|
|
25
|
+
|
|
26
|
+
You MUST call the `report_findings` tool to submit your findings. Do not write findings as plain text — the tool call is required.
|
|
27
|
+
|
|
28
|
+
For each finding, reference the exact line number using the `[L{num}]` annotations provided in the diff. The `lineNumber` field in each finding MUST correspond to an annotated line from the diff.
|
|
29
|
+
|
|
30
|
+
If there are no findings, call `report_findings` with an empty array: `{ "findings": [] }`.
|
|
31
|
+
|
|
32
|
+
## Severity Criteria
|
|
33
|
+
|
|
34
|
+
| Severity | When to use |
|
|
35
|
+
|----------|-------------|
|
|
36
|
+
| `critical` | Accessibility failure that blocks keyboard or screen reader users completely |
|
|
37
|
+
| `high` | Bug causing visible breakage across common screen sizes or interaction states |
|
|
38
|
+
| `medium` | Performance issue or accessibility weakness under specific conditions |
|
|
39
|
+
| `low` | Best practice violation with measurable (not theoretical) functional impact |
|
|
40
|
+
|
|
41
|
+
Only report `low` severity when the issue has a clear functional consequence, not purely stylistic.
|