claude-autopm 1.18.0 → 1.20.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.
Files changed (75) hide show
  1. package/README.md +159 -0
  2. package/autopm/.claude/agents/core/mcp-manager.md +1 -1
  3. package/autopm/.claude/commands/pm/context.md +11 -0
  4. package/autopm/.claude/commands/pm/epic-decompose.md +25 -2
  5. package/autopm/.claude/commands/pm/epic-oneshot.md +13 -0
  6. package/autopm/.claude/commands/pm/epic-start.md +19 -0
  7. package/autopm/.claude/commands/pm/epic-sync-modular.md +10 -10
  8. package/autopm/.claude/commands/pm/epic-sync.md +14 -14
  9. package/autopm/.claude/commands/pm/issue-start.md +50 -5
  10. package/autopm/.claude/commands/pm/issue-sync.md +15 -15
  11. package/autopm/.claude/commands/pm/what-next.md +11 -0
  12. package/autopm/.claude/mcp/MCP-REGISTRY.md +1 -1
  13. package/autopm/.claude/scripts/azure/active-work.js +2 -2
  14. package/autopm/.claude/scripts/azure/blocked.js +13 -13
  15. package/autopm/.claude/scripts/azure/daily.js +1 -1
  16. package/autopm/.claude/scripts/azure/dashboard.js +1 -1
  17. package/autopm/.claude/scripts/azure/feature-list.js +2 -2
  18. package/autopm/.claude/scripts/azure/feature-status.js +1 -1
  19. package/autopm/.claude/scripts/azure/next-task.js +1 -1
  20. package/autopm/.claude/scripts/azure/search.js +1 -1
  21. package/autopm/.claude/scripts/azure/setup.js +15 -15
  22. package/autopm/.claude/scripts/azure/sprint-report.js +2 -2
  23. package/autopm/.claude/scripts/azure/sync.js +1 -1
  24. package/autopm/.claude/scripts/azure/us-list.js +1 -1
  25. package/autopm/.claude/scripts/azure/us-status.js +1 -1
  26. package/autopm/.claude/scripts/azure/validate.js +13 -13
  27. package/autopm/.claude/scripts/lib/frontmatter-utils.sh +42 -7
  28. package/autopm/.claude/scripts/lib/logging-utils.sh +20 -16
  29. package/autopm/.claude/scripts/lib/validation-utils.sh +1 -1
  30. package/autopm/.claude/scripts/pm/context.js +338 -0
  31. package/autopm/.claude/scripts/pm/issue-sync/format-comment.sh +3 -3
  32. package/autopm/.claude/scripts/pm/lib/README.md +85 -0
  33. package/autopm/.claude/scripts/pm/lib/logger.js +78 -0
  34. package/autopm/.claude/scripts/pm/next.js +25 -1
  35. package/autopm/.claude/scripts/pm/what-next.js +660 -0
  36. package/bin/autopm.js +25 -0
  37. package/package.json +1 -1
  38. package/lib/agentExecutor.js.deprecated +0 -101
  39. package/lib/azure/cache.js +0 -80
  40. package/lib/azure/client.js +0 -77
  41. package/lib/azure/formatter.js +0 -177
  42. package/lib/commandHelpers.js +0 -177
  43. package/lib/context/manager.js +0 -290
  44. package/lib/documentation/manager.js +0 -528
  45. package/lib/github/workflow-manager.js +0 -546
  46. package/lib/helpers/azure-batch-api.js +0 -133
  47. package/lib/helpers/azure-cache-manager.js +0 -287
  48. package/lib/helpers/azure-parallel-processor.js +0 -158
  49. package/lib/helpers/azure-work-item-create.js +0 -278
  50. package/lib/helpers/gh-issue-create.js +0 -250
  51. package/lib/helpers/interactive-prompt.js +0 -336
  52. package/lib/helpers/output-manager.js +0 -335
  53. package/lib/helpers/progress-indicator.js +0 -258
  54. package/lib/performance/benchmarker.js +0 -429
  55. package/lib/pm/epic-decomposer.js +0 -273
  56. package/lib/pm/epic-syncer.js +0 -221
  57. package/lib/prdMetadata.js +0 -270
  58. package/lib/providers/azure/index.js +0 -234
  59. package/lib/providers/factory.js +0 -87
  60. package/lib/providers/github/index.js +0 -204
  61. package/lib/providers/interface.js +0 -73
  62. package/lib/python/scaffold-manager.js +0 -576
  63. package/lib/react/scaffold-manager.js +0 -745
  64. package/lib/regression/analyzer.js +0 -578
  65. package/lib/release/manager.js +0 -324
  66. package/lib/tailwind/manager.js +0 -486
  67. package/lib/traefik/manager.js +0 -484
  68. package/lib/utils/colors.js +0 -126
  69. package/lib/utils/config.js +0 -317
  70. package/lib/utils/filesystem.js +0 -316
  71. package/lib/utils/logger.js +0 -135
  72. package/lib/utils/prompts.js +0 -294
  73. package/lib/utils/shell.js +0 -237
  74. package/lib/validators/email-validator.js +0 -337
  75. package/lib/workflow/manager.js +0 -449
@@ -1,486 +0,0 @@
1
- /**
2
- * Tailwind CSS Manager
3
- * Handles Tailwind design system operations
4
- * TDD Phase: REFACTOR - Extracted from command
5
- * Task: 6.4
6
- */
7
-
8
- const fs = require('fs').promises;
9
- const path = require('path');
10
-
11
- class TailwindManager {
12
- constructor() {
13
- this.defaultConfig = {
14
- content: [
15
- "./src/**/*.{js,jsx,ts,tsx}",
16
- "./public/index.html"
17
- ],
18
- theme: {
19
- extend: {},
20
- },
21
- plugins: [],
22
- };
23
- }
24
-
25
- /**
26
- * Initialize Tailwind configuration
27
- */
28
- async initializeConfig(options = {}) {
29
- const config = `/** @type {import('tailwindcss').Config} */
30
- module.exports = ${JSON.stringify(this.defaultConfig, null, 2).replace(/"([^"]+)":/g, '$1:').replace(/"/g, "'").replace(/'/g, '"').replace(/([a-zA-Z_]\w*):/g, '$1:').replace(/"(\.\/.+?)"/g, '"$1"')}`;
31
-
32
- await fs.writeFile('tailwind.config.js', config);
33
-
34
- return {
35
- path: 'tailwind.config.js',
36
- content: this.defaultConfig
37
- };
38
- }
39
-
40
- /**
41
- * Setup PostCSS configuration
42
- */
43
- async setupPostCSS(options = {}) {
44
- const config = {
45
- plugins: {
46
- tailwindcss: {},
47
- autoprefixer: {},
48
- },
49
- };
50
-
51
- const configString = `module.exports = ${JSON.stringify(config, null, 2).replace(/"([^"]+)":/g, '$1:')}`;
52
- await fs.writeFile('postcss.config.js', configString);
53
-
54
- return {
55
- path: 'postcss.config.js',
56
- plugins: Object.keys(config.plugins)
57
- };
58
- }
59
-
60
- /**
61
- * Generate design system tokens
62
- */
63
- async generateDesignSystem(options = {}) {
64
- await fs.mkdir(path.join('src', 'styles'), { recursive: true });
65
-
66
- const tokens = [];
67
-
68
- if (options.colors) {
69
- tokens.push(`// Color System
70
- export const colors = {
71
- primary: {
72
- 50: '#eff6ff',
73
- 500: '#3b82f6',
74
- 900: '#1e3a8a',
75
- },
76
- gray: {
77
- 50: '#f9fafb',
78
- 500: '#6b7280',
79
- 900: '#111827',
80
- },
81
- };`);
82
- }
83
-
84
- if (options.typography) {
85
- tokens.push(`// Typography System
86
- export const typography = {
87
- fonts: {
88
- sans: 'Inter, system-ui, -apple-system, sans-serif',
89
- mono: 'Fira Code, monospace',
90
- },
91
- sizes: {
92
- xs: '0.75rem',
93
- sm: '0.875rem',
94
- base: '1rem',
95
- lg: '1.125rem',
96
- xl: '1.25rem',
97
- },
98
- };`);
99
- }
100
-
101
- const content = `// Design System Tokens
102
- ${tokens.length ? tokens.join('\n\n') : `export const colors = {
103
- primary: {
104
- 50: '#eff6ff',
105
- 500: '#3b82f6',
106
- 900: '#1e3a8a',
107
- },
108
- gray: {
109
- 50: '#f9fafb',
110
- 500: '#6b7280',
111
- 900: '#111827',
112
- },
113
- };
114
-
115
- export const typography = {
116
- fonts: {
117
- sans: 'Inter, system-ui, -apple-system, sans-serif',
118
- mono: 'Fira Code, monospace',
119
- },
120
- sizes: {
121
- xs: '0.75rem',
122
- sm: '0.875rem',
123
- base: '1rem',
124
- lg: '1.125rem',
125
- xl: '1.25rem',
126
- },
127
- };`}`;
128
-
129
- await fs.writeFile(path.join('src', 'styles', 'design-tokens.js'), content);
130
-
131
- return {
132
- path: 'src/styles/design-tokens.js',
133
- tokens: {
134
- colors: options.colors || false,
135
- typography: options.typography || false
136
- }
137
- };
138
- }
139
-
140
- /**
141
- * Generate Tailwind component
142
- */
143
- async generateComponent(name, options = {}) {
144
- await fs.mkdir(path.join('src', 'components'), { recursive: true });
145
-
146
- const variant = options.variant || 'default';
147
- const component = `import React from 'react';
148
-
149
- const ${name} = ({ children, className = '', ...props }) => {
150
- const variants = {
151
- primary: 'bg-blue-500 text-white hover:bg-blue-600',
152
- secondary: 'bg-gray-500 text-white hover:bg-gray-600',
153
- default: 'bg-gray-200 text-gray-900 hover:bg-gray-300',
154
- };
155
-
156
- return (
157
- <button
158
- className={\`px-4 py-2 rounded font-medium transition-colors \${variants['${variant}']} \${className}\`}
159
- {...props}
160
- >
161
- {children}
162
- </button>
163
- );
164
- };
165
-
166
- export default ${name};`;
167
-
168
- const filePath = path.join('src', 'components', `${name}.jsx`);
169
- await fs.writeFile(filePath, component);
170
-
171
- return {
172
- name,
173
- variant,
174
- path: filePath,
175
- type: 'functional'
176
- };
177
- }
178
-
179
- /**
180
- * Create utility classes
181
- */
182
- async createUtilities(type = 'custom', options = {}) {
183
- await fs.mkdir(path.join('src', 'styles'), { recursive: true });
184
-
185
- const utilities = this.generateUtilityClasses(type);
186
- const filePath = path.join('src', 'styles', 'utilities.css');
187
-
188
- await fs.writeFile(filePath, utilities);
189
-
190
- return {
191
- type,
192
- path: filePath,
193
- categories: ['spacing', 'typography', 'layout', 'animation']
194
- };
195
- }
196
-
197
- /**
198
- * Generate utility classes based on type
199
- */
200
- generateUtilityClasses(type) {
201
- const baseUtilities = `/* Custom Tailwind Utilities */
202
-
203
- @layer utilities {`;
204
-
205
- const spacingUtilities = `
206
- /* Spacing utilities */
207
- .spacing-xs { @apply p-1; }
208
- .spacing-sm { @apply p-2; }
209
- .spacing-md { @apply p-4; }
210
- .spacing-lg { @apply p-8; }
211
- .spacing-xl { @apply p-16; }`;
212
-
213
- const typographyUtilities = `
214
- /* Typography utilities */
215
- .text-balance {
216
- text-wrap: balance;
217
- }`;
218
-
219
- const layoutUtilities = `
220
- /* Layout utilities */
221
- .center {
222
- @apply flex items-center justify-center;
223
- }`;
224
-
225
- const animationUtilities = `
226
- /* Animation utilities */
227
- .animate-fade-in {
228
- animation: fadeIn 0.5s ease-in-out;
229
- }
230
-
231
- @keyframes fadeIn {
232
- from { opacity: 0; }
233
- to { opacity: 1; }
234
- }`;
235
-
236
- let content = baseUtilities;
237
-
238
- if (type === 'spacing') {
239
- content += spacingUtilities;
240
- } else {
241
- content += spacingUtilities;
242
- content += typographyUtilities;
243
- content += layoutUtilities;
244
- content += animationUtilities;
245
- }
246
-
247
- content += '\n}';
248
-
249
- return content;
250
- }
251
-
252
- /**
253
- * Configure theme
254
- */
255
- async configureTheme(options = {}) {
256
- const config = {
257
- content: this.defaultConfig.content,
258
- theme: {
259
- extend: {
260
- colors: {
261
- primary: {
262
- 50: '#eff6ff',
263
- 500: '#3b82f6',
264
- 900: '#1e3a8a',
265
- },
266
- secondary: {
267
- 50: '#f0f9ff',
268
- 500: '#0ea5e9',
269
- 900: '#0c4a6e',
270
- },
271
- },
272
- fontFamily: {
273
- sans: ['Inter', 'system-ui', 'sans-serif'],
274
- mono: ['Fira Code', 'monospace'],
275
- },
276
- },
277
- },
278
- plugins: [],
279
- };
280
-
281
- if (options.dark) {
282
- config.darkMode = 'class';
283
- }
284
-
285
- const configString = this.generateConfigString(config);
286
- await fs.writeFile('tailwind.config.js', configString);
287
-
288
- return {
289
- path: 'tailwind.config.js',
290
- darkMode: options.dark || false,
291
- theme: 'extended'
292
- };
293
- }
294
-
295
- /**
296
- * Setup responsive breakpoints
297
- */
298
- async setupResponsive(options = {}) {
299
- const screens = {
300
- 'xs': '475px',
301
- 'sm': '640px',
302
- 'md': '768px',
303
- 'lg': '1024px',
304
- 'xl': '1280px',
305
- '2xl': '1536px',
306
- };
307
-
308
- if (options.custom) {
309
- screens['mobile'] = '320px';
310
- screens['tablet'] = '768px';
311
- screens['laptop'] = '1024px';
312
- screens['desktop'] = '1440px';
313
- }
314
-
315
- const config = {
316
- content: this.defaultConfig.content,
317
- theme: {
318
- screens,
319
- extend: {},
320
- },
321
- plugins: [],
322
- };
323
-
324
- const configString = this.generateConfigString(config);
325
- await fs.writeFile('tailwind.config.js', configString);
326
-
327
- return {
328
- path: 'tailwind.config.js',
329
- breakpoints: Object.keys(screens),
330
- custom: options.custom || false
331
- };
332
- }
333
-
334
- /**
335
- * Optimize for production
336
- */
337
- async optimizeProduction(options = {}) {
338
- // Ensure CSS file exists
339
- const cssPath = path.join('src', 'styles', 'main.css');
340
- try {
341
- await fs.access(cssPath);
342
- } catch {
343
- await fs.mkdir(path.join('src', 'styles'), { recursive: true });
344
- await fs.writeFile(cssPath, '@tailwind base;\n@tailwind components;\n@tailwind utilities;');
345
- }
346
-
347
- const config = {
348
- content: this.defaultConfig.content,
349
- theme: {
350
- extend: {},
351
- },
352
- plugins: [],
353
- corePlugins: {
354
- preflight: true,
355
- },
356
- };
357
-
358
- if (options.purge) {
359
- config.purge = {
360
- enabled: 'process.env.NODE_ENV === \'production\'',
361
- content: [
362
- './src/**/*.{js,jsx,ts,tsx}',
363
- './public/index.html',
364
- ],
365
- options: {
366
- safelist: [],
367
- },
368
- };
369
- }
370
-
371
- const configString = this.generateConfigString(config, options.purge);
372
- await fs.writeFile('tailwind.config.js', configString);
373
-
374
- return {
375
- path: 'tailwind.config.js',
376
- optimizations: {
377
- purge: options.purge || false,
378
- preflight: true
379
- }
380
- };
381
- }
382
-
383
- /**
384
- * Generate config string from object
385
- */
386
- generateConfigString(config, hasPurge = false) {
387
- let configStr = `/** @type {import('tailwindcss').Config} */
388
- module.exports = {`;
389
-
390
- // Content
391
- configStr += `
392
- content: [
393
- "./src/**/*.{js,jsx,ts,tsx}",
394
- "./public/index.html"
395
- ],`;
396
-
397
- // Dark mode if present
398
- if (config.darkMode) {
399
- configStr += `
400
- darkMode: "${config.darkMode}",`;
401
- }
402
-
403
- // Theme
404
- configStr += `
405
- theme: {`;
406
-
407
- if (config.theme.screens) {
408
- configStr += `
409
- screens: {
410
- ${Object.entries(config.theme.screens).map(([key, val]) => `'${key}': '${val}'`).join(',\n ')},
411
- },`;
412
- }
413
-
414
- if (config.theme.extend && Object.keys(config.theme.extend).length > 0) {
415
- configStr += `
416
- extend: {`;
417
-
418
- if (config.theme.extend.colors) {
419
- configStr += `
420
- colors: {
421
- primary: {
422
- 50: '#eff6ff',
423
- 500: '#3b82f6',
424
- 900: '#1e3a8a',
425
- },
426
- secondary: {
427
- 50: '#f0f9ff',
428
- 500: '#0ea5e9',
429
- 900: '#0c4a6e',
430
- },
431
- },`;
432
- }
433
-
434
- if (config.theme.extend.fontFamily) {
435
- configStr += `
436
- fontFamily: {
437
- sans: ['Inter', 'system-ui', 'sans-serif'],
438
- mono: ['Fira Code', 'monospace'],
439
- },`;
440
- }
441
-
442
- configStr += `
443
- },`;
444
- } else {
445
- configStr += `
446
- extend: {},`;
447
- }
448
-
449
- configStr += `
450
- },
451
- plugins: [],`;
452
-
453
- // Core plugins
454
- if (config.corePlugins) {
455
- configStr += `
456
- // Production optimizations
457
- corePlugins: {
458
- preflight: true,
459
- },`;
460
- }
461
-
462
- // Purge config
463
- if (hasPurge) {
464
- configStr += `
465
-
466
- // PurgeCSS configuration
467
- purge: {
468
- enabled: process.env.NODE_ENV === 'production',
469
- content: [
470
- './src/**/*.{js,jsx,ts,tsx}',
471
- './public/index.html',
472
- ],
473
- options: {
474
- safelist: [],
475
- },
476
- },`;
477
- }
478
-
479
- configStr += `
480
- }`;
481
-
482
- return configStr;
483
- }
484
- }
485
-
486
- module.exports = TailwindManager;