proagents 1.6.20 → 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/.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/proagents.config.yaml +0 -1
- package/.proagents/workflow-modes/entry-modes.md +1 -6
- package/lib/commands/init.js +57 -8
- package/package.json +1 -1
- 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 |
|
|
@@ -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
|
|
@@ -127,8 +127,7 @@ Streamlined workflow for fixing bugs quickly without skipping quality.
|
|
|
127
127
|
│ Phase 1: Context Scan (2-5 min) │
|
|
128
128
|
│ ├── Identify affected files from bug description │
|
|
129
129
|
│ ├── Scan recent changes (git history) │
|
|
130
|
-
│
|
|
131
|
-
│ └── Load cached analysis if available │
|
|
130
|
+
│ └── Check related components │
|
|
132
131
|
│ │
|
|
133
132
|
│ Phase 2: Root Cause Analysis │
|
|
134
133
|
│ ├── Identify the bug source │
|
|
@@ -186,10 +185,6 @@ auto_context:
|
|
|
186
185
|
components: true
|
|
187
186
|
services: true
|
|
188
187
|
tests: true
|
|
189
|
-
|
|
190
|
-
load_cached:
|
|
191
|
-
analysis: true
|
|
192
|
-
patterns: true
|
|
193
188
|
```
|
|
194
189
|
|
|
195
190
|
### Guardrails
|
package/lib/commands/init.js
CHANGED
|
@@ -13,7 +13,6 @@ const __dirname = dirname(__filename);
|
|
|
13
13
|
const PRESERVE_PATHS = [
|
|
14
14
|
'active-features', // User's work in progress
|
|
15
15
|
'.learning', // Learned patterns
|
|
16
|
-
'cache', // Cached analysis
|
|
17
16
|
'changelog', // Change history (user data)
|
|
18
17
|
'worklog', // Work context (user data)
|
|
19
18
|
'sessions', // Session data
|
|
@@ -148,10 +147,9 @@ const CONFIG_FILE = 'proagents.config.yaml';
|
|
|
148
147
|
const FRAMEWORK_FOLDERS = [
|
|
149
148
|
'prompts',
|
|
150
149
|
'templates',
|
|
151
|
-
'checklists',
|
|
152
150
|
'standards',
|
|
153
151
|
'examples',
|
|
154
|
-
'
|
|
152
|
+
'docs',
|
|
155
153
|
'ui-integration',
|
|
156
154
|
'workflow-modes',
|
|
157
155
|
'security',
|
|
@@ -161,25 +159,32 @@ const FRAMEWORK_FOLDERS = [
|
|
|
161
159
|
'scaffolding',
|
|
162
160
|
'cli',
|
|
163
161
|
'adr',
|
|
162
|
+
'config',
|
|
163
|
+
'existing-projects',
|
|
164
|
+
'getting-started',
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
// Deprecated folders to remove during update (no longer part of framework)
|
|
168
|
+
const DEPRECATED_FOLDERS = [
|
|
164
169
|
'ai-models',
|
|
165
170
|
'ai-training',
|
|
166
171
|
'api-versioning',
|
|
167
172
|
'approval-workflows',
|
|
168
173
|
'automation',
|
|
174
|
+
'cache',
|
|
175
|
+
'checklists',
|
|
169
176
|
'cicd',
|
|
170
177
|
'collaboration',
|
|
171
178
|
'compliance',
|
|
172
179
|
'config-versioning',
|
|
173
|
-
'config',
|
|
174
180
|
'contract-testing',
|
|
175
181
|
'cost',
|
|
176
182
|
'database',
|
|
177
183
|
'dependency-management',
|
|
178
184
|
'disaster-recovery',
|
|
179
185
|
'environments',
|
|
180
|
-
'existing-projects',
|
|
181
186
|
'feature-flags',
|
|
182
|
-
'
|
|
187
|
+
'git',
|
|
183
188
|
'i18n',
|
|
184
189
|
'ide-integration',
|
|
185
190
|
'integrations',
|
|
@@ -200,11 +205,19 @@ const FRAMEWORK_FOLDERS = [
|
|
|
200
205
|
'rules',
|
|
201
206
|
'runbooks',
|
|
202
207
|
'secrets',
|
|
208
|
+
'sprints',
|
|
203
209
|
'team',
|
|
204
210
|
'troubleshooting',
|
|
205
211
|
'webhooks',
|
|
206
212
|
];
|
|
207
213
|
|
|
214
|
+
// Deprecated files to remove during update
|
|
215
|
+
const DEPRECATED_FILES = [
|
|
216
|
+
'checkpoints.json',
|
|
217
|
+
'history.log',
|
|
218
|
+
'time-tracking.json',
|
|
219
|
+
];
|
|
220
|
+
|
|
208
221
|
// Root files to always update (AI files handled separately via platform selection)
|
|
209
222
|
const FRAMEWORK_FILES = [
|
|
210
223
|
'README.md',
|
|
@@ -214,6 +227,16 @@ const FRAMEWORK_FILES = [
|
|
|
214
227
|
'slash-commands.json',
|
|
215
228
|
'AI_INSTRUCTIONS.md', // Universal instructions kept for reference
|
|
216
229
|
'platforms.yaml', // Single source of truth for AI platforms
|
|
230
|
+
// Platform instruction files (updated during init)
|
|
231
|
+
'AGENTS.md',
|
|
232
|
+
'CLAUDE.md',
|
|
233
|
+
'.cursorrules',
|
|
234
|
+
'.windsurfrules',
|
|
235
|
+
'GEMINI.md',
|
|
236
|
+
'BOLT.md',
|
|
237
|
+
'REPLIT.md',
|
|
238
|
+
'LOVABLE.md',
|
|
239
|
+
'KIRO.md',
|
|
217
240
|
];
|
|
218
241
|
|
|
219
242
|
// Universal AI file - always copied to project root (not selectable)
|
|
@@ -1019,7 +1042,8 @@ export async function initCommand(options = {}) {
|
|
|
1019
1042
|
console.log(chalk.gray(' • active-features/ (your work in progress)'));
|
|
1020
1043
|
console.log(chalk.gray(' • proagents.config.yaml (your values + new options merged)'));
|
|
1021
1044
|
console.log(chalk.gray(' • .learning/ (learned patterns)'));
|
|
1022
|
-
console.log(chalk.gray(' •
|
|
1045
|
+
console.log(chalk.gray(' • changelog/ (change history)'));
|
|
1046
|
+
console.log(chalk.gray(' • worklog/ (work context)\n'));
|
|
1023
1047
|
return;
|
|
1024
1048
|
} catch (error) {
|
|
1025
1049
|
console.error(chalk.red('\n✗ Error updating ProAgents:'));
|
|
@@ -1114,7 +1138,6 @@ Generated by [ProAgents](https://github.com/prakashpro3/proAgents)
|
|
|
1114
1138
|
// Default: Ignore only local data
|
|
1115
1139
|
gitignoreEntries = [
|
|
1116
1140
|
'# ProAgents - Local data only (workflow config shared with team)',
|
|
1117
|
-
'.proagents/cache/',
|
|
1118
1141
|
'.proagents/.learning/',
|
|
1119
1142
|
'.proagents/sessions/',
|
|
1120
1143
|
'.proagents/active-features/',
|
|
@@ -1340,6 +1363,32 @@ async function smartUpdate(sourceDir, targetDir) {
|
|
|
1340
1363
|
}
|
|
1341
1364
|
console.log(chalk.green(`✓ Updated ${updatedCount} framework folders`));
|
|
1342
1365
|
|
|
1366
|
+
// Remove deprecated folders
|
|
1367
|
+
let removedFolders = 0;
|
|
1368
|
+
for (const folder of DEPRECATED_FOLDERS) {
|
|
1369
|
+
const folderPath = join(targetDir, folder);
|
|
1370
|
+
if (existsSync(folderPath)) {
|
|
1371
|
+
rmSync(folderPath, { recursive: true, force: true });
|
|
1372
|
+
removedFolders++;
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
if (removedFolders > 0) {
|
|
1376
|
+
console.log(chalk.green(`✓ Removed ${removedFolders} deprecated folders`));
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
// Remove deprecated files
|
|
1380
|
+
let removedFiles = 0;
|
|
1381
|
+
for (const file of DEPRECATED_FILES) {
|
|
1382
|
+
const filePath = join(targetDir, file);
|
|
1383
|
+
if (existsSync(filePath)) {
|
|
1384
|
+
rmSync(filePath, { force: true });
|
|
1385
|
+
removedFiles++;
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
if (removedFiles > 0) {
|
|
1389
|
+
console.log(chalk.green(`✓ Removed ${removedFiles} deprecated files`));
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1343
1392
|
// Restore user files that were migrated (they were saved before folder deletion)
|
|
1344
1393
|
restoreUserFiles(targetDir, migrationResult);
|
|
1345
1394
|
|