claude-autopm 1.17.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 (76) 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/bin/commands/team.js +86 -0
  38. package/package.json +1 -1
  39. package/lib/agentExecutor.js.deprecated +0 -101
  40. package/lib/azure/cache.js +0 -80
  41. package/lib/azure/client.js +0 -77
  42. package/lib/azure/formatter.js +0 -177
  43. package/lib/commandHelpers.js +0 -177
  44. package/lib/context/manager.js +0 -290
  45. package/lib/documentation/manager.js +0 -528
  46. package/lib/github/workflow-manager.js +0 -546
  47. package/lib/helpers/azure-batch-api.js +0 -133
  48. package/lib/helpers/azure-cache-manager.js +0 -287
  49. package/lib/helpers/azure-parallel-processor.js +0 -158
  50. package/lib/helpers/azure-work-item-create.js +0 -278
  51. package/lib/helpers/gh-issue-create.js +0 -250
  52. package/lib/helpers/interactive-prompt.js +0 -336
  53. package/lib/helpers/output-manager.js +0 -335
  54. package/lib/helpers/progress-indicator.js +0 -258
  55. package/lib/performance/benchmarker.js +0 -429
  56. package/lib/pm/epic-decomposer.js +0 -273
  57. package/lib/pm/epic-syncer.js +0 -221
  58. package/lib/prdMetadata.js +0 -270
  59. package/lib/providers/azure/index.js +0 -234
  60. package/lib/providers/factory.js +0 -87
  61. package/lib/providers/github/index.js +0 -204
  62. package/lib/providers/interface.js +0 -73
  63. package/lib/python/scaffold-manager.js +0 -576
  64. package/lib/react/scaffold-manager.js +0 -745
  65. package/lib/regression/analyzer.js +0 -578
  66. package/lib/release/manager.js +0 -324
  67. package/lib/tailwind/manager.js +0 -486
  68. package/lib/traefik/manager.js +0 -484
  69. package/lib/utils/colors.js +0 -126
  70. package/lib/utils/config.js +0 -317
  71. package/lib/utils/filesystem.js +0 -316
  72. package/lib/utils/logger.js +0 -135
  73. package/lib/utils/prompts.js +0 -294
  74. package/lib/utils/shell.js +0 -237
  75. package/lib/validators/email-validator.js +0 -337
  76. 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;