@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,371 @@
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>Roles - 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
+ <style>
11
+ .role-card {
12
+ background: var(--bg-card);
13
+ border: 1px solid var(--border);
14
+ border-radius: 0.5rem;
15
+ padding: 1.5rem;
16
+ transition: all 0.2s;
17
+ }
18
+ .role-card:hover {
19
+ border-color: var(--primary);
20
+ }
21
+ .role-card.selected {
22
+ border-color: var(--primary);
23
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
24
+ }
25
+ .role-name {
26
+ font-size: 1.25rem;
27
+ font-weight: 600;
28
+ margin-bottom: 0.25rem;
29
+ }
30
+ .role-description {
31
+ color: var(--text-muted);
32
+ font-size: 0.875rem;
33
+ margin-bottom: 1rem;
34
+ }
35
+ .role-section {
36
+ margin-top: 1rem;
37
+ }
38
+ .role-section-title {
39
+ font-size: 0.75rem;
40
+ text-transform: uppercase;
41
+ color: var(--text-muted);
42
+ margin-bottom: 0.5rem;
43
+ }
44
+ .role-inherits {
45
+ display: flex;
46
+ gap: 0.5rem;
47
+ flex-wrap: wrap;
48
+ }
49
+ .inherit-badge {
50
+ background: var(--warning);
51
+ color: white;
52
+ padding: 0.25rem 0.5rem;
53
+ border-radius: 0.25rem;
54
+ font-size: 0.75rem;
55
+ }
56
+ .skills-count {
57
+ background: var(--success);
58
+ color: white;
59
+ padding: 0.25rem 0.75rem;
60
+ border-radius: 1rem;
61
+ font-size: 0.75rem;
62
+ }
63
+ .roles-grid {
64
+ display: grid;
65
+ grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
66
+ gap: 1rem;
67
+ }
68
+ .config-panel {
69
+ background: var(--bg-card);
70
+ border: 1px solid var(--border);
71
+ border-radius: 0.5rem;
72
+ padding: 1.5rem;
73
+ margin-top: 2rem;
74
+ }
75
+ .config-panel h3 {
76
+ margin-bottom: 1rem;
77
+ }
78
+ .yaml-editor {
79
+ width: 100%;
80
+ min-height: 300px;
81
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
82
+ font-size: 0.875rem;
83
+ padding: 1rem;
84
+ border: 1px solid var(--border);
85
+ border-radius: 0.375rem;
86
+ background: var(--bg);
87
+ resize: vertical;
88
+ }
89
+ .yaml-editor:focus {
90
+ outline: none;
91
+ border-color: var(--primary);
92
+ }
93
+ .config-actions {
94
+ display: flex;
95
+ gap: 1rem;
96
+ margin-top: 1rem;
97
+ }
98
+ .info-box {
99
+ background: rgba(59, 130, 246, 0.1);
100
+ border: 1px solid var(--primary);
101
+ border-radius: 0.375rem;
102
+ padding: 1rem;
103
+ margin-bottom: 1rem;
104
+ font-size: 0.875rem;
105
+ }
106
+ .info-box strong {
107
+ color: var(--primary);
108
+ }
109
+ .skill-list {
110
+ display: flex;
111
+ flex-wrap: wrap;
112
+ gap: 0.25rem;
113
+ max-height: 100px;
114
+ overflow-y: auto;
115
+ }
116
+ .skill-badge {
117
+ background: var(--bg);
118
+ padding: 0.125rem 0.5rem;
119
+ border-radius: 0.25rem;
120
+ font-size: 0.7rem;
121
+ color: var(--text-muted);
122
+ }
123
+ .skill-badge.core {
124
+ background: var(--primary);
125
+ color: white;
126
+ }
127
+ .skill-badge.role {
128
+ background: var(--success);
129
+ color: white;
130
+ }
131
+ .skill-badge.inherited {
132
+ background: var(--warning);
133
+ color: white;
134
+ }
135
+ </style>
136
+ </head>
137
+ <body>
138
+ <div class="container" x-data="rolesApp()">
139
+ <!-- Header -->
140
+ <header class="header">
141
+ <h1>Role Configuration</h1>
142
+ <p class="subtitle">Configure roles and skill inheritance</p>
143
+ </header>
144
+
145
+ <!-- Navigation -->
146
+ <nav class="nav">
147
+ <a href="/ui/" class="nav-link">Dashboard</a>
148
+ <a href="/ui/agents.html" class="nav-link">Agents</a>
149
+ <a href="/ui/skills.html" class="nav-link">Skills</a>
150
+ <a href="/ui/roles.html" class="nav-link active">Roles</a>
151
+ </nav>
152
+
153
+ <!-- Info Box -->
154
+ <div class="info-box">
155
+ <strong>Tip:</strong> Tech Lead and SA roles support inheritance. Tech Lead inherits from dev-fe + dev-be,
156
+ giving it 17 skills total. Customize roles by editing the YAML configuration below.
157
+ </div>
158
+
159
+ <!-- Roles Grid -->
160
+ <section class="section">
161
+ <h2>Available Roles</h2>
162
+ <div class="roles-grid" id="roles-grid">
163
+ <template x-for="role in roles" :key="role.name">
164
+ <div class="role-card" :class="{ selected: selectedRole?.name === role.name }"
165
+ @click="selectRole(role)">
166
+ <div style="display: flex; justify-content: space-between; align-items: start;">
167
+ <div>
168
+ <div class="role-name" x-text="role.displayName || role.name"></div>
169
+ <div class="role-description" x-text="role.description"></div>
170
+ </div>
171
+ <span class="skills-count" x-text="getSkillCount(role) + ' skills'"></span>
172
+ </div>
173
+
174
+ <!-- Inheritance -->
175
+ <div class="role-section" x-show="role.skills?.inherit?.length">
176
+ <div class="role-section-title">Inherits from</div>
177
+ <div class="role-inherits">
178
+ <template x-for="parent in role.skills?.inherit" :key="parent">
179
+ <span class="inherit-badge" x-text="parent"></span>
180
+ </template>
181
+ </div>
182
+ </div>
183
+
184
+ <!-- Categories -->
185
+ <div class="role-section" x-show="role.skills?.include?.length">
186
+ <div class="role-section-title">Skill Categories</div>
187
+ <div class="skill-list">
188
+ <template x-for="inc in role.skills?.include" :key="inc.category || inc">
189
+ <span class="skill-badge" x-text="inc.category || inc"></span>
190
+ </template>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </template>
195
+ </div>
196
+ </section>
197
+
198
+ <!-- Role Detail -->
199
+ <section class="section" x-show="selectedRole" x-cloak>
200
+ <h2>Role Details: <span x-text="selectedRole?.name"></span></h2>
201
+
202
+ <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-top: 1rem;">
203
+ <div>
204
+ <div class="role-section-title">Core Skills</div>
205
+ <div class="skill-list">
206
+ <template x-for="skill in roleDetails.core" :key="skill">
207
+ <span class="skill-badge core" x-text="skill"></span>
208
+ </template>
209
+ </div>
210
+ </div>
211
+
212
+ <div>
213
+ <div class="role-section-title">Role Skills</div>
214
+ <div class="skill-list">
215
+ <template x-for="skill in roleDetails.role" :key="skill">
216
+ <span class="skill-badge role" x-text="skill"></span>
217
+ </template>
218
+ </div>
219
+ </div>
220
+
221
+ <div x-show="roleDetails.inherited?.length">
222
+ <div class="role-section-title">Inherited Skills</div>
223
+ <div class="skill-list">
224
+ <template x-for="skill in roleDetails.inherited" :key="skill">
225
+ <span class="skill-badge inherited" x-text="skill"></span>
226
+ </template>
227
+ </div>
228
+ </div>
229
+ </div>
230
+
231
+ <div style="margin-top: 1rem;">
232
+ <strong>Total Skills: <span x-text="roleDetails.all?.length || 0"></span></strong>
233
+ </div>
234
+ </section>
235
+
236
+ <!-- YAML Configuration -->
237
+ <div class="config-panel">
238
+ <h3>Project Role Configuration</h3>
239
+ <p style="color: var(--text-muted); font-size: 0.875rem; margin-bottom: 1rem;">
240
+ Edit <code>.claude/roles.yaml</code> to customize roles for this project. Changes here override defaults.
241
+ </p>
242
+
243
+ <textarea class="yaml-editor" x-model="yamlConfig"
244
+ @input="yamlChanged = true"></textarea>
245
+
246
+ <div class="config-actions">
247
+ <button class="btn btn-primary" @click="saveConfig()" :disabled="!yamlChanged || saving">
248
+ <span x-show="saving">Saving...</span>
249
+ <span x-show="!saving">Save Configuration</span>
250
+ </button>
251
+ <button class="btn btn-secondary" @click="resetConfig()">
252
+ Reset to Default
253
+ </button>
254
+ </div>
255
+
256
+ <div x-show="saveMessage" :style="{ color: saveSuccess ? 'var(--success)' : 'var(--danger)', marginTop: '1rem' }">
257
+ <span x-text="saveMessage"></span>
258
+ </div>
259
+ </div>
260
+ </div>
261
+
262
+ <script>
263
+ function rolesApp() {
264
+ return {
265
+ roles: [],
266
+ selectedRole: null,
267
+ roleDetails: { core: [], role: [], inherited: [], all: [] },
268
+ yamlConfig: '',
269
+ yamlChanged: false,
270
+ saving: false,
271
+ saveMessage: '',
272
+ saveSuccess: false,
273
+
274
+ async init() {
275
+ await this.loadRoles();
276
+ await this.loadConfig();
277
+ },
278
+
279
+ async loadRoles() {
280
+ try {
281
+ const response = await fetch('/api/roles');
282
+ const config = await response.json();
283
+ this.roles = Object.entries(config.roles || {}).map(([name, def]) => ({
284
+ name,
285
+ ...def
286
+ }));
287
+ } catch (error) {
288
+ console.error('Failed to load roles:', error);
289
+ }
290
+ },
291
+
292
+ async loadConfig() {
293
+ try {
294
+ const response = await fetch('/api/roles');
295
+ const config = await response.json();
296
+ this.yamlConfig = JSON.stringify(config, null, 2);
297
+ } catch (error) {
298
+ console.error('Failed to load config:', error);
299
+ }
300
+ },
301
+
302
+ getSkillCount(role) {
303
+ let count = 3; // Core skills
304
+
305
+ if (role.skills?.include) {
306
+ count += role.skills.include.length * 2; // Estimate
307
+ }
308
+
309
+ if (role.skills?.inherit) {
310
+ // Add inherited counts
311
+ role.skills.inherit.forEach(parent => {
312
+ if (parent === 'dev-fe' || parent === 'dev-be') {
313
+ count += 5;
314
+ }
315
+ });
316
+ }
317
+
318
+ return count;
319
+ },
320
+
321
+ async selectRole(role) {
322
+ this.selectedRole = role;
323
+
324
+ // Load role details
325
+ try {
326
+ const response = await fetch(`/api/roles/${role.name}`);
327
+ this.roleDetails = await response.json();
328
+ } catch (error) {
329
+ console.error('Failed to load role details:', error);
330
+ }
331
+ },
332
+
333
+ async saveConfig() {
334
+ this.saving = true;
335
+ this.saveMessage = '';
336
+
337
+ try {
338
+ const config = JSON.parse(this.yamlConfig);
339
+ const response = await fetch('/api/roles', {
340
+ method: 'PUT',
341
+ headers: { 'Content-Type': 'application/json' },
342
+ body: JSON.stringify(config)
343
+ });
344
+
345
+ if (response.ok) {
346
+ this.saveSuccess = true;
347
+ this.saveMessage = 'Configuration saved successfully!';
348
+ this.yamlChanged = false;
349
+ await this.loadRoles();
350
+ } else {
351
+ const error = await response.json();
352
+ this.saveSuccess = false;
353
+ this.saveMessage = 'Error: ' + error.error;
354
+ }
355
+ } catch (error) {
356
+ this.saveSuccess = false;
357
+ this.saveMessage = 'Error: Invalid JSON format';
358
+ }
359
+
360
+ this.saving = false;
361
+ },
362
+
363
+ async resetConfig() {
364
+ await this.loadConfig();
365
+ this.yamlChanged = false;
366
+ }
367
+ }
368
+ }
369
+ </script>
370
+ </body>
371
+ </html>