@agenticmail/enterprise 0.4.3 → 0.5.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 (159) hide show
  1. package/README.md +608 -923
  2. package/dashboards/django/app.py +12 -0
  3. package/dashboards/django/static/styles.css +449 -246
  4. package/dashboards/django/templates/activity.html +130 -0
  5. package/dashboards/django/templates/approvals.html +115 -0
  6. package/dashboards/django/templates/community-skills.html +89 -0
  7. package/dashboards/django/templates/domain-status.html +59 -0
  8. package/dashboards/django/templates/knowledge-contributions.html +58 -0
  9. package/dashboards/django/templates/knowledge.html +104 -0
  10. package/dashboards/django/templates/layout.html +161 -36
  11. package/dashboards/django/templates/skill-connections.html +73 -0
  12. package/dashboards/django/templates/workforce.html +116 -0
  13. package/dashboards/django/views/__init__.py +14 -0
  14. package/dashboards/django/views/new_pages.py +38 -0
  15. package/dashboards/dotnet/Program.cs +8 -0
  16. package/dashboards/dotnet/Routes/ActivityRoutes.cs +35 -0
  17. package/dashboards/dotnet/Routes/ApprovalRoutes.cs +36 -0
  18. package/dashboards/dotnet/Routes/CommunitySkillRoutes.cs +36 -0
  19. package/dashboards/dotnet/Routes/DomainStatusRoutes.cs +49 -0
  20. package/dashboards/dotnet/Routes/KnowledgeContributionRoutes.cs +42 -0
  21. package/dashboards/dotnet/Routes/KnowledgeRoutes.cs +40 -0
  22. package/dashboards/dotnet/Routes/SkillConnectionRoutes.cs +52 -0
  23. package/dashboards/dotnet/Routes/WorkforceRoutes.cs +55 -0
  24. package/dashboards/dotnet/Services/HtmlBuilder.cs +17 -8
  25. package/dashboards/dotnet/wwwroot/styles.css +508 -246
  26. package/dashboards/express/app.js +8 -0
  27. package/dashboards/express/public/styles.css +163 -272
  28. package/dashboards/express/routes/activity.js +101 -0
  29. package/dashboards/express/routes/approvals.js +100 -0
  30. package/dashboards/express/routes/community-skills.js +83 -0
  31. package/dashboards/express/routes/domain-status.js +78 -0
  32. package/dashboards/express/routes/knowledge-contributions.js +85 -0
  33. package/dashboards/express/routes/knowledge.js +83 -0
  34. package/dashboards/express/routes/skill-connections.js +86 -0
  35. package/dashboards/express/routes/workforce.js +126 -0
  36. package/dashboards/express/views/layout.js +54 -33
  37. package/dashboards/go/handlers/activity.go +30 -0
  38. package/dashboards/go/handlers/approvals.go +31 -0
  39. package/dashboards/go/handlers/community_skills.go +32 -0
  40. package/dashboards/go/handlers/domain_status.go +62 -0
  41. package/dashboards/go/handlers/knowledge.go +35 -0
  42. package/dashboards/go/handlers/knowledge_contributions.go +37 -0
  43. package/dashboards/go/handlers/skill_connections.go +59 -0
  44. package/dashboards/go/handlers/workforce.go +60 -0
  45. package/dashboards/go/main.go +8 -0
  46. package/dashboards/go/static/styles.css +508 -246
  47. package/dashboards/go/templates/layout.go +16 -11
  48. package/dashboards/html/index.html +136 -15
  49. package/dashboards/html/public/styles.css +531 -134
  50. package/dashboards/html/src/pages/activity.js +137 -0
  51. package/dashboards/html/src/pages/approvals.js +155 -0
  52. package/dashboards/html/src/pages/community-skills.js +236 -0
  53. package/dashboards/html/src/pages/domain-status.js +182 -0
  54. package/dashboards/html/src/pages/knowledge-contributions.js +319 -0
  55. package/dashboards/html/src/pages/knowledge.js +251 -0
  56. package/dashboards/html/src/pages/skill-connections.js +293 -0
  57. package/dashboards/html/src/pages/workforce.js +418 -0
  58. package/dashboards/html/src/router.js +51 -0
  59. package/dashboards/java/AgenticMailDashboard.java +8 -0
  60. package/dashboards/java/handlers/ActivityHandler.java +42 -0
  61. package/dashboards/java/handlers/ApprovalsHandler.java +43 -0
  62. package/dashboards/java/handlers/CommunitySkillsHandler.java +45 -0
  63. package/dashboards/java/handlers/DomainStatusHandler.java +58 -0
  64. package/dashboards/java/handlers/KnowledgeContributionsHandler.java +51 -0
  65. package/dashboards/java/handlers/KnowledgeHandler.java +49 -0
  66. package/dashboards/java/handlers/SkillConnectionsHandler.java +61 -0
  67. package/dashboards/java/handlers/WorkforceHandler.java +64 -0
  68. package/dashboards/java/static/styles.css +508 -250
  69. package/dashboards/java/templates/Layout.java +14 -6
  70. package/dashboards/laravel/controllers/ActivityController.php +18 -0
  71. package/dashboards/laravel/controllers/ApprovalsController.php +18 -0
  72. package/dashboards/laravel/controllers/CommunitySkillsController.php +18 -0
  73. package/dashboards/laravel/controllers/DomainStatusController.php +18 -0
  74. package/dashboards/laravel/controllers/KnowledgeContributionsController.php +18 -0
  75. package/dashboards/laravel/controllers/KnowledgeController.php +18 -0
  76. package/dashboards/laravel/controllers/SkillConnectionsController.php +18 -0
  77. package/dashboards/laravel/controllers/WorkforceController.php +18 -0
  78. package/dashboards/laravel/index.php +56 -0
  79. package/dashboards/laravel/public/styles.css +163 -279
  80. package/dashboards/laravel/views/activity.php +127 -0
  81. package/dashboards/laravel/views/approvals.php +152 -0
  82. package/dashboards/laravel/views/community-skills.php +131 -0
  83. package/dashboards/laravel/views/domain-status.php +167 -0
  84. package/dashboards/laravel/views/knowledge-contributions.php +185 -0
  85. package/dashboards/laravel/views/knowledge.php +167 -0
  86. package/dashboards/laravel/views/layout.php +54 -41
  87. package/dashboards/laravel/views/skill-connections.php +192 -0
  88. package/dashboards/laravel/views/workforce.php +265 -0
  89. package/dashboards/php/components/layout.php +21 -16
  90. package/dashboards/php/index.php +1 -1
  91. package/dashboards/php/pages/activity.php +35 -0
  92. package/dashboards/php/pages/approvals.php +36 -0
  93. package/dashboards/php/pages/community-skills.php +39 -0
  94. package/dashboards/php/pages/domain-status.php +87 -0
  95. package/dashboards/php/pages/knowledge-contributions.php +47 -0
  96. package/dashboards/php/pages/knowledge.php +43 -0
  97. package/dashboards/php/pages/skill-connections.php +94 -0
  98. package/dashboards/php/pages/workforce.php +89 -0
  99. package/dashboards/php/public/styles.css +168 -74
  100. package/dashboards/python/app.py +16 -0
  101. package/dashboards/python/routes/activity.py +11 -0
  102. package/dashboards/python/routes/approvals.py +11 -0
  103. package/dashboards/python/routes/community_skills.py +11 -0
  104. package/dashboards/python/routes/domain_status.py +11 -0
  105. package/dashboards/python/routes/knowledge.py +11 -0
  106. package/dashboards/python/routes/knowledge_contributions.py +11 -0
  107. package/dashboards/python/routes/skill_connections.py +11 -0
  108. package/dashboards/python/routes/workforce.py +11 -0
  109. package/dashboards/python/static/styles.css +163 -276
  110. package/dashboards/python/templates/activity.html +87 -0
  111. package/dashboards/python/templates/approvals.html +86 -0
  112. package/dashboards/python/templates/community-skills.html +69 -0
  113. package/dashboards/python/templates/domain-status.html +64 -0
  114. package/dashboards/python/templates/knowledge-contributions.html +71 -0
  115. package/dashboards/python/templates/knowledge.html +69 -0
  116. package/dashboards/python/templates/layout.html +103 -68
  117. package/dashboards/python/templates/skill-connections.html +72 -0
  118. package/dashboards/python/templates/workforce.html +112 -0
  119. package/dashboards/rails/app.rb +8 -0
  120. package/dashboards/rails/public/styles.css +506 -259
  121. package/dashboards/rails/routes/activity.rb +10 -0
  122. package/dashboards/rails/routes/approvals.rb +10 -0
  123. package/dashboards/rails/routes/community_skills.rb +11 -0
  124. package/dashboards/rails/routes/domain_status.rb +16 -0
  125. package/dashboards/rails/routes/knowledge.rb +11 -0
  126. package/dashboards/rails/routes/knowledge_contributions.rb +12 -0
  127. package/dashboards/rails/routes/skill_connections.rb +15 -0
  128. package/dashboards/rails/routes/workforce.rb +16 -0
  129. package/dashboards/rails/views/activity.erb +56 -0
  130. package/dashboards/rails/views/approvals.erb +60 -0
  131. package/dashboards/rails/views/community_skills.erb +69 -0
  132. package/dashboards/rails/views/domain_status.erb +75 -0
  133. package/dashboards/rails/views/knowledge.erb +67 -0
  134. package/dashboards/rails/views/knowledge_contributions.erb +70 -0
  135. package/dashboards/rails/views/layout.erb +23 -15
  136. package/dashboards/rails/views/skill_connections.erb +109 -0
  137. package/dashboards/rails/views/workforce.erb +124 -0
  138. package/dashboards/ruby/app.rb +8 -0
  139. package/dashboards/ruby/public/styles.css +506 -254
  140. package/dashboards/ruby/routes/activity.rb +10 -0
  141. package/dashboards/ruby/routes/approvals.rb +10 -0
  142. package/dashboards/ruby/routes/community_skills.rb +11 -0
  143. package/dashboards/ruby/routes/domain_status.rb +16 -0
  144. package/dashboards/ruby/routes/knowledge.rb +11 -0
  145. package/dashboards/ruby/routes/knowledge_contributions.rb +12 -0
  146. package/dashboards/ruby/routes/skill_connections.rb +15 -0
  147. package/dashboards/ruby/routes/workforce.rb +16 -0
  148. package/dashboards/ruby/views/activity.erb +56 -0
  149. package/dashboards/ruby/views/approvals.erb +60 -0
  150. package/dashboards/ruby/views/community_skills.erb +69 -0
  151. package/dashboards/ruby/views/domain_status.erb +75 -0
  152. package/dashboards/ruby/views/knowledge.erb +67 -0
  153. package/dashboards/ruby/views/knowledge_contributions.erb +70 -0
  154. package/dashboards/ruby/views/layout.erb +22 -13
  155. package/dashboards/ruby/views/skill_connections.erb +109 -0
  156. package/dashboards/ruby/views/workforce.erb +124 -0
  157. package/dashboards/shared/styles.css +505 -281
  158. package/dashboards/shared-styles.css +534 -45
  159. package/package.json +1 -1
@@ -0,0 +1,418 @@
1
+ /**
2
+ * Workforce page - Manage agent workforce and deployment
3
+ */
4
+ function renderWorkforce() {
5
+ return `
6
+ <div class="page-title">Agent Workforce</div>
7
+
8
+ <div class="stat-grid">
9
+ <div class="stat-card">
10
+ <div class="stat-label">Active Agents</div>
11
+ <div class="stat-value">24</div>
12
+ <div class="stat-change" style="color: var(--success)">+3 this week</div>
13
+ </div>
14
+ <div class="stat-card">
15
+ <div class="stat-label">CPU Usage</div>
16
+ <div class="stat-value">67%</div>
17
+ <div class="stat-change" style="color: var(--warning)">Moderate load</div>
18
+ </div>
19
+ <div class="stat-card">
20
+ <div class="stat-label">Tasks Completed</div>
21
+ <div class="stat-value">1,847</div>
22
+ <div class="stat-change" style="color: var(--success)">+18% today</div>
23
+ </div>
24
+ <div class="stat-card">
25
+ <div class="stat-label">Efficiency Score</div>
26
+ <div class="stat-value" style="color: var(--success)">94%</div>
27
+ <div class="stat-change" style="color: var(--success)">Excellent</div>
28
+ </div>
29
+ </div>
30
+
31
+ <div style="display: flex; gap: 16px; margin-bottom: 24px; align-items: center;">
32
+ <input class="input" placeholder="Search agents..." style="flex: 1;">
33
+ <select class="input" style="width: auto;">
34
+ <option>All Status</option>
35
+ <option>Running</option>
36
+ <option>Idle</option>
37
+ <option>Stopped</option>
38
+ <option>Error</option>
39
+ </select>
40
+ <select class="input" style="width: auto;">
41
+ <option>All Departments</option>
42
+ <option>Customer Support</option>
43
+ <option>Sales</option>
44
+ <option>Marketing</option>
45
+ <option>Operations</option>
46
+ </select>
47
+ <button class="btn btn-primary">
48
+ <svg width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
49
+ <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/>
50
+ </svg>
51
+ Deploy Agent
52
+ </button>
53
+ </div>
54
+
55
+ <div class="card">
56
+ <div class="card-header">
57
+ <h3>Agent Fleet</h3>
58
+ <div>
59
+ <button class="btn btn-secondary">Start All</button>
60
+ <button class="btn btn-secondary" style="margin-left: 8px;">Stop All</button>
61
+ <button class="btn btn-secondary" style="margin-left: 8px;">Refresh</button>
62
+ </div>
63
+ </div>
64
+ <div class="card-body">
65
+ <div style="overflow-x: auto;">
66
+ <table>
67
+ <thead>
68
+ <tr>
69
+ <th>Agent</th>
70
+ <th>Department</th>
71
+ <th>Status</th>
72
+ <th>Tasks</th>
73
+ <th>CPU</th>
74
+ <th>Memory</th>
75
+ <th>Uptime</th>
76
+ <th>Actions</th>
77
+ </tr>
78
+ </thead>
79
+ <tbody>
80
+ <tr>
81
+ <td>
82
+ <div style="display: flex; align-items: center; gap: 8px;">
83
+ <div style="width: 32px; height: 32px; border-radius: 50%; background: var(--accent-soft); color: var(--accent-text); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;">A1</div>
84
+ <div>
85
+ <div style="font-weight: 600;">Alice Support</div>
86
+ <div style="font-size: 11px; color: var(--text-muted);">Customer Service Agent</div>
87
+ </div>
88
+ </div>
89
+ </td>
90
+ <td><span class="badge badge-primary">Customer Support</span></td>
91
+ <td>
92
+ <div style="display: flex; align-items: center; gap: 6px;">
93
+ <div style="width: 8px; height: 8px; border-radius: 50%; background: var(--success);"></div>
94
+ <span class="status-running">Running</span>
95
+ </div>
96
+ </td>
97
+ <td>
98
+ <div style="font-size: 13px; font-weight: 600;">247</div>
99
+ <div style="font-size: 11px; color: var(--text-muted);">completed</div>
100
+ </td>
101
+ <td>
102
+ <div style="font-size: 13px;">45%</div>
103
+ <div style="font-size: 11px; color: var(--text-muted);">2.1 GHz</div>
104
+ </td>
105
+ <td>
106
+ <div style="font-size: 13px;">1.2 GB</div>
107
+ <div style="font-size: 11px; color: var(--text-muted);">of 4 GB</div>
108
+ </td>
109
+ <td>
110
+ <div style="font-size: 13px;">12h 34m</div>
111
+ <div style="font-size: 11px; color: var(--text-muted);">stable</div>
112
+ </td>
113
+ <td>
114
+ <button class="btn btn-sm btn-secondary" style="margin-right: 4px;">View</button>
115
+ <button class="btn btn-sm btn-danger">Stop</button>
116
+ </td>
117
+ </tr>
118
+ <tr>
119
+ <td>
120
+ <div style="display: flex; align-items: center; gap: 8px;">
121
+ <div style="width: 32px; height: 32px; border-radius: 50%; background: var(--success-soft); color: var(--success); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;">B1</div>
122
+ <div>
123
+ <div style="font-weight: 600;">Bob Analytics</div>
124
+ <div style="font-size: 11px; color: var(--text-muted);">Data Analysis Agent</div>
125
+ </div>
126
+ </div>
127
+ </td>
128
+ <td><span class="badge badge-info">Operations</span></td>
129
+ <td>
130
+ <div style="display: flex; align-items: center; gap: 6px;">
131
+ <div style="width: 8px; height: 8px; border-radius: 50%; background: var(--success);"></div>
132
+ <span class="status-running">Running</span>
133
+ </div>
134
+ </td>
135
+ <td>
136
+ <div style="font-size: 13px; font-weight: 600;">189</div>
137
+ <div style="font-size: 11px; color: var(--text-muted);">completed</div>
138
+ </td>
139
+ <td>
140
+ <div style="font-size: 13px;">78%</div>
141
+ <div style="font-size: 11px; color: var(--text-muted);">3.2 GHz</div>
142
+ </td>
143
+ <td>
144
+ <div style="font-size: 13px;">2.8 GB</div>
145
+ <div style="font-size: 11px; color: var(--text-muted);">of 8 GB</div>
146
+ </td>
147
+ <td>
148
+ <div style="font-size: 13px;">8h 12m</div>
149
+ <div style="font-size: 11px; color: var(--text-muted);">stable</div>
150
+ </td>
151
+ <td>
152
+ <button class="btn btn-sm btn-secondary" style="margin-right: 4px;">View</button>
153
+ <button class="btn btn-sm btn-danger">Stop</button>
154
+ </td>
155
+ </tr>
156
+ <tr>
157
+ <td>
158
+ <div style="display: flex; align-items: center; gap: 8px;">
159
+ <div style="width: 32px; height: 32px; border-radius: 50%; background: var(--warning-soft); color: var(--warning); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;">C1</div>
160
+ <div>
161
+ <div style="font-weight: 600;">Charlie Sales</div>
162
+ <div style="font-size: 11px; color: var(--text-muted);">Sales Assistant Agent</div>
163
+ </div>
164
+ </div>
165
+ </td>
166
+ <td><span class="badge badge-success">Sales</span></td>
167
+ <td>
168
+ <div style="display: flex; align-items: center; gap: 6px;">
169
+ <div style="width: 8px; height: 8px; border-radius: 50%; background: var(--text-muted);"></div>
170
+ <span class="status-stopped">Idle</span>
171
+ </div>
172
+ </td>
173
+ <td>
174
+ <div style="font-size: 13px; font-weight: 600;">34</div>
175
+ <div style="font-size: 11px; color: var(--text-muted);">completed</div>
176
+ </td>
177
+ <td>
178
+ <div style="font-size: 13px;">12%</div>
179
+ <div style="font-size: 11px; color: var(--text-muted);">0.8 GHz</div>
180
+ </td>
181
+ <td>
182
+ <div style="font-size: 13px;">0.4 GB</div>
183
+ <div style="font-size: 11px; color: var(--text-muted);">of 4 GB</div>
184
+ </td>
185
+ <td>
186
+ <div style="font-size: 13px;">15h 45m</div>
187
+ <div style="font-size: 11px; color: var(--text-muted);">idle 2h</div>
188
+ </td>
189
+ <td>
190
+ <button class="btn btn-sm" style="background: var(--success); color: white; margin-right: 4px;">Start</button>
191
+ <button class="btn btn-sm btn-secondary">View</button>
192
+ </td>
193
+ </tr>
194
+ <tr>
195
+ <td>
196
+ <div style="display: flex; align-items: center; gap: 8px;">
197
+ <div style="width: 32px; height: 32px; border-radius: 50%; background: var(--info-soft); color: var(--info); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;">D1</div>
198
+ <div>
199
+ <div style="font-weight: 600;">Diana Marketing</div>
200
+ <div style="font-size: 11px; color: var(--text-muted);">Marketing Agent</div>
201
+ </div>
202
+ </div>
203
+ </td>
204
+ <td><span class="badge badge-warning">Marketing</span></td>
205
+ <td>
206
+ <div style="display: flex; align-items: center; gap: 6px;">
207
+ <div style="width: 8px; height: 8px; border-radius: 50%; background: var(--success);"></div>
208
+ <span class="status-running">Running</span>
209
+ </div>
210
+ </td>
211
+ <td>
212
+ <div style="font-size: 13px; font-weight: 600;">92</div>
213
+ <div style="font-size: 11px; color: var(--text-muted);">completed</div>
214
+ </td>
215
+ <td>
216
+ <div style="font-size: 13px;">23%</div>
217
+ <div style="font-size: 11px; color: var(--text-muted);">1.4 GHz</div>
218
+ </td>
219
+ <td>
220
+ <div style="font-size: 13px;">0.9 GB</div>
221
+ <div style="font-size: 11px; color: var(--text-muted);">of 4 GB</div>
222
+ </td>
223
+ <td>
224
+ <div style="font-size: 13px;">6h 23m</div>
225
+ <div style="font-size: 11px; color: var(--text-muted);">stable</div>
226
+ </td>
227
+ <td>
228
+ <button class="btn btn-sm btn-secondary" style="margin-right: 4px;">View</button>
229
+ <button class="btn btn-sm btn-danger">Stop</button>
230
+ </td>
231
+ </tr>
232
+ <tr>
233
+ <td>
234
+ <div style="display: flex; align-items: center; gap: 8px;">
235
+ <div style="width: 32px; height: 32px; border-radius: 50%; background: var(--danger-soft); color: var(--danger); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;">E1</div>
236
+ <div>
237
+ <div style="font-weight: 600;">Eve Security</div>
238
+ <div style="font-size: 11px; color: var(--text-muted);">Security Monitor Agent</div>
239
+ </div>
240
+ </div>
241
+ </td>
242
+ <td><span class="badge badge-danger">Security</span></td>
243
+ <td>
244
+ <div style="display: flex; align-items: center; gap: 6px;">
245
+ <div style="width: 8px; height: 8px; border-radius: 50%; background: var(--danger);"></div>
246
+ <span class="status-error">Error</span>
247
+ </div>
248
+ </td>
249
+ <td>
250
+ <div style="font-size: 13px; font-weight: 600;">156</div>
251
+ <div style="font-size: 11px; color: var(--text-muted);">completed</div>
252
+ </td>
253
+ <td>
254
+ <div style="font-size: 13px;">0%</div>
255
+ <div style="font-size: 11px; color: var(--text-muted);">crashed</div>
256
+ </td>
257
+ <td>
258
+ <div style="font-size: 13px;">0 GB</div>
259
+ <div style="font-size: 11px; color: var(--text-muted);">of 4 GB</div>
260
+ </td>
261
+ <td>
262
+ <div style="font-size: 13px;">0h 0m</div>
263
+ <div style="font-size: 11px; color: var(--danger);">crashed 1h ago</div>
264
+ </td>
265
+ <td>
266
+ <button class="btn btn-sm" style="background: var(--success); color: white; margin-right: 4px;">Restart</button>
267
+ <button class="btn btn-sm btn-secondary">Debug</button>
268
+ </td>
269
+ </tr>
270
+ <tr>
271
+ <td>
272
+ <div style="display: flex; align-items: center; gap: 8px;">
273
+ <div style="width: 32px; height: 32px; border-radius: 50%; background: var(--accent-soft); color: var(--accent-text); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;">F1</div>
274
+ <div>
275
+ <div style="font-weight: 600;">Frank Integration</div>
276
+ <div style="font-size: 11px; color: var(--text-muted);">API Integration Agent</div>
277
+ </div>
278
+ </div>
279
+ </td>
280
+ <td><span class="badge badge-info">Operations</span></td>
281
+ <td>
282
+ <div style="display: flex; align-items: center; gap: 6px;">
283
+ <div style="width: 8px; height: 8px; border-radius: 50%; background: var(--success);"></div>
284
+ <span class="status-running">Running</span>
285
+ </div>
286
+ </td>
287
+ <td>
288
+ <div style="font-size: 13px; font-weight: 600;">78</div>
289
+ <div style="font-size: 11px; color: var(--text-muted);">completed</div>
290
+ </td>
291
+ <td>
292
+ <div style="font-size: 13px;">34%</div>
293
+ <div style="font-size: 11px; color: var(--text-muted);">1.8 GHz</div>
294
+ </td>
295
+ <td>
296
+ <div style="font-size: 13px;">1.5 GB</div>
297
+ <div style="font-size: 11px; color: var(--text-muted);">of 4 GB</div>
298
+ </td>
299
+ <td>
300
+ <div style="font-size: 13px;">4h 56m</div>
301
+ <div style="font-size: 11px; color: var(--text-muted);">stable</div>
302
+ </td>
303
+ <td>
304
+ <button class="btn btn-sm btn-secondary" style="margin-right: 4px;">View</button>
305
+ <button class="btn btn-sm btn-danger">Stop</button>
306
+ </td>
307
+ </tr>
308
+ </tbody>
309
+ </table>
310
+ </div>
311
+ </div>
312
+ </div>
313
+
314
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-top: 24px;">
315
+ <div class="card">
316
+ <div class="card-header">
317
+ <h3>Resource Usage</h3>
318
+ </div>
319
+ <div class="card-body">
320
+ <div style="margin-bottom: 16px;">
321
+ <div style="display: flex; justify-content: space-between; margin-bottom: 4px;">
322
+ <span style="font-size: 12px;">CPU Usage</span>
323
+ <span style="font-size: 12px; font-weight: 600;">67%</span>
324
+ </div>
325
+ <div style="background: var(--bg-tertiary); height: 8px; border-radius: 4px; overflow: hidden;">
326
+ <div style="background: var(--warning); height: 100%; width: 67%; border-radius: 4px;"></div>
327
+ </div>
328
+ </div>
329
+
330
+ <div style="margin-bottom: 16px;">
331
+ <div style="display: flex; justify-content: space-between; margin-bottom: 4px;">
332
+ <span style="font-size: 12px;">Memory Usage</span>
333
+ <span style="font-size: 12px; font-weight: 600;">45%</span>
334
+ </div>
335
+ <div style="background: var(--bg-tertiary); height: 8px; border-radius: 4px; overflow: hidden;">
336
+ <div style="background: var(--success); height: 100%; width: 45%; border-radius: 4px;"></div>
337
+ </div>
338
+ </div>
339
+
340
+ <div style="margin-bottom: 16px;">
341
+ <div style="display: flex; justify-content: space-between; margin-bottom: 4px;">
342
+ <span style="font-size: 12px;">Network I/O</span>
343
+ <span style="font-size: 12px; font-weight: 600;">23%</span>
344
+ </div>
345
+ <div style="background: var(--bg-tertiary); height: 8px; border-radius: 4px; overflow: hidden;">
346
+ <div style="background: var(--accent); height: 100%; width: 23%; border-radius: 4px;"></div>
347
+ </div>
348
+ </div>
349
+
350
+ <div>
351
+ <div style="display: flex; justify-content: space-between; margin-bottom: 4px;">
352
+ <span style="font-size: 12px;">Storage Usage</span>
353
+ <span style="font-size: 12px; font-weight: 600;">78%</span>
354
+ </div>
355
+ <div style="background: var(--bg-tertiary); height: 8px; border-radius: 4px; overflow: hidden;">
356
+ <div style="background: var(--danger); height: 100%; width: 78%; border-radius: 4px;"></div>
357
+ </div>
358
+ </div>
359
+ </div>
360
+ </div>
361
+
362
+ <div class="card">
363
+ <div class="card-header">
364
+ <h3>Performance Metrics</h3>
365
+ </div>
366
+ <div class="card-body">
367
+ <div style="space-y: 12px;">
368
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;">
369
+ <div>
370
+ <div style="font-size: 13px; font-weight: 600;">Average Response Time</div>
371
+ <div style="font-size: 11px; color: var(--text-muted);">Across all agents</div>
372
+ </div>
373
+ <div style="text-align: right;">
374
+ <div style="font-size: 16px; font-weight: 700; color: var(--success);">234ms</div>
375
+ <div style="font-size: 11px; color: var(--success);">-12ms from yesterday</div>
376
+ </div>
377
+ </div>
378
+
379
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;">
380
+ <div>
381
+ <div style="font-size: 13px; font-weight: 600;">Tasks per Hour</div>
382
+ <div style="font-size: 11px; color: var(--text-muted);">Current rate</div>
383
+ </div>
384
+ <div style="text-align: right;">
385
+ <div style="font-size: 16px; font-weight: 700; color: var(--accent);">847</div>
386
+ <div style="font-size: 11px; color: var(--success);">+23 from last hour</div>
387
+ </div>
388
+ </div>
389
+
390
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;">
391
+ <div>
392
+ <div style="font-size: 13px; font-weight: 600;">Success Rate</div>
393
+ <div style="font-size: 11px; color: var(--text-muted);">Last 24 hours</div>
394
+ </div>
395
+ <div style="text-align: right;">
396
+ <div style="font-size: 16px; font-weight: 700; color: var(--success);">98.2%</div>
397
+ <div style="font-size: 11px; color: var(--success);">+0.3% improvement</div>
398
+ </div>
399
+ </div>
400
+
401
+ <div style="display: flex; justify-content: space-between; align-items: center;">
402
+ <div>
403
+ <div style="font-size: 13px; font-weight: 600;">Error Rate</div>
404
+ <div style="font-size: 11px; color: var(--text-muted);">Last 24 hours</div>
405
+ </div>
406
+ <div style="text-align: right;">
407
+ <div style="font-size: 16px; font-weight: 700; color: var(--danger);">1.8%</div>
408
+ <div style="font-size: 11px; color: var(--danger);">+0.3% from yesterday</div>
409
+ </div>
410
+ </div>
411
+ </div>
412
+ </div>
413
+ </div>
414
+ </div>
415
+ `;
416
+ }
417
+
418
+ export { renderWorkforce };
@@ -14,9 +14,51 @@ import { loadMessages } from './pages/messages.js';
14
14
  import { loadCompliance } from './pages/compliance.js';
15
15
  import { loadVault } from './pages/vault.js';
16
16
  import { loadSkills } from './pages/skills.js';
17
+ // New pages
18
+ import { renderActivity } from './pages/activity.js';
19
+ import { renderApprovals } from './pages/approvals.js';
20
+ import { renderCommunitySkills } from './pages/community-skills.js';
21
+ import { renderDomainStatus } from './pages/domain-status.js';
22
+ import { renderKnowledge } from './pages/knowledge.js';
23
+ import { renderKnowledgeContributions } from './pages/knowledge-contributions.js';
24
+ import { renderSkillConnections } from './pages/skill-connections.js';
25
+ import { renderWorkforce } from './pages/workforce.js';
17
26
 
18
27
  export let currentPage = 'dashboard';
19
28
 
29
+ // Wrapper functions for new pages
30
+ function loadActivity() {
31
+ document.getElementById('page-content').innerHTML = renderActivity();
32
+ }
33
+
34
+ function loadApprovals() {
35
+ document.getElementById('page-content').innerHTML = renderApprovals();
36
+ }
37
+
38
+ function loadCommunitySkills() {
39
+ document.getElementById('page-content').innerHTML = renderCommunitySkills();
40
+ }
41
+
42
+ function loadDomainStatus() {
43
+ document.getElementById('page-content').innerHTML = renderDomainStatus();
44
+ }
45
+
46
+ function loadKnowledge() {
47
+ document.getElementById('page-content').innerHTML = renderKnowledge();
48
+ }
49
+
50
+ function loadKnowledgeContributions() {
51
+ document.getElementById('page-content').innerHTML = renderKnowledgeContributions();
52
+ }
53
+
54
+ function loadSkillConnections() {
55
+ document.getElementById('page-content').innerHTML = renderSkillConnections();
56
+ }
57
+
58
+ function loadWorkforce() {
59
+ document.getElementById('page-content').innerHTML = renderWorkforce();
60
+ }
61
+
20
62
  var pages = {
21
63
  dashboard: loadDashboard,
22
64
  agents: loadAgents,
@@ -31,6 +73,15 @@ var pages = {
31
73
  compliance: loadCompliance,
32
74
  vault: loadVault,
33
75
  skills: loadSkills,
76
+ // New pages
77
+ activity: loadActivity,
78
+ approvals: loadApprovals,
79
+ 'community-skills': loadCommunitySkills,
80
+ 'domain-status': loadDomainStatus,
81
+ knowledge: loadKnowledge,
82
+ 'knowledge-contributions': loadKnowledgeContributions,
83
+ 'skill-connections': loadSkillConnections,
84
+ workforce: loadWorkforce,
34
85
  };
35
86
 
36
87
  export function navigate(page) {
@@ -109,6 +109,14 @@ public class AgenticMailDashboard {
109
109
  server.createContext("/compliance", new ComplianceHandler());
110
110
  server.createContext("/vault", new VaultHandler());
111
111
  server.createContext("/skills", new SkillsHandler());
112
+ server.createContext("/activity", new ActivityHandler());
113
+ server.createContext("/approvals", new ApprovalsHandler());
114
+ server.createContext("/community-skills", new CommunitySkillsHandler());
115
+ server.createContext("/domain-status", new DomainStatusHandler());
116
+ server.createContext("/knowledge-contributions", new KnowledgeContributionsHandler());
117
+ server.createContext("/knowledge", new KnowledgeHandler());
118
+ server.createContext("/skill-connections", new SkillConnectionsHandler());
119
+ server.createContext("/workforce", new WorkforceHandler());
112
120
 
113
121
  // ─── Dashboard (root) ───────────────────────────
114
122
  server.createContext("/", ex -> {
@@ -0,0 +1,42 @@
1
+ /**
2
+ * ActivityHandler — Real-time activity and tool usage across all agents.
3
+ * Routes: GET /activity
4
+ */
5
+
6
+ import com.sun.net.httpserver.*;
7
+ import java.io.*;
8
+
9
+ public class ActivityHandler implements HttpHandler {
10
+
11
+ @Override
12
+ public void handle(HttpExchange ex) throws IOException {
13
+ try {
14
+ if (!SessionManager.isAuthenticated(ex)) {
15
+ SessionManager.redirect(ex, "/login");
16
+ return;
17
+ }
18
+
19
+ StringBuilder html = new StringBuilder();
20
+ html.append(Components.pageHeader("Activity", "Real-time activity and tool usage across all agents"));
21
+
22
+ html.append("<div style='margin-bottom:20px'>");
23
+ html.append("<button class='btn btn-primary' onclick=\"location.href='#events'\">Events</button> ");
24
+ html.append("<button class='btn' onclick=\"location.href='#tools'\">Tool Calls</button>");
25
+ html.append("</div>");
26
+
27
+ html.append(Components.cardStart("Recent Events"));
28
+ html.append(Components.empty("&#128203;", "No events recorded<br><small>Agent activity will appear here</small>"));
29
+ html.append(Components.cardEnd());
30
+
31
+ html.append(Components.cardStart("Tool Usage"));
32
+ html.append(Components.empty("&#128295;", "No tool calls recorded<br><small>Tool usage statistics will appear here</small>"));
33
+ html.append(Components.cardEnd());
34
+
35
+ String flash = SessionManager.consumeFlash(ex);
36
+ SessionManager.respond(ex, 200, Layout.layout("/activity", SessionManager.getUser(ex), flash, html.toString()));
37
+
38
+ } catch (Exception e) {
39
+ SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * ApprovalsHandler — Review and manage pending approval requests.
3
+ * Routes: GET /approvals
4
+ */
5
+
6
+ import com.sun.net.httpserver.*;
7
+ import java.io.*;
8
+
9
+ public class ApprovalsHandler implements HttpHandler {
10
+
11
+ @Override
12
+ public void handle(HttpExchange ex) throws IOException {
13
+ try {
14
+ if (!SessionManager.isAuthenticated(ex)) {
15
+ SessionManager.redirect(ex, "/login");
16
+ return;
17
+ }
18
+
19
+ StringBuilder html = new StringBuilder();
20
+ html.append(Components.pageHeader("Approvals", "Review and manage pending approval requests"));
21
+
22
+ html.append("<div style='margin-bottom:20px'>");
23
+ html.append("<button class='btn btn-primary'>Pending</button> ");
24
+ html.append("<button class='btn'>Approved</button> ");
25
+ html.append("<button class='btn'>Rejected</button>");
26
+ html.append("</div>");
27
+
28
+ html.append(Components.cardStart("Pending Approvals"));
29
+ html.append(Components.empty("&#9989;", "No pending approvals<br><small>Agent approval requests will appear here</small>"));
30
+ html.append(Components.cardEnd());
31
+
32
+ html.append(Components.cardStart("Approval History"));
33
+ html.append(Components.empty("&#128203;", "No approval history<br><small>Past approvals and rejections will appear here</small>"));
34
+ html.append(Components.cardEnd());
35
+
36
+ String flash = SessionManager.consumeFlash(ex);
37
+ SessionManager.respond(ex, 200, Layout.layout("/approvals", SessionManager.getUser(ex), flash, html.toString()));
38
+
39
+ } catch (Exception e) {
40
+ SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CommunitySkillsHandler — Browse and install skills shared by the community.
3
+ * Routes: GET /community-skills
4
+ */
5
+
6
+ import com.sun.net.httpserver.*;
7
+ import java.io.*;
8
+
9
+ public class CommunitySkillsHandler implements HttpHandler {
10
+
11
+ @Override
12
+ public void handle(HttpExchange ex) throws IOException {
13
+ try {
14
+ if (!SessionManager.isAuthenticated(ex)) {
15
+ SessionManager.redirect(ex, "/login");
16
+ return;
17
+ }
18
+
19
+ StringBuilder html = new StringBuilder();
20
+ html.append(Components.pageHeader("Community Skills", "Browse and install skills shared by the community"));
21
+
22
+ html.append(Components.cardStart("Featured Skills"));
23
+ html.append(Components.empty("&#127978;", "No community skills available<br><small>Community-shared skills will appear here</small>"));
24
+ html.append(Components.cardEnd());
25
+
26
+ html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px'>");
27
+
28
+ html.append(Components.cardStart("Popular Categories"));
29
+ html.append(Components.empty("&#127991;&#65039;", "No categories"));
30
+ html.append(Components.cardEnd());
31
+
32
+ html.append(Components.cardStart("My Contributions"));
33
+ html.append(Components.empty("&#128228;", "No contributions"));
34
+ html.append(Components.cardEnd());
35
+
36
+ html.append("</div>");
37
+
38
+ String flash = SessionManager.consumeFlash(ex);
39
+ SessionManager.respond(ex, 200, Layout.layout("/community-skills", SessionManager.getUser(ex), flash, html.toString()));
40
+
41
+ } catch (Exception e) {
42
+ SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
43
+ }
44
+ }
45
+ }