claude-autopm 1.18.0 → 1.20.1

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 (108) hide show
  1. package/README.md +159 -0
  2. package/autopm/.claude/agents/README.md +1 -1
  3. package/autopm/.claude/agents/core/mcp-manager.md +1 -1
  4. package/autopm/.claude/agents/decision-matrices/python-backend-selection.md +25 -25
  5. package/autopm/.claude/agents/decision-matrices/ui-framework-selection.md +43 -43
  6. package/autopm/.claude/agents/devops/github-operations-specialist.md +1 -1
  7. package/autopm/.claude/agents/frameworks/README.md +5 -5
  8. package/autopm/.claude/agents/frameworks/e2e-test-engineer.md +1 -1
  9. package/autopm/.claude/agents/frameworks/nats-messaging-expert.md +1 -1
  10. package/autopm/.claude/agents/frameworks/react-frontend-engineer.md +1 -1
  11. package/autopm/.claude/agents/frameworks/react-ui-expert.md +3 -3
  12. package/autopm/.claude/agents/frameworks/tailwindcss-expert.md +3 -3
  13. package/autopm/.claude/agents/frameworks/ux-design-expert.md +3 -3
  14. package/autopm/.claude/commands/infrastructure/traefik-setup.md +1 -1
  15. package/autopm/.claude/commands/playwright/test-scaffold.md +1 -1
  16. package/autopm/.claude/commands/pm/context.md +11 -0
  17. package/autopm/.claude/commands/pm/epic-decompose.md +25 -2
  18. package/autopm/.claude/commands/pm/epic-oneshot.md +13 -0
  19. package/autopm/.claude/commands/pm/epic-start.md +19 -0
  20. package/autopm/.claude/commands/pm/epic-sync-modular.md +10 -10
  21. package/autopm/.claude/commands/pm/epic-sync.md +14 -14
  22. package/autopm/.claude/commands/pm/issue-start.md +50 -5
  23. package/autopm/.claude/commands/pm/issue-sync.md +15 -15
  24. package/autopm/.claude/commands/pm/what-next.md +11 -0
  25. package/autopm/.claude/commands/ui/bootstrap-scaffold.md +6 -5
  26. package/autopm/.claude/commands/ui/tailwind-system.md +1 -1
  27. package/autopm/.claude/examples/mcp/playwright-mcp.md +2 -2
  28. package/autopm/.claude/examples/mcp-servers.example.json +2 -2
  29. package/autopm/.claude/hooks/docker-first-enforcement.sh +1 -1
  30. package/autopm/.claude/mcp/MCP-REGISTRY.md +1 -1
  31. package/autopm/.claude/mcp/playwright-mcp.md +2 -2
  32. package/autopm/.claude/rules/agent-coordination.md +26 -24
  33. package/autopm/.claude/rules/docker-first-development.md +1 -1
  34. package/autopm/.claude/rules/infrastructure-pipeline.md +1 -1
  35. package/autopm/.claude/rules/ui-development-standards.md +1 -1
  36. package/autopm/.claude/rules/visual-testing.md +3 -3
  37. package/autopm/.claude/scripts/azure/active-work.js +2 -2
  38. package/autopm/.claude/scripts/azure/blocked.js +13 -13
  39. package/autopm/.claude/scripts/azure/daily.js +1 -1
  40. package/autopm/.claude/scripts/azure/dashboard.js +1 -1
  41. package/autopm/.claude/scripts/azure/feature-list.js +2 -2
  42. package/autopm/.claude/scripts/azure/feature-status.js +1 -1
  43. package/autopm/.claude/scripts/azure/next-task.js +1 -1
  44. package/autopm/.claude/scripts/azure/search.js +1 -1
  45. package/autopm/.claude/scripts/azure/setup.js +15 -15
  46. package/autopm/.claude/scripts/azure/sprint-report.js +2 -2
  47. package/autopm/.claude/scripts/azure/sync.js +1 -1
  48. package/autopm/.claude/scripts/azure/us-list.js +1 -1
  49. package/autopm/.claude/scripts/azure/us-status.js +1 -1
  50. package/autopm/.claude/scripts/azure/validate.js +13 -13
  51. package/autopm/.claude/scripts/lib/frontmatter-utils.sh +42 -7
  52. package/autopm/.claude/scripts/lib/logging-utils.sh +20 -16
  53. package/autopm/.claude/scripts/lib/validation-utils.sh +1 -1
  54. package/autopm/.claude/scripts/pm/context.js +338 -0
  55. package/autopm/.claude/scripts/pm/issue-sync/format-comment.sh +3 -3
  56. package/autopm/.claude/scripts/pm/lib/README.md +85 -0
  57. package/autopm/.claude/scripts/pm/lib/logger.js +78 -0
  58. package/autopm/.claude/scripts/pm/next.js +25 -1
  59. package/autopm/.claude/scripts/pm/what-next.js +660 -0
  60. package/autopm/.claude/teams.json +3 -5
  61. package/autopm/.claude/templates/claude-templates/addons/devops-agents.md +2 -2
  62. package/autopm/.claude/templates/claude-templates/addons/docker-agents.md +4 -4
  63. package/autopm/.claude/templates/claude-templates/addons/minimal-agents.md +1 -1
  64. package/autopm/.claude/templates/issue-decomposition/api.yaml +2 -2
  65. package/autopm/.claude/templates/issue-decomposition/auth.yaml +4 -4
  66. package/autopm/.claude/templates/issue-decomposition/crud.yaml +3 -3
  67. package/autopm/.claude/templates/issue-decomposition/default.yaml +1 -1
  68. package/autopm/.claude/templates/issue-decomposition/ui-feature.yaml +2 -2
  69. package/bin/autopm.js +25 -0
  70. package/package.json +1 -2
  71. package/lib/agentExecutor.js.deprecated +0 -101
  72. package/lib/azure/cache.js +0 -80
  73. package/lib/azure/client.js +0 -77
  74. package/lib/azure/formatter.js +0 -177
  75. package/lib/commandHelpers.js +0 -177
  76. package/lib/context/manager.js +0 -290
  77. package/lib/documentation/manager.js +0 -528
  78. package/lib/github/workflow-manager.js +0 -546
  79. package/lib/helpers/azure-batch-api.js +0 -133
  80. package/lib/helpers/azure-cache-manager.js +0 -287
  81. package/lib/helpers/azure-parallel-processor.js +0 -158
  82. package/lib/helpers/azure-work-item-create.js +0 -278
  83. package/lib/helpers/gh-issue-create.js +0 -250
  84. package/lib/helpers/interactive-prompt.js +0 -336
  85. package/lib/helpers/output-manager.js +0 -335
  86. package/lib/helpers/progress-indicator.js +0 -258
  87. package/lib/performance/benchmarker.js +0 -429
  88. package/lib/pm/epic-decomposer.js +0 -273
  89. package/lib/pm/epic-syncer.js +0 -221
  90. package/lib/prdMetadata.js +0 -270
  91. package/lib/providers/azure/index.js +0 -234
  92. package/lib/providers/factory.js +0 -87
  93. package/lib/providers/github/index.js +0 -204
  94. package/lib/providers/interface.js +0 -73
  95. package/lib/python/scaffold-manager.js +0 -576
  96. package/lib/react/scaffold-manager.js +0 -745
  97. package/lib/regression/analyzer.js +0 -578
  98. package/lib/release/manager.js +0 -324
  99. package/lib/tailwind/manager.js +0 -486
  100. package/lib/traefik/manager.js +0 -484
  101. package/lib/utils/colors.js +0 -126
  102. package/lib/utils/config.js +0 -317
  103. package/lib/utils/filesystem.js +0 -316
  104. package/lib/utils/logger.js +0 -135
  105. package/lib/utils/prompts.js +0 -294
  106. package/lib/utils/shell.js +0 -237
  107. package/lib/validators/email-validator.js +0 -337
  108. 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;