agentsys 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agnix.toml +49 -0
- package/.claude-plugin/marketplace.json +110 -0
- package/.claude-plugin/plugin.json +20 -0
- package/AGENTS.md +260 -0
- package/CHANGELOG.md +190 -0
- package/LICENSE +21 -0
- package/README.md +916 -0
- package/SECURITY.md +45 -0
- package/adapters/README.md +258 -0
- package/adapters/codex/README.md +273 -0
- package/adapters/codex/install.sh +260 -0
- package/adapters/codex/skills/agnix/SKILL.md +138 -0
- package/adapters/codex/skills/audit-project/SKILL.md +334 -0
- package/adapters/codex/skills/audit-project-agents/SKILL.md +459 -0
- package/adapters/codex/skills/audit-project-github/SKILL.md +146 -0
- package/adapters/codex/skills/consult/SKILL.md +245 -0
- package/adapters/codex/skills/delivery-approval/SKILL.md +339 -0
- package/adapters/codex/skills/deslop/SKILL.md +167 -0
- package/adapters/codex/skills/drift-detect/SKILL.md +268 -0
- package/adapters/codex/skills/enhance/SKILL.md +177 -0
- package/adapters/codex/skills/learn/SKILL.md +188 -0
- package/adapters/codex/skills/next-task/SKILL.md +546 -0
- package/adapters/codex/skills/perf/SKILL.md +469 -0
- package/adapters/codex/skills/repo-map/SKILL.md +132 -0
- package/adapters/codex/skills/ship/SKILL.md +491 -0
- package/adapters/codex/skills/ship-ci-review-loop/SKILL.md +473 -0
- package/adapters/codex/skills/ship-deployment/SKILL.md +336 -0
- package/adapters/codex/skills/ship-error-handling/SKILL.md +260 -0
- package/adapters/codex/skills/sync-docs/SKILL.md +186 -0
- package/adapters/opencode/README.md +302 -0
- package/adapters/opencode/agents/agent-enhancer.md +65 -0
- package/adapters/opencode/agents/agnix-agent.md +56 -0
- package/adapters/opencode/agents/ci-fixer.md +104 -0
- package/adapters/opencode/agents/ci-monitor.md +127 -0
- package/adapters/opencode/agents/claudemd-enhancer.md +66 -0
- package/adapters/opencode/agents/consult-agent.md +124 -0
- package/adapters/opencode/agents/cross-file-enhancer.md +54 -0
- package/adapters/opencode/agents/delivery-validator.md +115 -0
- package/adapters/opencode/agents/deslop-agent.md +88 -0
- package/adapters/opencode/agents/docs-enhancer.md +65 -0
- package/adapters/opencode/agents/exploration-agent.md +143 -0
- package/adapters/opencode/agents/hooks-enhancer.md +66 -0
- package/adapters/opencode/agents/implementation-agent.md +206 -0
- package/adapters/opencode/agents/learn-agent.md +279 -0
- package/adapters/opencode/agents/map-validator.md +65 -0
- package/adapters/opencode/agents/perf-analyzer.md +40 -0
- package/adapters/opencode/agents/perf-code-paths.md +12 -0
- package/adapters/opencode/agents/perf-investigation-logger.md +44 -0
- package/adapters/opencode/agents/perf-orchestrator.md +147 -0
- package/adapters/opencode/agents/perf-theory-gatherer.md +18 -0
- package/adapters/opencode/agents/perf-theory-tester.md +43 -0
- package/adapters/opencode/agents/plan-synthesizer.md +229 -0
- package/adapters/opencode/agents/planning-agent.md +235 -0
- package/adapters/opencode/agents/plugin-enhancer.md +64 -0
- package/adapters/opencode/agents/prompt-enhancer.md +58 -0
- package/adapters/opencode/agents/simple-fixer.md +107 -0
- package/adapters/opencode/agents/skills-enhancer.md +66 -0
- package/adapters/opencode/agents/sync-docs-agent.md +153 -0
- package/adapters/opencode/agents/task-discoverer.md +80 -0
- package/adapters/opencode/agents/test-coverage-checker.md +144 -0
- package/adapters/opencode/agents/worktree-manager.md +209 -0
- package/adapters/opencode/commands/agnix.md +106 -0
- package/adapters/opencode/commands/audit-project-agents.md +125 -0
- package/adapters/opencode/commands/audit-project-github.md +145 -0
- package/adapters/opencode/commands/audit-project.md +268 -0
- package/adapters/opencode/commands/consult.md +252 -0
- package/adapters/opencode/commands/delivery-approval.md +212 -0
- package/adapters/opencode/commands/deslop.md +132 -0
- package/adapters/opencode/commands/drift-detect.md +173 -0
- package/adapters/opencode/commands/enhance.md +183 -0
- package/adapters/opencode/commands/learn.md +116 -0
- package/adapters/opencode/commands/next-task.md +393 -0
- package/adapters/opencode/commands/perf.md +49 -0
- package/adapters/opencode/commands/repo-map.md +69 -0
- package/adapters/opencode/commands/ship-ci-review-loop.md +334 -0
- package/adapters/opencode/commands/ship-deployment.md +336 -0
- package/adapters/opencode/commands/ship-error-handling.md +248 -0
- package/adapters/opencode/commands/ship.md +371 -0
- package/adapters/opencode/commands/sync-docs.md +108 -0
- package/adapters/opencode/install.sh +322 -0
- package/adapters/opencode/skills/agnix/SKILL.md +139 -0
- package/adapters/opencode/skills/consult/SKILL.md +292 -0
- package/adapters/opencode/skills/deslop/SKILL.md +169 -0
- package/adapters/opencode/skills/discover-tasks/SKILL.md +102 -0
- package/adapters/opencode/skills/drift-analysis/SKILL.md +279 -0
- package/adapters/opencode/skills/enhance-agent-prompts/SKILL.md +279 -0
- package/adapters/opencode/skills/enhance-claude-memory/SKILL.md +390 -0
- package/adapters/opencode/skills/enhance-cross-file/SKILL.md +112 -0
- package/adapters/opencode/skills/enhance-docs/SKILL.md +288 -0
- package/adapters/opencode/skills/enhance-hooks/SKILL.md +557 -0
- package/adapters/opencode/skills/enhance-orchestrator/SKILL.md +114 -0
- package/adapters/opencode/skills/enhance-plugins/SKILL.md +314 -0
- package/adapters/opencode/skills/enhance-prompts/SKILL.md +341 -0
- package/adapters/opencode/skills/enhance-skills/SKILL.md +443 -0
- package/adapters/opencode/skills/learn/SKILL.md +352 -0
- package/adapters/opencode/skills/orchestrate-review/SKILL.md +95 -0
- package/adapters/opencode/skills/perf-analyzer/SKILL.md +38 -0
- package/adapters/opencode/skills/perf-baseline-manager/SKILL.md +31 -0
- package/adapters/opencode/skills/perf-benchmarker/SKILL.md +49 -0
- package/adapters/opencode/skills/perf-code-paths/SKILL.md +33 -0
- package/adapters/opencode/skills/perf-investigation-logger/SKILL.md +42 -0
- package/adapters/opencode/skills/perf-profiler/SKILL.md +39 -0
- package/adapters/opencode/skills/perf-theory-gatherer/SKILL.md +36 -0
- package/adapters/opencode/skills/perf-theory-tester/SKILL.md +37 -0
- package/adapters/opencode/skills/repo-mapping/SKILL.md +86 -0
- package/adapters/opencode/skills/sync-docs/SKILL.md +246 -0
- package/adapters/opencode/skills/validate-delivery/SKILL.md +112 -0
- package/adapters/opencode-plugin/index.ts +346 -0
- package/adapters/opencode-plugin/package.json +21 -0
- package/agent-knowledge/AGENTS.md +62 -0
- package/agent-knowledge/ai-cli-advanced-integration-patterns.md +670 -0
- package/agent-knowledge/ai-cli-non-interactive-programmatic-usage.md +1394 -0
- package/agent-knowledge/resources/ai-cli-non-interactive-programmatic-usage-sources.json +500 -0
- package/bin/cli.js +719 -0
- package/bin/dev-cli.js +587 -0
- package/lib/adapter-transforms.js +278 -0
- package/lib/collectors/codebase.js +392 -0
- package/lib/collectors/docs-patterns.js +713 -0
- package/lib/collectors/documentation.js +219 -0
- package/lib/collectors/github.js +266 -0
- package/lib/collectors/index.js +126 -0
- package/lib/config/index.js +14 -0
- package/lib/cross-platform/index.js +539 -0
- package/lib/discovery/index.js +352 -0
- package/lib/drift-detect/collectors.js +37 -0
- package/lib/enhance/agent-analyzer.js +421 -0
- package/lib/enhance/agent-patterns.js +571 -0
- package/lib/enhance/auto-suppression.js +622 -0
- package/lib/enhance/benchmark.js +417 -0
- package/lib/enhance/cross-file-analyzer.js +930 -0
- package/lib/enhance/cross-file-patterns.js +370 -0
- package/lib/enhance/docs-analyzer.js +325 -0
- package/lib/enhance/docs-patterns.js +671 -0
- package/lib/enhance/fixer.js +721 -0
- package/lib/enhance/hook-analyzer.js +135 -0
- package/lib/enhance/hook-patterns.js +40 -0
- package/lib/enhance/index.js +127 -0
- package/lib/enhance/plugin-analyzer.js +402 -0
- package/lib/enhance/plugin-patterns.js +326 -0
- package/lib/enhance/projectmemory-analyzer.js +551 -0
- package/lib/enhance/projectmemory-patterns.js +617 -0
- package/lib/enhance/prompt-analyzer.js +457 -0
- package/lib/enhance/prompt-patterns.js +1484 -0
- package/lib/enhance/reporter.js +1348 -0
- package/lib/enhance/security-patterns.js +284 -0
- package/lib/enhance/skill-analyzer.js +182 -0
- package/lib/enhance/skill-patterns.js +147 -0
- package/lib/enhance/suppression.js +352 -0
- package/lib/enhance/tool-patterns.js +373 -0
- package/lib/index.js +270 -0
- package/lib/package.json +25 -0
- package/lib/patterns/cli-enhancers.js +611 -0
- package/lib/patterns/pipeline.js +948 -0
- package/lib/patterns/review-patterns.js +558 -0
- package/lib/patterns/slop-analyzers.js +2305 -0
- package/lib/patterns/slop-patterns.js +1187 -0
- package/lib/perf/analyzer/index.js +22 -0
- package/lib/perf/argument-parser.js +105 -0
- package/lib/perf/baseline-comparator.js +50 -0
- package/lib/perf/baseline-store.js +127 -0
- package/lib/perf/benchmark-runner.js +399 -0
- package/lib/perf/breaking-point-finder.js +52 -0
- package/lib/perf/breaking-point-runner.js +60 -0
- package/lib/perf/checkpoint.js +123 -0
- package/lib/perf/code-paths.js +86 -0
- package/lib/perf/consolidation.js +37 -0
- package/lib/perf/constraint-runner.js +71 -0
- package/lib/perf/experiment-runner.js +32 -0
- package/lib/perf/index.js +41 -0
- package/lib/perf/investigation-state.js +875 -0
- package/lib/perf/optimization-runner.js +79 -0
- package/lib/perf/profilers/go.js +22 -0
- package/lib/perf/profilers/index.js +46 -0
- package/lib/perf/profilers/java.js +23 -0
- package/lib/perf/profilers/node.js +27 -0
- package/lib/perf/profilers/python.js +23 -0
- package/lib/perf/profilers/rust.js +23 -0
- package/lib/perf/profiling-runner.js +56 -0
- package/lib/perf/schemas.js +140 -0
- package/lib/platform/detect-platform.js +413 -0
- package/lib/platform/detection-configs.js +93 -0
- package/lib/platform/state-dir.js +132 -0
- package/lib/platform/verify-tools.js +182 -0
- package/lib/repo-map/cache.js +152 -0
- package/lib/repo-map/index.js +222 -0
- package/lib/repo-map/installer.js +212 -0
- package/lib/repo-map/queries/go.js +27 -0
- package/lib/repo-map/queries/index.js +100 -0
- package/lib/repo-map/queries/java.js +38 -0
- package/lib/repo-map/queries/javascript.js +55 -0
- package/lib/repo-map/queries/python.js +24 -0
- package/lib/repo-map/queries/rust.js +73 -0
- package/lib/repo-map/queries/typescript.js +38 -0
- package/lib/repo-map/runner.js +1165 -0
- package/lib/repo-map/updater.js +474 -0
- package/lib/repo-map/usage-analyzer.js +407 -0
- package/lib/schemas/plugin-manifest.schema.json +57 -0
- package/lib/schemas/validator.js +247 -0
- package/lib/sources/custom-handler.js +199 -0
- package/lib/sources/policy-questions.js +246 -0
- package/lib/sources/source-cache.js +165 -0
- package/lib/state/workflow-state.js +575 -0
- package/lib/types/agent-frontmatter.d.ts +134 -0
- package/lib/types/command-frontmatter.d.ts +107 -0
- package/lib/types/hook-frontmatter.d.ts +115 -0
- package/lib/types/index.d.ts +84 -0
- package/lib/types/plugin-manifest.d.ts +102 -0
- package/lib/types/skill-frontmatter.d.ts +89 -0
- package/lib/utils/atomic-write.js +94 -0
- package/lib/utils/cache-manager.js +159 -0
- package/lib/utils/context-optimizer.js +300 -0
- package/lib/utils/deprecation.js +37 -0
- package/lib/utils/shell-escape.js +88 -0
- package/meta/skills/maintain-cross-platform/SKILL.md +1022 -0
- package/package.json +92 -0
- package/plugins/agnix/.claude-plugin/plugin.json +22 -0
- package/plugins/agnix/agents/agnix-agent.md +56 -0
- package/plugins/agnix/commands/agnix.md +139 -0
- package/plugins/agnix/skills/agnix/SKILL.md +138 -0
- package/plugins/audit-project/.claude-plugin/plugin.json +20 -0
- package/plugins/audit-project/commands/audit-project-agents.md +458 -0
- package/plugins/audit-project/commands/audit-project-github.md +144 -0
- package/plugins/audit-project/commands/audit-project.md +336 -0
- package/plugins/audit-project/lib/adapter-transforms.js +278 -0
- package/plugins/audit-project/lib/collectors/codebase.js +392 -0
- package/plugins/audit-project/lib/collectors/docs-patterns.js +713 -0
- package/plugins/audit-project/lib/collectors/documentation.js +219 -0
- package/plugins/audit-project/lib/collectors/github.js +266 -0
- package/plugins/audit-project/lib/collectors/index.js +126 -0
- package/plugins/audit-project/lib/config/index.js +14 -0
- package/plugins/audit-project/lib/cross-platform/index.js +539 -0
- package/plugins/audit-project/lib/discovery/index.js +352 -0
- package/plugins/audit-project/lib/drift-detect/collectors.js +37 -0
- package/plugins/audit-project/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/audit-project/lib/enhance/agent-patterns.js +571 -0
- package/plugins/audit-project/lib/enhance/auto-suppression.js +622 -0
- package/plugins/audit-project/lib/enhance/benchmark.js +417 -0
- package/plugins/audit-project/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/audit-project/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/audit-project/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/audit-project/lib/enhance/docs-patterns.js +671 -0
- package/plugins/audit-project/lib/enhance/fixer.js +721 -0
- package/plugins/audit-project/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/audit-project/lib/enhance/hook-patterns.js +40 -0
- package/plugins/audit-project/lib/enhance/index.js +127 -0
- package/plugins/audit-project/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/audit-project/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/audit-project/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/audit-project/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/audit-project/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/audit-project/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/audit-project/lib/enhance/reporter.js +1348 -0
- package/plugins/audit-project/lib/enhance/security-patterns.js +284 -0
- package/plugins/audit-project/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/audit-project/lib/enhance/skill-patterns.js +147 -0
- package/plugins/audit-project/lib/enhance/suppression.js +352 -0
- package/plugins/audit-project/lib/enhance/tool-patterns.js +373 -0
- package/plugins/audit-project/lib/index.js +270 -0
- package/plugins/audit-project/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/audit-project/lib/patterns/pipeline.js +948 -0
- package/plugins/audit-project/lib/patterns/review-patterns.js +558 -0
- package/plugins/audit-project/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/audit-project/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/audit-project/lib/perf/analyzer/index.js +22 -0
- package/plugins/audit-project/lib/perf/argument-parser.js +105 -0
- package/plugins/audit-project/lib/perf/baseline-comparator.js +50 -0
- package/plugins/audit-project/lib/perf/baseline-store.js +127 -0
- package/plugins/audit-project/lib/perf/benchmark-runner.js +399 -0
- package/plugins/audit-project/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/audit-project/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/audit-project/lib/perf/checkpoint.js +123 -0
- package/plugins/audit-project/lib/perf/code-paths.js +86 -0
- package/plugins/audit-project/lib/perf/consolidation.js +37 -0
- package/plugins/audit-project/lib/perf/constraint-runner.js +71 -0
- package/plugins/audit-project/lib/perf/experiment-runner.js +32 -0
- package/plugins/audit-project/lib/perf/index.js +41 -0
- package/plugins/audit-project/lib/perf/investigation-state.js +875 -0
- package/plugins/audit-project/lib/perf/optimization-runner.js +79 -0
- package/plugins/audit-project/lib/perf/profilers/go.js +22 -0
- package/plugins/audit-project/lib/perf/profilers/index.js +46 -0
- package/plugins/audit-project/lib/perf/profilers/java.js +23 -0
- package/plugins/audit-project/lib/perf/profilers/node.js +27 -0
- package/plugins/audit-project/lib/perf/profilers/python.js +23 -0
- package/plugins/audit-project/lib/perf/profilers/rust.js +23 -0
- package/plugins/audit-project/lib/perf/profiling-runner.js +56 -0
- package/plugins/audit-project/lib/perf/schemas.js +140 -0
- package/plugins/audit-project/lib/platform/detect-platform.js +413 -0
- package/plugins/audit-project/lib/platform/detection-configs.js +93 -0
- package/plugins/audit-project/lib/platform/state-dir.js +132 -0
- package/plugins/audit-project/lib/platform/verify-tools.js +182 -0
- package/plugins/audit-project/lib/repo-map/cache.js +152 -0
- package/plugins/audit-project/lib/repo-map/index.js +222 -0
- package/plugins/audit-project/lib/repo-map/installer.js +212 -0
- package/plugins/audit-project/lib/repo-map/queries/go.js +27 -0
- package/plugins/audit-project/lib/repo-map/queries/index.js +100 -0
- package/plugins/audit-project/lib/repo-map/queries/java.js +38 -0
- package/plugins/audit-project/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/audit-project/lib/repo-map/queries/python.js +24 -0
- package/plugins/audit-project/lib/repo-map/queries/rust.js +73 -0
- package/plugins/audit-project/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/audit-project/lib/repo-map/runner.js +1165 -0
- package/plugins/audit-project/lib/repo-map/updater.js +474 -0
- package/plugins/audit-project/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/audit-project/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/audit-project/lib/schemas/validator.js +247 -0
- package/plugins/audit-project/lib/sources/custom-handler.js +199 -0
- package/plugins/audit-project/lib/sources/policy-questions.js +246 -0
- package/plugins/audit-project/lib/sources/source-cache.js +165 -0
- package/plugins/audit-project/lib/state/workflow-state.js +575 -0
- package/plugins/audit-project/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/audit-project/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/audit-project/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/audit-project/lib/types/index.d.ts +84 -0
- package/plugins/audit-project/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/audit-project/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/audit-project/lib/utils/atomic-write.js +94 -0
- package/plugins/audit-project/lib/utils/cache-manager.js +159 -0
- package/plugins/audit-project/lib/utils/context-optimizer.js +300 -0
- package/plugins/audit-project/lib/utils/deprecation.js +37 -0
- package/plugins/audit-project/lib/utils/shell-escape.js +88 -0
- package/plugins/consult/.claude-plugin/plugin.json +24 -0
- package/plugins/consult/agents/consult-agent.md +129 -0
- package/plugins/consult/commands/consult.md +248 -0
- package/plugins/consult/skills/consult/SKILL.md +285 -0
- package/plugins/deslop/.claude-plugin/plugin.json +20 -0
- package/plugins/deslop/agents/deslop-agent.md +88 -0
- package/plugins/deslop/commands/deslop.md +168 -0
- package/plugins/deslop/lib/adapter-transforms.js +278 -0
- package/plugins/deslop/lib/collectors/codebase.js +392 -0
- package/plugins/deslop/lib/collectors/docs-patterns.js +713 -0
- package/plugins/deslop/lib/collectors/documentation.js +219 -0
- package/plugins/deslop/lib/collectors/github.js +266 -0
- package/plugins/deslop/lib/collectors/index.js +126 -0
- package/plugins/deslop/lib/config/index.js +14 -0
- package/plugins/deslop/lib/cross-platform/index.js +539 -0
- package/plugins/deslop/lib/discovery/index.js +352 -0
- package/plugins/deslop/lib/drift-detect/collectors.js +37 -0
- package/plugins/deslop/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/deslop/lib/enhance/agent-patterns.js +571 -0
- package/plugins/deslop/lib/enhance/auto-suppression.js +622 -0
- package/plugins/deslop/lib/enhance/benchmark.js +417 -0
- package/plugins/deslop/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/deslop/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/deslop/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/deslop/lib/enhance/docs-patterns.js +671 -0
- package/plugins/deslop/lib/enhance/fixer.js +721 -0
- package/plugins/deslop/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/deslop/lib/enhance/hook-patterns.js +40 -0
- package/plugins/deslop/lib/enhance/index.js +127 -0
- package/plugins/deslop/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/deslop/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/deslop/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/deslop/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/deslop/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/deslop/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/deslop/lib/enhance/reporter.js +1348 -0
- package/plugins/deslop/lib/enhance/security-patterns.js +284 -0
- package/plugins/deslop/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/deslop/lib/enhance/skill-patterns.js +147 -0
- package/plugins/deslop/lib/enhance/suppression.js +352 -0
- package/plugins/deslop/lib/enhance/tool-patterns.js +373 -0
- package/plugins/deslop/lib/index.js +270 -0
- package/plugins/deslop/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/deslop/lib/patterns/pipeline.js +948 -0
- package/plugins/deslop/lib/patterns/review-patterns.js +558 -0
- package/plugins/deslop/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/deslop/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/deslop/lib/perf/analyzer/index.js +22 -0
- package/plugins/deslop/lib/perf/argument-parser.js +105 -0
- package/plugins/deslop/lib/perf/baseline-comparator.js +50 -0
- package/plugins/deslop/lib/perf/baseline-store.js +127 -0
- package/plugins/deslop/lib/perf/benchmark-runner.js +399 -0
- package/plugins/deslop/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/deslop/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/deslop/lib/perf/checkpoint.js +123 -0
- package/plugins/deslop/lib/perf/code-paths.js +86 -0
- package/plugins/deslop/lib/perf/consolidation.js +37 -0
- package/plugins/deslop/lib/perf/constraint-runner.js +71 -0
- package/plugins/deslop/lib/perf/experiment-runner.js +32 -0
- package/plugins/deslop/lib/perf/index.js +41 -0
- package/plugins/deslop/lib/perf/investigation-state.js +875 -0
- package/plugins/deslop/lib/perf/optimization-runner.js +79 -0
- package/plugins/deslop/lib/perf/profilers/go.js +22 -0
- package/plugins/deslop/lib/perf/profilers/index.js +46 -0
- package/plugins/deslop/lib/perf/profilers/java.js +23 -0
- package/plugins/deslop/lib/perf/profilers/node.js +27 -0
- package/plugins/deslop/lib/perf/profilers/python.js +23 -0
- package/plugins/deslop/lib/perf/profilers/rust.js +23 -0
- package/plugins/deslop/lib/perf/profiling-runner.js +56 -0
- package/plugins/deslop/lib/perf/schemas.js +140 -0
- package/plugins/deslop/lib/platform/detect-platform.js +413 -0
- package/plugins/deslop/lib/platform/detection-configs.js +93 -0
- package/plugins/deslop/lib/platform/state-dir.js +132 -0
- package/plugins/deslop/lib/platform/verify-tools.js +182 -0
- package/plugins/deslop/lib/repo-map/cache.js +152 -0
- package/plugins/deslop/lib/repo-map/index.js +222 -0
- package/plugins/deslop/lib/repo-map/installer.js +212 -0
- package/plugins/deslop/lib/repo-map/queries/go.js +27 -0
- package/plugins/deslop/lib/repo-map/queries/index.js +100 -0
- package/plugins/deslop/lib/repo-map/queries/java.js +38 -0
- package/plugins/deslop/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/deslop/lib/repo-map/queries/python.js +24 -0
- package/plugins/deslop/lib/repo-map/queries/rust.js +73 -0
- package/plugins/deslop/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/deslop/lib/repo-map/runner.js +1165 -0
- package/plugins/deslop/lib/repo-map/updater.js +474 -0
- package/plugins/deslop/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/deslop/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/deslop/lib/schemas/validator.js +247 -0
- package/plugins/deslop/lib/sources/custom-handler.js +199 -0
- package/plugins/deslop/lib/sources/policy-questions.js +246 -0
- package/plugins/deslop/lib/sources/source-cache.js +165 -0
- package/plugins/deslop/lib/state/workflow-state.js +575 -0
- package/plugins/deslop/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/deslop/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/deslop/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/deslop/lib/types/index.d.ts +84 -0
- package/plugins/deslop/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/deslop/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/deslop/lib/utils/atomic-write.js +94 -0
- package/plugins/deslop/lib/utils/cache-manager.js +159 -0
- package/plugins/deslop/lib/utils/context-optimizer.js +300 -0
- package/plugins/deslop/lib/utils/deprecation.js +37 -0
- package/plugins/deslop/lib/utils/shell-escape.js +88 -0
- package/plugins/deslop/references/slop-categories.md +122 -0
- package/plugins/deslop/scripts/detect.js +134 -0
- package/plugins/deslop/skills/deslop/SKILL.md +204 -0
- package/plugins/drift-detect/.claude-plugin/plugin.json +23 -0
- package/plugins/drift-detect/agents/plan-synthesizer.md +225 -0
- package/plugins/drift-detect/commands/drift-detect.md +269 -0
- package/plugins/drift-detect/lib/adapter-transforms.js +278 -0
- package/plugins/drift-detect/lib/collectors/codebase.js +392 -0
- package/plugins/drift-detect/lib/collectors/docs-patterns.js +713 -0
- package/plugins/drift-detect/lib/collectors/documentation.js +219 -0
- package/plugins/drift-detect/lib/collectors/github.js +266 -0
- package/plugins/drift-detect/lib/collectors/index.js +126 -0
- package/plugins/drift-detect/lib/config/index.js +14 -0
- package/plugins/drift-detect/lib/cross-platform/index.js +539 -0
- package/plugins/drift-detect/lib/discovery/index.js +352 -0
- package/plugins/drift-detect/lib/drift-detect/collectors.js +37 -0
- package/plugins/drift-detect/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/drift-detect/lib/enhance/agent-patterns.js +571 -0
- package/plugins/drift-detect/lib/enhance/auto-suppression.js +622 -0
- package/plugins/drift-detect/lib/enhance/benchmark.js +417 -0
- package/plugins/drift-detect/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/drift-detect/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/drift-detect/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/drift-detect/lib/enhance/docs-patterns.js +671 -0
- package/plugins/drift-detect/lib/enhance/fixer.js +721 -0
- package/plugins/drift-detect/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/drift-detect/lib/enhance/hook-patterns.js +40 -0
- package/plugins/drift-detect/lib/enhance/index.js +127 -0
- package/plugins/drift-detect/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/drift-detect/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/drift-detect/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/drift-detect/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/drift-detect/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/drift-detect/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/drift-detect/lib/enhance/reporter.js +1348 -0
- package/plugins/drift-detect/lib/enhance/security-patterns.js +284 -0
- package/plugins/drift-detect/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/drift-detect/lib/enhance/skill-patterns.js +147 -0
- package/plugins/drift-detect/lib/enhance/suppression.js +352 -0
- package/plugins/drift-detect/lib/enhance/tool-patterns.js +373 -0
- package/plugins/drift-detect/lib/index.js +270 -0
- package/plugins/drift-detect/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/drift-detect/lib/patterns/pipeline.js +948 -0
- package/plugins/drift-detect/lib/patterns/review-patterns.js +558 -0
- package/plugins/drift-detect/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/drift-detect/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/drift-detect/lib/perf/analyzer/index.js +22 -0
- package/plugins/drift-detect/lib/perf/argument-parser.js +105 -0
- package/plugins/drift-detect/lib/perf/baseline-comparator.js +50 -0
- package/plugins/drift-detect/lib/perf/baseline-store.js +127 -0
- package/plugins/drift-detect/lib/perf/benchmark-runner.js +399 -0
- package/plugins/drift-detect/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/drift-detect/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/drift-detect/lib/perf/checkpoint.js +123 -0
- package/plugins/drift-detect/lib/perf/code-paths.js +86 -0
- package/plugins/drift-detect/lib/perf/consolidation.js +37 -0
- package/plugins/drift-detect/lib/perf/constraint-runner.js +71 -0
- package/plugins/drift-detect/lib/perf/experiment-runner.js +32 -0
- package/plugins/drift-detect/lib/perf/index.js +41 -0
- package/plugins/drift-detect/lib/perf/investigation-state.js +875 -0
- package/plugins/drift-detect/lib/perf/optimization-runner.js +79 -0
- package/plugins/drift-detect/lib/perf/profilers/go.js +22 -0
- package/plugins/drift-detect/lib/perf/profilers/index.js +46 -0
- package/plugins/drift-detect/lib/perf/profilers/java.js +23 -0
- package/plugins/drift-detect/lib/perf/profilers/node.js +27 -0
- package/plugins/drift-detect/lib/perf/profilers/python.js +23 -0
- package/plugins/drift-detect/lib/perf/profilers/rust.js +23 -0
- package/plugins/drift-detect/lib/perf/profiling-runner.js +56 -0
- package/plugins/drift-detect/lib/perf/schemas.js +140 -0
- package/plugins/drift-detect/lib/platform/detect-platform.js +413 -0
- package/plugins/drift-detect/lib/platform/detection-configs.js +93 -0
- package/plugins/drift-detect/lib/platform/state-dir.js +132 -0
- package/plugins/drift-detect/lib/platform/verify-tools.js +182 -0
- package/plugins/drift-detect/lib/repo-map/cache.js +152 -0
- package/plugins/drift-detect/lib/repo-map/index.js +222 -0
- package/plugins/drift-detect/lib/repo-map/installer.js +212 -0
- package/plugins/drift-detect/lib/repo-map/queries/go.js +27 -0
- package/plugins/drift-detect/lib/repo-map/queries/index.js +100 -0
- package/plugins/drift-detect/lib/repo-map/queries/java.js +38 -0
- package/plugins/drift-detect/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/drift-detect/lib/repo-map/queries/python.js +24 -0
- package/plugins/drift-detect/lib/repo-map/queries/rust.js +73 -0
- package/plugins/drift-detect/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/drift-detect/lib/repo-map/runner.js +1165 -0
- package/plugins/drift-detect/lib/repo-map/updater.js +474 -0
- package/plugins/drift-detect/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/drift-detect/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/drift-detect/lib/schemas/validator.js +247 -0
- package/plugins/drift-detect/lib/sources/custom-handler.js +199 -0
- package/plugins/drift-detect/lib/sources/policy-questions.js +246 -0
- package/plugins/drift-detect/lib/sources/source-cache.js +165 -0
- package/plugins/drift-detect/lib/state/workflow-state.js +575 -0
- package/plugins/drift-detect/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/drift-detect/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/drift-detect/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/drift-detect/lib/types/index.d.ts +84 -0
- package/plugins/drift-detect/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/drift-detect/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/drift-detect/lib/utils/atomic-write.js +94 -0
- package/plugins/drift-detect/lib/utils/cache-manager.js +159 -0
- package/plugins/drift-detect/lib/utils/context-optimizer.js +300 -0
- package/plugins/drift-detect/lib/utils/deprecation.js +37 -0
- package/plugins/drift-detect/lib/utils/shell-escape.js +88 -0
- package/plugins/drift-detect/skills/drift-analysis/SKILL.md +324 -0
- package/plugins/enhance/.claude-plugin/plugin.json +20 -0
- package/plugins/enhance/agents/agent-enhancer.md +64 -0
- package/plugins/enhance/agents/claudemd-enhancer.md +65 -0
- package/plugins/enhance/agents/cross-file-enhancer.md +54 -0
- package/plugins/enhance/agents/docs-enhancer.md +64 -0
- package/plugins/enhance/agents/hooks-enhancer.md +64 -0
- package/plugins/enhance/agents/plugin-enhancer.md +63 -0
- package/plugins/enhance/agents/prompt-enhancer.md +58 -0
- package/plugins/enhance/agents/skills-enhancer.md +64 -0
- package/plugins/enhance/commands/enhance.md +178 -0
- package/plugins/enhance/lib/adapter-transforms.js +278 -0
- package/plugins/enhance/lib/collectors/codebase.js +392 -0
- package/plugins/enhance/lib/collectors/docs-patterns.js +713 -0
- package/plugins/enhance/lib/collectors/documentation.js +219 -0
- package/plugins/enhance/lib/collectors/github.js +266 -0
- package/plugins/enhance/lib/collectors/index.js +126 -0
- package/plugins/enhance/lib/config/index.js +14 -0
- package/plugins/enhance/lib/cross-platform/index.js +539 -0
- package/plugins/enhance/lib/discovery/index.js +352 -0
- package/plugins/enhance/lib/drift-detect/collectors.js +37 -0
- package/plugins/enhance/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/enhance/lib/enhance/agent-patterns.js +571 -0
- package/plugins/enhance/lib/enhance/auto-suppression.js +622 -0
- package/plugins/enhance/lib/enhance/benchmark.js +417 -0
- package/plugins/enhance/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/enhance/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/enhance/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/enhance/lib/enhance/docs-patterns.js +671 -0
- package/plugins/enhance/lib/enhance/fixer.js +721 -0
- package/plugins/enhance/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/enhance/lib/enhance/hook-patterns.js +40 -0
- package/plugins/enhance/lib/enhance/index.js +127 -0
- package/plugins/enhance/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/enhance/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/enhance/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/enhance/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/enhance/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/enhance/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/enhance/lib/enhance/reporter.js +1348 -0
- package/plugins/enhance/lib/enhance/security-patterns.js +284 -0
- package/plugins/enhance/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/enhance/lib/enhance/skill-patterns.js +147 -0
- package/plugins/enhance/lib/enhance/suppression.js +352 -0
- package/plugins/enhance/lib/enhance/tool-patterns.js +373 -0
- package/plugins/enhance/lib/index.js +270 -0
- package/plugins/enhance/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/enhance/lib/patterns/pipeline.js +948 -0
- package/plugins/enhance/lib/patterns/review-patterns.js +558 -0
- package/plugins/enhance/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/enhance/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/enhance/lib/perf/analyzer/index.js +22 -0
- package/plugins/enhance/lib/perf/argument-parser.js +105 -0
- package/plugins/enhance/lib/perf/baseline-comparator.js +50 -0
- package/plugins/enhance/lib/perf/baseline-store.js +127 -0
- package/plugins/enhance/lib/perf/benchmark-runner.js +399 -0
- package/plugins/enhance/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/enhance/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/enhance/lib/perf/checkpoint.js +123 -0
- package/plugins/enhance/lib/perf/code-paths.js +86 -0
- package/plugins/enhance/lib/perf/consolidation.js +37 -0
- package/plugins/enhance/lib/perf/constraint-runner.js +71 -0
- package/plugins/enhance/lib/perf/experiment-runner.js +32 -0
- package/plugins/enhance/lib/perf/index.js +41 -0
- package/plugins/enhance/lib/perf/investigation-state.js +875 -0
- package/plugins/enhance/lib/perf/optimization-runner.js +79 -0
- package/plugins/enhance/lib/perf/profilers/go.js +22 -0
- package/plugins/enhance/lib/perf/profilers/index.js +46 -0
- package/plugins/enhance/lib/perf/profilers/java.js +23 -0
- package/plugins/enhance/lib/perf/profilers/node.js +27 -0
- package/plugins/enhance/lib/perf/profilers/python.js +23 -0
- package/plugins/enhance/lib/perf/profilers/rust.js +23 -0
- package/plugins/enhance/lib/perf/profiling-runner.js +56 -0
- package/plugins/enhance/lib/perf/schemas.js +140 -0
- package/plugins/enhance/lib/platform/detect-platform.js +413 -0
- package/plugins/enhance/lib/platform/detection-configs.js +93 -0
- package/plugins/enhance/lib/platform/state-dir.js +132 -0
- package/plugins/enhance/lib/platform/verify-tools.js +182 -0
- package/plugins/enhance/lib/repo-map/cache.js +152 -0
- package/plugins/enhance/lib/repo-map/index.js +222 -0
- package/plugins/enhance/lib/repo-map/installer.js +212 -0
- package/plugins/enhance/lib/repo-map/queries/go.js +27 -0
- package/plugins/enhance/lib/repo-map/queries/index.js +100 -0
- package/plugins/enhance/lib/repo-map/queries/java.js +38 -0
- package/plugins/enhance/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/enhance/lib/repo-map/queries/python.js +24 -0
- package/plugins/enhance/lib/repo-map/queries/rust.js +73 -0
- package/plugins/enhance/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/enhance/lib/repo-map/runner.js +1165 -0
- package/plugins/enhance/lib/repo-map/updater.js +474 -0
- package/plugins/enhance/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/enhance/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/enhance/lib/schemas/validator.js +247 -0
- package/plugins/enhance/lib/sources/custom-handler.js +199 -0
- package/plugins/enhance/lib/sources/policy-questions.js +246 -0
- package/plugins/enhance/lib/sources/source-cache.js +165 -0
- package/plugins/enhance/lib/state/workflow-state.js +575 -0
- package/plugins/enhance/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/enhance/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/enhance/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/enhance/lib/types/index.d.ts +84 -0
- package/plugins/enhance/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/enhance/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/enhance/lib/utils/atomic-write.js +94 -0
- package/plugins/enhance/lib/utils/cache-manager.js +159 -0
- package/plugins/enhance/lib/utils/context-optimizer.js +300 -0
- package/plugins/enhance/lib/utils/deprecation.js +37 -0
- package/plugins/enhance/lib/utils/shell-escape.js +88 -0
- package/plugins/enhance/skills/enhance-agent-prompts/SKILL.md +277 -0
- package/plugins/enhance/skills/enhance-claude-memory/SKILL.md +387 -0
- package/plugins/enhance/skills/enhance-cross-file/SKILL.md +110 -0
- package/plugins/enhance/skills/enhance-docs/SKILL.md +298 -0
- package/plugins/enhance/skills/enhance-hooks/SKILL.md +554 -0
- package/plugins/enhance/skills/enhance-orchestrator/SKILL.md +255 -0
- package/plugins/enhance/skills/enhance-plugins/SKILL.md +319 -0
- package/plugins/enhance/skills/enhance-prompts/SKILL.md +340 -0
- package/plugins/enhance/skills/enhance-skills/SKILL.md +436 -0
- package/plugins/learn/.claude-plugin/plugin.json +21 -0
- package/plugins/learn/agents/learn-agent.md +331 -0
- package/plugins/learn/commands/learn.md +190 -0
- package/plugins/learn/lib/adapter-transforms.js +278 -0
- package/plugins/learn/lib/collectors/codebase.js +392 -0
- package/plugins/learn/lib/collectors/docs-patterns.js +713 -0
- package/plugins/learn/lib/collectors/documentation.js +219 -0
- package/plugins/learn/lib/collectors/github.js +266 -0
- package/plugins/learn/lib/collectors/index.js +126 -0
- package/plugins/learn/lib/config/index.js +14 -0
- package/plugins/learn/lib/cross-platform/index.js +539 -0
- package/plugins/learn/lib/discovery/index.js +352 -0
- package/plugins/learn/lib/drift-detect/collectors.js +37 -0
- package/plugins/learn/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/learn/lib/enhance/agent-patterns.js +571 -0
- package/plugins/learn/lib/enhance/auto-suppression.js +622 -0
- package/plugins/learn/lib/enhance/benchmark.js +417 -0
- package/plugins/learn/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/learn/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/learn/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/learn/lib/enhance/docs-patterns.js +671 -0
- package/plugins/learn/lib/enhance/fixer.js +721 -0
- package/plugins/learn/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/learn/lib/enhance/hook-patterns.js +40 -0
- package/plugins/learn/lib/enhance/index.js +127 -0
- package/plugins/learn/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/learn/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/learn/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/learn/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/learn/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/learn/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/learn/lib/enhance/reporter.js +1348 -0
- package/plugins/learn/lib/enhance/security-patterns.js +284 -0
- package/plugins/learn/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/learn/lib/enhance/skill-patterns.js +147 -0
- package/plugins/learn/lib/enhance/suppression.js +352 -0
- package/plugins/learn/lib/enhance/tool-patterns.js +373 -0
- package/plugins/learn/lib/index.js +270 -0
- package/plugins/learn/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/learn/lib/patterns/pipeline.js +948 -0
- package/plugins/learn/lib/patterns/review-patterns.js +558 -0
- package/plugins/learn/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/learn/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/learn/lib/perf/analyzer/index.js +22 -0
- package/plugins/learn/lib/perf/argument-parser.js +105 -0
- package/plugins/learn/lib/perf/baseline-comparator.js +50 -0
- package/plugins/learn/lib/perf/baseline-store.js +127 -0
- package/plugins/learn/lib/perf/benchmark-runner.js +399 -0
- package/plugins/learn/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/learn/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/learn/lib/perf/checkpoint.js +123 -0
- package/plugins/learn/lib/perf/code-paths.js +86 -0
- package/plugins/learn/lib/perf/consolidation.js +37 -0
- package/plugins/learn/lib/perf/constraint-runner.js +71 -0
- package/plugins/learn/lib/perf/experiment-runner.js +32 -0
- package/plugins/learn/lib/perf/index.js +41 -0
- package/plugins/learn/lib/perf/investigation-state.js +875 -0
- package/plugins/learn/lib/perf/optimization-runner.js +79 -0
- package/plugins/learn/lib/perf/profilers/go.js +22 -0
- package/plugins/learn/lib/perf/profilers/index.js +46 -0
- package/plugins/learn/lib/perf/profilers/java.js +23 -0
- package/plugins/learn/lib/perf/profilers/node.js +27 -0
- package/plugins/learn/lib/perf/profilers/python.js +23 -0
- package/plugins/learn/lib/perf/profilers/rust.js +23 -0
- package/plugins/learn/lib/perf/profiling-runner.js +56 -0
- package/plugins/learn/lib/perf/schemas.js +140 -0
- package/plugins/learn/lib/platform/detect-platform.js +413 -0
- package/plugins/learn/lib/platform/detection-configs.js +93 -0
- package/plugins/learn/lib/platform/state-dir.js +132 -0
- package/plugins/learn/lib/platform/verify-tools.js +182 -0
- package/plugins/learn/lib/repo-map/cache.js +152 -0
- package/plugins/learn/lib/repo-map/index.js +222 -0
- package/plugins/learn/lib/repo-map/installer.js +212 -0
- package/plugins/learn/lib/repo-map/queries/go.js +27 -0
- package/plugins/learn/lib/repo-map/queries/index.js +100 -0
- package/plugins/learn/lib/repo-map/queries/java.js +38 -0
- package/plugins/learn/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/learn/lib/repo-map/queries/python.js +24 -0
- package/plugins/learn/lib/repo-map/queries/rust.js +73 -0
- package/plugins/learn/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/learn/lib/repo-map/runner.js +1165 -0
- package/plugins/learn/lib/repo-map/updater.js +474 -0
- package/plugins/learn/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/learn/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/learn/lib/schemas/validator.js +247 -0
- package/plugins/learn/lib/sources/custom-handler.js +199 -0
- package/plugins/learn/lib/sources/policy-questions.js +246 -0
- package/plugins/learn/lib/sources/source-cache.js +165 -0
- package/plugins/learn/lib/state/workflow-state.js +575 -0
- package/plugins/learn/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/learn/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/learn/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/learn/lib/types/index.d.ts +84 -0
- package/plugins/learn/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/learn/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/learn/lib/utils/atomic-write.js +94 -0
- package/plugins/learn/lib/utils/cache-manager.js +159 -0
- package/plugins/learn/lib/utils/context-optimizer.js +300 -0
- package/plugins/learn/lib/utils/deprecation.js +37 -0
- package/plugins/learn/lib/utils/shell-escape.js +88 -0
- package/plugins/learn/skills/learn/SKILL.md +349 -0
- package/plugins/next-task/.claude-plugin/plugin.json +24 -0
- package/plugins/next-task/agents/ci-fixer.md +259 -0
- package/plugins/next-task/agents/ci-monitor.md +342 -0
- package/plugins/next-task/agents/delivery-validator.md +115 -0
- package/plugins/next-task/agents/exploration-agent.md +316 -0
- package/plugins/next-task/agents/implementation-agent.md +465 -0
- package/plugins/next-task/agents/planning-agent.md +377 -0
- package/plugins/next-task/agents/simple-fixer.md +139 -0
- package/plugins/next-task/agents/task-discoverer.md +89 -0
- package/plugins/next-task/agents/test-coverage-checker.md +451 -0
- package/plugins/next-task/agents/worktree-manager.md +257 -0
- package/plugins/next-task/commands/delivery-approval.md +341 -0
- package/plugins/next-task/commands/next-task.md +547 -0
- package/plugins/next-task/hooks/hooks.json +14 -0
- package/plugins/next-task/lib/adapter-transforms.js +278 -0
- package/plugins/next-task/lib/collectors/codebase.js +392 -0
- package/plugins/next-task/lib/collectors/docs-patterns.js +713 -0
- package/plugins/next-task/lib/collectors/documentation.js +219 -0
- package/plugins/next-task/lib/collectors/github.js +266 -0
- package/plugins/next-task/lib/collectors/index.js +126 -0
- package/plugins/next-task/lib/config/index.js +14 -0
- package/plugins/next-task/lib/cross-platform/index.js +539 -0
- package/plugins/next-task/lib/discovery/index.js +352 -0
- package/plugins/next-task/lib/drift-detect/collectors.js +37 -0
- package/plugins/next-task/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/next-task/lib/enhance/agent-patterns.js +571 -0
- package/plugins/next-task/lib/enhance/auto-suppression.js +622 -0
- package/plugins/next-task/lib/enhance/benchmark.js +417 -0
- package/plugins/next-task/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/next-task/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/next-task/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/next-task/lib/enhance/docs-patterns.js +671 -0
- package/plugins/next-task/lib/enhance/fixer.js +721 -0
- package/plugins/next-task/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/next-task/lib/enhance/hook-patterns.js +40 -0
- package/plugins/next-task/lib/enhance/index.js +127 -0
- package/plugins/next-task/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/next-task/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/next-task/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/next-task/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/next-task/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/next-task/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/next-task/lib/enhance/reporter.js +1348 -0
- package/plugins/next-task/lib/enhance/security-patterns.js +284 -0
- package/plugins/next-task/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/next-task/lib/enhance/skill-patterns.js +147 -0
- package/plugins/next-task/lib/enhance/suppression.js +352 -0
- package/plugins/next-task/lib/enhance/tool-patterns.js +373 -0
- package/plugins/next-task/lib/index.js +270 -0
- package/plugins/next-task/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/next-task/lib/patterns/pipeline.js +948 -0
- package/plugins/next-task/lib/patterns/review-patterns.js +558 -0
- package/plugins/next-task/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/next-task/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/next-task/lib/perf/analyzer/index.js +22 -0
- package/plugins/next-task/lib/perf/argument-parser.js +105 -0
- package/plugins/next-task/lib/perf/baseline-comparator.js +50 -0
- package/plugins/next-task/lib/perf/baseline-store.js +127 -0
- package/plugins/next-task/lib/perf/benchmark-runner.js +399 -0
- package/plugins/next-task/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/next-task/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/next-task/lib/perf/checkpoint.js +123 -0
- package/plugins/next-task/lib/perf/code-paths.js +86 -0
- package/plugins/next-task/lib/perf/consolidation.js +37 -0
- package/plugins/next-task/lib/perf/constraint-runner.js +71 -0
- package/plugins/next-task/lib/perf/experiment-runner.js +32 -0
- package/plugins/next-task/lib/perf/index.js +41 -0
- package/plugins/next-task/lib/perf/investigation-state.js +875 -0
- package/plugins/next-task/lib/perf/optimization-runner.js +79 -0
- package/plugins/next-task/lib/perf/profilers/go.js +22 -0
- package/plugins/next-task/lib/perf/profilers/index.js +46 -0
- package/plugins/next-task/lib/perf/profilers/java.js +23 -0
- package/plugins/next-task/lib/perf/profilers/node.js +27 -0
- package/plugins/next-task/lib/perf/profilers/python.js +23 -0
- package/plugins/next-task/lib/perf/profilers/rust.js +23 -0
- package/plugins/next-task/lib/perf/profiling-runner.js +56 -0
- package/plugins/next-task/lib/perf/schemas.js +140 -0
- package/plugins/next-task/lib/platform/detect-platform.js +413 -0
- package/plugins/next-task/lib/platform/detection-configs.js +93 -0
- package/plugins/next-task/lib/platform/state-dir.js +132 -0
- package/plugins/next-task/lib/platform/verify-tools.js +182 -0
- package/plugins/next-task/lib/repo-map/cache.js +152 -0
- package/plugins/next-task/lib/repo-map/index.js +222 -0
- package/plugins/next-task/lib/repo-map/installer.js +212 -0
- package/plugins/next-task/lib/repo-map/queries/go.js +27 -0
- package/plugins/next-task/lib/repo-map/queries/index.js +100 -0
- package/plugins/next-task/lib/repo-map/queries/java.js +38 -0
- package/plugins/next-task/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/next-task/lib/repo-map/queries/python.js +24 -0
- package/plugins/next-task/lib/repo-map/queries/rust.js +73 -0
- package/plugins/next-task/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/next-task/lib/repo-map/runner.js +1165 -0
- package/plugins/next-task/lib/repo-map/updater.js +474 -0
- package/plugins/next-task/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/next-task/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/next-task/lib/schemas/validator.js +247 -0
- package/plugins/next-task/lib/sources/custom-handler.js +199 -0
- package/plugins/next-task/lib/sources/policy-questions.js +246 -0
- package/plugins/next-task/lib/sources/source-cache.js +165 -0
- package/plugins/next-task/lib/state/workflow-state.js +575 -0
- package/plugins/next-task/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/next-task/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/next-task/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/next-task/lib/types/index.d.ts +84 -0
- package/plugins/next-task/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/next-task/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/next-task/lib/utils/atomic-write.js +94 -0
- package/plugins/next-task/lib/utils/cache-manager.js +159 -0
- package/plugins/next-task/lib/utils/context-optimizer.js +300 -0
- package/plugins/next-task/lib/utils/deprecation.js +37 -0
- package/plugins/next-task/lib/utils/shell-escape.js +88 -0
- package/plugins/next-task/skills/discover-tasks/SKILL.md +191 -0
- package/plugins/next-task/skills/orchestrate-review/SKILL.md +239 -0
- package/plugins/next-task/skills/validate-delivery/SKILL.md +186 -0
- package/plugins/perf/.claude-plugin/plugin.json +20 -0
- package/plugins/perf/agents/perf-analyzer.md +43 -0
- package/plugins/perf/agents/perf-code-paths.md +16 -0
- package/plugins/perf/agents/perf-investigation-logger.md +47 -0
- package/plugins/perf/agents/perf-orchestrator.md +344 -0
- package/plugins/perf/agents/perf-theory-gatherer.md +25 -0
- package/plugins/perf/agents/perf-theory-tester.md +58 -0
- package/plugins/perf/commands/perf.md +470 -0
- package/plugins/perf/hooks/checkpoint.md +35 -0
- package/plugins/perf/hooks/constraint-tester.md +40 -0
- package/plugins/perf/lib/adapter-transforms.js +278 -0
- package/plugins/perf/lib/collectors/codebase.js +392 -0
- package/plugins/perf/lib/collectors/docs-patterns.js +713 -0
- package/plugins/perf/lib/collectors/documentation.js +219 -0
- package/plugins/perf/lib/collectors/github.js +266 -0
- package/plugins/perf/lib/collectors/index.js +126 -0
- package/plugins/perf/lib/config/index.js +14 -0
- package/plugins/perf/lib/cross-platform/index.js +539 -0
- package/plugins/perf/lib/discovery/index.js +352 -0
- package/plugins/perf/lib/drift-detect/collectors.js +37 -0
- package/plugins/perf/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/perf/lib/enhance/agent-patterns.js +571 -0
- package/plugins/perf/lib/enhance/auto-suppression.js +622 -0
- package/plugins/perf/lib/enhance/benchmark.js +417 -0
- package/plugins/perf/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/perf/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/perf/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/perf/lib/enhance/docs-patterns.js +671 -0
- package/plugins/perf/lib/enhance/fixer.js +721 -0
- package/plugins/perf/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/perf/lib/enhance/hook-patterns.js +40 -0
- package/plugins/perf/lib/enhance/index.js +127 -0
- package/plugins/perf/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/perf/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/perf/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/perf/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/perf/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/perf/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/perf/lib/enhance/reporter.js +1348 -0
- package/plugins/perf/lib/enhance/security-patterns.js +284 -0
- package/plugins/perf/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/perf/lib/enhance/skill-patterns.js +147 -0
- package/plugins/perf/lib/enhance/suppression.js +352 -0
- package/plugins/perf/lib/enhance/tool-patterns.js +373 -0
- package/plugins/perf/lib/index.js +270 -0
- package/plugins/perf/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/perf/lib/patterns/pipeline.js +948 -0
- package/plugins/perf/lib/patterns/review-patterns.js +558 -0
- package/plugins/perf/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/perf/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/perf/lib/perf/analyzer/index.js +22 -0
- package/plugins/perf/lib/perf/argument-parser.js +105 -0
- package/plugins/perf/lib/perf/baseline-comparator.js +50 -0
- package/plugins/perf/lib/perf/baseline-store.js +127 -0
- package/plugins/perf/lib/perf/benchmark-runner.js +399 -0
- package/plugins/perf/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/perf/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/perf/lib/perf/checkpoint.js +123 -0
- package/plugins/perf/lib/perf/code-paths.js +86 -0
- package/plugins/perf/lib/perf/consolidation.js +37 -0
- package/plugins/perf/lib/perf/constraint-runner.js +71 -0
- package/plugins/perf/lib/perf/experiment-runner.js +32 -0
- package/plugins/perf/lib/perf/index.js +41 -0
- package/plugins/perf/lib/perf/investigation-state.js +875 -0
- package/plugins/perf/lib/perf/optimization-runner.js +79 -0
- package/plugins/perf/lib/perf/profilers/go.js +22 -0
- package/plugins/perf/lib/perf/profilers/index.js +46 -0
- package/plugins/perf/lib/perf/profilers/java.js +23 -0
- package/plugins/perf/lib/perf/profilers/node.js +27 -0
- package/plugins/perf/lib/perf/profilers/python.js +23 -0
- package/plugins/perf/lib/perf/profilers/rust.js +23 -0
- package/plugins/perf/lib/perf/profiling-runner.js +56 -0
- package/plugins/perf/lib/perf/schemas.js +140 -0
- package/plugins/perf/lib/platform/detect-platform.js +413 -0
- package/plugins/perf/lib/platform/detection-configs.js +93 -0
- package/plugins/perf/lib/platform/state-dir.js +132 -0
- package/plugins/perf/lib/platform/verify-tools.js +182 -0
- package/plugins/perf/lib/repo-map/cache.js +152 -0
- package/plugins/perf/lib/repo-map/index.js +222 -0
- package/plugins/perf/lib/repo-map/installer.js +212 -0
- package/plugins/perf/lib/repo-map/queries/go.js +27 -0
- package/plugins/perf/lib/repo-map/queries/index.js +100 -0
- package/plugins/perf/lib/repo-map/queries/java.js +38 -0
- package/plugins/perf/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/perf/lib/repo-map/queries/python.js +24 -0
- package/plugins/perf/lib/repo-map/queries/rust.js +73 -0
- package/plugins/perf/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/perf/lib/repo-map/runner.js +1165 -0
- package/plugins/perf/lib/repo-map/updater.js +474 -0
- package/plugins/perf/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/perf/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/perf/lib/schemas/validator.js +247 -0
- package/plugins/perf/lib/sources/custom-handler.js +199 -0
- package/plugins/perf/lib/sources/policy-questions.js +246 -0
- package/plugins/perf/lib/sources/source-cache.js +165 -0
- package/plugins/perf/lib/state/workflow-state.js +575 -0
- package/plugins/perf/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/perf/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/perf/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/perf/lib/types/index.d.ts +84 -0
- package/plugins/perf/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/perf/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/perf/lib/utils/atomic-write.js +94 -0
- package/plugins/perf/lib/utils/cache-manager.js +159 -0
- package/plugins/perf/lib/utils/context-optimizer.js +300 -0
- package/plugins/perf/lib/utils/deprecation.js +37 -0
- package/plugins/perf/lib/utils/shell-escape.js +88 -0
- package/plugins/perf/skills/perf-analyzer/SKILL.md +37 -0
- package/plugins/perf/skills/perf-baseline-manager/SKILL.md +30 -0
- package/plugins/perf/skills/perf-benchmarker/SKILL.md +52 -0
- package/plugins/perf/skills/perf-code-paths/SKILL.md +32 -0
- package/plugins/perf/skills/perf-investigation-logger/SKILL.md +41 -0
- package/plugins/perf/skills/perf-profiler/SKILL.md +42 -0
- package/plugins/perf/skills/perf-theory-gatherer/SKILL.md +35 -0
- package/plugins/perf/skills/perf-theory-tester/SKILL.md +36 -0
- package/plugins/repo-map/.claude-plugin/plugin.json +22 -0
- package/plugins/repo-map/agents/map-validator.md +60 -0
- package/plugins/repo-map/commands/repo-map.md +133 -0
- package/plugins/repo-map/lib/adapter-transforms.js +278 -0
- package/plugins/repo-map/lib/collectors/codebase.js +392 -0
- package/plugins/repo-map/lib/collectors/docs-patterns.js +713 -0
- package/plugins/repo-map/lib/collectors/documentation.js +219 -0
- package/plugins/repo-map/lib/collectors/github.js +266 -0
- package/plugins/repo-map/lib/collectors/index.js +126 -0
- package/plugins/repo-map/lib/config/index.js +14 -0
- package/plugins/repo-map/lib/cross-platform/index.js +539 -0
- package/plugins/repo-map/lib/discovery/index.js +352 -0
- package/plugins/repo-map/lib/drift-detect/collectors.js +37 -0
- package/plugins/repo-map/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/repo-map/lib/enhance/agent-patterns.js +571 -0
- package/plugins/repo-map/lib/enhance/auto-suppression.js +622 -0
- package/plugins/repo-map/lib/enhance/benchmark.js +417 -0
- package/plugins/repo-map/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/repo-map/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/repo-map/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/repo-map/lib/enhance/docs-patterns.js +671 -0
- package/plugins/repo-map/lib/enhance/fixer.js +721 -0
- package/plugins/repo-map/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/repo-map/lib/enhance/hook-patterns.js +40 -0
- package/plugins/repo-map/lib/enhance/index.js +127 -0
- package/plugins/repo-map/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/repo-map/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/repo-map/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/repo-map/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/repo-map/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/repo-map/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/repo-map/lib/enhance/reporter.js +1348 -0
- package/plugins/repo-map/lib/enhance/security-patterns.js +284 -0
- package/plugins/repo-map/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/repo-map/lib/enhance/skill-patterns.js +147 -0
- package/plugins/repo-map/lib/enhance/suppression.js +352 -0
- package/plugins/repo-map/lib/enhance/tool-patterns.js +373 -0
- package/plugins/repo-map/lib/index.js +270 -0
- package/plugins/repo-map/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/repo-map/lib/patterns/pipeline.js +948 -0
- package/plugins/repo-map/lib/patterns/review-patterns.js +558 -0
- package/plugins/repo-map/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/repo-map/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/repo-map/lib/perf/analyzer/index.js +22 -0
- package/plugins/repo-map/lib/perf/argument-parser.js +105 -0
- package/plugins/repo-map/lib/perf/baseline-comparator.js +50 -0
- package/plugins/repo-map/lib/perf/baseline-store.js +127 -0
- package/plugins/repo-map/lib/perf/benchmark-runner.js +399 -0
- package/plugins/repo-map/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/repo-map/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/repo-map/lib/perf/checkpoint.js +123 -0
- package/plugins/repo-map/lib/perf/code-paths.js +86 -0
- package/plugins/repo-map/lib/perf/consolidation.js +37 -0
- package/plugins/repo-map/lib/perf/constraint-runner.js +71 -0
- package/plugins/repo-map/lib/perf/experiment-runner.js +32 -0
- package/plugins/repo-map/lib/perf/index.js +41 -0
- package/plugins/repo-map/lib/perf/investigation-state.js +875 -0
- package/plugins/repo-map/lib/perf/optimization-runner.js +79 -0
- package/plugins/repo-map/lib/perf/profilers/go.js +22 -0
- package/plugins/repo-map/lib/perf/profilers/index.js +46 -0
- package/plugins/repo-map/lib/perf/profilers/java.js +23 -0
- package/plugins/repo-map/lib/perf/profilers/node.js +27 -0
- package/plugins/repo-map/lib/perf/profilers/python.js +23 -0
- package/plugins/repo-map/lib/perf/profilers/rust.js +23 -0
- package/plugins/repo-map/lib/perf/profiling-runner.js +56 -0
- package/plugins/repo-map/lib/perf/schemas.js +140 -0
- package/plugins/repo-map/lib/platform/detect-platform.js +413 -0
- package/plugins/repo-map/lib/platform/detection-configs.js +93 -0
- package/plugins/repo-map/lib/platform/state-dir.js +132 -0
- package/plugins/repo-map/lib/platform/verify-tools.js +182 -0
- package/plugins/repo-map/lib/repo-map/cache.js +152 -0
- package/plugins/repo-map/lib/repo-map/index.js +222 -0
- package/plugins/repo-map/lib/repo-map/installer.js +212 -0
- package/plugins/repo-map/lib/repo-map/queries/go.js +27 -0
- package/plugins/repo-map/lib/repo-map/queries/index.js +100 -0
- package/plugins/repo-map/lib/repo-map/queries/java.js +38 -0
- package/plugins/repo-map/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/repo-map/lib/repo-map/queries/python.js +24 -0
- package/plugins/repo-map/lib/repo-map/queries/rust.js +73 -0
- package/plugins/repo-map/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/repo-map/lib/repo-map/runner.js +1165 -0
- package/plugins/repo-map/lib/repo-map/updater.js +474 -0
- package/plugins/repo-map/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/repo-map/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/repo-map/lib/schemas/validator.js +247 -0
- package/plugins/repo-map/lib/sources/custom-handler.js +199 -0
- package/plugins/repo-map/lib/sources/policy-questions.js +246 -0
- package/plugins/repo-map/lib/sources/source-cache.js +165 -0
- package/plugins/repo-map/lib/state/workflow-state.js +575 -0
- package/plugins/repo-map/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/repo-map/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/repo-map/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/repo-map/lib/types/index.d.ts +84 -0
- package/plugins/repo-map/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/repo-map/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/repo-map/lib/utils/atomic-write.js +94 -0
- package/plugins/repo-map/lib/utils/cache-manager.js +159 -0
- package/plugins/repo-map/lib/utils/context-optimizer.js +300 -0
- package/plugins/repo-map/lib/utils/deprecation.js +37 -0
- package/plugins/repo-map/lib/utils/shell-escape.js +88 -0
- package/plugins/repo-map/skills/repo-mapping/SKILL.md +83 -0
- package/plugins/ship/.claude-plugin/plugin.json +21 -0
- package/plugins/ship/commands/ship-ci-review-loop.md +472 -0
- package/plugins/ship/commands/ship-deployment.md +335 -0
- package/plugins/ship/commands/ship-error-handling.md +258 -0
- package/plugins/ship/commands/ship.md +492 -0
- package/plugins/ship/lib/adapter-transforms.js +278 -0
- package/plugins/ship/lib/collectors/codebase.js +392 -0
- package/plugins/ship/lib/collectors/docs-patterns.js +713 -0
- package/plugins/ship/lib/collectors/documentation.js +219 -0
- package/plugins/ship/lib/collectors/github.js +266 -0
- package/plugins/ship/lib/collectors/index.js +126 -0
- package/plugins/ship/lib/config/index.js +14 -0
- package/plugins/ship/lib/cross-platform/index.js +539 -0
- package/plugins/ship/lib/discovery/index.js +352 -0
- package/plugins/ship/lib/drift-detect/collectors.js +37 -0
- package/plugins/ship/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/ship/lib/enhance/agent-patterns.js +571 -0
- package/plugins/ship/lib/enhance/auto-suppression.js +622 -0
- package/plugins/ship/lib/enhance/benchmark.js +417 -0
- package/plugins/ship/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/ship/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/ship/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/ship/lib/enhance/docs-patterns.js +671 -0
- package/plugins/ship/lib/enhance/fixer.js +721 -0
- package/plugins/ship/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/ship/lib/enhance/hook-patterns.js +40 -0
- package/plugins/ship/lib/enhance/index.js +127 -0
- package/plugins/ship/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/ship/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/ship/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/ship/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/ship/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/ship/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/ship/lib/enhance/reporter.js +1348 -0
- package/plugins/ship/lib/enhance/security-patterns.js +284 -0
- package/plugins/ship/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/ship/lib/enhance/skill-patterns.js +147 -0
- package/plugins/ship/lib/enhance/suppression.js +352 -0
- package/plugins/ship/lib/enhance/tool-patterns.js +373 -0
- package/plugins/ship/lib/index.js +270 -0
- package/plugins/ship/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/ship/lib/patterns/pipeline.js +948 -0
- package/plugins/ship/lib/patterns/review-patterns.js +558 -0
- package/plugins/ship/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/ship/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/ship/lib/perf/analyzer/index.js +22 -0
- package/plugins/ship/lib/perf/argument-parser.js +105 -0
- package/plugins/ship/lib/perf/baseline-comparator.js +50 -0
- package/plugins/ship/lib/perf/baseline-store.js +127 -0
- package/plugins/ship/lib/perf/benchmark-runner.js +399 -0
- package/plugins/ship/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/ship/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/ship/lib/perf/checkpoint.js +123 -0
- package/plugins/ship/lib/perf/code-paths.js +86 -0
- package/plugins/ship/lib/perf/consolidation.js +37 -0
- package/plugins/ship/lib/perf/constraint-runner.js +71 -0
- package/plugins/ship/lib/perf/experiment-runner.js +32 -0
- package/plugins/ship/lib/perf/index.js +41 -0
- package/plugins/ship/lib/perf/investigation-state.js +875 -0
- package/plugins/ship/lib/perf/optimization-runner.js +79 -0
- package/plugins/ship/lib/perf/profilers/go.js +22 -0
- package/plugins/ship/lib/perf/profilers/index.js +46 -0
- package/plugins/ship/lib/perf/profilers/java.js +23 -0
- package/plugins/ship/lib/perf/profilers/node.js +27 -0
- package/plugins/ship/lib/perf/profilers/python.js +23 -0
- package/plugins/ship/lib/perf/profilers/rust.js +23 -0
- package/plugins/ship/lib/perf/profiling-runner.js +56 -0
- package/plugins/ship/lib/perf/schemas.js +140 -0
- package/plugins/ship/lib/platform/detect-platform.js +413 -0
- package/plugins/ship/lib/platform/detection-configs.js +93 -0
- package/plugins/ship/lib/platform/state-dir.js +132 -0
- package/plugins/ship/lib/platform/verify-tools.js +182 -0
- package/plugins/ship/lib/repo-map/cache.js +152 -0
- package/plugins/ship/lib/repo-map/index.js +222 -0
- package/plugins/ship/lib/repo-map/installer.js +212 -0
- package/plugins/ship/lib/repo-map/queries/go.js +27 -0
- package/plugins/ship/lib/repo-map/queries/index.js +100 -0
- package/plugins/ship/lib/repo-map/queries/java.js +38 -0
- package/plugins/ship/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/ship/lib/repo-map/queries/python.js +24 -0
- package/plugins/ship/lib/repo-map/queries/rust.js +73 -0
- package/plugins/ship/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/ship/lib/repo-map/runner.js +1165 -0
- package/plugins/ship/lib/repo-map/updater.js +474 -0
- package/plugins/ship/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/ship/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/ship/lib/schemas/validator.js +247 -0
- package/plugins/ship/lib/sources/custom-handler.js +199 -0
- package/plugins/ship/lib/sources/policy-questions.js +246 -0
- package/plugins/ship/lib/sources/source-cache.js +165 -0
- package/plugins/ship/lib/state/workflow-state.js +575 -0
- package/plugins/ship/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/ship/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/ship/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/ship/lib/types/index.d.ts +84 -0
- package/plugins/ship/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/ship/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/ship/lib/utils/atomic-write.js +94 -0
- package/plugins/ship/lib/utils/cache-manager.js +159 -0
- package/plugins/ship/lib/utils/context-optimizer.js +300 -0
- package/plugins/ship/lib/utils/deprecation.js +37 -0
- package/plugins/ship/lib/utils/shell-escape.js +88 -0
- package/plugins/sync-docs/.claude-plugin/plugin.json +20 -0
- package/plugins/sync-docs/agents/sync-docs-agent.md +154 -0
- package/plugins/sync-docs/commands/sync-docs.md +186 -0
- package/plugins/sync-docs/lib/adapter-transforms.js +278 -0
- package/plugins/sync-docs/lib/collectors/codebase.js +392 -0
- package/plugins/sync-docs/lib/collectors/docs-patterns.js +713 -0
- package/plugins/sync-docs/lib/collectors/documentation.js +219 -0
- package/plugins/sync-docs/lib/collectors/github.js +266 -0
- package/plugins/sync-docs/lib/collectors/index.js +126 -0
- package/plugins/sync-docs/lib/config/index.js +14 -0
- package/plugins/sync-docs/lib/cross-platform/index.js +539 -0
- package/plugins/sync-docs/lib/discovery/index.js +352 -0
- package/plugins/sync-docs/lib/drift-detect/collectors.js +37 -0
- package/plugins/sync-docs/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/sync-docs/lib/enhance/agent-patterns.js +571 -0
- package/plugins/sync-docs/lib/enhance/auto-suppression.js +622 -0
- package/plugins/sync-docs/lib/enhance/benchmark.js +417 -0
- package/plugins/sync-docs/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/sync-docs/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/sync-docs/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/sync-docs/lib/enhance/docs-patterns.js +671 -0
- package/plugins/sync-docs/lib/enhance/fixer.js +721 -0
- package/plugins/sync-docs/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/sync-docs/lib/enhance/hook-patterns.js +40 -0
- package/plugins/sync-docs/lib/enhance/index.js +127 -0
- package/plugins/sync-docs/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/sync-docs/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/sync-docs/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/sync-docs/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/sync-docs/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/sync-docs/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/sync-docs/lib/enhance/reporter.js +1348 -0
- package/plugins/sync-docs/lib/enhance/security-patterns.js +284 -0
- package/plugins/sync-docs/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/sync-docs/lib/enhance/skill-patterns.js +147 -0
- package/plugins/sync-docs/lib/enhance/suppression.js +352 -0
- package/plugins/sync-docs/lib/enhance/tool-patterns.js +373 -0
- package/plugins/sync-docs/lib/index.js +270 -0
- package/plugins/sync-docs/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/sync-docs/lib/patterns/pipeline.js +948 -0
- package/plugins/sync-docs/lib/patterns/review-patterns.js +558 -0
- package/plugins/sync-docs/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/sync-docs/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/sync-docs/lib/perf/analyzer/index.js +22 -0
- package/plugins/sync-docs/lib/perf/argument-parser.js +105 -0
- package/plugins/sync-docs/lib/perf/baseline-comparator.js +50 -0
- package/plugins/sync-docs/lib/perf/baseline-store.js +127 -0
- package/plugins/sync-docs/lib/perf/benchmark-runner.js +399 -0
- package/plugins/sync-docs/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/sync-docs/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/sync-docs/lib/perf/checkpoint.js +123 -0
- package/plugins/sync-docs/lib/perf/code-paths.js +86 -0
- package/plugins/sync-docs/lib/perf/consolidation.js +37 -0
- package/plugins/sync-docs/lib/perf/constraint-runner.js +71 -0
- package/plugins/sync-docs/lib/perf/experiment-runner.js +32 -0
- package/plugins/sync-docs/lib/perf/index.js +41 -0
- package/plugins/sync-docs/lib/perf/investigation-state.js +875 -0
- package/plugins/sync-docs/lib/perf/optimization-runner.js +79 -0
- package/plugins/sync-docs/lib/perf/profilers/go.js +22 -0
- package/plugins/sync-docs/lib/perf/profilers/index.js +46 -0
- package/plugins/sync-docs/lib/perf/profilers/java.js +23 -0
- package/plugins/sync-docs/lib/perf/profilers/node.js +27 -0
- package/plugins/sync-docs/lib/perf/profilers/python.js +23 -0
- package/plugins/sync-docs/lib/perf/profilers/rust.js +23 -0
- package/plugins/sync-docs/lib/perf/profiling-runner.js +56 -0
- package/plugins/sync-docs/lib/perf/schemas.js +140 -0
- package/plugins/sync-docs/lib/platform/detect-platform.js +413 -0
- package/plugins/sync-docs/lib/platform/detection-configs.js +93 -0
- package/plugins/sync-docs/lib/platform/state-dir.js +132 -0
- package/plugins/sync-docs/lib/platform/verify-tools.js +182 -0
- package/plugins/sync-docs/lib/repo-map/cache.js +152 -0
- package/plugins/sync-docs/lib/repo-map/index.js +222 -0
- package/plugins/sync-docs/lib/repo-map/installer.js +212 -0
- package/plugins/sync-docs/lib/repo-map/queries/go.js +27 -0
- package/plugins/sync-docs/lib/repo-map/queries/index.js +100 -0
- package/plugins/sync-docs/lib/repo-map/queries/java.js +38 -0
- package/plugins/sync-docs/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/sync-docs/lib/repo-map/queries/python.js +24 -0
- package/plugins/sync-docs/lib/repo-map/queries/rust.js +73 -0
- package/plugins/sync-docs/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/sync-docs/lib/repo-map/runner.js +1165 -0
- package/plugins/sync-docs/lib/repo-map/updater.js +474 -0
- package/plugins/sync-docs/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/sync-docs/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/sync-docs/lib/schemas/validator.js +247 -0
- package/plugins/sync-docs/lib/sources/custom-handler.js +199 -0
- package/plugins/sync-docs/lib/sources/policy-questions.js +246 -0
- package/plugins/sync-docs/lib/sources/source-cache.js +165 -0
- package/plugins/sync-docs/lib/state/workflow-state.js +575 -0
- package/plugins/sync-docs/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/sync-docs/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/sync-docs/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/sync-docs/lib/types/index.d.ts +84 -0
- package/plugins/sync-docs/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/sync-docs/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/sync-docs/lib/utils/atomic-write.js +94 -0
- package/plugins/sync-docs/lib/utils/cache-manager.js +159 -0
- package/plugins/sync-docs/lib/utils/context-optimizer.js +300 -0
- package/plugins/sync-docs/lib/utils/deprecation.js +37 -0
- package/plugins/sync-docs/lib/utils/shell-escape.js +88 -0
- package/plugins/sync-docs/skills/sync-docs/SKILL.md +351 -0
- package/scripts/bump-version.js +92 -0
- package/scripts/check-hardcoded-paths.js +199 -0
- package/scripts/dev-install.js +493 -0
- package/scripts/expand-templates.js +269 -0
- package/scripts/gen-adapters.js +323 -0
- package/scripts/generate-docs.js +558 -0
- package/scripts/generate-plugin-list.js +20 -0
- package/scripts/migrate-opencode.js +307 -0
- package/scripts/perf/repo-map-create.js +46 -0
- package/scripts/plugins.txt +12 -0
- package/scripts/preflight.js +1263 -0
- package/scripts/scaffold.js +490 -0
- package/scripts/setup-hooks.js +169 -0
- package/scripts/stamp-version.js +175 -0
- package/scripts/test-transform.js +85 -0
- package/scripts/validate-agent-skill-compliance.js +284 -0
- package/scripts/validate-counts.js +457 -0
- package/scripts/validate-cross-platform-docs.js +550 -0
- package/scripts/validate-opencode-install.js +182 -0
- package/site/assets/css/main.css +1525 -0
- package/site/assets/css/tokens.css +493 -0
- package/site/assets/favicon.svg +23 -0
- package/site/assets/js/main.js +801 -0
- package/site/assets/logo.png +0 -0
- package/site/assets/og-image.html +163 -0
- package/site/content.json +453 -0
- package/site/index.html +698 -0
- package/site/ux-spec.md +683 -0
- package/site/version.json +5 -0
- package/templates/agent-snippets/enhance-integration-points.md +6 -0
- package/templates/agent-snippets/enhance-skill-delegation.md +18 -0
- package/templates/agent-snippets/model-choice.md +6 -0
|
@@ -0,0 +1,1187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slop Detection Patterns
|
|
3
|
+
* Pattern library for detecting and removing AI-generated code slop
|
|
4
|
+
*
|
|
5
|
+
* @author Avi Fenesh
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Deep freeze an object for V8 optimization and immutability
|
|
11
|
+
* Optimized: uses for-of instead of forEach to avoid function call overhead
|
|
12
|
+
* @param {Object} obj - Object to freeze
|
|
13
|
+
* @returns {Object} Frozen object
|
|
14
|
+
*/
|
|
15
|
+
function deepFreeze(obj) {
|
|
16
|
+
// Freeze the object first (fast path)
|
|
17
|
+
Object.freeze(obj);
|
|
18
|
+
|
|
19
|
+
// Then recursively freeze nested objects (only if needed)
|
|
20
|
+
// Use Object.keys() for cleaner iteration over own properties
|
|
21
|
+
for (const key of Object.keys(obj)) {
|
|
22
|
+
const value = obj[key];
|
|
23
|
+
if (value && typeof value === 'object' && !(value instanceof RegExp)) {
|
|
24
|
+
deepFreeze(value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return obj;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Pre-compiled regex cache for performance (limited to prevent memory growth)
|
|
32
|
+
const MAX_PATTERN_CACHE_SIZE = 50;
|
|
33
|
+
const _compiledExcludePatterns = new Map();
|
|
34
|
+
|
|
35
|
+
// Exclude result cache for directory-level caching (limited to prevent memory growth)
|
|
36
|
+
const MAX_EXCLUDE_RESULT_CACHE_SIZE = 200;
|
|
37
|
+
const _excludeResultCache = new Map();
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Maximum allowed wildcards in a glob pattern to prevent ReDoS
|
|
41
|
+
*/
|
|
42
|
+
const MAX_GLOB_WILDCARDS = 10;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Get a compiled regex for an exclude pattern (cached)
|
|
46
|
+
* Uses safe regex construction to prevent catastrophic backtracking
|
|
47
|
+
* Optimized: uses Map.get() instead of has() + get() (eliminates redundant lookup)
|
|
48
|
+
* @param {string} pattern - Glob pattern to compile
|
|
49
|
+
* @returns {RegExp} Compiled regex
|
|
50
|
+
*/
|
|
51
|
+
function getCompiledPattern(pattern) {
|
|
52
|
+
// Try to get cached pattern (O(1) lookup)
|
|
53
|
+
let cached = _compiledExcludePatterns.get(pattern);
|
|
54
|
+
if (cached) {
|
|
55
|
+
return cached;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Enforce cache size limit using FIFO eviction
|
|
59
|
+
if (_compiledExcludePatterns.size >= MAX_PATTERN_CACHE_SIZE) {
|
|
60
|
+
const firstKey = _compiledExcludePatterns.keys().next().value;
|
|
61
|
+
_compiledExcludePatterns.delete(firstKey);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Count wildcards to prevent overly complex patterns
|
|
65
|
+
const wildcardCount = (pattern.match(/\*/g) || []).length;
|
|
66
|
+
if (wildcardCount > MAX_GLOB_WILDCARDS) {
|
|
67
|
+
// Too many wildcards - use a safe fallback that matches nothing dangerous
|
|
68
|
+
const safeRegex = /^$/;
|
|
69
|
+
_compiledExcludePatterns.set(pattern, safeRegex);
|
|
70
|
+
return safeRegex;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Escape all regex metacharacters except *
|
|
74
|
+
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
75
|
+
|
|
76
|
+
// Convert glob patterns to regex:
|
|
77
|
+
// - Both * and ** use .* for backward compatibility (patterns match anywhere in path)
|
|
78
|
+
// - ReDoS protection is provided by MAX_GLOB_WILDCARDS limit above
|
|
79
|
+
let regexStr = escaped
|
|
80
|
+
.replace(/\*\*/g, '\0GLOBSTAR\0') // Temporarily mark globstar
|
|
81
|
+
.replace(/\*/g, '.*') // Single star: match anything (backward compatible)
|
|
82
|
+
.replace(/\0GLOBSTAR\0/g, '.*'); // Globstar: match anything
|
|
83
|
+
|
|
84
|
+
regexStr = '^' + regexStr + '$';
|
|
85
|
+
const compiledRegex = new RegExp(regexStr);
|
|
86
|
+
_compiledExcludePatterns.set(pattern, compiledRegex);
|
|
87
|
+
return compiledRegex;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Helper to create secret detection pattern with common metadata
|
|
92
|
+
* Reduces duplication across similar secret patterns (all have same severity/autoFix/language)
|
|
93
|
+
* @param {RegExp} pattern - Detection regex pattern
|
|
94
|
+
* @param {string} description - Human-readable description
|
|
95
|
+
* @param {Array<string>} [additionalExcludes=[]] - Extra files to exclude beyond standard test files
|
|
96
|
+
* @returns {Object} Complete pattern object
|
|
97
|
+
*/
|
|
98
|
+
function createSecretPattern(pattern, description, additionalExcludes = []) {
|
|
99
|
+
return {
|
|
100
|
+
pattern,
|
|
101
|
+
exclude: ['*.test.*', '*.spec.*', '*.example.*', ...additionalExcludes],
|
|
102
|
+
severity: 'critical',
|
|
103
|
+
autoFix: 'flag',
|
|
104
|
+
language: null,
|
|
105
|
+
description
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Auto-fix strategies:
|
|
111
|
+
* - remove: Delete the matching line(s)
|
|
112
|
+
* - replace: Replace with suggested fix
|
|
113
|
+
* - add_logging: Add proper error logging
|
|
114
|
+
* - flag: Mark for manual review
|
|
115
|
+
* - none: Report only, no auto-fix
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
const slopPatterns = {
|
|
119
|
+
/**
|
|
120
|
+
* Console debugging in JavaScript/TypeScript
|
|
121
|
+
* IMPROVED: Only flags console.log and console.debug (actual debug statements)
|
|
122
|
+
* console.warn and console.error are legitimate for validation/error handling
|
|
123
|
+
* Excludes CLI tools, scripts, entry points that have legitimate console output
|
|
124
|
+
*/
|
|
125
|
+
console_debugging: {
|
|
126
|
+
pattern: /console\.(log|debug)\(/,
|
|
127
|
+
exclude: [
|
|
128
|
+
'*.test.*', '*.spec.*', '*.config.*',
|
|
129
|
+
'bin/**', '**/bin/**', 'scripts/**', '**/scripts/**',
|
|
130
|
+
'cli.js', '**/cli.js', '**/cli/**',
|
|
131
|
+
'**/e2e/**', '**/test/**', '**/tests/**',
|
|
132
|
+
'**/seed*.{js,ts}', '**/fixtures/**', '**/mocks/**',
|
|
133
|
+
'globalSetup.*', 'globalTeardown.*',
|
|
134
|
+
'**/*-manager.{js,ts}', '**/*Manager.{js,ts}',
|
|
135
|
+
'**/mcp-server/**', '**/index.js',
|
|
136
|
+
'**/validator.js', '**/verify-tools.js', '**/detect-platform.js' // CLI tools with stdout output
|
|
137
|
+
],
|
|
138
|
+
severity: 'medium',
|
|
139
|
+
autoFix: 'remove',
|
|
140
|
+
language: 'javascript',
|
|
141
|
+
description: 'console.log/debug statements (console.warn/error are legitimate)'
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Python debugging statements
|
|
146
|
+
*/
|
|
147
|
+
python_debugging: {
|
|
148
|
+
pattern: /(print\(|import pdb|breakpoint\(\)|import ipdb)/,
|
|
149
|
+
exclude: ['test_*.py', '*_test.py', 'conftest.py'],
|
|
150
|
+
severity: 'medium',
|
|
151
|
+
autoFix: 'remove',
|
|
152
|
+
language: 'python',
|
|
153
|
+
description: 'Debug print/breakpoint statements in production'
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Rust debugging macros
|
|
158
|
+
*/
|
|
159
|
+
rust_debugging: {
|
|
160
|
+
pattern: /(println!|dbg!|eprintln!)\(/,
|
|
161
|
+
exclude: ['*_test.rs', '*_tests.rs'],
|
|
162
|
+
severity: 'medium',
|
|
163
|
+
autoFix: 'remove',
|
|
164
|
+
language: 'rust',
|
|
165
|
+
description: 'Debug print macros in production code'
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Old TODO comments (>90 days)
|
|
170
|
+
*/
|
|
171
|
+
old_todos: {
|
|
172
|
+
pattern: /(TODO|FIXME|HACK|XXX):/,
|
|
173
|
+
exclude: [],
|
|
174
|
+
severity: 'low',
|
|
175
|
+
autoFix: 'flag',
|
|
176
|
+
language: null, // All languages
|
|
177
|
+
description: 'TODO/FIXME comments older than 90 days',
|
|
178
|
+
requiresAgeCheck: true,
|
|
179
|
+
ageThreshold: 90 // days
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Commented out code blocks
|
|
184
|
+
*/
|
|
185
|
+
commented_code: {
|
|
186
|
+
pattern: /^\s*(\/\/|#)\s*\w{5,}/,
|
|
187
|
+
exclude: [],
|
|
188
|
+
severity: 'medium',
|
|
189
|
+
autoFix: 'remove',
|
|
190
|
+
language: null,
|
|
191
|
+
description: 'Large blocks of commented-out code',
|
|
192
|
+
minConsecutiveLines: 5
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Placeholder text
|
|
197
|
+
* IMPROVED: Only matches actual placeholder content, not legitimate uses of the word "placeholder"
|
|
198
|
+
* Now requires context: comments or string literals with multiple placeholder indicators
|
|
199
|
+
*/
|
|
200
|
+
placeholder_text: {
|
|
201
|
+
pattern: /(?:\/\/|\/\*|#|["'`]).*?\b(lorem ipsum|test test test|asdf asdf|foo bar baz|replace (?:this|me)|todo:?\s+implement|this is a placeholder)/i,
|
|
202
|
+
exclude: ['*.test.*', '*.spec.*', 'README.*', '*.md', '**/slop-patterns.js', '**/slop-analyzers.js', '**/fixtures/**', '**/mocks/**'],
|
|
203
|
+
severity: 'high',
|
|
204
|
+
autoFix: 'flag',
|
|
205
|
+
language: null,
|
|
206
|
+
description: 'Placeholder text in comments/strings that should be replaced (excludes props like placeholder="...")'
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
// ============================================================================
|
|
210
|
+
// Placeholder Function Detection (#98)
|
|
211
|
+
// Detects compilable but non-functional placeholder code that linters miss
|
|
212
|
+
// ============================================================================
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* JavaScript/TypeScript: Stub return values
|
|
216
|
+
* Detects functions returning hardcoded 0, true, false, null, undefined, [], {}
|
|
217
|
+
*/
|
|
218
|
+
placeholder_stub_returns_js: {
|
|
219
|
+
// Disabled: too many false positives with simple regex
|
|
220
|
+
// Needs multi-pass analysis to detect actual stub functions (single return as only statement)
|
|
221
|
+
pattern: null,
|
|
222
|
+
exclude: ['*.test.*', '*.spec.*', '*.config.*'],
|
|
223
|
+
severity: 'low',
|
|
224
|
+
autoFix: 'flag',
|
|
225
|
+
language: 'javascript',
|
|
226
|
+
description: 'Stub function returning hardcoded value (requires multi-pass analysis)',
|
|
227
|
+
requiresMultiPass: true
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* JavaScript/TypeScript: throw Error("TODO/not implemented")
|
|
232
|
+
*/
|
|
233
|
+
placeholder_not_implemented_js: {
|
|
234
|
+
pattern: /throw\s+new\s+Error\s*\(\s*['"`].*(?:TODO|implement|not\s+impl)/i,
|
|
235
|
+
exclude: ['*.test.*', '*.spec.*'],
|
|
236
|
+
severity: 'high',
|
|
237
|
+
autoFix: 'flag',
|
|
238
|
+
language: 'javascript',
|
|
239
|
+
description: 'throw new Error("TODO: implement...") placeholder'
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* JavaScript/TypeScript: Empty function bodies
|
|
244
|
+
*/
|
|
245
|
+
placeholder_empty_function_js: {
|
|
246
|
+
pattern: /(?:function\s+\w+\s*\([^)]*\)|=>\s*)\s*\{\s*\}/,
|
|
247
|
+
exclude: ['*.test.*', '*.spec.*', '*.d.ts'],
|
|
248
|
+
severity: 'high',
|
|
249
|
+
autoFix: 'flag',
|
|
250
|
+
language: 'javascript',
|
|
251
|
+
description: 'Empty function body (placeholder)'
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Rust: todo!() and unimplemented!() macros
|
|
256
|
+
*/
|
|
257
|
+
placeholder_todo_rust: {
|
|
258
|
+
pattern: /\b(?:todo|unimplemented)!\s*\(/,
|
|
259
|
+
exclude: ['*_test.rs', '*_tests.rs', '**/tests/**'],
|
|
260
|
+
severity: 'high',
|
|
261
|
+
autoFix: 'flag',
|
|
262
|
+
language: 'rust',
|
|
263
|
+
description: 'Rust todo!() or unimplemented!() macro'
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Rust: panic!("TODO: ...") placeholder
|
|
268
|
+
*/
|
|
269
|
+
placeholder_panic_todo_rust: {
|
|
270
|
+
pattern: /\bpanic!\s*\(\s*["'].*(?:TODO|implement)/i,
|
|
271
|
+
exclude: ['*_test.rs', '*_tests.rs', '**/tests/**'],
|
|
272
|
+
severity: 'high',
|
|
273
|
+
autoFix: 'flag',
|
|
274
|
+
language: 'rust',
|
|
275
|
+
description: 'Rust panic!("TODO: ...") placeholder'
|
|
276
|
+
},
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Rust: Bare .unwrap() calls without error context
|
|
280
|
+
* Can cause panics in production - prefer:
|
|
281
|
+
* - .unwrap_or(default) / .unwrap_or_else(|| ...)
|
|
282
|
+
* - .unwrap_or_default()
|
|
283
|
+
* - .expect("descriptive message")
|
|
284
|
+
* - ? operator for propagation
|
|
285
|
+
* - .ok() / .map() / .and_then() for transformation
|
|
286
|
+
*/
|
|
287
|
+
rust_bare_unwrap: {
|
|
288
|
+
pattern: /\.unwrap\(\s*\)(?!\s*\.)/,
|
|
289
|
+
exclude: ['*_test.rs', '*_tests.rs', '**/tests/**', '**/examples/**', '**/benches/**'],
|
|
290
|
+
severity: 'medium',
|
|
291
|
+
autoFix: 'flag',
|
|
292
|
+
language: 'rust',
|
|
293
|
+
description: 'Bare .unwrap() can panic - use .expect(), .unwrap_or(), or ? operator'
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Python: raise NotImplementedError
|
|
298
|
+
*/
|
|
299
|
+
placeholder_not_implemented_py: {
|
|
300
|
+
pattern: /raise\s+NotImplementedError/,
|
|
301
|
+
exclude: ['test_*.py', '*_test.py', 'conftest.py', '**/tests/**'],
|
|
302
|
+
severity: 'high',
|
|
303
|
+
autoFix: 'flag',
|
|
304
|
+
language: 'python',
|
|
305
|
+
description: 'Python raise NotImplementedError placeholder'
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Python: Function with only pass statement
|
|
310
|
+
* Matches both single-line (def foo(): pass) and multi-line formats
|
|
311
|
+
*/
|
|
312
|
+
placeholder_pass_only_py: {
|
|
313
|
+
pattern: /def\s+\w+\s*\([^)]*\)\s*:\s*(?:pass|\n\s+pass)\s*$/m,
|
|
314
|
+
exclude: ['test_*.py', '*_test.py', 'conftest.py'],
|
|
315
|
+
severity: 'high',
|
|
316
|
+
autoFix: 'flag',
|
|
317
|
+
language: 'python',
|
|
318
|
+
description: 'Python function with only pass statement'
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Python: Function with only ellipsis (...)
|
|
323
|
+
* Matches both single-line (def foo(): ...) and multi-line formats
|
|
324
|
+
* Note: .pyi stub files legitimately use ellipsis, so excluded
|
|
325
|
+
*/
|
|
326
|
+
placeholder_ellipsis_py: {
|
|
327
|
+
pattern: /def\s+\w+\s*\([^)]*\)\s*:\s*(?:\.\.\.|\n\s+\.\.\.)\s*$/m,
|
|
328
|
+
exclude: ['*.pyi', 'test_*.py', '*_test.py'],
|
|
329
|
+
severity: 'high',
|
|
330
|
+
autoFix: 'flag',
|
|
331
|
+
language: 'python',
|
|
332
|
+
description: 'Python function with only ellipsis (...)'
|
|
333
|
+
},
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Go: panic("TODO: ...") placeholder
|
|
337
|
+
*/
|
|
338
|
+
placeholder_panic_go: {
|
|
339
|
+
pattern: /panic\s*\(\s*["'].*(?:TODO|implement|not\s+impl)/i,
|
|
340
|
+
exclude: ['*_test.go', '**/testdata/**'],
|
|
341
|
+
severity: 'high',
|
|
342
|
+
autoFix: 'flag',
|
|
343
|
+
language: 'go',
|
|
344
|
+
description: 'Go panic("TODO: ...") placeholder'
|
|
345
|
+
},
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Java: throw new UnsupportedOperationException()
|
|
349
|
+
*/
|
|
350
|
+
placeholder_unsupported_java: {
|
|
351
|
+
pattern: /throw\s+new\s+UnsupportedOperationException\s*\(/,
|
|
352
|
+
exclude: ['*Test.java', '**/test/**'],
|
|
353
|
+
severity: 'high',
|
|
354
|
+
autoFix: 'flag',
|
|
355
|
+
language: 'java',
|
|
356
|
+
description: 'Java throw new UnsupportedOperationException() placeholder'
|
|
357
|
+
},
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Empty catch blocks (JavaScript/TypeScript)
|
|
361
|
+
* Only matches truly empty catches - those with comments are intentional
|
|
362
|
+
* Pattern: catch (e) {} but NOT catch { [comment] }
|
|
363
|
+
*/
|
|
364
|
+
empty_catch_js: {
|
|
365
|
+
pattern: /catch\s*(?:\([^)]*\))?\s*\{\s*\}/,
|
|
366
|
+
exclude: ['*.test.*', '*.spec.*'],
|
|
367
|
+
severity: 'high',
|
|
368
|
+
autoFix: 'add_logging',
|
|
369
|
+
language: 'javascript',
|
|
370
|
+
description: 'Empty catch blocks without error handling or comment'
|
|
371
|
+
},
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Empty except blocks (Python)
|
|
375
|
+
*/
|
|
376
|
+
empty_except_py: {
|
|
377
|
+
pattern: /except\s*[^:]*:\s*pass\s*$/,
|
|
378
|
+
exclude: [],
|
|
379
|
+
severity: 'high',
|
|
380
|
+
autoFix: 'add_logging',
|
|
381
|
+
language: 'python',
|
|
382
|
+
description: 'Empty except blocks with just pass'
|
|
383
|
+
},
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Magic numbers in business logic
|
|
387
|
+
* DISABLED: Too many false positives - thresholds, limits, timeouts are intentional
|
|
388
|
+
* Semantic analysis needed to distinguish magic numbers from config values
|
|
389
|
+
* Use ESLint no-magic-numbers rule with ignores instead
|
|
390
|
+
*/
|
|
391
|
+
magic_numbers: {
|
|
392
|
+
pattern: null, // DISABLED - requires semantic analysis
|
|
393
|
+
exclude: [],
|
|
394
|
+
severity: 'low',
|
|
395
|
+
autoFix: 'flag',
|
|
396
|
+
language: null,
|
|
397
|
+
description: 'Magic numbers detection disabled (use ESLint no-magic-numbers instead)',
|
|
398
|
+
requiresMultiPass: true // Mark as needing semantic analysis
|
|
399
|
+
},
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Disabled linter rules
|
|
403
|
+
* IMPROVED: Lower severity - many disables have legitimate explanatory comments
|
|
404
|
+
* Flag for review but not aggressive auto-fix
|
|
405
|
+
*/
|
|
406
|
+
disabled_linter: {
|
|
407
|
+
pattern: /(eslint-disable|pylint: disable|#\s*noqa|@SuppressWarnings|#\[allow\()/,
|
|
408
|
+
exclude: ['*.test.*', '*.spec.*', '**/tests/**', '**/test/**'],
|
|
409
|
+
severity: 'low', // Reduced from medium - many disables are justified
|
|
410
|
+
autoFix: 'flag',
|
|
411
|
+
language: null,
|
|
412
|
+
description: 'Disabled linter rules (review if justified with explanatory comment)'
|
|
413
|
+
},
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Unused imports (basic pattern, language-specific tools better)
|
|
417
|
+
*/
|
|
418
|
+
unused_imports_hint: {
|
|
419
|
+
pattern: /^import .* from .* \/\/ unused$/,
|
|
420
|
+
exclude: [],
|
|
421
|
+
severity: 'low',
|
|
422
|
+
autoFix: 'remove',
|
|
423
|
+
language: null,
|
|
424
|
+
description: 'Imports marked as unused'
|
|
425
|
+
},
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Duplicate string literals (same string >5 times)
|
|
429
|
+
*/
|
|
430
|
+
duplicate_strings: {
|
|
431
|
+
pattern: null, // Requires multi-pass analysis
|
|
432
|
+
exclude: ['*.test.*', '*.spec.*'],
|
|
433
|
+
severity: 'low',
|
|
434
|
+
autoFix: 'flag',
|
|
435
|
+
language: null,
|
|
436
|
+
description: 'Duplicate string literals that should be constants',
|
|
437
|
+
requiresMultiPass: true
|
|
438
|
+
},
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Inconsistent indentation markers
|
|
442
|
+
*/
|
|
443
|
+
mixed_indentation: {
|
|
444
|
+
pattern: /^\t+ +|^ +\t+/,
|
|
445
|
+
exclude: ['Makefile', '*.mk'],
|
|
446
|
+
severity: 'low',
|
|
447
|
+
autoFix: 'replace',
|
|
448
|
+
language: null,
|
|
449
|
+
description: 'Mixed tabs and spaces'
|
|
450
|
+
},
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Trailing whitespace
|
|
454
|
+
*/
|
|
455
|
+
trailing_whitespace: {
|
|
456
|
+
pattern: /\s+$/,
|
|
457
|
+
exclude: ['*.md'], // Markdown uses trailing spaces for line breaks
|
|
458
|
+
severity: 'low',
|
|
459
|
+
autoFix: 'remove',
|
|
460
|
+
language: null,
|
|
461
|
+
description: 'Trailing whitespace at end of lines'
|
|
462
|
+
},
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Multiple consecutive blank lines
|
|
466
|
+
*/
|
|
467
|
+
multiple_blank_lines: {
|
|
468
|
+
pattern: /^\s*\n\s*\n\s*\n/,
|
|
469
|
+
exclude: [],
|
|
470
|
+
severity: 'low',
|
|
471
|
+
autoFix: 'replace',
|
|
472
|
+
language: null,
|
|
473
|
+
description: 'More than 2 consecutive blank lines'
|
|
474
|
+
},
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Hardcoded credentials patterns (expanded for comprehensive detection)
|
|
478
|
+
* IMPROVED: Better test fixture detection
|
|
479
|
+
* Excludes common false positives:
|
|
480
|
+
* - Template placeholders: ${VAR}, {{VAR}}, <VAR>
|
|
481
|
+
* - Masked/example values: xxxxxxxx, ********
|
|
482
|
+
* - Test values: TestPassword, test-csrf-token, mock credentials
|
|
483
|
+
*/
|
|
484
|
+
hardcoded_secrets: {
|
|
485
|
+
pattern: /(password|secret|api[_-]?key|token|credential|auth)[_-]?(key|token|secret|pass)?\s*[:=]\s*["'`](?!\$\{)(?!\{\{)(?!<[A-Z_])(?![x*#]{8,})(?![X*#]{8,})(?!test)(?!Test)(?!MOCK)(?!mock)(?!dummy)(?!Dummy)[^"'`\s]{8,}["'`]/i,
|
|
486
|
+
exclude: [
|
|
487
|
+
'*.test.*', '*.spec.*', '*.example.*', '*.sample.*', 'README.*', '*.md',
|
|
488
|
+
'**/fixtures/**', '**/mocks/**', '**/test/**', '**/tests/**', '**/e2e/**',
|
|
489
|
+
'**/*fixture*.{js,ts}', '**/*mock*.{js,ts}'
|
|
490
|
+
],
|
|
491
|
+
severity: 'critical',
|
|
492
|
+
autoFix: 'flag',
|
|
493
|
+
language: null,
|
|
494
|
+
description: 'Potential hardcoded credentials (excludes test/mock/example values)'
|
|
495
|
+
},
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* JWT tokens (eyJ prefix indicates base64 JSON header)
|
|
499
|
+
*/
|
|
500
|
+
jwt_tokens: createSecretPattern(
|
|
501
|
+
/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/,
|
|
502
|
+
'Hardcoded JWT token'
|
|
503
|
+
),
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* OpenAI API keys (sk-... format)
|
|
507
|
+
*/
|
|
508
|
+
openai_api_key: createSecretPattern(
|
|
509
|
+
/sk-[a-zA-Z0-9]{32,}/,
|
|
510
|
+
'Hardcoded OpenAI API key'
|
|
511
|
+
),
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* GitHub tokens (personal access tokens, fine-grained tokens, OAuth)
|
|
515
|
+
*/
|
|
516
|
+
github_token: createSecretPattern(
|
|
517
|
+
/(ghp_[a-zA-Z0-9]{36}|gho_[a-zA-Z0-9]{36}|ghu_[a-zA-Z0-9]{36}|ghs_[a-zA-Z0-9]{36}|ghr_[a-zA-Z0-9]{36}|github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59})/,
|
|
518
|
+
'Hardcoded GitHub token'
|
|
519
|
+
),
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* AWS credentials (access key IDs and secret keys)
|
|
523
|
+
*/
|
|
524
|
+
aws_credentials: createSecretPattern(
|
|
525
|
+
/(AKIA[0-9A-Z]{16}|aws_secret_access_key\s*[:=]\s*["'`][A-Za-z0-9/+=]{40}["'`])/i,
|
|
526
|
+
'Hardcoded AWS credentials'
|
|
527
|
+
),
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* Google Cloud / Firebase API keys and service accounts
|
|
531
|
+
*/
|
|
532
|
+
google_api_key: createSecretPattern(
|
|
533
|
+
/(AIza[0-9A-Za-z_-]{35}|[0-9]+-[a-z0-9_]{32}\.apps\.googleusercontent\.com)/,
|
|
534
|
+
'Hardcoded Google/Firebase API key'
|
|
535
|
+
),
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Stripe API keys (live and test)
|
|
539
|
+
*/
|
|
540
|
+
stripe_api_key: createSecretPattern(
|
|
541
|
+
/(sk_live_[a-zA-Z0-9]{24,}|sk_test_[a-zA-Z0-9]{24,}|rk_live_[a-zA-Z0-9]{24,}|rk_test_[a-zA-Z0-9]{24,})/,
|
|
542
|
+
'Hardcoded Stripe API key'
|
|
543
|
+
),
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Slack tokens (bot, user, webhook)
|
|
547
|
+
*/
|
|
548
|
+
slack_token: createSecretPattern(
|
|
549
|
+
/(xoxb-[0-9]{10,}-[0-9]{10,}-[a-zA-Z0-9]{24}|xoxp-[0-9]{10,}-[0-9]{10,}-[a-zA-Z0-9]{24}|xoxa-[0-9]{10,}-[a-zA-Z0-9]{24}|https:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]{8}\/B[A-Z0-9]{8,}\/[a-zA-Z0-9]{24})/,
|
|
550
|
+
'Hardcoded Slack token or webhook URL'
|
|
551
|
+
),
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Discord tokens and webhook URLs
|
|
555
|
+
*/
|
|
556
|
+
discord_token: createSecretPattern(
|
|
557
|
+
/(discord.*["'`][A-Za-z0-9_-]{24}\.[A-Za-z0-9_-]{6}\.[A-Za-z0-9_-]{27}["'`]|https:\/\/discord(?:app)?\.com\/api\/webhooks\/[0-9]+\/[A-Za-z0-9_-]+)/i,
|
|
558
|
+
'Hardcoded Discord token or webhook'
|
|
559
|
+
),
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* SendGrid API key
|
|
563
|
+
*/
|
|
564
|
+
sendgrid_api_key: createSecretPattern(
|
|
565
|
+
/SG\.[a-zA-Z0-9_-]{22}\.[a-zA-Z0-9_-]{43}/,
|
|
566
|
+
'Hardcoded SendGrid API key'
|
|
567
|
+
),
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Twilio credentials
|
|
571
|
+
*/
|
|
572
|
+
twilio_credentials: createSecretPattern(
|
|
573
|
+
/(AC[a-f0-9]{32}|SK[a-f0-9]{32})/,
|
|
574
|
+
'Hardcoded Twilio credentials'
|
|
575
|
+
),
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* NPM tokens
|
|
579
|
+
*/
|
|
580
|
+
npm_token: createSecretPattern(
|
|
581
|
+
/npm_[a-zA-Z0-9]{36}/,
|
|
582
|
+
'Hardcoded NPM token'
|
|
583
|
+
),
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Private keys (RSA, DSA, EC, PGP)
|
|
587
|
+
*/
|
|
588
|
+
private_key: createSecretPattern(
|
|
589
|
+
/-----BEGIN\s+(RSA\s+)?PRIVATE\s+KEY-----/,
|
|
590
|
+
'Private key in source code',
|
|
591
|
+
['*.pem.example'] // Additional excludes beyond standard test files
|
|
592
|
+
),
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Generic high-entropy strings (potential secrets)
|
|
596
|
+
*/
|
|
597
|
+
high_entropy_string: {
|
|
598
|
+
pattern: /["'`][A-Za-z0-9+/=_-]{40,}["'`]/,
|
|
599
|
+
exclude: ['*.test.*', '*.spec.*', '*.example.*', '*.lock', 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'],
|
|
600
|
+
severity: 'medium',
|
|
601
|
+
autoFix: 'flag',
|
|
602
|
+
language: null,
|
|
603
|
+
description: 'High-entropy string that may be a secret',
|
|
604
|
+
requiresEntropyCheck: true,
|
|
605
|
+
entropyThreshold: 4.5
|
|
606
|
+
},
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Process.exit in libraries
|
|
610
|
+
* DISABLED: Too many false positives in CLI tools, MCP servers, error handlers
|
|
611
|
+
* process.exit() is legitimate in entry points, CLI tools, and error boundaries
|
|
612
|
+
*/
|
|
613
|
+
process_exit: {
|
|
614
|
+
pattern: null, // DISABLED - too many legitimate uses
|
|
615
|
+
exclude: [],
|
|
616
|
+
severity: 'high',
|
|
617
|
+
autoFix: 'flag',
|
|
618
|
+
language: 'javascript',
|
|
619
|
+
description: 'process.exit() detection disabled (legitimate in CLIs, servers, error handlers)'
|
|
620
|
+
},
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Bare URLs in code (should use constants)
|
|
624
|
+
* DISABLED: Too many false positives - docs, links, comments are intentional
|
|
625
|
+
* URLs in comments/docs are not "hardcoded" in the code sense
|
|
626
|
+
*/
|
|
627
|
+
bare_urls: {
|
|
628
|
+
pattern: null, // DISABLED - too noisy
|
|
629
|
+
exclude: [],
|
|
630
|
+
severity: 'low',
|
|
631
|
+
autoFix: 'flag',
|
|
632
|
+
language: null,
|
|
633
|
+
description: 'Bare URLs detection disabled (too many false positives in docs/comments)'
|
|
634
|
+
},
|
|
635
|
+
|
|
636
|
+
// ============================================================================
|
|
637
|
+
// Doc/Code Ratio Detection (#P1-T2)
|
|
638
|
+
// Detects JSDoc blocks that are disproportionately longer than function bodies
|
|
639
|
+
// ============================================================================
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* JSDoc-to-function ratio (excessive documentation)
|
|
643
|
+
* Flags when JSDoc is >3x the length of the function body
|
|
644
|
+
* Requires multi-pass analysis since simple regex can't compute ratios
|
|
645
|
+
*/
|
|
646
|
+
doc_code_ratio_js: {
|
|
647
|
+
pattern: null, // Requires multi-pass analysis
|
|
648
|
+
exclude: ['*.test.*', '*.spec.*', '*.d.ts'],
|
|
649
|
+
severity: 'medium',
|
|
650
|
+
autoFix: 'flag',
|
|
651
|
+
language: 'javascript',
|
|
652
|
+
description: 'Documentation longer than code (JSDoc > 3x function body)',
|
|
653
|
+
requiresMultiPass: true,
|
|
654
|
+
minFunctionLines: 3, // Skip tiny functions
|
|
655
|
+
maxRatio: 3.0 // Doc can be 3x function length max
|
|
656
|
+
},
|
|
657
|
+
|
|
658
|
+
// ============================================================================
|
|
659
|
+
// Phantom Reference Detection (#P1-T3)
|
|
660
|
+
// Detects issue/PR mentions and file path references in code comments
|
|
661
|
+
// ============================================================================
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Issue/PR/iteration references in code comments
|
|
665
|
+
* ANY mention of issue/PR numbers is treated as slop - context belongs in commits
|
|
666
|
+
*/
|
|
667
|
+
issue_pr_references: {
|
|
668
|
+
pattern: /\/\/.*(?:#\d+|issue\s+#?\d+|PR\s+#?\d+|pull\s+request\s+#?\d+|fixed\s+in\s+#?\d+|closes?\s+#?\d+|resolves?\s+#?\d+|iteration\s+\d+)/i,
|
|
669
|
+
exclude: ['*.md', 'README.*', 'CHANGELOG.*', 'CONTRIBUTING.*'],
|
|
670
|
+
severity: 'medium',
|
|
671
|
+
autoFix: 'remove',
|
|
672
|
+
language: null, // Universal - all languages
|
|
673
|
+
description: 'Issue/PR/iteration references in comments (slop - remove context from code)'
|
|
674
|
+
},
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* File path references in code comments
|
|
678
|
+
* DISABLED: Too many false positives - documentation references are helpful
|
|
679
|
+
* These references add context, not slop
|
|
680
|
+
*/
|
|
681
|
+
file_path_references: {
|
|
682
|
+
pattern: null, // DISABLED - references are helpful, not slop
|
|
683
|
+
exclude: [],
|
|
684
|
+
severity: 'low',
|
|
685
|
+
autoFix: 'flag',
|
|
686
|
+
language: null,
|
|
687
|
+
description: 'File path references detection disabled (helpful context, not slop)'
|
|
688
|
+
},
|
|
689
|
+
|
|
690
|
+
// ============================================================================
|
|
691
|
+
// Verbosity Detection
|
|
692
|
+
// Detects AI preambles, marketing buzzwords, hedging language, and excessive comments
|
|
693
|
+
// ============================================================================
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* AI preamble phrases in comments
|
|
697
|
+
* Detects filler language like "Certainly!", "I'd be happy to help!"
|
|
698
|
+
*/
|
|
699
|
+
verbosity_preambles: {
|
|
700
|
+
pattern: /\/\/\s*(?:certainly|i'd\s+be\s+happy|great\s+question|absolutely|of\s+course|happy\s+to\s+help|let\s+me\s+help|i\s+can\s+help)/i,
|
|
701
|
+
exclude: ['*.test.*', '*.spec.*', '*.md'],
|
|
702
|
+
severity: 'low',
|
|
703
|
+
autoFix: 'flag',
|
|
704
|
+
language: null,
|
|
705
|
+
description: 'AI preamble phrases in comments - remove filler language'
|
|
706
|
+
},
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* Marketing buzzwords that obscure technical meaning
|
|
710
|
+
* Focus on flowery language, NOT standard SE terms like "leverage", "utilize", "orchestrate"
|
|
711
|
+
*/
|
|
712
|
+
verbosity_buzzwords: {
|
|
713
|
+
pattern: /\b(?:synergize|operationalize|paradigm\s+shift|best-in-class|world-class|cutting-edge|game-changing|holistic|revolutionary|transformative|seamless|next-generation|bleeding-edge|industry-leading)\b/i,
|
|
714
|
+
exclude: ['*.test.*', '*.spec.*', '*.md', 'CHANGELOG.*', 'README.*'],
|
|
715
|
+
severity: 'low',
|
|
716
|
+
autoFix: 'flag',
|
|
717
|
+
language: null,
|
|
718
|
+
description: 'Marketing buzzwords that obscure technical meaning'
|
|
719
|
+
},
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Hedging language in comments
|
|
723
|
+
* Indicates incomplete thinking - code should be definitive
|
|
724
|
+
*/
|
|
725
|
+
verbosity_hedging: {
|
|
726
|
+
pattern: /\/\/.*\b(?:it'?s?\s+worth\s+noting|generally\s+speaking|more\s+or\s+less|arguably|perhaps|possibly|might\s+be|should\s+work|i\s+think|i\s+believe|probably|maybe)\b/i,
|
|
727
|
+
exclude: ['*.test.*', '*.spec.*'],
|
|
728
|
+
severity: 'low',
|
|
729
|
+
autoFix: 'flag',
|
|
730
|
+
language: null,
|
|
731
|
+
description: 'Hedging language in comments - be direct'
|
|
732
|
+
},
|
|
733
|
+
|
|
734
|
+
/**
|
|
735
|
+
* Excessive inline comments (comment-to-code ratio)
|
|
736
|
+
* Flags when inline comments exceed maxCommentRatio times the code lines
|
|
737
|
+
* Requires multi-pass analysis for ratio computation
|
|
738
|
+
*/
|
|
739
|
+
verbosity_ratio: {
|
|
740
|
+
pattern: null, // Requires multi-pass analysis
|
|
741
|
+
requiresMultiPass: true,
|
|
742
|
+
exclude: ['*.test.*', '*.spec.*', '*.md', '*.d.ts'],
|
|
743
|
+
severity: 'medium',
|
|
744
|
+
autoFix: 'flag',
|
|
745
|
+
language: null,
|
|
746
|
+
description: 'Excessive inline comments (>2:1 comment-to-code ratio within function)',
|
|
747
|
+
maxCommentRatio: 2.0,
|
|
748
|
+
minCodeLines: 3
|
|
749
|
+
},
|
|
750
|
+
|
|
751
|
+
// ============================================================================
|
|
752
|
+
// Over-Engineering Detection
|
|
753
|
+
// Detects excessive complexity relative to public API surface
|
|
754
|
+
// ============================================================================
|
|
755
|
+
|
|
756
|
+
/**
|
|
757
|
+
* Over-engineering metrics (project-level analysis)
|
|
758
|
+
* Detects: file proliferation, code density, directory depth
|
|
759
|
+
* Requires multi-pass analysis - cannot be done with simple regex
|
|
760
|
+
*/
|
|
761
|
+
over_engineering_metrics: {
|
|
762
|
+
pattern: null, // Requires multi-pass analysis
|
|
763
|
+
exclude: [], // Analyzes entire project
|
|
764
|
+
severity: 'high',
|
|
765
|
+
autoFix: 'flag', // Cannot auto-fix architectural issues
|
|
766
|
+
language: null, // Universal - all languages
|
|
767
|
+
description: 'Excessive files/lines relative to public API (over-engineering indicator)',
|
|
768
|
+
requiresMultiPass: true,
|
|
769
|
+
// Thresholds for violation detection
|
|
770
|
+
fileRatioThreshold: 20, // Max 20 files per export
|
|
771
|
+
linesPerExportThreshold: 500, // Max 500 lines per export
|
|
772
|
+
depthThreshold: 4 // Max 4 directory levels
|
|
773
|
+
},
|
|
774
|
+
|
|
775
|
+
// ============================================================================
|
|
776
|
+
// Buzzword Inflation Detection
|
|
777
|
+
// Detects quality claims without supporting code evidence
|
|
778
|
+
// ============================================================================
|
|
779
|
+
|
|
780
|
+
/**
|
|
781
|
+
* Buzzword inflation (project-level analysis)
|
|
782
|
+
* Detects claims like "production-ready", "secure", "scalable" in docs/comments
|
|
783
|
+
* without supporting evidence in the codebase
|
|
784
|
+
* Requires multi-pass analysis - extracts claims, searches for evidence
|
|
785
|
+
*/
|
|
786
|
+
buzzword_inflation: {
|
|
787
|
+
pattern: null, // Requires multi-pass analysis
|
|
788
|
+
exclude: [], // Exclusions handled by analyzer (isTestFile, shouldExclude)
|
|
789
|
+
severity: 'high',
|
|
790
|
+
autoFix: 'flag', // Cannot auto-fix documentation claims
|
|
791
|
+
language: null, // Universal - all languages
|
|
792
|
+
description: 'Quality claims (production-ready, secure, scalable) without supporting code evidence',
|
|
793
|
+
requiresMultiPass: true,
|
|
794
|
+
// Minimum evidence matches required to substantiate a claim
|
|
795
|
+
minEvidenceMatches: 2
|
|
796
|
+
},
|
|
797
|
+
|
|
798
|
+
/**
|
|
799
|
+
* Infrastructure without implementation (multi-pass analysis)
|
|
800
|
+
* Detects infrastructure components (clients, connections, pools, services)
|
|
801
|
+
* that are instantiated/configured but never actually used
|
|
802
|
+
* Requires multi-pass - scans for setup patterns, then verifies usage
|
|
803
|
+
*/
|
|
804
|
+
infrastructure_without_implementation: {
|
|
805
|
+
pattern: null, // Requires multi-pass analysis
|
|
806
|
+
exclude: ['node_modules', 'vendor', 'dist', 'build', '*.test.*', '*.spec.*'],
|
|
807
|
+
severity: 'high',
|
|
808
|
+
autoFix: 'flag', // Cannot safely remove - may be lazy loading or future use
|
|
809
|
+
language: null, // Universal - all languages
|
|
810
|
+
description: 'Infrastructure configured but never wired (setup without usage)',
|
|
811
|
+
requiresMultiPass: true
|
|
812
|
+
},
|
|
813
|
+
|
|
814
|
+
// ============================================================================
|
|
815
|
+
// Code Smell Detection (#106)
|
|
816
|
+
// High-impact code smell patterns for maintainability and readability
|
|
817
|
+
// ============================================================================
|
|
818
|
+
|
|
819
|
+
/**
|
|
820
|
+
* Boolean Blindness - functions called with 3+ consecutive boolean literals
|
|
821
|
+
* e.g., process(true, false, true) - unclear what each boolean means
|
|
822
|
+
* Suggests using named parameters or option objects
|
|
823
|
+
*/
|
|
824
|
+
boolean_blindness: {
|
|
825
|
+
pattern: /\w+\s*\([^)]*(?:true|false)\s*,\s*(?:true|false)\s*,\s*(?:true|false)[^)]*\)/i,
|
|
826
|
+
exclude: ['*.test.*', '*.spec.*', '**/tests/**', '**/test/**'],
|
|
827
|
+
severity: 'medium',
|
|
828
|
+
autoFix: 'flag',
|
|
829
|
+
language: null, // Universal - JS, Python, Rust, Go, Java
|
|
830
|
+
description: 'Function call with 3+ boolean parameters (unclear meaning - use named params or options object)'
|
|
831
|
+
},
|
|
832
|
+
|
|
833
|
+
// REMOVED: message_chains_methods
|
|
834
|
+
// Reason: 100% false positive rate - can't distinguish fluent APIs (Zod, query builders)
|
|
835
|
+
// from actual Law of Demeter violations. Requires semantic analysis.
|
|
836
|
+
// Alternative: Use eslint-plugin-smells no-complex-chaining rule.
|
|
837
|
+
|
|
838
|
+
// REMOVED: message_chains_properties
|
|
839
|
+
// Reason: Same issue as message_chains_methods - flags config access, nested object
|
|
840
|
+
// destructuring, and other legitimate deep property patterns.
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* Mutable Globals - JavaScript/TypeScript
|
|
844
|
+
* Detects module-level mutable state using let/var with UPPERCASE names
|
|
845
|
+
* Convention: UPPERCASE = constant, but let/var makes it mutable = bug-prone
|
|
846
|
+
*/
|
|
847
|
+
mutable_globals_js: {
|
|
848
|
+
pattern: /^(?:let|var)\s+[A-Z][A-Z0-9_]*\s*=/m,
|
|
849
|
+
exclude: ['*.test.*', '*.spec.*', '*.config.*', '**/tests/**', 'constants.js', 'constants.ts'],
|
|
850
|
+
severity: 'high',
|
|
851
|
+
autoFix: 'flag',
|
|
852
|
+
language: 'javascript',
|
|
853
|
+
description: 'Mutable global with UPPERCASE name (should be const or module-scoped)'
|
|
854
|
+
},
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Mutable Globals - Python
|
|
858
|
+
* Detects module-level mutable collections assigned to UPPERCASE names
|
|
859
|
+
*/
|
|
860
|
+
mutable_globals_py: {
|
|
861
|
+
pattern: /^[A-Z][A-Z0-9_]*\s*=\s*(?:\[|\{|dict\(|list\(|set\()/m,
|
|
862
|
+
exclude: ['test_*.py', '*_test.py', 'conftest.py', '**/tests/**', 'constants.py', 'settings.py'],
|
|
863
|
+
severity: 'high',
|
|
864
|
+
autoFix: 'flag',
|
|
865
|
+
language: 'python',
|
|
866
|
+
description: 'Mutable global collection (list/dict/set) - use module-level functions or classes'
|
|
867
|
+
},
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* Dead Code Detection (multi-pass analysis)
|
|
871
|
+
* Detects unreachable code after return/throw/break/continue
|
|
872
|
+
* Requires multi-pass analysis to handle control flow
|
|
873
|
+
*/
|
|
874
|
+
dead_code: {
|
|
875
|
+
pattern: null, // Requires multi-pass analysis
|
|
876
|
+
exclude: ['*.test.*', '*.spec.*'],
|
|
877
|
+
severity: 'high',
|
|
878
|
+
autoFix: 'flag',
|
|
879
|
+
language: null,
|
|
880
|
+
description: 'Unreachable code after return/throw/break/continue',
|
|
881
|
+
requiresMultiPass: true
|
|
882
|
+
},
|
|
883
|
+
|
|
884
|
+
/**
|
|
885
|
+
* Shotgun Surgery Detection (multi-pass analysis)
|
|
886
|
+
* Detects files that frequently change together across commits
|
|
887
|
+
* Indicates tight coupling that should be refactored
|
|
888
|
+
* Requires git history analysis
|
|
889
|
+
*/
|
|
890
|
+
shotgun_surgery: {
|
|
891
|
+
pattern: null, // Requires multi-pass analysis with git
|
|
892
|
+
exclude: [],
|
|
893
|
+
severity: 'high',
|
|
894
|
+
autoFix: 'flag',
|
|
895
|
+
language: null,
|
|
896
|
+
description: 'Files frequently change together (tight coupling - consider consolidation)',
|
|
897
|
+
requiresMultiPass: true,
|
|
898
|
+
// Configuration for git analysis
|
|
899
|
+
commitLimit: 100, // Analyze last 100 commits
|
|
900
|
+
clusterThreshold: 5 // Flag clusters with 5+ files changing together
|
|
901
|
+
},
|
|
902
|
+
|
|
903
|
+
// REMOVED: feature_envy
|
|
904
|
+
// Reason: 100% false positive rate with regex. Requires AST analysis.
|
|
905
|
+
// Alternative: Use eslint-plugin-clean-code for proper feature envy detection.
|
|
906
|
+
|
|
907
|
+
/**
|
|
908
|
+
* Speculative Generality - Unused parameters (heuristic)
|
|
909
|
+
* DISABLED: Underscore-prefixed params are often intentional (callback signatures, interface compliance)
|
|
910
|
+
* Use ESLint no-unused-vars with args: 'none' or argsIgnorePattern: '^_' instead
|
|
911
|
+
*/
|
|
912
|
+
speculative_generality_unused_params: {
|
|
913
|
+
pattern: null, // DISABLED - underscore params are often intentional
|
|
914
|
+
exclude: [],
|
|
915
|
+
severity: 'low',
|
|
916
|
+
autoFix: 'flag',
|
|
917
|
+
language: 'javascript',
|
|
918
|
+
description: 'Unused params detection disabled (underscore convention is intentional)'
|
|
919
|
+
},
|
|
920
|
+
|
|
921
|
+
/**
|
|
922
|
+
* Speculative Generality - Empty interfaces (TypeScript)
|
|
923
|
+
* Detects interface definitions with no members
|
|
924
|
+
* May indicate premature abstraction
|
|
925
|
+
*/
|
|
926
|
+
speculative_generality_empty_interface: {
|
|
927
|
+
pattern: /interface\s+\w+\s*(?:<[^>]*>)?\s*\{\s*\}/,
|
|
928
|
+
exclude: ['*.test.*', '*.spec.*', '**/tests/**'],
|
|
929
|
+
severity: 'low',
|
|
930
|
+
autoFix: 'flag',
|
|
931
|
+
language: 'javascript',
|
|
932
|
+
description: 'Empty interface (heuristic - may be premature abstraction)'
|
|
933
|
+
}
|
|
934
|
+
};
|
|
935
|
+
|
|
936
|
+
// Freeze the patterns object for V8 optimization
|
|
937
|
+
deepFreeze(slopPatterns);
|
|
938
|
+
|
|
939
|
+
// ============================================================================
|
|
940
|
+
// Pre-indexed Maps for O(1) lookup performance (#18)
|
|
941
|
+
// Built once at module load time, avoiding iteration on every lookup
|
|
942
|
+
// ============================================================================
|
|
943
|
+
|
|
944
|
+
/**
|
|
945
|
+
* Pre-indexed patterns by language
|
|
946
|
+
* Key: language name (or 'universal' for language-agnostic patterns)
|
|
947
|
+
* Value: Object of pattern name -> pattern definition
|
|
948
|
+
*/
|
|
949
|
+
const _patternsByLanguage = new Map();
|
|
950
|
+
|
|
951
|
+
/**
|
|
952
|
+
* Pre-indexed patterns by severity
|
|
953
|
+
* Key: severity level ('critical', 'high', 'medium', 'low')
|
|
954
|
+
* Value: Object of pattern name -> pattern definition
|
|
955
|
+
*/
|
|
956
|
+
const _patternsBySeverity = new Map();
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* Pre-indexed patterns by autoFix strategy
|
|
960
|
+
* Key: autoFix type ('remove', 'replace', 'add_logging', 'flag', 'none')
|
|
961
|
+
* Value: Object of pattern name -> pattern definition
|
|
962
|
+
*/
|
|
963
|
+
const _patternsByAutoFix = new Map();
|
|
964
|
+
|
|
965
|
+
/**
|
|
966
|
+
* Set of all available languages for O(1) existence check
|
|
967
|
+
*/
|
|
968
|
+
const _availableLanguages = new Set();
|
|
969
|
+
|
|
970
|
+
/**
|
|
971
|
+
* Set of all available severity levels for O(1) existence check
|
|
972
|
+
*/
|
|
973
|
+
const _availableSeverities = new Set();
|
|
974
|
+
|
|
975
|
+
// Build indexes at module load time
|
|
976
|
+
(function buildIndexes() {
|
|
977
|
+
for (const [name, pattern] of Object.entries(slopPatterns)) {
|
|
978
|
+
// Index by language
|
|
979
|
+
const lang = pattern.language || 'universal';
|
|
980
|
+
if (!_patternsByLanguage.has(lang)) {
|
|
981
|
+
_patternsByLanguage.set(lang, {});
|
|
982
|
+
}
|
|
983
|
+
_patternsByLanguage.get(lang)[name] = pattern;
|
|
984
|
+
_availableLanguages.add(lang);
|
|
985
|
+
|
|
986
|
+
// Index by severity
|
|
987
|
+
const severity = pattern.severity;
|
|
988
|
+
if (!_patternsBySeverity.has(severity)) {
|
|
989
|
+
_patternsBySeverity.set(severity, {});
|
|
990
|
+
}
|
|
991
|
+
_patternsBySeverity.get(severity)[name] = pattern;
|
|
992
|
+
_availableSeverities.add(severity);
|
|
993
|
+
|
|
994
|
+
// Index by autoFix strategy
|
|
995
|
+
const autoFix = pattern.autoFix || 'none';
|
|
996
|
+
if (!_patternsByAutoFix.has(autoFix)) {
|
|
997
|
+
_patternsByAutoFix.set(autoFix, {});
|
|
998
|
+
}
|
|
999
|
+
_patternsByAutoFix.get(autoFix)[name] = pattern;
|
|
1000
|
+
}
|
|
1001
|
+
})();
|
|
1002
|
+
|
|
1003
|
+
// Freeze the index Sets
|
|
1004
|
+
Object.freeze(_availableLanguages);
|
|
1005
|
+
Object.freeze(_availableSeverities);
|
|
1006
|
+
|
|
1007
|
+
/**
|
|
1008
|
+
* Get patterns for a specific language (O(1) lookup via pre-indexed Map)
|
|
1009
|
+
* Includes universal patterns that apply to all languages
|
|
1010
|
+
* @param {string} language - Language identifier ('javascript', 'python', 'rust', etc.)
|
|
1011
|
+
* @returns {Object} Filtered patterns (language-specific + universal)
|
|
1012
|
+
*/
|
|
1013
|
+
function getPatternsForLanguage(language) {
|
|
1014
|
+
const langPatterns = _patternsByLanguage.get(language) || {};
|
|
1015
|
+
const universalPatterns = _patternsByLanguage.get('universal') || {};
|
|
1016
|
+
|
|
1017
|
+
// Merge language-specific with universal patterns
|
|
1018
|
+
return { ...universalPatterns, ...langPatterns };
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
/**
|
|
1022
|
+
* Get patterns for a specific language only (excludes universal patterns)
|
|
1023
|
+
* @param {string} language - Language identifier
|
|
1024
|
+
* @returns {Object} Language-specific patterns only
|
|
1025
|
+
*/
|
|
1026
|
+
function getPatternsForLanguageOnly(language) {
|
|
1027
|
+
return _patternsByLanguage.get(language) || {};
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
/**
|
|
1031
|
+
* Get universal patterns (apply to all languages)
|
|
1032
|
+
* @returns {Object} Universal patterns
|
|
1033
|
+
*/
|
|
1034
|
+
function getUniversalPatterns() {
|
|
1035
|
+
return _patternsByLanguage.get('universal') || {};
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
/**
|
|
1039
|
+
* Get patterns by severity (O(1) lookup via pre-indexed Map)
|
|
1040
|
+
* @param {string} severity - Severity level ('critical', 'high', 'medium', 'low')
|
|
1041
|
+
* @returns {Object} Filtered patterns
|
|
1042
|
+
*/
|
|
1043
|
+
function getPatternsBySeverity(severity) {
|
|
1044
|
+
return _patternsBySeverity.get(severity) || {};
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
/**
|
|
1048
|
+
* Get patterns by autoFix strategy (O(1) lookup via pre-indexed Map)
|
|
1049
|
+
* @param {string} autoFix - AutoFix strategy ('remove', 'replace', 'add_logging', 'flag', 'none')
|
|
1050
|
+
* @returns {Object} Filtered patterns
|
|
1051
|
+
*/
|
|
1052
|
+
function getPatternsByAutoFix(autoFix) {
|
|
1053
|
+
return _patternsByAutoFix.get(autoFix) || {};
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* Get patterns matching multiple criteria (language AND severity)
|
|
1058
|
+
* Optimized: single-pass filtering instead of chained Object.entries
|
|
1059
|
+
* @param {Object} criteria - Filter criteria
|
|
1060
|
+
* @param {string} [criteria.language] - Language filter
|
|
1061
|
+
* @param {string} [criteria.severity] - Severity filter
|
|
1062
|
+
* @param {string} [criteria.autoFix] - AutoFix strategy filter
|
|
1063
|
+
* @returns {Object} Patterns matching all criteria
|
|
1064
|
+
*/
|
|
1065
|
+
function getPatternsByCriteria(criteria = {}) {
|
|
1066
|
+
// Fast path: no criteria means return all patterns
|
|
1067
|
+
if (!criteria.language && !criteria.severity && !criteria.autoFix) {
|
|
1068
|
+
return { ...slopPatterns };
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
// Pre-fetch filter sets (O(1) Map lookups)
|
|
1072
|
+
const langPatterns = criteria.language ? getPatternsForLanguage(criteria.language) : null;
|
|
1073
|
+
const severityPatterns = criteria.severity ? getPatternsBySeverity(criteria.severity) : null;
|
|
1074
|
+
const autoFixPatterns = criteria.autoFix ? getPatternsByAutoFix(criteria.autoFix) : null;
|
|
1075
|
+
|
|
1076
|
+
// Single-pass filter: check all criteria at once
|
|
1077
|
+
const result = {};
|
|
1078
|
+
for (const [name, pattern] of Object.entries(slopPatterns)) {
|
|
1079
|
+
// Check all criteria in one pass (short-circuit on first failure)
|
|
1080
|
+
if (langPatterns && !(name in langPatterns)) continue;
|
|
1081
|
+
if (severityPatterns && !(name in severityPatterns)) continue;
|
|
1082
|
+
if (autoFixPatterns && !(name in autoFixPatterns)) continue;
|
|
1083
|
+
|
|
1084
|
+
result[name] = pattern;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
return result;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
/**
|
|
1091
|
+
* Get all available languages
|
|
1092
|
+
* @returns {Array<string>} List of language identifiers
|
|
1093
|
+
*/
|
|
1094
|
+
function getAvailableLanguages() {
|
|
1095
|
+
return Array.from(_availableLanguages);
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
/**
|
|
1099
|
+
* Get all available severity levels
|
|
1100
|
+
* @returns {Array<string>} List of severity levels
|
|
1101
|
+
*/
|
|
1102
|
+
function getAvailableSeverities() {
|
|
1103
|
+
return Array.from(_availableSeverities);
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
/**
|
|
1107
|
+
* Check if patterns exist for a language
|
|
1108
|
+
* @param {string} language - Language identifier
|
|
1109
|
+
* @returns {boolean} True if patterns exist
|
|
1110
|
+
*/
|
|
1111
|
+
function hasLanguage(language) {
|
|
1112
|
+
return _patternsByLanguage.has(language);
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
/**
|
|
1116
|
+
* Check if a file should be excluded based on pattern rules
|
|
1117
|
+
* Uses pre-compiled regex cache and result cache for performance
|
|
1118
|
+
* @param {string} filePath - File path to check
|
|
1119
|
+
* @param {Array<string>} excludePatterns - Exclude patterns
|
|
1120
|
+
* @returns {boolean} True if file should be excluded
|
|
1121
|
+
*/
|
|
1122
|
+
function isFileExcluded(filePath, excludePatterns) {
|
|
1123
|
+
if (!excludePatterns || excludePatterns.length === 0) return false;
|
|
1124
|
+
|
|
1125
|
+
// Normalize Windows backslashes to forward slashes for consistent pattern matching
|
|
1126
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
1127
|
+
|
|
1128
|
+
// Create cache key using JSON.stringify for collision-resistant format
|
|
1129
|
+
const cacheKey = JSON.stringify([normalizedPath, excludePatterns]);
|
|
1130
|
+
|
|
1131
|
+
// Check cache first (O(1) lookup)
|
|
1132
|
+
const cached = _excludeResultCache.get(cacheKey);
|
|
1133
|
+
if (cached !== undefined) return cached;
|
|
1134
|
+
|
|
1135
|
+
// Compute result
|
|
1136
|
+
const result = excludePatterns.some(pattern => {
|
|
1137
|
+
const regex = getCompiledPattern(pattern);
|
|
1138
|
+
return regex.test(normalizedPath);
|
|
1139
|
+
});
|
|
1140
|
+
|
|
1141
|
+
// Store in cache with FIFO eviction
|
|
1142
|
+
if (_excludeResultCache.size >= MAX_EXCLUDE_RESULT_CACHE_SIZE) {
|
|
1143
|
+
const firstKey = _excludeResultCache.keys().next().value;
|
|
1144
|
+
_excludeResultCache.delete(firstKey);
|
|
1145
|
+
}
|
|
1146
|
+
_excludeResultCache.set(cacheKey, result);
|
|
1147
|
+
|
|
1148
|
+
return result;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/**
|
|
1152
|
+
* Get patterns that require multi-pass analysis
|
|
1153
|
+
* These patterns have `requiresMultiPass: true` and need structural code analysis
|
|
1154
|
+
* @returns {Object} Patterns requiring multi-pass analysis
|
|
1155
|
+
*/
|
|
1156
|
+
function getMultiPassPatterns() {
|
|
1157
|
+
const result = {};
|
|
1158
|
+
for (const [name, pattern] of Object.entries(slopPatterns)) {
|
|
1159
|
+
if (pattern.requiresMultiPass) {
|
|
1160
|
+
result[name] = pattern;
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
return result;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
// Import analyzers for multi-pass patterns
|
|
1167
|
+
const analyzers = require('./slop-analyzers');
|
|
1168
|
+
|
|
1169
|
+
module.exports = {
|
|
1170
|
+
slopPatterns,
|
|
1171
|
+
// Pre-indexed lookup functions (O(1) performance)
|
|
1172
|
+
getPatternsForLanguage,
|
|
1173
|
+
getPatternsForLanguageOnly,
|
|
1174
|
+
getUniversalPatterns,
|
|
1175
|
+
getPatternsBySeverity,
|
|
1176
|
+
getPatternsByAutoFix,
|
|
1177
|
+
getPatternsByCriteria,
|
|
1178
|
+
// Metadata functions
|
|
1179
|
+
getAvailableLanguages,
|
|
1180
|
+
getAvailableSeverities,
|
|
1181
|
+
hasLanguage,
|
|
1182
|
+
// File exclusion
|
|
1183
|
+
isFileExcluded,
|
|
1184
|
+
// Multi-pass analysis
|
|
1185
|
+
getMultiPassPatterns,
|
|
1186
|
+
analyzers
|
|
1187
|
+
};
|