@wipal/agent-team 1.0.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 (89) hide show
  1. package/.claude/rules/common/general-rules.md +141 -0
  2. package/.claude/rules/lessons/lessons.md +91 -0
  3. package/.claude/rules/role-rules/dev-fe-rules.md +146 -0
  4. package/.claude/rules/role-rules/sa-rules.md +226 -0
  5. package/.claude/skills/SKILL-INDEX.md +299 -0
  6. package/.claude/skills/community/security-validator/SKILL.md +392 -0
  7. package/.claude/skills/core/agent-creation/SKILL.md +338 -0
  8. package/.claude/skills/core/code-review/SKILL.md +154 -0
  9. package/.claude/skills/core/git-automation/SKILL.md +93 -0
  10. package/.claude/skills/core/retrospect-work/SKILL.md +172 -0
  11. package/.claude/skills/domain/architecture/adr-writing/SKILL.md +254 -0
  12. package/.claude/skills/domain/architecture/adr-writing/references/adr-best-practices.md +257 -0
  13. package/.claude/skills/domain/architecture/adr-writing/references/adr-examples.md +246 -0
  14. package/.claude/skills/domain/architecture/adr-writing/references/adr-template.md +160 -0
  15. package/.claude/skills/domain/architecture/architecture-patterns/SKILL.md +316 -0
  16. package/.claude/skills/domain/architecture/architecture-patterns/references/event-driven.md +393 -0
  17. package/.claude/skills/domain/architecture/architecture-patterns/references/microservices.md +315 -0
  18. package/.claude/skills/domain/architecture/architecture-patterns/references/monolith.md +321 -0
  19. package/.claude/skills/domain/architecture/architecture-patterns/references/serverless.md +457 -0
  20. package/.claude/skills/domain/architecture/performance-engineering/SKILL.md +227 -0
  21. package/.claude/skills/domain/architecture/performance-engineering/references/benchmarking.md +336 -0
  22. package/.claude/skills/domain/architecture/performance-engineering/references/caching-strategies.md +284 -0
  23. package/.claude/skills/domain/architecture/performance-engineering/references/optimization.md +298 -0
  24. package/.claude/skills/domain/architecture/security-architecture/SKILL.md +206 -0
  25. package/.claude/skills/domain/architecture/security-architecture/references/auth-patterns.md +209 -0
  26. package/.claude/skills/domain/architecture/security-architecture/references/compliance.md +246 -0
  27. package/.claude/skills/domain/architecture/security-architecture/references/threat-modeling.md +219 -0
  28. package/.claude/skills/domain/architecture/system-design/SKILL.md +227 -0
  29. package/.claude/skills/domain/architecture/system-design/references/distributed-systems.md +231 -0
  30. package/.claude/skills/domain/architecture/system-design/references/resilience.md +344 -0
  31. package/.claude/skills/domain/architecture/system-design/references/scalability.md +303 -0
  32. package/.claude/skills/domain/architecture/tech-selection/SKILL.md +192 -0
  33. package/.claude/skills/domain/architecture/tech-selection/references/build-vs-buy.md +258 -0
  34. package/.claude/skills/domain/architecture/tech-selection/references/evaluation-framework.md +203 -0
  35. package/.claude/skills/domain/architecture/tech-selection/references/tech-radar.md +257 -0
  36. package/.claude/skills/domain/backend/api-design/SKILL.md +121 -0
  37. package/.claude/skills/domain/backend/database-design/SKILL.md +156 -0
  38. package/.claude/skills/domain/backend/performance-be/SKILL.md +210 -0
  39. package/.claude/skills/domain/backend/security/SKILL.md +138 -0
  40. package/.claude/skills/domain/backend/testing-be/SKILL.md +203 -0
  41. package/.claude/skills/domain/devops/ci-cd/SKILL.md +188 -0
  42. package/.claude/skills/domain/devops/containerization/SKILL.md +177 -0
  43. package/.claude/skills/domain/devops/deployment/SKILL.md +198 -0
  44. package/.claude/skills/domain/devops/infrastructure-as-code/SKILL.md +178 -0
  45. package/.claude/skills/domain/devops/monitoring/SKILL.md +163 -0
  46. package/.claude/skills/domain/frontend/accessibility/SKILL.md +179 -0
  47. package/.claude/skills/domain/frontend/frontend-design/SKILL.md +138 -0
  48. package/.claude/skills/domain/frontend/performance-fe/SKILL.md +195 -0
  49. package/.claude/skills/domain/frontend/state-management/SKILL.md +190 -0
  50. package/.claude/skills/domain/frontend/testing-fe/SKILL.md +193 -0
  51. package/.claude/skills/domain/product/requirements-gathering/SKILL.md +136 -0
  52. package/.claude/skills/domain/product/roadmap-planning/SKILL.md +169 -0
  53. package/.claude/skills/domain/product/sprint-planning/SKILL.md +151 -0
  54. package/.claude/skills/domain/product/stakeholder-communication/SKILL.md +162 -0
  55. package/.claude/skills/domain/product/user-stories/SKILL.md +141 -0
  56. package/.claude/skills/domain/quality/bug-reporting/SKILL.md +150 -0
  57. package/.claude/skills/domain/quality/regression-testing/SKILL.md +178 -0
  58. package/.claude/skills/domain/quality/test-automation/SKILL.md +185 -0
  59. package/.claude/skills/domain/quality/test-planning/SKILL.md +177 -0
  60. package/.claude/skills/leadership/code-review-advanced/SKILL.md +167 -0
  61. package/.claude/skills/leadership/mentoring/SKILL.md +151 -0
  62. package/.claude/skills/leadership/technical-debt/SKILL.md +166 -0
  63. package/.claude/skills/leadership/technical-decision/SKILL.md +160 -0
  64. package/.claude/skills/security-reports/.gitkeep +0 -0
  65. package/.claude/skills/skills-registry.yaml +441 -0
  66. package/README.md +232 -0
  67. package/bin/agent-team.js +107 -0
  68. package/package.json +51 -0
  69. package/src/commands/add.js +227 -0
  70. package/src/commands/init.js +136 -0
  71. package/src/commands/list.js +66 -0
  72. package/src/commands/remove.js +71 -0
  73. package/src/commands/switch.js +53 -0
  74. package/src/index.js +11 -0
  75. package/src/interactive/prompts.js +153 -0
  76. package/src/server/api/agents.js +150 -0
  77. package/src/server/api/roles.js +97 -0
  78. package/src/server/api/skills.js +79 -0
  79. package/src/server/index.js +78 -0
  80. package/src/ui/agents.html +174 -0
  81. package/src/ui/css/styles.css +470 -0
  82. package/src/ui/index.html +107 -0
  83. package/src/ui/roles.html +371 -0
  84. package/src/ui/skills.html +332 -0
  85. package/src/utils/file-utils.js +193 -0
  86. package/src/utils/skill-resolver.js +594 -0
  87. package/src/utils/skill-scanner.js +154 -0
  88. package/templates/CLAUDE.md.tmpl +42 -0
  89. package/templates/knowledge.md.tmpl +31 -0
@@ -0,0 +1,470 @@
1
+ /* Agent Team Dashboard Styles */
2
+
3
+ :root {
4
+ --primary: #3b82f6;
5
+ --primary-dark: #2563eb;
6
+ --secondary: #64748b;
7
+ --success: #22c55e;
8
+ --danger: #ef4444;
9
+ --warning: #f59e0b;
10
+ --bg: #f8fafc;
11
+ --bg-card: #ffffff;
12
+ --text: #1e293b;
13
+ --text-muted: #64748b;
14
+ --border: #e2e8f0;
15
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
16
+ }
17
+
18
+ * {
19
+ box-sizing: border-box;
20
+ margin: 0;
21
+ padding: 0;
22
+ }
23
+
24
+ body {
25
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
26
+ background: var(--bg);
27
+ color: var(--text);
28
+ line-height: 1.6;
29
+ }
30
+
31
+ .container {
32
+ max-width: 1200px;
33
+ margin: 0 auto;
34
+ padding: 2rem;
35
+ }
36
+
37
+ /* Header */
38
+ .header {
39
+ text-align: center;
40
+ margin-bottom: 2rem;
41
+ }
42
+
43
+ .header h1 {
44
+ font-size: 2rem;
45
+ margin-bottom: 0.5rem;
46
+ }
47
+
48
+ .subtitle {
49
+ color: var(--text-muted);
50
+ }
51
+
52
+ /* Navigation */
53
+ .nav {
54
+ display: flex;
55
+ gap: 1rem;
56
+ margin-bottom: 2rem;
57
+ padding-bottom: 1rem;
58
+ border-bottom: 1px solid var(--border);
59
+ }
60
+
61
+ .nav-link {
62
+ padding: 0.5rem 1rem;
63
+ text-decoration: none;
64
+ color: var(--text-muted);
65
+ border-radius: 0.375rem;
66
+ transition: all 0.2s;
67
+ }
68
+
69
+ .nav-link:hover {
70
+ background: var(--border);
71
+ color: var(--text);
72
+ }
73
+
74
+ .nav-link.active {
75
+ background: var(--primary);
76
+ color: white;
77
+ }
78
+
79
+ /* Stats Grid */
80
+ .stats-grid {
81
+ display: grid;
82
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
83
+ gap: 1.5rem;
84
+ margin-bottom: 2rem;
85
+ }
86
+
87
+ .stat-card {
88
+ background: var(--bg-card);
89
+ padding: 1.5rem;
90
+ border-radius: 0.5rem;
91
+ box-shadow: var(--shadow);
92
+ text-align: center;
93
+ }
94
+
95
+ .stat-value {
96
+ font-size: 2.5rem;
97
+ font-weight: bold;
98
+ color: var(--primary);
99
+ }
100
+
101
+ .stat-label {
102
+ color: var(--text-muted);
103
+ font-size: 0.875rem;
104
+ margin-top: 0.5rem;
105
+ }
106
+
107
+ /* Sections */
108
+ .section {
109
+ background: var(--bg-card);
110
+ border-radius: 0.5rem;
111
+ padding: 1.5rem;
112
+ margin-bottom: 1.5rem;
113
+ box-shadow: var(--shadow);
114
+ }
115
+
116
+ .section h2 {
117
+ margin-bottom: 1rem;
118
+ font-size: 1.25rem;
119
+ }
120
+
121
+ /* Actions */
122
+ .actions-bar {
123
+ display: flex;
124
+ justify-content: flex-end;
125
+ margin-bottom: 1.5rem;
126
+ }
127
+
128
+ .actions-grid {
129
+ display: flex;
130
+ gap: 1rem;
131
+ flex-wrap: wrap;
132
+ }
133
+
134
+ /* Buttons */
135
+ .btn {
136
+ padding: 0.75rem 1.5rem;
137
+ border: none;
138
+ border-radius: 0.375rem;
139
+ cursor: pointer;
140
+ font-size: 1rem;
141
+ transition: all 0.2s;
142
+ display: inline-flex;
143
+ align-items: center;
144
+ gap: 0.5rem;
145
+ }
146
+
147
+ .btn-primary {
148
+ background: var(--primary);
149
+ color: white;
150
+ }
151
+
152
+ .btn-primary:hover {
153
+ background: var(--primary-dark);
154
+ }
155
+
156
+ .btn-secondary {
157
+ background: var(--secondary);
158
+ color: white;
159
+ }
160
+
161
+ .btn-secondary:hover {
162
+ opacity: 0.9;
163
+ }
164
+
165
+ .btn-danger {
166
+ background: var(--danger);
167
+ color: white;
168
+ }
169
+
170
+ .btn:disabled {
171
+ opacity: 0.5;
172
+ cursor: not-allowed;
173
+ }
174
+
175
+ /* Agent Cards */
176
+ .agent-card {
177
+ background: var(--bg-card);
178
+ border: 1px solid var(--border);
179
+ border-radius: 0.5rem;
180
+ padding: 1.5rem;
181
+ margin-bottom: 1rem;
182
+ transition: all 0.2s;
183
+ }
184
+
185
+ .agent-card:hover {
186
+ border-color: var(--primary);
187
+ box-shadow: var(--shadow);
188
+ }
189
+
190
+ .agent-header {
191
+ display: flex;
192
+ justify-content: space-between;
193
+ align-items: center;
194
+ margin-bottom: 1rem;
195
+ }
196
+
197
+ .agent-name {
198
+ font-size: 1.25rem;
199
+ font-weight: 600;
200
+ }
201
+
202
+ .agent-role {
203
+ background: var(--primary);
204
+ color: white;
205
+ padding: 0.25rem 0.75rem;
206
+ border-radius: 1rem;
207
+ font-size: 0.75rem;
208
+ text-transform: uppercase;
209
+ }
210
+
211
+ .agent-variants {
212
+ display: flex;
213
+ flex-wrap: wrap;
214
+ gap: 0.5rem;
215
+ margin-bottom: 1rem;
216
+ }
217
+
218
+ .variant-tag {
219
+ background: var(--bg);
220
+ padding: 0.25rem 0.5rem;
221
+ border-radius: 0.25rem;
222
+ font-size: 0.75rem;
223
+ }
224
+
225
+ .agent-skills {
226
+ display: flex;
227
+ flex-wrap: wrap;
228
+ gap: 0.25rem;
229
+ }
230
+
231
+ .skill-tag {
232
+ background: var(--border);
233
+ padding: 0.125rem 0.5rem;
234
+ border-radius: 0.25rem;
235
+ font-size: 0.75rem;
236
+ color: var(--text-muted);
237
+ }
238
+
239
+ .agent-actions {
240
+ display: flex;
241
+ gap: 0.5rem;
242
+ margin-top: 1rem;
243
+ padding-top: 1rem;
244
+ border-top: 1px solid var(--border);
245
+ }
246
+
247
+ .agent-actions .btn {
248
+ padding: 0.5rem 1rem;
249
+ font-size: 0.875rem;
250
+ }
251
+
252
+ /* Modal */
253
+ .modal-overlay {
254
+ position: fixed;
255
+ top: 0;
256
+ left: 0;
257
+ right: 0;
258
+ bottom: 0;
259
+ background: rgba(0, 0, 0, 0.5);
260
+ display: flex;
261
+ align-items: center;
262
+ justify-content: center;
263
+ z-index: 1000;
264
+ }
265
+
266
+ .modal {
267
+ background: var(--bg-card);
268
+ border-radius: 0.5rem;
269
+ width: 100%;
270
+ max-width: 600px;
271
+ max-height: 90vh;
272
+ overflow-y: auto;
273
+ }
274
+
275
+ .modal-header {
276
+ display: flex;
277
+ justify-content: space-between;
278
+ align-items: center;
279
+ padding: 1.5rem;
280
+ border-bottom: 1px solid var(--border);
281
+ }
282
+
283
+ .modal-header h2 {
284
+ margin: 0;
285
+ }
286
+
287
+ .modal-close {
288
+ background: none;
289
+ border: none;
290
+ font-size: 1.5rem;
291
+ cursor: pointer;
292
+ color: var(--text-muted);
293
+ }
294
+
295
+ .modal-body {
296
+ padding: 1.5rem;
297
+ }
298
+
299
+ .modal-footer {
300
+ padding: 1.5rem;
301
+ border-top: 1px solid var(--border);
302
+ display: flex;
303
+ justify-content: flex-end;
304
+ gap: 1rem;
305
+ }
306
+
307
+ /* Forms */
308
+ .form-group {
309
+ margin-bottom: 1.5rem;
310
+ }
311
+
312
+ .form-group label {
313
+ display: block;
314
+ margin-bottom: 0.5rem;
315
+ font-weight: 500;
316
+ }
317
+
318
+ .input {
319
+ width: 100%;
320
+ padding: 0.75rem;
321
+ border: 1px solid var(--border);
322
+ border-radius: 0.375rem;
323
+ font-size: 1rem;
324
+ }
325
+
326
+ .input:focus {
327
+ outline: none;
328
+ border-color: var(--primary);
329
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
330
+ }
331
+
332
+ .hint {
333
+ color: var(--text-muted);
334
+ font-size: 0.75rem;
335
+ margin-top: 0.25rem;
336
+ }
337
+
338
+ /* Role Selector */
339
+ .role-selector {
340
+ display: grid;
341
+ gap: 0.5rem;
342
+ }
343
+
344
+ .role-option {
345
+ display: flex;
346
+ align-items: flex-start;
347
+ padding: 1rem;
348
+ border: 1px solid var(--border);
349
+ border-radius: 0.375rem;
350
+ cursor: pointer;
351
+ transition: all 0.2s;
352
+ }
353
+
354
+ .role-option:hover {
355
+ border-color: var(--primary);
356
+ }
357
+
358
+ .role-option.selected,
359
+ .role-option:has(input:checked) {
360
+ border-color: var(--primary);
361
+ background: rgba(59, 130, 246, 0.05);
362
+ }
363
+
364
+ .role-option input {
365
+ margin-right: 1rem;
366
+ margin-top: 0.25rem;
367
+ }
368
+
369
+ .role-info strong {
370
+ display: block;
371
+ margin-bottom: 0.25rem;
372
+ }
373
+
374
+ .role-info p {
375
+ margin: 0;
376
+ color: var(--text-muted);
377
+ font-size: 0.875rem;
378
+ }
379
+
380
+ /* Variants Section */
381
+ .variants-section {
382
+ margin-top: 1.5rem;
383
+ padding-top: 1.5rem;
384
+ border-top: 1px solid var(--border);
385
+ }
386
+
387
+ .variants-section h3 {
388
+ margin-bottom: 1rem;
389
+ }
390
+
391
+ .variant-group {
392
+ margin-bottom: 1rem;
393
+ }
394
+
395
+ .variant-group-label {
396
+ font-weight: 500;
397
+ margin-bottom: 0.5rem;
398
+ }
399
+
400
+ .variant-options {
401
+ display: flex;
402
+ flex-wrap: wrap;
403
+ gap: 0.5rem;
404
+ }
405
+
406
+ .variant-option {
407
+ padding: 0.5rem 1rem;
408
+ border: 1px solid var(--border);
409
+ border-radius: 0.375rem;
410
+ cursor: pointer;
411
+ transition: all 0.2s;
412
+ font-size: 0.875rem;
413
+ }
414
+
415
+ .variant-option:hover {
416
+ border-color: var(--primary);
417
+ }
418
+
419
+ .variant-option.selected {
420
+ border-color: var(--primary);
421
+ background: var(--primary);
422
+ color: white;
423
+ }
424
+
425
+ /* Skills Preview */
426
+ .skills-preview {
427
+ margin-top: 1.5rem;
428
+ padding-top: 1.5rem;
429
+ border-top: 1px solid var(--border);
430
+ }
431
+
432
+ .skills-preview h3 {
433
+ margin-bottom: 1rem;
434
+ }
435
+
436
+ .skills-list {
437
+ display: flex;
438
+ flex-wrap: wrap;
439
+ gap: 0.5rem;
440
+ }
441
+
442
+ /* Loading */
443
+ .loading {
444
+ text-align: center;
445
+ padding: 2rem;
446
+ color: var(--text-muted);
447
+ }
448
+
449
+ /* Utility */
450
+ [x-cloak] { display: none !important; }
451
+
452
+ /* Responsive */
453
+ @media (max-width: 768px) {
454
+ .container {
455
+ padding: 1rem;
456
+ }
457
+
458
+ .stats-grid {
459
+ grid-template-columns: repeat(2, 1fr);
460
+ }
461
+
462
+ .nav {
463
+ overflow-x: auto;
464
+ }
465
+
466
+ .modal {
467
+ margin: 1rem;
468
+ max-height: calc(100vh - 2rem);
469
+ }
470
+ }
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Agent Team Dashboard</title>
7
+ <script src="https://unpkg.com/htmx.org@1.9.10"></script>
8
+ <script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
9
+ <link rel="stylesheet" href="/ui/css/styles.css">
10
+ </head>
11
+ <body>
12
+ <div class="container">
13
+ <!-- Header -->
14
+ <header class="header">
15
+ <h1>🤖 Agent Team Dashboard</h1>
16
+ <p class="subtitle">Manage AI agents for your project</p>
17
+ </header>
18
+
19
+ <!-- Navigation -->
20
+ <nav class="nav">
21
+ <a href="/ui/" class="nav-link active">Dashboard</a>
22
+ <a href="/ui/agents.html" class="nav-link">Agents</a>
23
+ <a href="/ui/skills.html" class="nav-link">Skills</a>
24
+ <a href="/ui/roles.html" class="nav-link">Roles</a>
25
+ </nav>
26
+
27
+ <!-- Stats Cards -->
28
+ <div class="stats-grid" hx-get="/api/agents" hx-trigger="load" hx-swap="innerHTML">
29
+ <!-- Loaded via HTMX -->
30
+ <div class="loading">Loading...</div>
31
+ </div>
32
+
33
+ <!-- Quick Actions -->
34
+ <section class="section">
35
+ <h2>Quick Actions</h2>
36
+ <div class="actions-grid">
37
+ <button class="btn btn-primary" onclick="location.href='/ui/agents.html?action=add'">
38
+ ➕ Add Agent
39
+ </button>
40
+ <button class="btn btn-secondary" onclick="location.href='/ui/skills.html'">
41
+ 📚 Browse Skills
42
+ </button>
43
+ <button class="btn btn-secondary" onclick="location.href='/ui/roles.html'">
44
+ ⚙️ Configure Roles
45
+ </button>
46
+ </div>
47
+ </section>
48
+
49
+ <!-- Recent Agents -->
50
+ <section class="section">
51
+ <h2>Your Agents</h2>
52
+ <div id="agents-list" hx-get="/api/agents" hx-trigger="load">
53
+ <div class="loading">Loading agents...</div>
54
+ </div>
55
+ </section>
56
+
57
+ <!-- Available Roles -->
58
+ <section class="section">
59
+ <h2>Available Roles</h2>
60
+ <div id="roles-list" hx-get="/api/agents/meta/roles" hx-trigger="load">
61
+ <div class="loading">Loading roles...</div>
62
+ </div>
63
+ </section>
64
+ </div>
65
+
66
+ <script>
67
+ // Transform stats response
68
+ document.body.addEventListener('htmx:beforeSwap', function(evt) {
69
+ if (evt.detail.pathInfo.requestPath === '/api/agents') {
70
+ // First load - render as stats
71
+ if (evt.detail.target.matches('.stats-grid')) {
72
+ try {
73
+ const agents = JSON.parse(evt.detail.xhr.response);
74
+ const statsHtml = renderStats(agents);
75
+ evt.detail.swap = 'innerHTML';
76
+ evt.detail.xhr.response = statsHtml;
77
+ } catch (e) {}
78
+ }
79
+ }
80
+ });
81
+
82
+ function renderStats(agents) {
83
+ const total = agents.length;
84
+ const roles = [...new Set(agents.map(a => a.variants?.base_role).filter(Boolean))];
85
+
86
+ return `
87
+ <div class="stat-card">
88
+ <div class="stat-value">${total}</div>
89
+ <div class="stat-label">Total Agents</div>
90
+ </div>
91
+ <div class="stat-card">
92
+ <div class="stat-value">${roles.length}</div>
93
+ <div class="stat-label">Roles Used</div>
94
+ </div>
95
+ <div class="stat-card">
96
+ <div class="stat-value">37</div>
97
+ <div class="stat-label">Skills Available</div>
98
+ </div>
99
+ <div class="stat-card">
100
+ <div class="stat-value">7</div>
101
+ <div class="stat-label">Roles Available</div>
102
+ </div>
103
+ `;
104
+ }
105
+ </script>
106
+ </body>
107
+ </html>