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,80 @@
|
|
|
1
|
+
import type { FindingCategory } from '../ai/agents/shared/finding-schema.js';
|
|
2
|
+
import type { FindingSeverity } from '../types/review-finding.js';
|
|
3
|
+
export type { FindingCategory, FindingSeverity };
|
|
4
|
+
/** Severity weights for score calculation: score = occurrences x weight */
|
|
5
|
+
export declare const SEVERITY_WEIGHTS: Record<FindingSeverity, number>;
|
|
6
|
+
export interface AggregateOptions {
|
|
7
|
+
workspace: string;
|
|
8
|
+
repo: string;
|
|
9
|
+
/** Number of most-recent sessions to include. Default: 10 */
|
|
10
|
+
sessionLimit?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface AggregatedPattern {
|
|
13
|
+
agentId: string;
|
|
14
|
+
category: FindingCategory;
|
|
15
|
+
/** Slug derived from title, e.g. "no-explicit-any" */
|
|
16
|
+
patternKey: string;
|
|
17
|
+
/** Representative title from most common finding */
|
|
18
|
+
title: string;
|
|
19
|
+
/** Representative suggestion text */
|
|
20
|
+
description: string;
|
|
21
|
+
/** Most severe among occurrences */
|
|
22
|
+
severity: FindingSeverity;
|
|
23
|
+
/** Number of times this pattern was found */
|
|
24
|
+
occurrences: number;
|
|
25
|
+
/** occurrences x severityWeight */
|
|
26
|
+
score: number;
|
|
27
|
+
/** File extensions seen, e.g. ["*.ts", "*.tsx"] */
|
|
28
|
+
fileGlobs: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface AggregationResult {
|
|
31
|
+
patterns: AggregatedPattern[];
|
|
32
|
+
totalFindings: number;
|
|
33
|
+
sessionCount: number;
|
|
34
|
+
}
|
|
35
|
+
/** Recursive ast-grep rule — mirrors the ast-grep YAML rule schema */
|
|
36
|
+
export type AstGrepRule = {
|
|
37
|
+
pattern: string;
|
|
38
|
+
} | {
|
|
39
|
+
kind: string;
|
|
40
|
+
pattern?: string;
|
|
41
|
+
has?: AstGrepRule;
|
|
42
|
+
inside?: AstGrepRule;
|
|
43
|
+
} | {
|
|
44
|
+
any: AstGrepRule[];
|
|
45
|
+
} | {
|
|
46
|
+
all: AstGrepRule[];
|
|
47
|
+
} | {
|
|
48
|
+
not: AstGrepRule;
|
|
49
|
+
} | {
|
|
50
|
+
regex: string;
|
|
51
|
+
};
|
|
52
|
+
export type AstGrepLanguage = 'typescript' | 'javascript' | 'tsx' | 'jsx' | 'php' | 'python' | 'css' | 'html' | 'go' | 'java' | 'c-sharp' | 'rust' | 'c' | 'cpp';
|
|
53
|
+
export interface PrismPattern {
|
|
54
|
+
id: string;
|
|
55
|
+
agentId: string;
|
|
56
|
+
category: string;
|
|
57
|
+
patternKey: string;
|
|
58
|
+
title: string;
|
|
59
|
+
description: string;
|
|
60
|
+
severity: string;
|
|
61
|
+
occurrences: number;
|
|
62
|
+
score: number;
|
|
63
|
+
fileGlobs: string[];
|
|
64
|
+
language?: AstGrepLanguage;
|
|
65
|
+
rule?: AstGrepRule;
|
|
66
|
+
}
|
|
67
|
+
export interface PrismPatternsFile {
|
|
68
|
+
version: 1 | 2;
|
|
69
|
+
generatedAt: string;
|
|
70
|
+
source: {
|
|
71
|
+
workspace: string;
|
|
72
|
+
repo: string;
|
|
73
|
+
};
|
|
74
|
+
patterns: PrismPattern[];
|
|
75
|
+
}
|
|
76
|
+
export declare class RulesEngineError extends Error {
|
|
77
|
+
readonly cause?: unknown | undefined;
|
|
78
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules-engine/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AAEjD,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAM5D,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,sEAAsE;AACtE,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC3E;IAAE,GAAG,EAAE,WAAW,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,WAAW,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,WAAW,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,MAAM,MAAM,eAAe,GACvB,YAAY,GAAG,YAAY,GAAG,KAAK,GAAG,KAAK,GAC3C,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GACjC,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACI,KAAK,CAAC,EAAE,OAAO;gBAAhD,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAK7D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Severity weights for score calculation: score = occurrences x weight */
|
|
2
|
+
export const SEVERITY_WEIGHTS = {
|
|
3
|
+
critical: 5,
|
|
4
|
+
high: 4,
|
|
5
|
+
medium: 3,
|
|
6
|
+
low: 2,
|
|
7
|
+
info: 1,
|
|
8
|
+
};
|
|
9
|
+
export class RulesEngineError extends Error {
|
|
10
|
+
cause;
|
|
11
|
+
constructor(message, cause) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.cause = cause;
|
|
14
|
+
this.name = 'RulesEngineError';
|
|
15
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rules-engine/types.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAoC;IAC/D,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;CACR,CAAC;AAsEF,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACI;IAA7C,YAAY,OAAe,EAAkB,KAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAU;QAE1D,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PrismPatternsFile } from '../rules-engine/types.js';
|
|
2
|
+
export interface CachedEntry {
|
|
3
|
+
patternsFile: PrismPatternsFile;
|
|
4
|
+
cachedAt: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class RulesCache {
|
|
7
|
+
private readonly cacheDir;
|
|
8
|
+
constructor(cacheDir?: string);
|
|
9
|
+
getCachePath(workspace: string, repo: string): string;
|
|
10
|
+
get(workspace: string, repo: string, ttlMs: number): CachedEntry | null;
|
|
11
|
+
set(workspace: string, repo: string, entry: CachedEntry): void;
|
|
12
|
+
invalidate(workspace: string, repo: string): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=rules-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-cache.d.ts","sourceRoot":"","sources":["../../src/rules-repo/rules-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,iBAAiB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,CAAC,EAAE,MAAM;IAI7B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAMrD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAcvE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAM9D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAQlD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getConfigDir } from '../utils/paths.js';
|
|
4
|
+
export class RulesCache {
|
|
5
|
+
cacheDir;
|
|
6
|
+
constructor(cacheDir) {
|
|
7
|
+
this.cacheDir = cacheDir ?? path.join(getConfigDir(), 'cache', 'rules');
|
|
8
|
+
}
|
|
9
|
+
getCachePath(workspace, repo) {
|
|
10
|
+
const safeWs = workspace.replace(/[/\\]/g, '_');
|
|
11
|
+
const safeRepo = repo.replace(/[/\\]/g, '_');
|
|
12
|
+
return path.join(this.cacheDir, safeWs, safeRepo + '.json');
|
|
13
|
+
}
|
|
14
|
+
get(workspace, repo, ttlMs) {
|
|
15
|
+
const cachePath = this.getCachePath(workspace, repo);
|
|
16
|
+
try {
|
|
17
|
+
const raw = fs.readFileSync(cachePath, 'utf8');
|
|
18
|
+
const entry = JSON.parse(raw);
|
|
19
|
+
if (Date.now() - Date.parse(entry.cachedAt) > ttlMs) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return entry;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
set(workspace, repo, entry) {
|
|
29
|
+
const cachePath = this.getCachePath(workspace, repo);
|
|
30
|
+
fs.mkdirSync(path.dirname(cachePath), { recursive: true });
|
|
31
|
+
fs.writeFileSync(cachePath, JSON.stringify(entry), 'utf8');
|
|
32
|
+
}
|
|
33
|
+
invalidate(workspace, repo) {
|
|
34
|
+
const cachePath = this.getCachePath(workspace, repo);
|
|
35
|
+
try {
|
|
36
|
+
fs.unlinkSync(cachePath);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// silent — file may not exist
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=rules-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-cache.js","sourceRoot":"","sources":["../../src/rules-repo/rules-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQjD,MAAM,OAAO,UAAU;IACJ,QAAQ,CAAS;IAElC,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,IAAY;QAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAa;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAkB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,IAAY;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BitbucketClient } from '../bitbucket/client.js';
|
|
2
|
+
import type { PrismPatternsFile } from '../rules-engine/types.js';
|
|
3
|
+
import type { RulesRepoConfig, RemoteRulesResult } from './types.js';
|
|
4
|
+
import type { RulesCache } from './rules-cache.js';
|
|
5
|
+
export declare class RulesRepoClient {
|
|
6
|
+
private readonly bbClient;
|
|
7
|
+
private readonly config;
|
|
8
|
+
private readonly cache;
|
|
9
|
+
constructor(bbClient: BitbucketClient, config: RulesRepoConfig, cache?: RulesCache);
|
|
10
|
+
/** Returns the remote file path for a given workspace/repo pair. */
|
|
11
|
+
getRemotePath(workspace: string, repo: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch patterns for a workspace/repo from the remote rules repository.
|
|
14
|
+
*
|
|
15
|
+
* Strategy:
|
|
16
|
+
* 1. Return fresh cache entry when available.
|
|
17
|
+
* 2. Otherwise fetch from remote and update the cache.
|
|
18
|
+
* 3. On any remote error, fall back to a stale cache entry if one exists.
|
|
19
|
+
*/
|
|
20
|
+
fetchPatterns(workspace: string, repo: string): Promise<RemoteRulesResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Push updated patterns for a workspace/repo to the remote rules repository
|
|
23
|
+
* and invalidate the local cache entry.
|
|
24
|
+
*/
|
|
25
|
+
pushPatterns(workspace: string, repo: string, patternsFile: PrismPatternsFile): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=rules-repo-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-repo-client.d.ts","sourceRoot":"","sources":["../../src/rules-repo/rules-repo-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkBnD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;gBAEnC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,UAAU;IAMlF,oEAAoE;IACpE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAItD;;;;;;;OAOG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA8DhF;;;OAGG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC;CAwBjB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { RulesRepoError } from './types.js';
|
|
2
|
+
export class RulesRepoClient {
|
|
3
|
+
bbClient;
|
|
4
|
+
config;
|
|
5
|
+
cache;
|
|
6
|
+
constructor(bbClient, config, cache) {
|
|
7
|
+
this.bbClient = bbClient;
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.cache = cache;
|
|
10
|
+
}
|
|
11
|
+
/** Returns the remote file path for a given workspace/repo pair. */
|
|
12
|
+
getRemotePath(workspace, repo) {
|
|
13
|
+
return `${workspace}/${repo}.json`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Fetch patterns for a workspace/repo from the remote rules repository.
|
|
17
|
+
*
|
|
18
|
+
* Strategy:
|
|
19
|
+
* 1. Return fresh cache entry when available.
|
|
20
|
+
* 2. Otherwise fetch from remote and update the cache.
|
|
21
|
+
* 3. On any remote error, fall back to a stale cache entry if one exists.
|
|
22
|
+
*/
|
|
23
|
+
async fetchPatterns(workspace, repo) {
|
|
24
|
+
const ttlMs = this.config.cacheTtlMs ?? 3_600_000;
|
|
25
|
+
// ── 1. Fresh cache hit ────────────────────────────────────────────────────
|
|
26
|
+
const fresh = this.cache?.get(workspace, repo, ttlMs) ?? null;
|
|
27
|
+
if (fresh !== null) {
|
|
28
|
+
return {
|
|
29
|
+
patternsFile: fresh.patternsFile,
|
|
30
|
+
fetchedAt: fresh.cachedAt,
|
|
31
|
+
fromCache: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// ── 2. Remote fetch ───────────────────────────────────────────────────────
|
|
35
|
+
const remotePath = this.getRemotePath(workspace, repo);
|
|
36
|
+
try {
|
|
37
|
+
const raw = await this.bbClient.getFileContent(this.config.rulesWorkspace, this.config.rulesRepo, 'main', remotePath);
|
|
38
|
+
if (raw === null) {
|
|
39
|
+
throw new RulesRepoError(`No rules file found for ${workspace}/${repo} in remote rules repo.`);
|
|
40
|
+
}
|
|
41
|
+
let patternsFile;
|
|
42
|
+
try {
|
|
43
|
+
patternsFile = JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new RulesRepoError(`Failed to parse remote rules file for ${workspace}/${repo}.`);
|
|
47
|
+
}
|
|
48
|
+
// ── 3. Update cache ───────────────────────────────────────────────────
|
|
49
|
+
const fetchedAt = new Date().toISOString();
|
|
50
|
+
this.cache?.set(workspace, repo, { patternsFile, cachedAt: fetchedAt });
|
|
51
|
+
return { patternsFile, fetchedAt, fromCache: false };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
// ── 4. Stale cache fallback ───────────────────────────────────────────
|
|
55
|
+
const stale = this.cache?.get(workspace, repo, Infinity) ?? null;
|
|
56
|
+
if (stale !== null) {
|
|
57
|
+
console.warn(`Using stale cached rules for ${workspace}/${repo} — remote fetch failed.`);
|
|
58
|
+
return {
|
|
59
|
+
patternsFile: stale.patternsFile,
|
|
60
|
+
fetchedAt: stale.cachedAt,
|
|
61
|
+
fromCache: true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Push updated patterns for a workspace/repo to the remote rules repository
|
|
69
|
+
* and invalidate the local cache entry.
|
|
70
|
+
*/
|
|
71
|
+
async pushPatterns(workspace, repo, patternsFile) {
|
|
72
|
+
const remotePath = this.getRemotePath(workspace, repo);
|
|
73
|
+
const content = JSON.stringify(patternsFile, null, 2);
|
|
74
|
+
const message = `chore: update patterns for ${workspace}/${repo}`;
|
|
75
|
+
try {
|
|
76
|
+
await this.bbClient.putFileContent(this.config.rulesWorkspace, this.config.rulesRepo, 'main', remotePath, content, message);
|
|
77
|
+
this.cache?.invalidate(workspace, repo);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
const errMessage = err instanceof Error ? err.message : String(err);
|
|
81
|
+
throw new RulesRepoError(`Failed to push patterns for ${workspace}/${repo}: ${errMessage}`, err);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=rules-repo-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-repo-client.js","sourceRoot":"","sources":["../../src/rules-repo/rules-repo-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PrismPatternsFile } from '../rules-engine/types.js';
|
|
2
|
+
export interface RulesRepoConfig {
|
|
3
|
+
rulesWorkspace: string;
|
|
4
|
+
rulesRepo: string;
|
|
5
|
+
cacheTtlMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RemoteRulesResult {
|
|
8
|
+
patternsFile: PrismPatternsFile;
|
|
9
|
+
fetchedAt: string;
|
|
10
|
+
fromCache: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class RulesRepoError extends Error {
|
|
13
|
+
readonly cause?: unknown | undefined;
|
|
14
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules-repo/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,iBAAiB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,cAAe,SAAQ,KAAK;aACM,KAAK,CAAC,EAAE,OAAO;gBAAhD,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAK7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rules-repo/types.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACM;IAA7C,YAAY,OAAe,EAAkB,KAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAU;QAE1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ModelProvider } from '../types/index.js';
|
|
2
|
+
import type { StackProfile } from './types.js';
|
|
3
|
+
export declare function extractFilePathsFromDiff(rawDiff: string): string[];
|
|
4
|
+
export interface AIStackInput {
|
|
5
|
+
filePaths: string[];
|
|
6
|
+
prTitle: string;
|
|
7
|
+
sourceBranch: string;
|
|
8
|
+
targetBranch: string;
|
|
9
|
+
partialProfile: Partial<StackProfile>;
|
|
10
|
+
}
|
|
11
|
+
export declare function detectStackWithAI(input: AIStackInput, provider: ModelProvider): Promise<Partial<StackProfile>>;
|
|
12
|
+
//# sourceMappingURL=ai-stack-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-stack-fallback.d.ts","sourceRoot":"","sources":["../../src/stack-detector/ai-stack-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAUlE;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACvC;AAID,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CA8ChC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AI_STACK_SCHEMA } from './ai-stack-schema.js';
|
|
2
|
+
const DIFF_HEADER_RE = /^diff --git a\/.+? b\/(.+?)$/gm;
|
|
3
|
+
const MAX_FILE_PATHS = 80;
|
|
4
|
+
export function extractFilePathsFromDiff(rawDiff) {
|
|
5
|
+
if (!rawDiff)
|
|
6
|
+
return [];
|
|
7
|
+
const paths = new Set();
|
|
8
|
+
let match;
|
|
9
|
+
while ((match = DIFF_HEADER_RE.exec(rawDiff)) !== null) {
|
|
10
|
+
if (match[1])
|
|
11
|
+
paths.add(match[1]);
|
|
12
|
+
if (paths.size >= MAX_FILE_PATHS)
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
DIFF_HEADER_RE.lastIndex = 0; // reset for reuse
|
|
16
|
+
return [...paths];
|
|
17
|
+
}
|
|
18
|
+
const SYSTEM_PROMPT = `You are a tech stack classifier. Given file paths and PR metadata, infer the project's runtime, language, framework, build tool, and key libraries. Only populate fields you are confident about. Do not guess.`;
|
|
19
|
+
export async function detectStackWithAI(input, provider) {
|
|
20
|
+
try {
|
|
21
|
+
const knownFields = Object.entries(input.partialProfile)
|
|
22
|
+
.filter(([, v]) => v !== null && v !== undefined && !(Array.isArray(v) && v.length === 0))
|
|
23
|
+
.map(([k, v]) => `${k}: ${String(v)}`)
|
|
24
|
+
.join('\n');
|
|
25
|
+
const userContent = [
|
|
26
|
+
`PR: ${input.prTitle}`,
|
|
27
|
+
`Branch: ${input.sourceBranch} → ${input.targetBranch}`,
|
|
28
|
+
'',
|
|
29
|
+
'Changed files:',
|
|
30
|
+
...input.filePaths,
|
|
31
|
+
'',
|
|
32
|
+
knownFields ? `Known so far:\n${knownFields}` : 'Known so far: none',
|
|
33
|
+
].join('\n');
|
|
34
|
+
const result = await provider.analyze({
|
|
35
|
+
systemPrompt: SYSTEM_PROMPT,
|
|
36
|
+
userContent,
|
|
37
|
+
toolName: 'detect_stack',
|
|
38
|
+
toolSchema: AI_STACK_SCHEMA,
|
|
39
|
+
model: 'haiku',
|
|
40
|
+
});
|
|
41
|
+
// provider.analyze() returns { findings: unknown[], usage }
|
|
42
|
+
// For structured output, the schema result is in findings[0]
|
|
43
|
+
const raw = result.findings[0];
|
|
44
|
+
if (raw === undefined || raw === null || typeof raw !== 'object')
|
|
45
|
+
return {};
|
|
46
|
+
const parsed = raw;
|
|
47
|
+
const profile = {};
|
|
48
|
+
if (typeof parsed.runtime === 'string')
|
|
49
|
+
profile.runtime = parsed.runtime;
|
|
50
|
+
if (typeof parsed.language === 'string')
|
|
51
|
+
profile.language = parsed.language;
|
|
52
|
+
if (typeof parsed.framework === 'string')
|
|
53
|
+
profile.framework = parsed.framework;
|
|
54
|
+
if (typeof parsed.frameworkVersion === 'string')
|
|
55
|
+
profile.frameworkVersion = parsed.frameworkVersion;
|
|
56
|
+
if (typeof parsed.buildTool === 'string')
|
|
57
|
+
profile.buildTool = parsed.buildTool;
|
|
58
|
+
if (Array.isArray(parsed.keyLibraries)) {
|
|
59
|
+
profile.keyLibraries = parsed.keyLibraries.filter((l) => typeof l === 'string');
|
|
60
|
+
}
|
|
61
|
+
return profile;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=ai-stack-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-stack-fallback.js","sourceRoot":"","sources":["../../src/stack-detector/ai-stack-fallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const AI_STACK_SCHEMA: {
|
|
2
|
+
readonly type: "object";
|
|
3
|
+
readonly properties: {
|
|
4
|
+
readonly runtime: {
|
|
5
|
+
readonly type: "string";
|
|
6
|
+
};
|
|
7
|
+
readonly language: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
};
|
|
10
|
+
readonly framework: {
|
|
11
|
+
readonly type: "string";
|
|
12
|
+
};
|
|
13
|
+
readonly frameworkVersion: {
|
|
14
|
+
readonly type: "string";
|
|
15
|
+
};
|
|
16
|
+
readonly buildTool: {
|
|
17
|
+
readonly type: "string";
|
|
18
|
+
};
|
|
19
|
+
readonly keyLibraries: {
|
|
20
|
+
readonly type: "array";
|
|
21
|
+
readonly items: {
|
|
22
|
+
readonly type: "string";
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
readonly required: readonly [];
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=ai-stack-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-stack-schema.d.ts","sourceRoot":"","sources":["../../src/stack-detector/ai-stack-schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CAWlB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const AI_STACK_SCHEMA = {
|
|
2
|
+
type: 'object',
|
|
3
|
+
properties: {
|
|
4
|
+
runtime: { type: 'string' },
|
|
5
|
+
language: { type: 'string' },
|
|
6
|
+
framework: { type: 'string' },
|
|
7
|
+
frameworkVersion: { type: 'string' },
|
|
8
|
+
buildTool: { type: 'string' },
|
|
9
|
+
keyLibraries: { type: 'array', items: { type: 'string' } },
|
|
10
|
+
},
|
|
11
|
+
required: [],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=ai-stack-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-stack-schema.js","sourceRoot":"","sources":["../../src/stack-detector/ai-stack-schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC7B,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC7B,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;KAC3D;IACD,QAAQ,EAAE,EAAE;CACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { StackProfile } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Format a StackProfile into a compact text block for injection into agent prompts.
|
|
4
|
+
* Costs ~40-60 tokens for a typical stack.
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatStackProfile(profile: StackProfile): string;
|
|
7
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/stack-detector/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAY/C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAyBhE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const RUNTIME_LABELS = {
|
|
2
|
+
node: 'Node.js',
|
|
3
|
+
php: 'PHP',
|
|
4
|
+
python: 'Python',
|
|
5
|
+
go: 'Go',
|
|
6
|
+
rust: 'Rust',
|
|
7
|
+
jvm: 'JVM',
|
|
8
|
+
dotnet: '.NET',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Format a StackProfile into a compact text block for injection into agent prompts.
|
|
12
|
+
* Costs ~40-60 tokens for a typical stack.
|
|
13
|
+
*/
|
|
14
|
+
export function formatStackProfile(profile) {
|
|
15
|
+
const lines = ['Tech Stack (detectado de manifests del proyecto):'];
|
|
16
|
+
if (profile.runtime !== null) {
|
|
17
|
+
lines.push(`- Runtime: ${RUNTIME_LABELS[profile.runtime] ?? profile.runtime}`);
|
|
18
|
+
}
|
|
19
|
+
if (profile.language !== null) {
|
|
20
|
+
lines.push(`- Lenguaje: ${capitalize(profile.language)}`);
|
|
21
|
+
}
|
|
22
|
+
if (profile.framework !== null) {
|
|
23
|
+
const version = profile.frameworkVersion !== null ? ` ${profile.frameworkVersion}` : '';
|
|
24
|
+
lines.push(`- Framework: ${capitalize(profile.framework)}${version}`);
|
|
25
|
+
}
|
|
26
|
+
if (profile.buildTool !== null) {
|
|
27
|
+
lines.push(`- Build Tool: ${capitalize(profile.buildTool)}`);
|
|
28
|
+
}
|
|
29
|
+
if (profile.keyLibraries.length > 0) {
|
|
30
|
+
lines.push(`- Librerías clave: ${profile.keyLibraries.join(', ')}`);
|
|
31
|
+
}
|
|
32
|
+
return lines.join('\n');
|
|
33
|
+
}
|
|
34
|
+
function capitalize(s) {
|
|
35
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/stack-detector/formatter.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,MAAM;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAqB;IACtD,MAAM,KAAK,GAAa,CAAC,mDAAmD,CAAC,CAAC;IAE9E,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { StackDetector } from './stack-detector.js';
|
|
2
|
+
export { formatStackProfile } from './formatter.js';
|
|
3
|
+
export type { StackProfile } from './types.js';
|
|
4
|
+
export { detectStackWithAI, extractFilePathsFromDiff } from './ai-stack-fallback.js';
|
|
5
|
+
export type { AIStackInput } from './ai-stack-fallback.js';
|
|
6
|
+
export { mergeStackProfiles } from './merge-profiles.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stack-detector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { StackDetector } from './stack-detector.js';
|
|
2
|
+
export { formatStackProfile } from './formatter.js';
|
|
3
|
+
export { detectStackWithAI, extractFilePathsFromDiff } from './ai-stack-fallback.js';
|
|
4
|
+
export { mergeStackProfiles } from './merge-profiles.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stack-detector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-profiles.d.ts","sourceRoot":"","sources":["../../src/stack-detector/merge-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,EACpC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,GACxB,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CA+BjD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MAX_KEY_LIBRARIES } from './types.js';
|
|
2
|
+
export function mergeStackProfiles(deterministic, ai) {
|
|
3
|
+
let aiUsed = false;
|
|
4
|
+
function pick(det, aiVal) {
|
|
5
|
+
if (det !== null && det !== undefined)
|
|
6
|
+
return det;
|
|
7
|
+
if (aiVal !== null && aiVal !== undefined) {
|
|
8
|
+
aiUsed = true;
|
|
9
|
+
return aiVal;
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const merged = {
|
|
14
|
+
runtime: pick(deterministic.runtime, ai.runtime),
|
|
15
|
+
language: pick(deterministic.language, ai.language),
|
|
16
|
+
framework: pick(deterministic.framework, ai.framework),
|
|
17
|
+
frameworkVersion: pick(deterministic.frameworkVersion, ai.frameworkVersion),
|
|
18
|
+
buildTool: pick(deterministic.buildTool, ai.buildTool),
|
|
19
|
+
manifestsFound: deterministic.manifestsFound ?? [],
|
|
20
|
+
detectedAt: deterministic.detectedAt ?? new Date().toISOString(),
|
|
21
|
+
};
|
|
22
|
+
// Libraries: deterministic wins entirely if non-empty
|
|
23
|
+
const detLibs = deterministic.keyLibraries;
|
|
24
|
+
if (detLibs !== undefined && detLibs.length > 0) {
|
|
25
|
+
merged.keyLibraries = detLibs.slice(0, MAX_KEY_LIBRARIES);
|
|
26
|
+
}
|
|
27
|
+
else if (ai.keyLibraries !== undefined && ai.keyLibraries.length > 0) {
|
|
28
|
+
aiUsed = true;
|
|
29
|
+
merged.keyLibraries = ai.keyLibraries.slice(0, MAX_KEY_LIBRARIES);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
merged.keyLibraries = [];
|
|
33
|
+
}
|
|
34
|
+
return { ...merged, aiEnriched: aiUsed };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=merge-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-profiles.js","sourceRoot":"","sources":["../../src/stack-detector/merge-profiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,kBAAkB,CAChC,aAAoC,EACpC,EAAyB;IAEzB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,SAAS,IAAI,CAAI,GAAyB,EAAE,KAA2B;QACrE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAA0B;QACpC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;QAChD,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC;QACnD,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC;QACtD,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC;QAC3E,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC;QACtD,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,EAAE;QAClD,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACjE,CAAC;IAEF,sDAAsD;IACtD,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,EAAE,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StackProfile } from './types.js';
|
|
2
|
+
type PartialStack = Partial<StackProfile>;
|
|
3
|
+
export declare function parsePackageJson(content: string): PartialStack;
|
|
4
|
+
export declare function parseComposerJson(content: string): PartialStack;
|
|
5
|
+
export declare function parseGoMod(content: string): PartialStack;
|
|
6
|
+
export declare function parseRequirementsTxt(content: string): PartialStack;
|
|
7
|
+
export declare function parsePyprojectToml(content: string): PartialStack;
|
|
8
|
+
export declare function parseCargoToml(content: string): PartialStack;
|
|
9
|
+
export declare function parsePomXml(content: string): PartialStack;
|
|
10
|
+
export declare function parseBuildGradle(content: string): PartialStack;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=parsers.d.ts.map
|