@trentapps/manager-protocol 1.3.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/LICENSE +21 -0
- package/README.md +639 -0
- package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
- package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureDetector.js +218 -0
- package/dist/analyzers/ArchitectureDetector.js.map +1 -0
- package/dist/analyzers/CSSAnalyzer.d.ts +284 -0
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/CSSAnalyzer.js +1180 -0
- package/dist/analyzers/CSSAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +5 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +5 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/design-system/index.d.ts +6 -0
- package/dist/design-system/index.d.ts.map +1 -0
- package/dist/design-system/index.js +6 -0
- package/dist/design-system/index.js.map +1 -0
- package/dist/design-system/tokens.d.ts +106 -0
- package/dist/design-system/tokens.d.ts.map +1 -0
- package/dist/design-system/tokens.js +554 -0
- package/dist/design-system/tokens.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +506 -0
- package/dist/engine/AuditLogger.d.ts.map +1 -0
- package/dist/engine/AuditLogger.js +1491 -0
- package/dist/engine/AuditLogger.js.map +1 -0
- package/dist/engine/GitHubApprovalManager.d.ts +123 -0
- package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
- package/dist/engine/GitHubApprovalManager.js +347 -0
- package/dist/engine/GitHubApprovalManager.js.map +1 -0
- package/dist/engine/GitHubClient.d.ts +183 -0
- package/dist/engine/GitHubClient.d.ts.map +1 -0
- package/dist/engine/GitHubClient.js +411 -0
- package/dist/engine/GitHubClient.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +81 -0
- package/dist/engine/RateLimiter.d.ts.map +1 -0
- package/dist/engine/RateLimiter.js +215 -0
- package/dist/engine/RateLimiter.js.map +1 -0
- package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
- package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
- package/dist/engine/RuleDependencyAnalyzer.js +475 -0
- package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +176 -0
- package/dist/engine/RulesEngine.d.ts.map +1 -0
- package/dist/engine/RulesEngine.js +705 -0
- package/dist/engine/RulesEngine.js.map +1 -0
- package/dist/engine/TaskManager.d.ts +174 -0
- package/dist/engine/TaskManager.d.ts.map +1 -0
- package/dist/engine/TaskManager.js +663 -0
- package/dist/engine/TaskManager.js.map +1 -0
- package/dist/engine/index.d.ts +11 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +13 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/architecture.d.ts +9 -0
- package/dist/rules/architecture.d.ts.map +1 -0
- package/dist/rules/architecture.js +322 -0
- package/dist/rules/architecture.js.map +1 -0
- package/dist/rules/azure.d.ts +7 -0
- package/dist/rules/azure.d.ts.map +1 -0
- package/dist/rules/azure.js +136 -0
- package/dist/rules/azure.js.map +1 -0
- package/dist/rules/compliance.d.ts +9 -0
- package/dist/rules/compliance.d.ts.map +1 -0
- package/dist/rules/compliance.js +286 -0
- package/dist/rules/compliance.js.map +1 -0
- package/dist/rules/condition-optimizer.d.ts +151 -0
- package/dist/rules/condition-optimizer.d.ts.map +1 -0
- package/dist/rules/condition-optimizer.js +479 -0
- package/dist/rules/condition-optimizer.js.map +1 -0
- package/dist/rules/css.d.ts +10 -0
- package/dist/rules/css.d.ts.map +1 -0
- package/dist/rules/css.js +1777 -0
- package/dist/rules/css.js.map +1 -0
- package/dist/rules/field-standards.d.ts +1172 -0
- package/dist/rules/field-standards.d.ts.map +1 -0
- package/dist/rules/field-standards.js +908 -0
- package/dist/rules/field-standards.js.map +1 -0
- package/dist/rules/flask.d.ts +7 -0
- package/dist/rules/flask.d.ts.map +1 -0
- package/dist/rules/flask.js +142 -0
- package/dist/rules/flask.js.map +1 -0
- package/dist/rules/index.d.ts +827 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +556 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/ml-ai.d.ts +7 -0
- package/dist/rules/ml-ai.d.ts.map +1 -0
- package/dist/rules/ml-ai.js +148 -0
- package/dist/rules/ml-ai.js.map +1 -0
- package/dist/rules/operational.d.ts +9 -0
- package/dist/rules/operational.d.ts.map +1 -0
- package/dist/rules/operational.js +318 -0
- package/dist/rules/operational.js.map +1 -0
- package/dist/rules/patterns.d.ts +568 -0
- package/dist/rules/patterns.d.ts.map +1 -0
- package/dist/rules/patterns.js +1359 -0
- package/dist/rules/patterns.js.map +1 -0
- package/dist/rules/security.d.ts +9 -0
- package/dist/rules/security.d.ts.map +1 -0
- package/dist/rules/security.js +848 -0
- package/dist/rules/security.js.map +1 -0
- package/dist/rules/shared-patterns.d.ts +268 -0
- package/dist/rules/shared-patterns.d.ts.map +1 -0
- package/dist/rules/shared-patterns.js +556 -0
- package/dist/rules/shared-patterns.js.map +1 -0
- package/dist/rules/storage.d.ts +13 -0
- package/dist/rules/storage.d.ts.map +1 -0
- package/dist/rules/storage.js +672 -0
- package/dist/rules/storage.js.map +1 -0
- package/dist/rules/stripe.d.ts +7 -0
- package/dist/rules/stripe.d.ts.map +1 -0
- package/dist/rules/stripe.js +133 -0
- package/dist/rules/stripe.js.map +1 -0
- package/dist/rules/testing.d.ts +7 -0
- package/dist/rules/testing.d.ts.map +1 -0
- package/dist/rules/testing.js +135 -0
- package/dist/rules/testing.js.map +1 -0
- package/dist/rules/ux.d.ts +9 -0
- package/dist/rules/ux.d.ts.map +1 -0
- package/dist/rules/ux.js +280 -0
- package/dist/rules/ux.js.map +1 -0
- package/dist/rules/websocket.d.ts +7 -0
- package/dist/rules/websocket.d.ts.map +1 -0
- package/dist/rules/websocket.js +128 -0
- package/dist/rules/websocket.js.map +1 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1967 -0
- package/dist/server.js.map +1 -0
- package/dist/supervisor/AgentSupervisor.d.ts +195 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
- package/dist/supervisor/AgentSupervisor.js +569 -0
- package/dist/supervisor/AgentSupervisor.js.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts +185 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.js +729 -0
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
- package/dist/supervisor/ProjectTracker.d.ts +210 -0
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
- package/dist/supervisor/ProjectTracker.js +709 -0
- package/dist/supervisor/ProjectTracker.js.map +1 -0
- package/dist/supervisor/index.d.ts +6 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +6 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/rule-tester.d.ts +217 -0
- package/dist/testing/rule-tester.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.d.ts +57 -0
- package/dist/testing/rule-tester.examples.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.js +375 -0
- package/dist/testing/rule-tester.examples.js.map +1 -0
- package/dist/testing/rule-tester.js +381 -0
- package/dist/testing/rule-tester.js.map +1 -0
- package/dist/testing/rule-validator.d.ts +141 -0
- package/dist/testing/rule-validator.d.ts.map +1 -0
- package/dist/testing/rule-validator.js +640 -0
- package/dist/testing/rule-validator.js.map +1 -0
- package/dist/types/index.d.ts +1282 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +386 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +86 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +171 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/rate-limiting.d.ts +268 -0
- package/dist/utils/rate-limiting.d.ts.map +1 -0
- package/dist/utils/rate-limiting.js +403 -0
- package/dist/utils/rate-limiting.js.map +1 -0
- package/dist/utils/shared.d.ts +306 -0
- package/dist/utils/shared.d.ts.map +1 -0
- package/dist/utils/shared.js +464 -0
- package/dist/utils/shared.js.map +1 -0
- package/dist/utils/shell.d.ts +22 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +29 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Change Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects when agent actions represent architectural changes that should
|
|
5
|
+
* be documented in the project's CLAUDE.md file.
|
|
6
|
+
*/
|
|
7
|
+
import path from 'path';
|
|
8
|
+
export class ArchitectureDetector {
|
|
9
|
+
/**
|
|
10
|
+
* Detect if an action represents an architectural change
|
|
11
|
+
*/
|
|
12
|
+
static detectChanges(action, _context) {
|
|
13
|
+
// Only process file-related actions
|
|
14
|
+
if (!this.isFileAction(action)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const filePath = this.extractFilePath(action);
|
|
18
|
+
if (!filePath) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
// Skip non-architectural files
|
|
22
|
+
if (this.shouldSkipFile(filePath)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
// Detect the type of architectural change
|
|
26
|
+
const componentType = this.detectComponentType(filePath);
|
|
27
|
+
if (!componentType) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
// Generate documentation suggestion
|
|
31
|
+
return this.generateDocumentation(filePath, componentType, action);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if action is file-related
|
|
35
|
+
*/
|
|
36
|
+
static isFileAction(action) {
|
|
37
|
+
const fileActions = [
|
|
38
|
+
'write_file',
|
|
39
|
+
'create_file',
|
|
40
|
+
'edit_file',
|
|
41
|
+
'modify_file',
|
|
42
|
+
'file_system'
|
|
43
|
+
];
|
|
44
|
+
return (fileActions.some(a => action.name.toLowerCase().includes(a)) ||
|
|
45
|
+
action.category === 'file_system');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract file path from action parameters
|
|
49
|
+
*/
|
|
50
|
+
static extractFilePath(action) {
|
|
51
|
+
const params = action.parameters || {};
|
|
52
|
+
// Try common parameter names
|
|
53
|
+
const pathKeys = ['filePath', 'file_path', 'path', 'file', 'target'];
|
|
54
|
+
for (const key of pathKeys) {
|
|
55
|
+
if (params[key] && typeof params[key] === 'string') {
|
|
56
|
+
return params[key];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if file should be skipped (not architectural)
|
|
63
|
+
*/
|
|
64
|
+
static shouldSkipFile(filePath) {
|
|
65
|
+
const skipPatterns = [
|
|
66
|
+
/\.test\.(ts|js|py)$/, // Test files
|
|
67
|
+
/\.spec\.(ts|js|py)$/, // Spec files
|
|
68
|
+
/\.md$/, // Documentation (except CLAUDE.md)
|
|
69
|
+
/node_modules\//, // Dependencies
|
|
70
|
+
/\.git\//, // Git files
|
|
71
|
+
/dist\//, // Build output
|
|
72
|
+
/build\//, // Build output
|
|
73
|
+
/\.env/, // Environment files
|
|
74
|
+
/package-lock\.json$/, // Lock files
|
|
75
|
+
/yarn\.lock$/, // Lock files
|
|
76
|
+
/\.gitignore$/, // Config files
|
|
77
|
+
/\.eslintrc/, // Config files
|
|
78
|
+
/tsconfig\.json$/, // Config files
|
|
79
|
+
/\.prettierrc/, // Config files
|
|
80
|
+
/README\.md$/, // READMEs
|
|
81
|
+
/LICENSE$/, // License files
|
|
82
|
+
/\.(png|jpg|jpeg|gif|svg|ico)$/ // Images
|
|
83
|
+
];
|
|
84
|
+
return skipPatterns.some(pattern => pattern.test(filePath));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Detect the type of component being added/modified
|
|
88
|
+
*/
|
|
89
|
+
static detectComponentType(filePath) {
|
|
90
|
+
const normalized = filePath.toLowerCase();
|
|
91
|
+
// Check directory structure
|
|
92
|
+
if (normalized.includes('/src/services/') || normalized.includes('/services/')) {
|
|
93
|
+
return 'service';
|
|
94
|
+
}
|
|
95
|
+
if (normalized.includes('/src/components/') || normalized.includes('/components/')) {
|
|
96
|
+
return 'component';
|
|
97
|
+
}
|
|
98
|
+
if (normalized.includes('/src/api/') || normalized.includes('/api/') ||
|
|
99
|
+
normalized.includes('/routes/') || normalized.includes('/blueprints/')) {
|
|
100
|
+
return 'api';
|
|
101
|
+
}
|
|
102
|
+
if (normalized.includes('/src/models/') || normalized.includes('/models/') ||
|
|
103
|
+
normalized.includes('/schemas/')) {
|
|
104
|
+
return 'model';
|
|
105
|
+
}
|
|
106
|
+
if (normalized.includes('/src/utils/') || normalized.includes('/utils/') ||
|
|
107
|
+
normalized.includes('/helpers/')) {
|
|
108
|
+
return 'utility';
|
|
109
|
+
}
|
|
110
|
+
if (normalized.includes('/src/middleware/') || normalized.includes('/middleware/')) {
|
|
111
|
+
return 'middleware';
|
|
112
|
+
}
|
|
113
|
+
if (normalized.includes('/src/config/') || normalized.includes('/config/')) {
|
|
114
|
+
return 'configuration';
|
|
115
|
+
}
|
|
116
|
+
if (normalized.includes('/src/integrations/') || normalized.includes('/integrations/')) {
|
|
117
|
+
return 'integration';
|
|
118
|
+
}
|
|
119
|
+
if (normalized.includes('/src/engine/') || normalized.includes('/engine/')) {
|
|
120
|
+
return 'engine';
|
|
121
|
+
}
|
|
122
|
+
if (normalized.includes('/src/analyzers/') || normalized.includes('/analyzers/')) {
|
|
123
|
+
return 'analyzer';
|
|
124
|
+
}
|
|
125
|
+
if (normalized.includes('/src/dashboard/') || normalized.includes('/dashboard/')) {
|
|
126
|
+
return 'dashboard';
|
|
127
|
+
}
|
|
128
|
+
// Check for package.json (dependency change)
|
|
129
|
+
if (normalized.endsWith('package.json')) {
|
|
130
|
+
return 'dependency';
|
|
131
|
+
}
|
|
132
|
+
// Check for specific file patterns
|
|
133
|
+
if (normalized.endsWith('server.ts') || normalized.endsWith('server.js') ||
|
|
134
|
+
normalized.endsWith('app.ts') || normalized.endsWith('app.js')) {
|
|
135
|
+
return 'main';
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate documentation suggestion
|
|
141
|
+
*/
|
|
142
|
+
static generateDocumentation(filePath, componentType, _action) {
|
|
143
|
+
const fileName = path.basename(filePath, path.extname(filePath));
|
|
144
|
+
const componentName = this.formatComponentName(fileName);
|
|
145
|
+
const templates = {
|
|
146
|
+
service: {
|
|
147
|
+
section: 'Services',
|
|
148
|
+
template: (name) => `### ${name}\n\nBrief description of what this service does.\n\n**Purpose**: Core functionality provided by this service\n\n**Key Features**:\n- Feature 1\n- Feature 2\n\n**Dependencies**: List any external services or APIs used`
|
|
149
|
+
},
|
|
150
|
+
component: {
|
|
151
|
+
section: 'Components',
|
|
152
|
+
template: (name) => `### ${name}\n\nDescription of this component's role.\n\n**Props/Interface**:\n- Prop 1: Description\n- Prop 2: Description\n\n**Usage Example**:\n\`\`\`typescript\n// Usage example here\n\`\`\``
|
|
153
|
+
},
|
|
154
|
+
api: {
|
|
155
|
+
section: 'API Endpoints',
|
|
156
|
+
template: (name) => `### ${name} Endpoints\n\n**Routes**:\n- \`GET /api/${name.toLowerCase()}\` - Description\n- \`POST /api/${name.toLowerCase()}\` - Description\n\n**Authentication**: Required/Optional\n\n**Request/Response Format**:\n\`\`\`json\n{\n "example": "data"\n}\n\`\`\``
|
|
157
|
+
},
|
|
158
|
+
model: {
|
|
159
|
+
section: 'Data Models',
|
|
160
|
+
template: (name) => `### ${name}\n\n**Schema**:\n\`\`\`typescript\ninterface ${name} {\n // Define schema here\n}\n\`\`\`\n\n**Relationships**: Related models or tables\n\n**Validation**: Key validation rules`
|
|
161
|
+
},
|
|
162
|
+
utility: {
|
|
163
|
+
section: 'Utilities',
|
|
164
|
+
template: (name) => `### ${name}\n\n**Purpose**: What this utility provides\n\n**Key Functions**:\n- \`function1()\` - Description\n- \`function2()\` - Description\n\n**Usage**: Common use cases`
|
|
165
|
+
},
|
|
166
|
+
middleware: {
|
|
167
|
+
section: 'Middleware',
|
|
168
|
+
template: (name) => `### ${name}\n\n**Purpose**: What this middleware does\n\n**Applied To**: Which routes/endpoints\n\n**Configuration**: Any configuration options`
|
|
169
|
+
},
|
|
170
|
+
integration: {
|
|
171
|
+
section: 'Integrations',
|
|
172
|
+
template: (name) => `### ${name}\n\n**External Service**: Name and purpose\n\n**API Version**: Version of external API\n\n**Configuration**:\n- API Key: How to configure\n- Endpoints: List of used endpoints\n\n**Error Handling**: How failures are handled`
|
|
173
|
+
},
|
|
174
|
+
engine: {
|
|
175
|
+
section: 'Core Engine',
|
|
176
|
+
template: (name) => `### ${name}\n\n**Purpose**: Core engine component responsibility\n\n**Key Methods**:\n- Method 1: Description\n- Method 2: Description\n\n**Integration**: How it integrates with other components`
|
|
177
|
+
},
|
|
178
|
+
analyzer: {
|
|
179
|
+
section: 'Analyzers',
|
|
180
|
+
template: (name) => `### ${name}\n\n**Analyzes**: What this analyzer evaluates\n\n**Returns**: Analysis result format\n\n**Usage**: When and how to use this analyzer`
|
|
181
|
+
},
|
|
182
|
+
dashboard: {
|
|
183
|
+
section: 'Dashboard',
|
|
184
|
+
template: (name) => `### ${name}\n\n**Feature**: Dashboard feature provided\n\n**API Endpoints**: Related endpoints\n\n**UI Components**: User interface elements`
|
|
185
|
+
},
|
|
186
|
+
dependency: {
|
|
187
|
+
section: 'Dependencies',
|
|
188
|
+
template: () => `### New Dependency Added\n\nA new dependency was added to package.json.\n\n**Review Required**: Check package.json for the new dependency and document its purpose here.`
|
|
189
|
+
},
|
|
190
|
+
main: {
|
|
191
|
+
section: 'Core Application',
|
|
192
|
+
template: (name) => `### ${name}\n\n**Purpose**: Main application entry point changes\n\n**Configuration**: New configuration options\n\n**Startup**: Changes to startup sequence`
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const template = templates[componentType] || templates.utility;
|
|
196
|
+
const suggestedContent = template.template(componentName);
|
|
197
|
+
return {
|
|
198
|
+
needed: true,
|
|
199
|
+
reason: `New ${componentType} detected at ${filePath}`,
|
|
200
|
+
suggestedContent,
|
|
201
|
+
section: template.section
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Format component name for documentation
|
|
206
|
+
*/
|
|
207
|
+
static formatComponentName(fileName) {
|
|
208
|
+
// Convert PascalCase/camelCase to Title Case
|
|
209
|
+
return fileName
|
|
210
|
+
.replace(/([A-Z])/g, ' $1') // Add space before capitals
|
|
211
|
+
.replace(/[-_]/g, ' ') // Replace dashes and underscores with spaces
|
|
212
|
+
.trim() // Remove leading/trailing spaces
|
|
213
|
+
.split(' ') // Split into words
|
|
214
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
215
|
+
.join(' ');
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=ArchitectureDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArchitectureDetector.js","sourceRoot":"","sources":["../../src/analyzers/ArchitectureDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Agent Supervisor - CSS Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes CSS rules for optimization, deduplication, and best practices.
|
|
5
|
+
*
|
|
6
|
+
* Task #44: Extensible pattern catalog system
|
|
7
|
+
* Task #51: Optimized similarity calculation with hashing/indexing
|
|
8
|
+
* Task #52: Comprehensive logging and metrics tracking
|
|
9
|
+
*/
|
|
10
|
+
export interface CSSRule {
|
|
11
|
+
selector: string;
|
|
12
|
+
properties: Record<string, string>;
|
|
13
|
+
source: 'inline' | 'style_tag' | 'external' | 'unknown';
|
|
14
|
+
file?: string;
|
|
15
|
+
line?: number;
|
|
16
|
+
specificity?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface CSSAnalysisContext {
|
|
19
|
+
newRule: CSSRule;
|
|
20
|
+
existingRules?: CSSRule[];
|
|
21
|
+
projectType?: 'spa' | 'mpa' | 'component_library' | 'website';
|
|
22
|
+
framework?: 'react' | 'vue' | 'angular' | 'svelte' | 'vanilla' | 'other';
|
|
23
|
+
hasStyleSystem?: boolean;
|
|
24
|
+
styleSystemName?: string;
|
|
25
|
+
globalStylesFile?: string;
|
|
26
|
+
componentName?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface CSSSuggestion {
|
|
29
|
+
type: 'use_existing' | 'make_global' | 'externalize' | 'remove_unused' | 'consolidate' | 'use_variable' | 'use_utility' | 'specificity_warning' | 'naming_convention';
|
|
30
|
+
severity: 'error' | 'warning' | 'info' | 'suggestion';
|
|
31
|
+
message: string;
|
|
32
|
+
details?: string;
|
|
33
|
+
existingRule?: CSSRule;
|
|
34
|
+
suggestedAction?: string;
|
|
35
|
+
codeExample?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CSSAnalysisResult {
|
|
38
|
+
ruleId: string;
|
|
39
|
+
newRule: CSSRule;
|
|
40
|
+
shouldExternalize: boolean;
|
|
41
|
+
shouldMakeGlobal: boolean;
|
|
42
|
+
duplicates: CSSRule[];
|
|
43
|
+
suggestions: CSSSuggestion[];
|
|
44
|
+
removableCandidates: CSSRule[];
|
|
45
|
+
riskScore: number;
|
|
46
|
+
summary: string;
|
|
47
|
+
metrics?: CSSAnalysisMetrics;
|
|
48
|
+
}
|
|
49
|
+
export interface CSSAnalysisMetrics {
|
|
50
|
+
rulesAnalyzed: number;
|
|
51
|
+
duplicatesFound: number;
|
|
52
|
+
suggestionsMade: number;
|
|
53
|
+
suggestionsByType: Record<string, number>;
|
|
54
|
+
suggestionsBySeverity: Record<string, number>;
|
|
55
|
+
timingMs: {
|
|
56
|
+
total: number;
|
|
57
|
+
duplicateCheck: number;
|
|
58
|
+
externalizeCheck: number;
|
|
59
|
+
globalCheck: number;
|
|
60
|
+
variableCheck: number;
|
|
61
|
+
utilityCheck: number;
|
|
62
|
+
specificityCheck: number;
|
|
63
|
+
namingCheck: number;
|
|
64
|
+
removableCheck: number;
|
|
65
|
+
};
|
|
66
|
+
cacheHits: number;
|
|
67
|
+
cacheMisses: number;
|
|
68
|
+
}
|
|
69
|
+
export interface CSSAnalyzerLogger {
|
|
70
|
+
debug: (message: string, data?: Record<string, unknown>) => void;
|
|
71
|
+
info: (message: string, data?: Record<string, unknown>) => void;
|
|
72
|
+
warn: (message: string, data?: Record<string, unknown>) => void;
|
|
73
|
+
error: (message: string, data?: Record<string, unknown>) => void;
|
|
74
|
+
}
|
|
75
|
+
export declare const consoleLogger: CSSAnalyzerLogger;
|
|
76
|
+
export interface CSSVariablePattern {
|
|
77
|
+
id: string;
|
|
78
|
+
pattern: RegExp;
|
|
79
|
+
type: 'color' | 'spacing' | 'font-size' | 'font-weight' | 'duration' | 'easing' | 'custom';
|
|
80
|
+
varPrefix: string;
|
|
81
|
+
minValue?: number;
|
|
82
|
+
maxValue?: number;
|
|
83
|
+
description?: string;
|
|
84
|
+
enabled: boolean;
|
|
85
|
+
}
|
|
86
|
+
export interface CSSGlobalPattern {
|
|
87
|
+
id: string;
|
|
88
|
+
properties: string[];
|
|
89
|
+
minMatches: number;
|
|
90
|
+
description?: string;
|
|
91
|
+
enabled: boolean;
|
|
92
|
+
}
|
|
93
|
+
export interface CSSReusablePattern {
|
|
94
|
+
id: string;
|
|
95
|
+
name: string;
|
|
96
|
+
requiredProperties: string[];
|
|
97
|
+
optionalProperties?: string[];
|
|
98
|
+
description?: string;
|
|
99
|
+
enabled: boolean;
|
|
100
|
+
}
|
|
101
|
+
export interface CSSUtilityMapping {
|
|
102
|
+
property: string;
|
|
103
|
+
valueMapper: (value: string) => string | null;
|
|
104
|
+
enabled: boolean;
|
|
105
|
+
}
|
|
106
|
+
export interface CSSPatternCatalog {
|
|
107
|
+
variablePatterns: CSSVariablePattern[];
|
|
108
|
+
globalPatterns: CSSGlobalPattern[];
|
|
109
|
+
reusablePatterns: CSSReusablePattern[];
|
|
110
|
+
utilityMappings: CSSUtilityMapping[];
|
|
111
|
+
}
|
|
112
|
+
export interface CSSAnalyzerOptions {
|
|
113
|
+
logger?: CSSAnalyzerLogger;
|
|
114
|
+
patternCatalog?: Partial<CSSPatternCatalog>;
|
|
115
|
+
enableMetrics?: boolean;
|
|
116
|
+
enableCaching?: boolean;
|
|
117
|
+
similarityThreshold?: number;
|
|
118
|
+
}
|
|
119
|
+
export declare class CSSAnalyzer {
|
|
120
|
+
private knownUtilityClasses;
|
|
121
|
+
private patternCatalog;
|
|
122
|
+
private _ruleIndex;
|
|
123
|
+
private _lastIndexedRules;
|
|
124
|
+
private similarityThreshold;
|
|
125
|
+
private enableCaching;
|
|
126
|
+
private logger;
|
|
127
|
+
private enableMetrics;
|
|
128
|
+
private cumulativeMetrics;
|
|
129
|
+
constructor(options?: CSSAnalyzerOptions);
|
|
130
|
+
/**
|
|
131
|
+
* Merge custom patterns with defaults
|
|
132
|
+
*/
|
|
133
|
+
private mergePatternCatalog;
|
|
134
|
+
/**
|
|
135
|
+
* Add a custom variable pattern
|
|
136
|
+
*/
|
|
137
|
+
addVariablePattern(pattern: CSSVariablePattern): void;
|
|
138
|
+
/**
|
|
139
|
+
* Add a custom global pattern
|
|
140
|
+
*/
|
|
141
|
+
addGlobalPattern(pattern: CSSGlobalPattern): void;
|
|
142
|
+
/**
|
|
143
|
+
* Add a custom reusable pattern
|
|
144
|
+
*/
|
|
145
|
+
addReusablePattern(pattern: CSSReusablePattern): void;
|
|
146
|
+
/**
|
|
147
|
+
* Add a custom utility mapping
|
|
148
|
+
*/
|
|
149
|
+
addUtilityMapping(mapping: CSSUtilityMapping): void;
|
|
150
|
+
/**
|
|
151
|
+
* Enable or disable a pattern by ID
|
|
152
|
+
*/
|
|
153
|
+
setPatternEnabled(patternId: string, enabled: boolean): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* Get the current pattern catalog (for inspection/debugging)
|
|
156
|
+
*/
|
|
157
|
+
getPatternCatalog(): CSSPatternCatalog;
|
|
158
|
+
/**
|
|
159
|
+
* Get cumulative metrics (Task #52)
|
|
160
|
+
*/
|
|
161
|
+
getCumulativeMetrics(): {
|
|
162
|
+
totalAnalyses: number;
|
|
163
|
+
totalRulesAnalyzed: number;
|
|
164
|
+
totalDuplicatesFound: number;
|
|
165
|
+
totalSuggestionsMade: number;
|
|
166
|
+
totalCacheHits: number;
|
|
167
|
+
totalCacheMisses: number;
|
|
168
|
+
totalTimeMs: number;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Reset cumulative metrics (Task #52)
|
|
172
|
+
*/
|
|
173
|
+
resetCumulativeMetrics(): void;
|
|
174
|
+
/**
|
|
175
|
+
* Main analysis entry point
|
|
176
|
+
*/
|
|
177
|
+
analyze(context: CSSAnalysisContext): CSSAnalysisResult;
|
|
178
|
+
private countSuggestionsByType;
|
|
179
|
+
private countSuggestionsBySeverity;
|
|
180
|
+
/**
|
|
181
|
+
* Get or build index for existing rules (Task #51: caching for performance)
|
|
182
|
+
*/
|
|
183
|
+
private getOrBuildIndex;
|
|
184
|
+
/**
|
|
185
|
+
* Compute a signature for CSS properties for fast comparison (Task #51)
|
|
186
|
+
*/
|
|
187
|
+
private computePropertySignature;
|
|
188
|
+
/**
|
|
189
|
+
* Find duplicates with optimized O(1) hash lookup + O(k) similarity check (Task #51)
|
|
190
|
+
* where k is the number of rules with similar property counts/keys
|
|
191
|
+
*/
|
|
192
|
+
private findDuplicatesOptimized;
|
|
193
|
+
/**
|
|
194
|
+
* Find removable candidates with optimized lookup (Task #51)
|
|
195
|
+
*/
|
|
196
|
+
private findRemovableCandidatesOptimized;
|
|
197
|
+
/**
|
|
198
|
+
* Clear the rule index cache (call when rules change)
|
|
199
|
+
*/
|
|
200
|
+
clearIndexCache(): void;
|
|
201
|
+
/**
|
|
202
|
+
* Find duplicate or similar CSS rules
|
|
203
|
+
* @deprecated Use findDuplicatesOptimized instead (Task #51)
|
|
204
|
+
* @internal Kept for backward compatibility - delegates to optimized version
|
|
205
|
+
*/
|
|
206
|
+
findDuplicates(newRule: CSSRule, existingRules: CSSRule[]): {
|
|
207
|
+
duplicates: CSSRule[];
|
|
208
|
+
suggestions: CSSSuggestion[];
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Check if CSS should be externalized
|
|
212
|
+
*/
|
|
213
|
+
private checkExternalization;
|
|
214
|
+
/**
|
|
215
|
+
* Check if CSS should be made global (Task #44: uses pattern catalog)
|
|
216
|
+
*/
|
|
217
|
+
private checkGlobalCandidate;
|
|
218
|
+
/**
|
|
219
|
+
* Check if a rule matches a reusable pattern from the catalog (Task #44)
|
|
220
|
+
*/
|
|
221
|
+
private matchesReusablePattern;
|
|
222
|
+
/**
|
|
223
|
+
* Check for CSS variable candidates using design system tokens
|
|
224
|
+
*/
|
|
225
|
+
private checkVariableCandidates;
|
|
226
|
+
/**
|
|
227
|
+
* Check for utility class opportunities (Task #44: uses pattern catalog)
|
|
228
|
+
*/
|
|
229
|
+
private checkUtilityOpportunities;
|
|
230
|
+
/**
|
|
231
|
+
* Check CSS specificity issues
|
|
232
|
+
*/
|
|
233
|
+
private checkSpecificity;
|
|
234
|
+
/**
|
|
235
|
+
* Check naming convention
|
|
236
|
+
*/
|
|
237
|
+
private checkNamingConvention;
|
|
238
|
+
/**
|
|
239
|
+
* Find CSS rules that can be safely removed
|
|
240
|
+
* @deprecated Use findRemovableCandidatesOptimized instead (Task #51)
|
|
241
|
+
* @internal Kept for backward compatibility - delegates to optimized version
|
|
242
|
+
*/
|
|
243
|
+
protected findRemovableCandidates(newRule: CSSRule, existingRules: CSSRule[]): CSSRule[];
|
|
244
|
+
/**
|
|
245
|
+
* Validate that a selector is well-formed and safe to process
|
|
246
|
+
*/
|
|
247
|
+
private isValidSelector;
|
|
248
|
+
/**
|
|
249
|
+
* Normalize a selector for safe analysis by removing problematic content
|
|
250
|
+
*/
|
|
251
|
+
private normalizeSelectorForAnalysis;
|
|
252
|
+
private generateRuleId;
|
|
253
|
+
private simpleHash;
|
|
254
|
+
private calculateSimilarity;
|
|
255
|
+
private calculateSpecificity;
|
|
256
|
+
/**
|
|
257
|
+
* Check if rule is a reusable pattern (Task #44: uses pattern catalog)
|
|
258
|
+
*/
|
|
259
|
+
private isReusablePattern;
|
|
260
|
+
/**
|
|
261
|
+
* Check if rule is a typography rule (Task #44: uses pattern catalog)
|
|
262
|
+
* @internal Exposed for testing - now uses pattern catalog internally
|
|
263
|
+
*/
|
|
264
|
+
protected isTypographyRule(rule: CSSRule): boolean;
|
|
265
|
+
/**
|
|
266
|
+
* Check if rule is a button pattern (Task #44: uses pattern catalog)
|
|
267
|
+
* @internal Exposed for testing - now uses pattern catalog internally
|
|
268
|
+
*/
|
|
269
|
+
protected isButtonPattern(rule: CSSRule): boolean;
|
|
270
|
+
private generateExternalizeExample;
|
|
271
|
+
private getFontWeightName;
|
|
272
|
+
private suggestBEMName;
|
|
273
|
+
private completelyOverrides;
|
|
274
|
+
private isLikelyUnused;
|
|
275
|
+
private prioritizeSuggestions;
|
|
276
|
+
private generateSummary;
|
|
277
|
+
private initializeKnownPatterns;
|
|
278
|
+
/**
|
|
279
|
+
* Map pattern catalog variable types to design token categories
|
|
280
|
+
*/
|
|
281
|
+
private mapTypeToTokenCategory;
|
|
282
|
+
}
|
|
283
|
+
export declare const cssAnalyzer: CSSAnalyzer;
|
|
284
|
+
//# sourceMappingURL=CSSAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSSAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/CSSAnalyzer.ts"],"names":[],"mappings":"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"}
|