From core-claude-plugin
Scans new/modified code against multi-mono shared libraries (@metasaver/core-utils, @metasaver/core-service-utils, @metasaver/core-components) to detect DRY violations. Use when auditing code for duplicate functions, types, or components that already exist in shared packages. Returns violation reports with suggested import replacements.
npx claudepluginhub metasaver/metasaver-marketplace --plugin core-claude-pluginThis skill uses the workspace's default tool permissions.
**Purpose:** Prevent code duplication by scanning new/modified code against multi-mono shared libraries.
Extracts duplicated code into shared utilities, components, hooks, and modules from repeated patterns across files like identical functions, UI blocks, state management, or boilerplate.
Audits JS/TS codebases for semantic function duplicates via extraction scripts and LLM intent clustering. Useful for LLM-generated code with reimplemented utilities.
Detects code duplication and clones using QuickDup CLI scanner. Identifies DRY violations and copy-pasted code by file extension to reduce codebase size and clean up redundancy.
Share bugs, ideas, or general feedback.
Purpose: Prevent code duplication by scanning new/modified code against multi-mono shared libraries.
Use when:
Target libraries (packages/):
@metasaver/core-utils - String helpers (capitalize, toKebabCase, toCamelCase), color helpers, style helpers (cn)@metasaver/core-service-utils - Service factory, middleware, auth, health checks@metasaver/core-database - Database client utilities@metasaver/core-agent-utils - Agent factory patterns@metasaver/core-mcp-utils - MCP server utilities@metasaver/core-workflow-utils - Workflow with HITLTarget components (components/):
@metasaver/core-components - Core UI: ZButton, ZCard, ZDataTable, ZErrorBoundary, ZLoading@metasaver/core-layouts - Layouts: ZAdminLayout, ZUserDropdown, useImpersonation| Violation Type | Library | Examples |
|---|---|---|
| String utilities | @metasaver/core-utils | capitalize(), toKebabCase(), toCamelCase() |
| Style utilities | @metasaver/core-utils | cn(), getColorClasses() |
| Service patterns | @metasaver/core-service-utils | createService(), authMiddleware(), healthCheck() |
| Database clients | @metasaver/core-database | createClient(), database types |
| Core UI components | @metasaver/core-components | ZButton, ZCard, ZDataTable, ZErrorBoundary |
| Layout components | @metasaver/core-layouts | ZAdminLayout, ZUserDropdown, useImpersonation |
Get list of new/modified files from git:
# Staged files
git diff --cached --name-only --diff-filter=AM
# Uncommitted changes
git diff --name-only --diff-filter=AM
# Specific branch vs main
git diff main...HEAD --name-only --diff-filter=AM
Filter to code files only: .ts, .tsx, .js, .jsx
For each modified file, extract:
export function functionName(), export const functionName = ()export type TypeName, export interface InterfaceNameexport function ComponentName(), export const ComponentName: React.FCexport const schemaName = z.object()Use Grep tool with patterns from templates/extraction-patterns.txt
For each extracted signature, check if similar exists in shared packages:
Scan multi-mono packages/:
# Search utils for function
grep -r "export.*functionName" packages/utils/src/
# Search service-utils for middleware/factory
grep -r "export.*functionName" packages/service-utils/src/
# Search database for client utilities
grep -r "export.*functionName" packages/database/src/
Scan multi-mono components/:
# Search core components
grep -r "export.*ZComponentName" components/core/src/
# Search layouts
grep -r "export.*ZLayoutName" components/layouts/src/
Use fuzzy matching for similar names (e.g., capitalize matches toCapitalize, capitalizeFirst)
If potential match found:
Comparison heuristics:
For each violation, output using format from templates/violation-report.txt:
โ VIOLATION: [file]:[line] [signature]
Duplicates: @metasaver/[package]/[module].[export]
Similarity: [score]%
FIX: import { [export] } from '@metasaver/[package]/[module]'
[Brief comparison of implementations]
For clean scans:
โ
DRY CHECK PASSED
Files scanned: [count]
Signatures checked: [count]
No duplications found
See templates/violation-report.txt for complete format specification.
Console output example:
๐ DRY CHECK: Scanning 3 modified files...
โ VIOLATION: src/utils/text.ts:5 capitalize()
Duplicates: @metasaver/core-utils.capitalize()
Similarity: 95%
FIX: import { capitalize } from '@metasaver/core-utils'
Both implementations capitalize first letter using same algorithm.
โ VIOLATION: src/components/Button.tsx:10 Button
Duplicates: @metasaver/core-components.ZButton
Similarity: 85%
FIX: import { ZButton } from '@metasaver/core-components'
Local Button component has same props and styling as ZButton.
๐ SUMMARY:
Files scanned: 3
Signatures checked: 12
Violations: 2
Clean signatures: 10
Input:
// src/utils/text.ts
export function capitalize(str: string): string {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
Output:
โ VIOLATION: src/utils/text.ts:2 capitalize()
Duplicates: @metasaver/core-utils.capitalize()
Similarity: 100%
FIX: import { capitalize } from '@metasaver/core-utils'
Input:
// src/components/Button.tsx
export function Button({ children, variant, onClick }) {
return (
<button className={buttonVariants({ variant })} onClick={onClick}>
{children}
</button>
);
}
Output:
โ VIOLATION: src/components/Button.tsx:2 Button
Duplicates: @metasaver/core-components.ZButton
Similarity: 90%
FIX: import { ZButton } from '@metasaver/core-components'
Input: 3 modified files with unique implementations
Output:
โ
DRY CHECK PASSED
Files scanned: 3
Signatures checked: 8
No duplications found
templates/extraction-patterns.txt - Regex patterns for extracting signaturestemplates/violation-report.txt - Output format specificationtemplates/scan-script.sh.template - Shell script for batch scanning| Step | Tool | Purpose |
|---|---|---|
| 1 | Bash | Run git diff to get modified files |
| 2 | Grep | Extract function/type signatures |
| 3 | Bash/Grep | Search shared library packages |
| 4 | Read | Compare implementations |
| 5 | Direct output | Format and display results |
/skill cross-cutting/coding-standards - DRY principle reference/skill cross-cutting/serena-code-reading - Code analysis workflow/skill domain/monorepo-audit - Monorepo structure validation