@agenticmail/enterprise 0.4.3 → 0.5.2
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.
- package/README.md +608 -923
- package/dashboards/django/app.py +12 -0
- package/dashboards/django/static/styles.css +449 -246
- package/dashboards/django/templates/activity.html +130 -0
- package/dashboards/django/templates/approvals.html +115 -0
- package/dashboards/django/templates/community-skills.html +89 -0
- package/dashboards/django/templates/domain-status.html +59 -0
- package/dashboards/django/templates/knowledge-contributions.html +58 -0
- package/dashboards/django/templates/knowledge.html +104 -0
- package/dashboards/django/templates/layout.html +161 -36
- package/dashboards/django/templates/skill-connections.html +73 -0
- package/dashboards/django/templates/workforce.html +116 -0
- package/dashboards/django/views/__init__.py +14 -0
- package/dashboards/django/views/new_pages.py +38 -0
- package/dashboards/dotnet/Program.cs +8 -0
- package/dashboards/dotnet/Routes/ActivityRoutes.cs +35 -0
- package/dashboards/dotnet/Routes/ApprovalRoutes.cs +36 -0
- package/dashboards/dotnet/Routes/CommunitySkillRoutes.cs +36 -0
- package/dashboards/dotnet/Routes/DomainStatusRoutes.cs +49 -0
- package/dashboards/dotnet/Routes/KnowledgeContributionRoutes.cs +42 -0
- package/dashboards/dotnet/Routes/KnowledgeRoutes.cs +40 -0
- package/dashboards/dotnet/Routes/SkillConnectionRoutes.cs +52 -0
- package/dashboards/dotnet/Routes/WorkforceRoutes.cs +55 -0
- package/dashboards/dotnet/Services/HtmlBuilder.cs +17 -8
- package/dashboards/dotnet/wwwroot/styles.css +508 -246
- package/dashboards/express/app.js +8 -0
- package/dashboards/express/public/styles.css +163 -272
- package/dashboards/express/routes/activity.js +101 -0
- package/dashboards/express/routes/approvals.js +100 -0
- package/dashboards/express/routes/community-skills.js +83 -0
- package/dashboards/express/routes/domain-status.js +78 -0
- package/dashboards/express/routes/knowledge-contributions.js +85 -0
- package/dashboards/express/routes/knowledge.js +83 -0
- package/dashboards/express/routes/skill-connections.js +86 -0
- package/dashboards/express/routes/workforce.js +126 -0
- package/dashboards/express/views/layout.js +54 -33
- package/dashboards/go/handlers/activity.go +30 -0
- package/dashboards/go/handlers/approvals.go +31 -0
- package/dashboards/go/handlers/community_skills.go +32 -0
- package/dashboards/go/handlers/domain_status.go +62 -0
- package/dashboards/go/handlers/knowledge.go +35 -0
- package/dashboards/go/handlers/knowledge_contributions.go +37 -0
- package/dashboards/go/handlers/skill_connections.go +59 -0
- package/dashboards/go/handlers/workforce.go +60 -0
- package/dashboards/go/main.go +8 -0
- package/dashboards/go/static/styles.css +508 -246
- package/dashboards/go/templates/layout.go +16 -11
- package/dashboards/html/index.html +136 -15
- package/dashboards/html/public/styles.css +531 -134
- package/dashboards/html/src/pages/activity.js +137 -0
- package/dashboards/html/src/pages/approvals.js +155 -0
- package/dashboards/html/src/pages/community-skills.js +236 -0
- package/dashboards/html/src/pages/domain-status.js +182 -0
- package/dashboards/html/src/pages/knowledge-contributions.js +319 -0
- package/dashboards/html/src/pages/knowledge.js +251 -0
- package/dashboards/html/src/pages/skill-connections.js +293 -0
- package/dashboards/html/src/pages/workforce.js +418 -0
- package/dashboards/html/src/router.js +51 -0
- package/dashboards/java/AgenticMailDashboard.java +8 -0
- package/dashboards/java/handlers/ActivityHandler.java +42 -0
- package/dashboards/java/handlers/ApprovalsHandler.java +43 -0
- package/dashboards/java/handlers/CommunitySkillsHandler.java +45 -0
- package/dashboards/java/handlers/DomainStatusHandler.java +58 -0
- package/dashboards/java/handlers/KnowledgeContributionsHandler.java +51 -0
- package/dashboards/java/handlers/KnowledgeHandler.java +49 -0
- package/dashboards/java/handlers/SkillConnectionsHandler.java +61 -0
- package/dashboards/java/handlers/WorkforceHandler.java +64 -0
- package/dashboards/java/static/styles.css +508 -250
- package/dashboards/java/templates/Layout.java +14 -6
- package/dashboards/laravel/controllers/ActivityController.php +18 -0
- package/dashboards/laravel/controllers/ApprovalsController.php +18 -0
- package/dashboards/laravel/controllers/CommunitySkillsController.php +18 -0
- package/dashboards/laravel/controllers/DomainStatusController.php +18 -0
- package/dashboards/laravel/controllers/KnowledgeContributionsController.php +18 -0
- package/dashboards/laravel/controllers/KnowledgeController.php +18 -0
- package/dashboards/laravel/controllers/SkillConnectionsController.php +18 -0
- package/dashboards/laravel/controllers/WorkforceController.php +18 -0
- package/dashboards/laravel/index.php +56 -0
- package/dashboards/laravel/public/styles.css +163 -279
- package/dashboards/laravel/views/activity.php +127 -0
- package/dashboards/laravel/views/approvals.php +152 -0
- package/dashboards/laravel/views/community-skills.php +131 -0
- package/dashboards/laravel/views/domain-status.php +167 -0
- package/dashboards/laravel/views/knowledge-contributions.php +185 -0
- package/dashboards/laravel/views/knowledge.php +167 -0
- package/dashboards/laravel/views/layout.php +54 -41
- package/dashboards/laravel/views/skill-connections.php +192 -0
- package/dashboards/laravel/views/workforce.php +265 -0
- package/dashboards/php/components/layout.php +21 -16
- package/dashboards/php/index.php +1 -1
- package/dashboards/php/pages/activity.php +35 -0
- package/dashboards/php/pages/approvals.php +36 -0
- package/dashboards/php/pages/community-skills.php +39 -0
- package/dashboards/php/pages/domain-status.php +87 -0
- package/dashboards/php/pages/knowledge-contributions.php +47 -0
- package/dashboards/php/pages/knowledge.php +43 -0
- package/dashboards/php/pages/skill-connections.php +94 -0
- package/dashboards/php/pages/workforce.php +89 -0
- package/dashboards/php/public/styles.css +168 -74
- package/dashboards/python/app.py +16 -0
- package/dashboards/python/routes/activity.py +11 -0
- package/dashboards/python/routes/approvals.py +11 -0
- package/dashboards/python/routes/community_skills.py +11 -0
- package/dashboards/python/routes/domain_status.py +11 -0
- package/dashboards/python/routes/knowledge.py +11 -0
- package/dashboards/python/routes/knowledge_contributions.py +11 -0
- package/dashboards/python/routes/skill_connections.py +11 -0
- package/dashboards/python/routes/workforce.py +11 -0
- package/dashboards/python/static/styles.css +163 -276
- package/dashboards/python/templates/activity.html +87 -0
- package/dashboards/python/templates/approvals.html +86 -0
- package/dashboards/python/templates/community-skills.html +69 -0
- package/dashboards/python/templates/domain-status.html +64 -0
- package/dashboards/python/templates/knowledge-contributions.html +71 -0
- package/dashboards/python/templates/knowledge.html +69 -0
- package/dashboards/python/templates/layout.html +103 -68
- package/dashboards/python/templates/skill-connections.html +72 -0
- package/dashboards/python/templates/workforce.html +112 -0
- package/dashboards/rails/app.rb +8 -0
- package/dashboards/rails/public/styles.css +506 -259
- package/dashboards/rails/routes/activity.rb +10 -0
- package/dashboards/rails/routes/approvals.rb +10 -0
- package/dashboards/rails/routes/community_skills.rb +11 -0
- package/dashboards/rails/routes/domain_status.rb +16 -0
- package/dashboards/rails/routes/knowledge.rb +11 -0
- package/dashboards/rails/routes/knowledge_contributions.rb +12 -0
- package/dashboards/rails/routes/skill_connections.rb +15 -0
- package/dashboards/rails/routes/workforce.rb +16 -0
- package/dashboards/rails/views/activity.erb +56 -0
- package/dashboards/rails/views/approvals.erb +60 -0
- package/dashboards/rails/views/community_skills.erb +69 -0
- package/dashboards/rails/views/domain_status.erb +75 -0
- package/dashboards/rails/views/knowledge.erb +67 -0
- package/dashboards/rails/views/knowledge_contributions.erb +70 -0
- package/dashboards/rails/views/layout.erb +23 -15
- package/dashboards/rails/views/skill_connections.erb +109 -0
- package/dashboards/rails/views/workforce.erb +124 -0
- package/dashboards/ruby/app.rb +8 -0
- package/dashboards/ruby/public/styles.css +506 -254
- package/dashboards/ruby/routes/activity.rb +10 -0
- package/dashboards/ruby/routes/approvals.rb +10 -0
- package/dashboards/ruby/routes/community_skills.rb +11 -0
- package/dashboards/ruby/routes/domain_status.rb +16 -0
- package/dashboards/ruby/routes/knowledge.rb +11 -0
- package/dashboards/ruby/routes/knowledge_contributions.rb +12 -0
- package/dashboards/ruby/routes/skill_connections.rb +15 -0
- package/dashboards/ruby/routes/workforce.rb +16 -0
- package/dashboards/ruby/views/activity.erb +56 -0
- package/dashboards/ruby/views/approvals.erb +60 -0
- package/dashboards/ruby/views/community_skills.erb +69 -0
- package/dashboards/ruby/views/domain_status.erb +75 -0
- package/dashboards/ruby/views/knowledge.erb +67 -0
- package/dashboards/ruby/views/knowledge_contributions.erb +70 -0
- package/dashboards/ruby/views/layout.erb +22 -13
- package/dashboards/ruby/views/skill_connections.erb +109 -0
- package/dashboards/ruby/views/workforce.erb +124 -0
- package/dashboards/shared/styles.css +505 -281
- package/dashboards/shared-styles.css +534 -45
- package/dist/chunk-ISOODMEF.js +1943 -0
- package/dist/chunk-PQADDAC2.js +765 -0
- package/dist/chunk-UPU23ZRG.js +154 -0
- package/dist/cli-recover-X4MKJQVV.js +97 -0
- package/dist/cli-verify-YT7IADFX.js +98 -0
- package/dist/cli.js +3 -3
- package/dist/domain-lock-Z5A74VJK.js +7 -0
- package/dist/index.js +2 -2
- package/dist/server-6LWKND7R.js +11 -0
- package/dist/setup-5CVRQ5ES.js +20 -0
- package/package.json +1 -1
- package/src/domain-lock/index.ts +1 -1
- package/src/setup/registration.ts +4 -3
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DomainStatusHandler — Monitor domain configuration and security status.
|
|
3
|
+
* Routes: GET /domain-status
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import com.sun.net.httpserver.*;
|
|
7
|
+
import java.io.*;
|
|
8
|
+
|
|
9
|
+
public class DomainStatusHandler 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("Domain Status", "Monitor domain configuration and security status"));
|
|
21
|
+
|
|
22
|
+
html.append("<style>");
|
|
23
|
+
html.append(".status-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}");
|
|
24
|
+
html.append(".status-item{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--border)}");
|
|
25
|
+
html.append(".status-item:last-child{border-bottom:none}");
|
|
26
|
+
html.append(".status-indicator{width:8px;height:8px;border-radius:50%;flex-shrink:0}");
|
|
27
|
+
html.append(".status-success{background:var(--success)}");
|
|
28
|
+
html.append(".status-warning{background:var(--warning)}");
|
|
29
|
+
html.append("</style>");
|
|
30
|
+
|
|
31
|
+
html.append("<div class='status-grid'>");
|
|
32
|
+
|
|
33
|
+
html.append(Components.cardStart("Domain Configuration"));
|
|
34
|
+
html.append("<div class='status-item'><span class='status-indicator status-success'></span><span>Domain connected</span></div>");
|
|
35
|
+
html.append("<div class='status-item'><span class='status-indicator status-success'></span><span>DNS configured</span></div>");
|
|
36
|
+
html.append("<div class='status-item'><span class='status-indicator status-success'></span><span>SSL certificate valid</span></div>");
|
|
37
|
+
html.append(Components.cardEnd());
|
|
38
|
+
|
|
39
|
+
html.append(Components.cardStart("Security Status"));
|
|
40
|
+
html.append("<div class='status-item'><span class='status-indicator status-success'></span><span>DKIM configured</span></div>");
|
|
41
|
+
html.append("<div class='status-item'><span class='status-indicator status-success'></span><span>SPF record valid</span></div>");
|
|
42
|
+
html.append("<div class='status-item'><span class='status-indicator status-warning'></span><span>DMARC recommended</span></div>");
|
|
43
|
+
html.append(Components.cardEnd());
|
|
44
|
+
|
|
45
|
+
html.append("</div>");
|
|
46
|
+
|
|
47
|
+
html.append(Components.cardStart("Domain Health Monitoring"));
|
|
48
|
+
html.append(Components.empty("📈", "Domain monitoring dashboard<br><small>Real-time domain health metrics will appear here</small>"));
|
|
49
|
+
html.append(Components.cardEnd());
|
|
50
|
+
|
|
51
|
+
String flash = SessionManager.consumeFlash(ex);
|
|
52
|
+
SessionManager.respond(ex, 200, Layout.layout("/domain-status", SessionManager.getUser(ex), flash, html.toString()));
|
|
53
|
+
|
|
54
|
+
} catch (Exception e) {
|
|
55
|
+
SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeContributionsHandler — Knowledge hub for community sharing.
|
|
3
|
+
* Routes: GET /knowledge-contributions
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import com.sun.net.httpserver.*;
|
|
7
|
+
import java.io.*;
|
|
8
|
+
|
|
9
|
+
public class KnowledgeContributionsHandler 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("Knowledge Hub", "Share knowledge and learn from the community"));
|
|
21
|
+
|
|
22
|
+
html.append("<div style='margin-bottom:20px'>");
|
|
23
|
+
html.append("<button class='btn btn-primary'>Community</button> ");
|
|
24
|
+
html.append("<button class='btn'>My Contributions</button> ");
|
|
25
|
+
html.append("<button class='btn'>Bookmarks</button>");
|
|
26
|
+
html.append("</div>");
|
|
27
|
+
|
|
28
|
+
html.append(Components.cardStart("Featured Knowledge"));
|
|
29
|
+
html.append(Components.empty("🌟", "No featured knowledge available<br><small>Community-shared knowledge will appear here</small>"));
|
|
30
|
+
html.append(Components.cardEnd());
|
|
31
|
+
|
|
32
|
+
html.append("<div style='display:grid;grid-template-columns:2fr 1fr;gap:20px;margin-top:20px'>");
|
|
33
|
+
|
|
34
|
+
html.append(Components.cardStart("Latest Contributions"));
|
|
35
|
+
html.append(Components.empty("📝", "No contributions yet<br><small>Recent knowledge contributions will appear here</small>"));
|
|
36
|
+
html.append(Components.cardEnd());
|
|
37
|
+
|
|
38
|
+
html.append(Components.cardStart("Trending Topics"));
|
|
39
|
+
html.append(Components.empty("🔥", "No trending topics<br><small>Popular knowledge topics will appear here</small>"));
|
|
40
|
+
html.append(Components.cardEnd());
|
|
41
|
+
|
|
42
|
+
html.append("</div>");
|
|
43
|
+
|
|
44
|
+
String flash = SessionManager.consumeFlash(ex);
|
|
45
|
+
SessionManager.respond(ex, 200, Layout.layout("/knowledge-contributions", SessionManager.getUser(ex), flash, html.toString()));
|
|
46
|
+
|
|
47
|
+
} catch (Exception e) {
|
|
48
|
+
SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeHandler — Manage and organize knowledge bases for agents.
|
|
3
|
+
* Routes: GET /knowledge
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import com.sun.net.httpserver.*;
|
|
7
|
+
import java.io.*;
|
|
8
|
+
|
|
9
|
+
public class KnowledgeHandler 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("Knowledge Bases", "Manage and organize knowledge bases for your agents"));
|
|
21
|
+
|
|
22
|
+
html.append("<div style='margin-bottom:20px'>");
|
|
23
|
+
html.append("<button class='btn btn-primary'>+ Create Knowledge Base</button>");
|
|
24
|
+
html.append("</div>");
|
|
25
|
+
|
|
26
|
+
html.append(Components.cardStart("Active Knowledge Bases"));
|
|
27
|
+
html.append(Components.empty("📚", "No knowledge bases created<br><small>Create your first knowledge base to get started</small>"));
|
|
28
|
+
html.append(Components.cardEnd());
|
|
29
|
+
|
|
30
|
+
html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px'>");
|
|
31
|
+
|
|
32
|
+
html.append(Components.cardStart("Recent Activity"));
|
|
33
|
+
html.append(Components.empty("📈", "No recent activity"));
|
|
34
|
+
html.append(Components.cardEnd());
|
|
35
|
+
|
|
36
|
+
html.append(Components.cardStart("Knowledge Stats"));
|
|
37
|
+
html.append(Components.empty("📊", "No statistics available"));
|
|
38
|
+
html.append(Components.cardEnd());
|
|
39
|
+
|
|
40
|
+
html.append("</div>");
|
|
41
|
+
|
|
42
|
+
String flash = SessionManager.consumeFlash(ex);
|
|
43
|
+
SessionManager.respond(ex, 200, Layout.layout("/knowledge", SessionManager.getUser(ex), flash, html.toString()));
|
|
44
|
+
|
|
45
|
+
} catch (Exception e) {
|
|
46
|
+
SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillConnectionsHandler — Visualize and manage relationships between skills.
|
|
3
|
+
* Routes: GET /skill-connections
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import com.sun.net.httpserver.*;
|
|
7
|
+
import java.io.*;
|
|
8
|
+
|
|
9
|
+
public class SkillConnectionsHandler 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("Skill Connections", "Visualize and manage relationships between skills"));
|
|
21
|
+
|
|
22
|
+
html.append("<style>");
|
|
23
|
+
html.append(".connection-type{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--border)}");
|
|
24
|
+
html.append(".connection-type:last-child{border-bottom:none}");
|
|
25
|
+
html.append(".connection-indicator{width:12px;height:12px;border-radius:3px;flex-shrink:0}");
|
|
26
|
+
html.append(".connection-depends{background:#06b6d4}");
|
|
27
|
+
html.append(".connection-enhances{background:var(--success)}");
|
|
28
|
+
html.append(".connection-conflicts{background:var(--warning)}");
|
|
29
|
+
html.append("</style>");
|
|
30
|
+
|
|
31
|
+
html.append("<div style='margin-bottom:20px'>");
|
|
32
|
+
html.append("<button class='btn btn-primary'>+ Create Connection</button> ");
|
|
33
|
+
html.append("<button class='btn' style='margin-left:10px'>View Network</button>");
|
|
34
|
+
html.append("</div>");
|
|
35
|
+
|
|
36
|
+
html.append(Components.cardStart("Skill Network Overview"));
|
|
37
|
+
html.append(Components.empty("🔗", "No skill connections configured<br><small>Create connections between skills to enable complex workflows</small>"));
|
|
38
|
+
html.append(Components.cardEnd());
|
|
39
|
+
|
|
40
|
+
html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px'>");
|
|
41
|
+
|
|
42
|
+
html.append(Components.cardStart("Connection Types"));
|
|
43
|
+
html.append("<div class='connection-type'><span class='connection-indicator connection-depends'></span><span>Dependencies</span><span class='badge badge-default' style='margin-left:auto'>0</span></div>");
|
|
44
|
+
html.append("<div class='connection-type'><span class='connection-indicator connection-enhances'></span><span>Enhancements</span><span class='badge badge-default' style='margin-left:auto'>0</span></div>");
|
|
45
|
+
html.append("<div class='connection-type'><span class='connection-indicator connection-conflicts'></span><span>Conflicts</span><span class='badge badge-default' style='margin-left:auto'>0</span></div>");
|
|
46
|
+
html.append(Components.cardEnd());
|
|
47
|
+
|
|
48
|
+
html.append(Components.cardStart("Recent Changes"));
|
|
49
|
+
html.append(Components.empty("📋", "No recent changes<br><small>Connection updates will appear here</small>"));
|
|
50
|
+
html.append(Components.cardEnd());
|
|
51
|
+
|
|
52
|
+
html.append("</div>");
|
|
53
|
+
|
|
54
|
+
String flash = SessionManager.consumeFlash(ex);
|
|
55
|
+
SessionManager.respond(ex, 200, Layout.layout("/skill-connections", SessionManager.getUser(ex), flash, html.toString()));
|
|
56
|
+
|
|
57
|
+
} catch (Exception e) {
|
|
58
|
+
SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkforceHandler — Monitor agent schedules, workloads, and availability.
|
|
3
|
+
* Routes: GET /workforce
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import com.sun.net.httpserver.*;
|
|
7
|
+
import java.io.*;
|
|
8
|
+
|
|
9
|
+
public class WorkforceHandler 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("Workforce", "Monitor agent schedules, workloads, and availability"));
|
|
21
|
+
|
|
22
|
+
html.append("<style>");
|
|
23
|
+
html.append(".stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r,6px);padding:20px;text-align:center}");
|
|
24
|
+
html.append(".stat-icon{font-size:24px;margin-bottom:8px}");
|
|
25
|
+
html.append(".stat-value{font-size:24px;font-weight:700;color:var(--primary);margin-bottom:4px}");
|
|
26
|
+
html.append(".stat-label{font-size:13px;color:var(--text-muted,var(--muted))}");
|
|
27
|
+
html.append("</style>");
|
|
28
|
+
|
|
29
|
+
html.append("<div style='display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;margin-bottom:20px'>");
|
|
30
|
+
html.append("<div class='stat-card'><div class='stat-icon'>🤖</div><div class='stat-value'>0</div><div class='stat-label'>Active Agents</div></div>");
|
|
31
|
+
html.append("<div class='stat-card'><div class='stat-icon'>⏳</div><div class='stat-value'>0</div><div class='stat-label'>Pending Tasks</div></div>");
|
|
32
|
+
html.append("<div class='stat-card'><div class='stat-icon'>📊</div><div class='stat-value'>0%</div><div class='stat-label'>Utilization</div></div>");
|
|
33
|
+
html.append("</div>");
|
|
34
|
+
|
|
35
|
+
html.append("<div style='margin-bottom:20px'>");
|
|
36
|
+
html.append("<button class='btn btn-primary'>Schedule</button> ");
|
|
37
|
+
html.append("<button class='btn'>Workload</button> ");
|
|
38
|
+
html.append("<button class='btn'>Analytics</button>");
|
|
39
|
+
html.append("</div>");
|
|
40
|
+
|
|
41
|
+
html.append(Components.cardStart("Agent Schedule"));
|
|
42
|
+
html.append(Components.empty("🕐", "No scheduled tasks<br><small>Agent schedules and time allocations will appear here</small>"));
|
|
43
|
+
html.append(Components.cardEnd());
|
|
44
|
+
|
|
45
|
+
html.append("<div style='display:grid;grid-template-columns:2fr 1fr;gap:20px;margin-top:20px'>");
|
|
46
|
+
|
|
47
|
+
html.append(Components.cardStart("Workload Distribution"));
|
|
48
|
+
html.append(Components.empty("⚖️", "No workload data<br><small>Agent workload distribution will appear here</small>"));
|
|
49
|
+
html.append(Components.cardEnd());
|
|
50
|
+
|
|
51
|
+
html.append(Components.cardStart("Performance Metrics"));
|
|
52
|
+
html.append(Components.empty("📈", "No metrics available<br><small>Performance analytics will appear here</small>"));
|
|
53
|
+
html.append(Components.cardEnd());
|
|
54
|
+
|
|
55
|
+
html.append("</div>");
|
|
56
|
+
|
|
57
|
+
String flash = SessionManager.consumeFlash(ex);
|
|
58
|
+
SessionManager.respond(ex, 200, Layout.layout("/workforce", SessionManager.getUser(ex), flash, html.toString()));
|
|
59
|
+
|
|
60
|
+
} catch (Exception e) {
|
|
61
|
+
SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|