proagents 1.6.19 → 1.6.21
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/.claude/settings.local.json +13 -1
- package/.proagents/.cursorrules +25 -10
- package/.proagents/.windsurfrules +25 -10
- package/.proagents/AGENTS.md +30 -11
- package/.proagents/AI_INSTRUCTIONS.md +86 -30
- package/.proagents/BOLT.md +25 -10
- package/.proagents/CLAUDE.md +25 -10
- package/.proagents/GEMINI.md +25 -10
- package/.proagents/KIRO.md +25 -10
- package/.proagents/LOVABLE.md +25 -10
- package/.proagents/PROAGENTS.md +96 -343
- package/.proagents/REPLIT.md +25 -10
- package/.proagents/activity.log +1 -0
- package/.proagents/custom-commands.yaml +0 -1
- package/.proagents/docs/command-details.md +1 -2
- package/.proagents/getting-started/ai-training-setup.md +0 -1
- package/.proagents/performance/README.md +59 -0
- package/.proagents/performance/bundle-analysis.md +375 -0
- package/.proagents/performance/load-testing.md +563 -0
- package/.proagents/performance/runtime-metrics.md +489 -0
- package/.proagents/performance/web-vitals.md +425 -0
- package/.proagents/platforms.yaml +66 -0
- package/.proagents/proagents.config.yaml +0 -1
- package/.proagents/prompts/ai-add.md +80 -0
- package/.proagents/prompts/ai-list.md +41 -0
- package/.proagents/prompts/ai-remove.md +112 -0
- package/.proagents/prompts/ai-sync.md +96 -0
- package/.proagents/workflow-modes/entry-modes.md +1 -6
- package/lib/commands/ai.js +100 -48
- package/lib/commands/init.js +89 -22
- package/package.json +1 -1
- package/.proagents/ANTIGRAVITY.md +0 -61
- package/.proagents/CHATGPT.md +0 -57
- package/.proagents/GROQ.md +0 -57
- package/.proagents/api-versioning/README.md +0 -257
- package/.proagents/api-versioning/changelog-template.md +0 -225
- package/.proagents/api-versioning/deprecation-workflow.md +0 -470
- package/.proagents/api-versioning/versioning-strategy.md +0 -291
- package/.proagents/automation/README.md +0 -38
- package/.proagents/automation/ai-behavior-rules.md +0 -339
- package/.proagents/automation/ai-prompt-injection.md +0 -331
- package/.proagents/automation/auto-decisions.md +0 -535
- package/.proagents/automation/decision-defaults.yaml +0 -317
- package/.proagents/cache/README.md +0 -110
- package/.proagents/cache/analysis-metadata.json +0 -76
- package/.proagents/cache/conventions.json +0 -125
- package/.proagents/cache/dependencies.json +0 -85
- package/.proagents/cache/features.json +0 -115
- package/.proagents/cache/patterns.json +0 -105
- package/.proagents/cache/schemas/conventions-schema.json +0 -138
- package/.proagents/cache/schemas/dependencies-schema.json +0 -95
- package/.proagents/cache/schemas/features-schema.json +0 -104
- package/.proagents/cache/schemas/metadata-schema.json +0 -83
- package/.proagents/cache/schemas/patterns-schema.json +0 -136
- package/.proagents/cache/schemas/structure-schema.json +0 -72
- package/.proagents/cache/structure.json +0 -109
- package/.proagents/checklists/README.md +0 -261
- package/.proagents/checklists/code-quality.md +0 -137
- package/.proagents/checklists/code-review.md +0 -148
- package/.proagents/checklists/pr-checklist.md +0 -78
- package/.proagents/checklists/pre-deployment.md +0 -132
- package/.proagents/checklists/pre-implementation.md +0 -80
- package/.proagents/checklists/testing.md +0 -120
- package/.proagents/checkpoints.json +0 -13
- package/.proagents/cicd/README.md +0 -338
- package/.proagents/cicd/azure-devops.md +0 -267
- package/.proagents/cicd/github-actions.md +0 -375
- package/.proagents/cicd/gitlab-ci.md +0 -278
- package/.proagents/cicd/jenkins.md +0 -317
- package/.proagents/collaboration/README.md +0 -143
- package/.proagents/collaboration/roles.md +0 -248
- package/.proagents/collaboration/sessions.md +0 -390
- package/.proagents/collaboration/sync.md +0 -358
- package/.proagents/cost/README.md +0 -48
- package/.proagents/cost/cost-template.md +0 -283
- package/.proagents/cost/estimation-framework.md +0 -287
- package/.proagents/database/README.md +0 -72
- package/.proagents/database/examples/001-create-users.sql +0 -129
- package/.proagents/database/examples/002-add-preferences.sql +0 -94
- package/.proagents/database/examples/003-add-index.sql +0 -105
- package/.proagents/database/examples/004-rename-column.sql +0 -122
- package/.proagents/database/examples/005-add-foreign-key.sql +0 -142
- package/.proagents/database/examples/006-data-migration.sql +0 -196
- package/.proagents/database/examples/007-drop-column.sql +0 -163
- package/.proagents/database/examples/README.md +0 -89
- package/.proagents/database/migration-workflow.md +0 -478
- package/.proagents/database/rollback-scripts.md +0 -487
- package/.proagents/database/safety-checks.md +0 -447
- package/.proagents/git/README.md +0 -68
- package/.proagents/git/branch-strategy.md +0 -164
- package/.proagents/git/commit-conventions.md +0 -241
- package/.proagents/git/pr-workflow.md +0 -286
- package/.proagents/git/rollback-procedures.md +0 -416
- package/.proagents/ide-integration/README.md +0 -124
- package/.proagents/ide-integration/cline-config.md +0 -429
- package/.proagents/ide-integration/continue-config.md +0 -380
- package/.proagents/ide-integration/cursor-rules.md +0 -280
- package/.proagents/ide-integration/github-copilot.md +0 -384
- package/.proagents/ide-integration/windsurf-rules.md +0 -314
- package/.proagents/integrations/README.md +0 -97
- package/.proagents/integrations/pm/README.md +0 -344
- package/.proagents/learning/README.md +0 -136
- package/.proagents/learning/adaptation.md +0 -305
- package/.proagents/learning/data-collection.md +0 -283
- package/.proagents/learning/implementation-guide.md +0 -865
- package/.proagents/learning/reports.md +0 -306
- package/.proagents/mcp/README.md +0 -133
- package/.proagents/mcp/context-providers.md +0 -442
- package/.proagents/mcp/server-config.md +0 -306
- package/.proagents/mcp/tools-definition.md +0 -513
- package/.proagents/pm-integration/README.md +0 -151
- package/.proagents/pm-integration/asana.md +0 -346
- package/.proagents/pm-integration/github-issues.md +0 -308
- package/.proagents/pm-integration/gitlab-issues.md +0 -482
- package/.proagents/pm-integration/jira.md +0 -364
- package/.proagents/pm-integration/linear.md +0 -409
- package/.proagents/pm-integration/notion.md +0 -275
- package/.proagents/pm-integration/sync-config.md +0 -533
- package/.proagents/pm-integration/trello.md +0 -159
- package/.proagents/rules/README.md +0 -179
- package/.proagents/rules/custom-rules-template.yaml +0 -286
- package/.proagents/rules/custom-rules.md +0 -754
- package/.proagents/rules/validation-rules-template.yaml +0 -517
- package/.proagents/runbooks/README.md +0 -219
- package/.proagents/runbooks/dependency-vulnerability.md +0 -505
- package/.proagents/runbooks/incident-response.md +0 -451
- package/.proagents/runbooks/performance-degradation.md +0 -584
- package/.proagents/runbooks/production-debugging.md +0 -489
- package/.proagents/sprints/README.md +0 -58
- package/.proagents/team/README.md +0 -256
- package/.proagents/team/code-ownership.md +0 -306
- package/.proagents/team/communication-templates.md +0 -441
- package/.proagents/team/handoff-protocol.md +0 -380
- package/.proagents/team/ide-setup/README.md +0 -103
- package/.proagents/team/ide-setup/cursor.md +0 -276
- package/.proagents/team/ide-setup/jetbrains.md +0 -330
- package/.proagents/team/ide-setup/neovim.md +0 -640
- package/.proagents/team/ide-setup/vscode.md +0 -348
- package/.proagents/team/onboarding.md +0 -278
- package/.proagents/time-tracking.json +0 -19
- package/.proagents/troubleshooting/README.md +0 -730
- package/.proagents/troubleshooting/ai-issues.md +0 -601
- package/.proagents/troubleshooting/workflow-issues.md +0 -571
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
# Web Vitals Performance Guide
|
|
2
|
+
|
|
3
|
+
Monitor and optimize Core Web Vitals for better user experience.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core Web Vitals
|
|
8
|
+
|
|
9
|
+
### LCP - Largest Contentful Paint
|
|
10
|
+
|
|
11
|
+
**What:** Time until largest content element is visible
|
|
12
|
+
**Target:** < 2.5 seconds
|
|
13
|
+
**Measures:** Loading performance
|
|
14
|
+
|
|
15
|
+
### FID - First Input Delay
|
|
16
|
+
|
|
17
|
+
**What:** Time from first interaction to browser response
|
|
18
|
+
**Target:** < 100 milliseconds
|
|
19
|
+
**Measures:** Interactivity
|
|
20
|
+
|
|
21
|
+
### CLS - Cumulative Layout Shift
|
|
22
|
+
|
|
23
|
+
**What:** Visual stability (unexpected layout shifts)
|
|
24
|
+
**Target:** < 0.1
|
|
25
|
+
**Measures:** Visual stability
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Measuring Web Vitals
|
|
30
|
+
|
|
31
|
+
### Using web-vitals Library
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
// Install
|
|
35
|
+
npm install web-vitals
|
|
36
|
+
|
|
37
|
+
// Usage
|
|
38
|
+
import { getCLS, getFID, getLCP, getFCP, getTTFB } from 'web-vitals';
|
|
39
|
+
|
|
40
|
+
function sendToAnalytics(metric) {
|
|
41
|
+
console.log(metric);
|
|
42
|
+
// Send to analytics service
|
|
43
|
+
analytics.track('Web Vitals', {
|
|
44
|
+
name: metric.name,
|
|
45
|
+
value: metric.value,
|
|
46
|
+
rating: metric.rating, // 'good', 'needs-improvement', 'poor'
|
|
47
|
+
id: metric.id,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
getCLS(sendToAnalytics);
|
|
52
|
+
getFID(sendToAnalytics);
|
|
53
|
+
getLCP(sendToAnalytics);
|
|
54
|
+
getFCP(sendToAnalytics);
|
|
55
|
+
getTTFB(sendToAnalytics);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### React Integration
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
// In React app
|
|
62
|
+
import { useEffect } from 'react';
|
|
63
|
+
import { getCLS, getFID, getLCP } from 'web-vitals';
|
|
64
|
+
|
|
65
|
+
function App() {
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
getCLS(console.log);
|
|
68
|
+
getFID(console.log);
|
|
69
|
+
getLCP(console.log);
|
|
70
|
+
}, []);
|
|
71
|
+
|
|
72
|
+
return <MainApp />;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Or in reportWebVitals.js (Create React App)
|
|
76
|
+
const reportWebVitals = (onPerfEntry) => {
|
|
77
|
+
if (onPerfEntry && onPerfEntry instanceof Function) {
|
|
78
|
+
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
|
79
|
+
getCLS(onPerfEntry);
|
|
80
|
+
getFID(onPerfEntry);
|
|
81
|
+
getFCP(onPerfEntry);
|
|
82
|
+
getLCP(onPerfEntry);
|
|
83
|
+
getTTFB(onPerfEntry);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Lighthouse
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# CLI
|
|
93
|
+
npm install -g lighthouse
|
|
94
|
+
lighthouse https://example.com --output html --output-path report.html
|
|
95
|
+
|
|
96
|
+
# Chrome DevTools
|
|
97
|
+
1. Open DevTools (F12)
|
|
98
|
+
2. Go to Lighthouse tab
|
|
99
|
+
3. Click "Generate report"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Optimizing LCP
|
|
105
|
+
|
|
106
|
+
### Common LCP Elements
|
|
107
|
+
|
|
108
|
+
- `<img>` elements
|
|
109
|
+
- `<video>` poster images
|
|
110
|
+
- Elements with background-image
|
|
111
|
+
- Block-level text elements
|
|
112
|
+
|
|
113
|
+
### Optimization Techniques
|
|
114
|
+
|
|
115
|
+
#### 1. Optimize Images
|
|
116
|
+
|
|
117
|
+
```html
|
|
118
|
+
<!-- Use modern formats -->
|
|
119
|
+
<picture>
|
|
120
|
+
<source srcset="image.avif" type="image/avif">
|
|
121
|
+
<source srcset="image.webp" type="image/webp">
|
|
122
|
+
<img src="image.jpg" alt="...">
|
|
123
|
+
</picture>
|
|
124
|
+
|
|
125
|
+
<!-- Responsive images -->
|
|
126
|
+
<img
|
|
127
|
+
srcset="small.jpg 300w,
|
|
128
|
+
medium.jpg 600w,
|
|
129
|
+
large.jpg 1200w"
|
|
130
|
+
sizes="(max-width: 600px) 300px,
|
|
131
|
+
(max-width: 1200px) 600px,
|
|
132
|
+
1200px"
|
|
133
|
+
src="medium.jpg"
|
|
134
|
+
alt="..."
|
|
135
|
+
>
|
|
136
|
+
|
|
137
|
+
<!-- Preload LCP image -->
|
|
138
|
+
<link rel="preload" as="image" href="hero-image.webp">
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### 2. Optimize Server Response
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
// Enable caching
|
|
145
|
+
app.use((req, res, next) => {
|
|
146
|
+
res.setHeader('Cache-Control', 'public, max-age=31536000');
|
|
147
|
+
next();
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Use CDN
|
|
151
|
+
// Configure CDN for static assets
|
|
152
|
+
|
|
153
|
+
// Enable compression
|
|
154
|
+
const compression = require('compression');
|
|
155
|
+
app.use(compression());
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### 3. Preload Critical Resources
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<head>
|
|
162
|
+
<!-- Preload critical CSS -->
|
|
163
|
+
<link rel="preload" href="critical.css" as="style">
|
|
164
|
+
|
|
165
|
+
<!-- Preload fonts -->
|
|
166
|
+
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
|
|
167
|
+
|
|
168
|
+
<!-- Preconnect to origins -->
|
|
169
|
+
<link rel="preconnect" href="https://api.example.com">
|
|
170
|
+
<link rel="dns-prefetch" href="https://cdn.example.com">
|
|
171
|
+
</head>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Optimizing FID
|
|
177
|
+
|
|
178
|
+
### Optimization Techniques
|
|
179
|
+
|
|
180
|
+
#### 1. Break Up Long Tasks
|
|
181
|
+
|
|
182
|
+
```javascript
|
|
183
|
+
// BAD: Long blocking task
|
|
184
|
+
function processData(data) {
|
|
185
|
+
// 1000ms of work
|
|
186
|
+
data.forEach(item => heavyComputation(item));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// GOOD: Break into chunks
|
|
190
|
+
async function processData(data) {
|
|
191
|
+
const chunks = chunkArray(data, 100);
|
|
192
|
+
|
|
193
|
+
for (const chunk of chunks) {
|
|
194
|
+
chunk.forEach(item => heavyComputation(item));
|
|
195
|
+
// Yield to main thread
|
|
196
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
#### 2. Use Web Workers
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
// Heavy computation in worker
|
|
205
|
+
const worker = new Worker('worker.js');
|
|
206
|
+
|
|
207
|
+
worker.postMessage({ data: largeDataSet });
|
|
208
|
+
worker.onmessage = (event) => {
|
|
209
|
+
console.log('Processed:', event.data);
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
// worker.js
|
|
213
|
+
self.onmessage = (event) => {
|
|
214
|
+
const result = heavyComputation(event.data);
|
|
215
|
+
self.postMessage(result);
|
|
216
|
+
};
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### 3. Defer Non-Critical JavaScript
|
|
220
|
+
|
|
221
|
+
```html
|
|
222
|
+
<!-- Defer non-critical scripts -->
|
|
223
|
+
<script src="analytics.js" defer></script>
|
|
224
|
+
<script src="non-critical.js" defer></script>
|
|
225
|
+
|
|
226
|
+
<!-- Async for independent scripts -->
|
|
227
|
+
<script src="independent.js" async></script>
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### 4. Lazy Load Components
|
|
231
|
+
|
|
232
|
+
```javascript
|
|
233
|
+
// React
|
|
234
|
+
const HeavyComponent = React.lazy(() => import('./HeavyComponent'));
|
|
235
|
+
|
|
236
|
+
function App() {
|
|
237
|
+
return (
|
|
238
|
+
<Suspense fallback={<Loading />}>
|
|
239
|
+
<HeavyComponent />
|
|
240
|
+
</Suspense>
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Optimizing CLS
|
|
248
|
+
|
|
249
|
+
### Common Causes
|
|
250
|
+
|
|
251
|
+
1. Images without dimensions
|
|
252
|
+
2. Ads/embeds without reserved space
|
|
253
|
+
3. Dynamically injected content
|
|
254
|
+
4. Web fonts causing FOIT/FOUT
|
|
255
|
+
|
|
256
|
+
### Optimization Techniques
|
|
257
|
+
|
|
258
|
+
#### 1. Always Set Image Dimensions
|
|
259
|
+
|
|
260
|
+
```html
|
|
261
|
+
<!-- Always specify width and height -->
|
|
262
|
+
<img src="image.jpg" width="800" height="600" alt="...">
|
|
263
|
+
|
|
264
|
+
<!-- Or use aspect-ratio -->
|
|
265
|
+
<style>
|
|
266
|
+
.image-container {
|
|
267
|
+
aspect-ratio: 16 / 9;
|
|
268
|
+
}
|
|
269
|
+
</style>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
#### 2. Reserve Space for Dynamic Content
|
|
273
|
+
|
|
274
|
+
```css
|
|
275
|
+
/* Reserve space for ads */
|
|
276
|
+
.ad-container {
|
|
277
|
+
min-height: 250px;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* Skeleton for loading content */
|
|
281
|
+
.skeleton {
|
|
282
|
+
min-height: 200px;
|
|
283
|
+
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
284
|
+
background-size: 200% 100%;
|
|
285
|
+
animation: loading 1.5s infinite;
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### 3. Optimize Font Loading
|
|
290
|
+
|
|
291
|
+
```css
|
|
292
|
+
/* Use font-display */
|
|
293
|
+
@font-face {
|
|
294
|
+
font-family: 'CustomFont';
|
|
295
|
+
src: url('font.woff2') format('woff2');
|
|
296
|
+
font-display: swap;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Or use optional for non-critical fonts */
|
|
300
|
+
@font-face {
|
|
301
|
+
font-family: 'NiceToHave';
|
|
302
|
+
src: url('font.woff2') format('woff2');
|
|
303
|
+
font-display: optional;
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
```html
|
|
308
|
+
<!-- Preload critical fonts -->
|
|
309
|
+
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
#### 4. Avoid Inserting Content Above Existing
|
|
313
|
+
|
|
314
|
+
```javascript
|
|
315
|
+
// BAD: Insert at top
|
|
316
|
+
container.prepend(newElement);
|
|
317
|
+
|
|
318
|
+
// GOOD: Insert below fold or with reserved space
|
|
319
|
+
reservedSpace.appendChild(newElement);
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Performance Budget
|
|
325
|
+
|
|
326
|
+
```javascript
|
|
327
|
+
// performance-budget.json
|
|
328
|
+
{
|
|
329
|
+
"budgets": [
|
|
330
|
+
{
|
|
331
|
+
"resourceSizes": [
|
|
332
|
+
{ "resourceType": "script", "budget": 150 },
|
|
333
|
+
{ "resourceType": "image", "budget": 300 },
|
|
334
|
+
{ "resourceType": "stylesheet", "budget": 50 },
|
|
335
|
+
{ "resourceType": "total", "budget": 500 }
|
|
336
|
+
],
|
|
337
|
+
"timings": [
|
|
338
|
+
{ "metric": "largest-contentful-paint", "budget": 2500 },
|
|
339
|
+
{ "metric": "first-input-delay", "budget": 100 },
|
|
340
|
+
{ "metric": "cumulative-layout-shift", "budget": 0.1 },
|
|
341
|
+
{ "metric": "time-to-interactive", "budget": 3500 }
|
|
342
|
+
]
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Monitoring Dashboard
|
|
351
|
+
|
|
352
|
+
```markdown
|
|
353
|
+
# Web Vitals Dashboard
|
|
354
|
+
|
|
355
|
+
## Current Performance
|
|
356
|
+
|
|
357
|
+
| Metric | P75 Value | Target | Status |
|
|
358
|
+
|--------|-----------|--------|--------|
|
|
359
|
+
| LCP | 2.1s | < 2.5s | ✅ Good |
|
|
360
|
+
| FID | 80ms | < 100ms | ✅ Good |
|
|
361
|
+
| CLS | 0.15 | < 0.1 | ⚠️ Needs Improvement |
|
|
362
|
+
| FCP | 1.5s | < 1.8s | ✅ Good |
|
|
363
|
+
| TTFB | 300ms | < 600ms | ✅ Good |
|
|
364
|
+
|
|
365
|
+
## Trends (Last 30 Days)
|
|
366
|
+
|
|
367
|
+
LCP: ████████░░ Improved 15%
|
|
368
|
+
FID: ██████████ Stable
|
|
369
|
+
CLS: ██████░░░░ Degraded 5%
|
|
370
|
+
|
|
371
|
+
## Top Issues
|
|
372
|
+
|
|
373
|
+
1. CLS on product pages (0.2)
|
|
374
|
+
- Cause: Images without dimensions
|
|
375
|
+
- Fix: Add width/height attributes
|
|
376
|
+
|
|
377
|
+
2. LCP on homepage (2.8s)
|
|
378
|
+
- Cause: Large hero image
|
|
379
|
+
- Fix: Optimize and preload image
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## CI/CD Integration
|
|
385
|
+
|
|
386
|
+
```yaml
|
|
387
|
+
# .github/workflows/performance.yml
|
|
388
|
+
name: Performance Check
|
|
389
|
+
|
|
390
|
+
on: pull_request
|
|
391
|
+
|
|
392
|
+
jobs:
|
|
393
|
+
lighthouse:
|
|
394
|
+
runs-on: ubuntu-latest
|
|
395
|
+
steps:
|
|
396
|
+
- uses: actions/checkout@v3
|
|
397
|
+
|
|
398
|
+
- name: Run Lighthouse
|
|
399
|
+
uses: treosh/lighthouse-ci-action@v9
|
|
400
|
+
with:
|
|
401
|
+
urls: |
|
|
402
|
+
https://example.com/
|
|
403
|
+
https://example.com/products
|
|
404
|
+
budgetPath: ./performance-budget.json
|
|
405
|
+
uploadArtifacts: true
|
|
406
|
+
|
|
407
|
+
- name: Check Web Vitals
|
|
408
|
+
run: |
|
|
409
|
+
if [ "$LCP" -gt 2500 ]; then
|
|
410
|
+
echo "LCP exceeds budget"
|
|
411
|
+
exit 1
|
|
412
|
+
fi
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Commands
|
|
418
|
+
|
|
419
|
+
| Command | Description |
|
|
420
|
+
|---------|-------------|
|
|
421
|
+
| `pa:perf-vitals` | Check Web Vitals |
|
|
422
|
+
| `pa:perf-lcp` | Analyze LCP |
|
|
423
|
+
| `pa:perf-cls` | Analyze CLS |
|
|
424
|
+
| `pa:perf-fid` | Analyze FID |
|
|
425
|
+
| `pa:perf-report` | Generate performance report |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# ProAgents Supported AI Platforms
|
|
2
|
+
# Single source of truth - used by code and AI assistants
|
|
3
|
+
#
|
|
4
|
+
# To add a new platform:
|
|
5
|
+
# 1. Add entry below with id, name, file, desc
|
|
6
|
+
# 2. Create the instruction file in .proagents/
|
|
7
|
+
# 3. Run: proagents ai add
|
|
8
|
+
|
|
9
|
+
ide:
|
|
10
|
+
label: "IDE-based AI Assistants"
|
|
11
|
+
platforms:
|
|
12
|
+
- id: claude
|
|
13
|
+
name: Claude Code
|
|
14
|
+
file: CLAUDE.md
|
|
15
|
+
desc: Anthropic Claude in terminal/IDE
|
|
16
|
+
|
|
17
|
+
- id: cursor
|
|
18
|
+
name: Cursor
|
|
19
|
+
file: .cursorrules
|
|
20
|
+
desc: Cursor AI IDE
|
|
21
|
+
|
|
22
|
+
- id: windsurf
|
|
23
|
+
name: Windsurf
|
|
24
|
+
file: .windsurfrules
|
|
25
|
+
desc: Codeium Windsurf IDE
|
|
26
|
+
|
|
27
|
+
- id: copilot
|
|
28
|
+
name: GitHub Copilot
|
|
29
|
+
file: .github/copilot-instructions.md
|
|
30
|
+
desc: GitHub Copilot
|
|
31
|
+
|
|
32
|
+
- id: kiro
|
|
33
|
+
name: AWS Kiro
|
|
34
|
+
file: KIRO.md
|
|
35
|
+
desc: AWS Kiro IDE
|
|
36
|
+
|
|
37
|
+
- id: gemini
|
|
38
|
+
name: Gemini
|
|
39
|
+
file: GEMINI.md
|
|
40
|
+
desc: Google Gemini / AI Studio
|
|
41
|
+
|
|
42
|
+
web:
|
|
43
|
+
label: "Web-based AI Platforms"
|
|
44
|
+
platforms:
|
|
45
|
+
- id: replit
|
|
46
|
+
name: Replit AI
|
|
47
|
+
file: REPLIT.md
|
|
48
|
+
desc: Replit Ghostwriter
|
|
49
|
+
|
|
50
|
+
- id: bolt
|
|
51
|
+
name: Bolt.new
|
|
52
|
+
file: BOLT.md
|
|
53
|
+
desc: StackBlitz Bolt
|
|
54
|
+
|
|
55
|
+
- id: lovable
|
|
56
|
+
name: Lovable
|
|
57
|
+
file: LOVABLE.md
|
|
58
|
+
desc: Lovable (GPT Engineer)
|
|
59
|
+
|
|
60
|
+
# Auto-handled platforms (use AGENTS.md, no separate file needed)
|
|
61
|
+
auto_handled:
|
|
62
|
+
- ChatGPT
|
|
63
|
+
- Groq
|
|
64
|
+
- Antigravity
|
|
65
|
+
- Codex CLI
|
|
66
|
+
- OpenAI API
|
|
@@ -67,7 +67,6 @@ documentation:
|
|
|
67
67
|
internal:
|
|
68
68
|
feature_docs: "./.proagents/active-features/" # Feature-specific docs
|
|
69
69
|
dev_changelog: "./.proagents/changelog/" # Detailed dev notes
|
|
70
|
-
analysis: "./.proagents/cache/" # Codebase analysis
|
|
71
70
|
learning: "./.proagents/.learning/" # AI learning data
|
|
72
71
|
|
|
73
72
|
required_for_all_modes: true
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# pa:ai-add - Add AI Platform
|
|
2
|
+
|
|
3
|
+
Add a new AI platform configuration to this project.
|
|
4
|
+
|
|
5
|
+
## Steps
|
|
6
|
+
|
|
7
|
+
### 1. Read Available Platforms
|
|
8
|
+
|
|
9
|
+
**IMPORTANT:** Always read the authoritative list first - do not hallucinate platforms.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cat .proagents/platforms.yaml
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 2. Show Options to User
|
|
16
|
+
|
|
17
|
+
Display platforms grouped by category:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
IDE-based AI Assistants:
|
|
21
|
+
1. claude - Claude Code (CLAUDE.md)
|
|
22
|
+
2. cursor - Cursor (.cursorrules)
|
|
23
|
+
3. windsurf - Windsurf (.windsurfrules)
|
|
24
|
+
4. copilot - GitHub Copilot (.github/copilot-instructions.md)
|
|
25
|
+
5. kiro - AWS Kiro (KIRO.md)
|
|
26
|
+
6. gemini - Gemini (GEMINI.md)
|
|
27
|
+
|
|
28
|
+
Web-based AI Platforms:
|
|
29
|
+
7. replit - Replit AI (REPLIT.md)
|
|
30
|
+
8. bolt - Bolt.new (BOLT.md)
|
|
31
|
+
9. lovable - Lovable (LOVABLE.md)
|
|
32
|
+
|
|
33
|
+
Auto-handled (use AGENTS.md):
|
|
34
|
+
- ChatGPT, Groq, Antigravity, Codex CLI, OpenAI API
|
|
35
|
+
|
|
36
|
+
Which platform to add?
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 3. Create the File
|
|
40
|
+
|
|
41
|
+
After user selects platform:
|
|
42
|
+
|
|
43
|
+
1. **Read source template** from `.proagents/{file}`
|
|
44
|
+
2. **Check if target file exists** in project root:
|
|
45
|
+
- If exists: Merge using markers (append ProAgents section)
|
|
46
|
+
- If not exists: Create new file with markers
|
|
47
|
+
|
|
48
|
+
3. **Wrap content with markers:**
|
|
49
|
+
```
|
|
50
|
+
<!-- PROAGENTS_START -->
|
|
51
|
+
{content from template}
|
|
52
|
+
<!-- PROAGENTS_END -->
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 4. Update Config
|
|
56
|
+
|
|
57
|
+
Add platform to `ai_platforms` array in `./proagents.config.yaml`:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
ai_platforms:
|
|
61
|
+
- claude
|
|
62
|
+
- cursor
|
|
63
|
+
- {new_platform} # Add this
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 5. Confirm
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
Added {platform_name}!
|
|
70
|
+
File: {file_path}
|
|
71
|
+
Config updated: ./proagents.config.yaml
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Merge Rules
|
|
75
|
+
|
|
76
|
+
When target file already exists:
|
|
77
|
+
|
|
78
|
+
1. **Has PROAGENTS markers:** Update content between markers only
|
|
79
|
+
2. **No markers:** Append ProAgents section at end with markers
|
|
80
|
+
3. **Never overwrite** user's existing configuration
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# pa:ai-list - List AI Platforms
|
|
2
|
+
|
|
3
|
+
Show which AI platforms are configured for this project.
|
|
4
|
+
|
|
5
|
+
## Steps
|
|
6
|
+
|
|
7
|
+
1. **Read config file:**
|
|
8
|
+
```bash
|
|
9
|
+
cat ./proagents.config.yaml
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
2. **Extract `ai_platforms` array** from the config
|
|
13
|
+
|
|
14
|
+
3. **Display installed platforms:**
|
|
15
|
+
```
|
|
16
|
+
Installed AI Platforms:
|
|
17
|
+
- Claude Code (CLAUDE.md)
|
|
18
|
+
- Cursor (.cursorrules)
|
|
19
|
+
- ...
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
4. **Show available platforms** (not yet installed):
|
|
23
|
+
- Read `.proagents/platforms.yaml` for full list
|
|
24
|
+
- Compare with installed list
|
|
25
|
+
- Show what can be added
|
|
26
|
+
|
|
27
|
+
## Output Format
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Installed AI Platforms:
|
|
31
|
+
[x] claude - Claude Code
|
|
32
|
+
[x] cursor - Cursor
|
|
33
|
+
|
|
34
|
+
Available to Add:
|
|
35
|
+
[ ] windsurf - Windsurf
|
|
36
|
+
[ ] copilot - GitHub Copilot
|
|
37
|
+
[ ] gemini - Gemini
|
|
38
|
+
...
|
|
39
|
+
|
|
40
|
+
Use pa:ai-add to add more platforms.
|
|
41
|
+
```
|