@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.
- 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/package.json +1 -1
|
@@ -4,48 +4,173 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
6
6
|
<title>AgenticMail Enterprise — Django</title>
|
|
7
|
-
<
|
|
8
|
-
*{box-sizing:border-box;margin:0;padding:0}:root,[data-theme=light]{--bg:#f8f9fa;--surface:#fff;--border:#dee2e6;--text:#212529;--dim:#495057;--muted:#868e96;--primary:#e84393;--success:#2b8a3e;--danger:#c92a2a;--warning:#e67700;--r:6px;color-scheme:light dark}[data-theme=dark]{--bg:#0f1114;--surface:#16181d;--border:#2c3038;--text:#e1e4e8;--dim:#b0b8c4;--muted:#6b7280;--primary:#f06595;--success:#37b24d;--danger:#f03e3e;--warning:#f08c00}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f1114;--surface:#16181d;--border:#2c3038;--text:#e1e4e8;--dim:#b0b8c4;--muted:#6b7280;--primary:#f06595;--success:#37b24d;--danger:#f03e3e;--warning:#f08c00}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;font-size:14px}.layout{display:flex;min-height:100vh}.sidebar{width:240px;background:var(--surface);border-right:1px solid var(--border);position:fixed;top:0;left:0;bottom:0;display:flex;flex-direction:column}.sh{padding:20px;border-bottom:1px solid var(--border)}.sh h2{font-size:16px}.sh h2 em{font-style:normal;color:var(--primary)}.sh small{font-size:11px;color:var(--muted);display:block;margin-top:2px}.nav{flex:1;padding:8px 0}.ns{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding:12px 20px 4px}.nav a{display:flex;align-items:center;gap:10px;padding:10px 20px;color:var(--dim);text-decoration:none;font-size:13px}.nav a:hover{color:var(--text);background:rgba(255,255,255,.03)}.nav a.on{color:var(--primary);background:rgba(232,67,147,.12);border-right:2px solid var(--primary)}.sf{padding:16px 20px;border-top:1px solid var(--border);font-size:12px}.content{flex:1;margin-left:240px;padding:32px;max-width:1100px}h2.t{font-size:22px;font-weight:700;margin-bottom:4px}.desc{font-size:13px;color:var(--dim);margin-bottom:24px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:24px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px}.stat .l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.stat .v{font-size:30px;font-weight:700;margin-top:4px}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:16px}.ct{font-size:13px;color:var(--dim);text-transform:uppercase;letter-spacing:.05em;font-weight:600;margin-bottom:12px}table{width:100%;border-collapse:collapse;font-size:13px}th{text-align:left;padding:10px 12px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border)}td{padding:12px;border-bottom:1px solid var(--border)}.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600}.b-a{background:rgba(34,197,94,.12);color:var(--success)}.b-r{background:rgba(136,136,160,.1);color:var(--dim)}.b-w{background:rgba(245,158,11,.12);color:var(--warning)}.b-p{background:rgba(232,67,147,.12);color:var(--primary)}.b-blue{background:rgba(59,130,246,.12);color:#3b82f6}.b-info{background:rgba(6,182,212,.12);color:#06b6d4}.b-neutral{background:rgba(136,136,160,.08);color:var(--muted)}.empty{text-align:center;padding:48px 20px;color:var(--muted)}.btn{display:inline-flex;align-items:center;padding:8px 16px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--text);text-decoration:none}.btn-p{background:var(--primary);border-color:var(--primary);color:#fff}.btn-d{color:var(--danger);border-color:var(--danger)}.btn-sm{padding:4px 10px;font-size:12px}.input{width:100%;padding:10px 14px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:14px;outline:none}.input:focus{border-color:var(--primary)}.fg{margin-bottom:14px}.fl{display:block;font-size:12px;color:var(--dim);margin-bottom:4px;font-weight:500}.flash{padding:12px 16px;border-radius:8px;margin-bottom:16px;font-size:13px;background:rgba(34,197,94,.1);border:1px solid var(--success);color:var(--success)}.flash-err{background:rgba(239,68,68,.1);border-color:var(--danger);color:var(--danger)}
|
|
9
|
-
</style>
|
|
7
|
+
<link rel="stylesheet" href="/static/styles.css">
|
|
10
8
|
</head>
|
|
11
9
|
<body>
|
|
12
|
-
<div class="layout">
|
|
10
|
+
<div class="app-layout">
|
|
13
11
|
<div class="sidebar">
|
|
14
|
-
<div class="
|
|
15
|
-
|
|
16
|
-
<
|
|
17
|
-
<a href="/" class="{% if page_name == 'dashboard' %}on{% endif %}">📊 <span>Dashboard</span></a>
|
|
18
|
-
<div class="ns">Manage</div>
|
|
19
|
-
<a href="/agents" class="{% if page_name == 'agents' %}on{% endif %}">🤖 <span>Agents</span></a>
|
|
20
|
-
<a href="/users" class="{% if page_name == 'users' %}on{% endif %}">👥 <span>Users</span></a>
|
|
21
|
-
<a href="/api-keys" class="{% if page_name == 'keys' %}on{% endif %}">🔑 <span>API Keys</span></a>
|
|
22
|
-
<a href="/vault" class="{% if page_name == 'vault' %}on{% endif %}">🔐 <span>Vault</span></a>
|
|
23
|
-
<a href="/skills" class="{% if page_name == 'skills' %}on{% endif %}">🧩 <span>Skills</span></a>
|
|
24
|
-
<div class="ns">Management</div>
|
|
25
|
-
<a href="/messages" class="{% if page_name == 'messages' %}on{% endif %}">📨 <span>Messages</span></a>
|
|
26
|
-
<a href="/guardrails" class="{% if page_name == 'guardrails' %}on{% endif %}">🛡 <span>Guardrails</span></a>
|
|
27
|
-
<a href="/journal" class="{% if page_name == 'journal' %}on{% endif %}">📓 <span>Journal</span></a>
|
|
28
|
-
<div class="ns">System</div>
|
|
29
|
-
<a href="/audit" class="{% if page_name == 'audit' %}on{% endif %}">📋 <span>Audit Log</span></a>
|
|
30
|
-
<a href="/dlp" class="{% if page_name == 'dlp' %}on{% endif %}">🔒 <span>DLP</span></a>
|
|
31
|
-
<a href="/compliance" class="{% if page_name == 'compliance' %}on{% endif %}">📄 <span>Compliance</span></a>
|
|
32
|
-
<a href="/settings" class="{% if page_name == 'settings' %}on{% endif %}">⚙️ <span>Settings</span></a>
|
|
12
|
+
<div class="sidebar-brand">
|
|
13
|
+
<h2>AgenticMail</h2>
|
|
14
|
+
<p>Enterprise</p>
|
|
33
15
|
</div>
|
|
34
|
-
<div class="
|
|
35
|
-
<div
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
<div class="sidebar-nav">
|
|
17
|
+
<div class="sidebar-section">
|
|
18
|
+
<div class="sidebar-section-title">Overview</div>
|
|
19
|
+
<a href="/" class="nav-item {% if page_name == 'dashboard' %}active{% endif %}">
|
|
20
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
21
|
+
<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"/>
|
|
22
|
+
</svg>
|
|
23
|
+
<span>Dashboard</span>
|
|
24
|
+
</a>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="sidebar-section">
|
|
28
|
+
<div class="sidebar-section-title">Management</div>
|
|
29
|
+
<a href="/agents" class="nav-item {% if page_name == 'agents' %}active{% endif %}">
|
|
30
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
31
|
+
<path d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0zm4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4zm-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10z"/>
|
|
32
|
+
</svg>
|
|
33
|
+
<span>Agents</span>
|
|
34
|
+
</a>
|
|
35
|
+
<a href="/skills" class="nav-item {% if page_name == 'skills' %}active{% endif %}">
|
|
36
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
37
|
+
<path d="M5.5 2A3.5 3.5 0 0 0 2 5.5v5A3.5 3.5 0 0 0 5.5 14h5a3.5 3.5 0 0 0 3.5-3.5V8a.5.5 0 0 1 1 0v2.5a4.5 4.5 0 0 1-4.5 4.5h-5A4.5 4.5 0 0 1 1 10.5v-5A4.5 4.5 0 0 1 5.5 1H8a.5.5 0 0 1 0 1H5.5z"/>
|
|
38
|
+
</svg>
|
|
39
|
+
<span>Skills</span>
|
|
40
|
+
</a>
|
|
41
|
+
<a href="/community-skills" class="nav-item {% if page_name == 'community-skills' %}active{% endif %}">
|
|
42
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
43
|
+
<path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0zM1.5 8a6.5 6.5 0 1 1 13 0 6.5 6.5 0 0 1-13 0z"/>
|
|
44
|
+
</svg>
|
|
45
|
+
<span>Community Skills</span>
|
|
46
|
+
</a>
|
|
47
|
+
<a href="/skill-connections" class="nav-item {% if page_name == 'skill-connections' %}active{% endif %}">
|
|
48
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
49
|
+
<path d="M4.715 6.542 3.248 7.17a.5.5 0 1 1-.4-.8l1.838-.918a.5.5 0 0 1 .478.011l1.06.53H8.5a.5.5 0 0 1 0 1H6.086l-1.371-.458z"/>
|
|
50
|
+
</svg>
|
|
51
|
+
<span>Skill Connections</span>
|
|
52
|
+
</a>
|
|
53
|
+
<a href="/knowledge" class="nav-item {% if page_name == 'knowledge' %}active{% endif %}">
|
|
54
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
55
|
+
<path d="M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811V2.828zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492V2.687zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783z"/>
|
|
56
|
+
</svg>
|
|
57
|
+
<span>Knowledge Bases</span>
|
|
58
|
+
</a>
|
|
59
|
+
<a href="/knowledge-contributions" class="nav-item {% if page_name == 'knowledge-contributions' %}active{% endif %}">
|
|
60
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
61
|
+
<path d="M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811V2.828zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492V2.687zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783z"/>
|
|
62
|
+
</svg>
|
|
63
|
+
<span>Knowledge Hub</span>
|
|
64
|
+
</a>
|
|
65
|
+
<a href="/approvals" class="nav-item {% if page_name == 'approvals' %}active{% endif %}">
|
|
66
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
67
|
+
<path d="M8.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.061L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z"/>
|
|
68
|
+
</svg>
|
|
69
|
+
<span>Approvals</span>
|
|
70
|
+
</a>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div class="sidebar-section">
|
|
74
|
+
<div class="sidebar-section-title">Operations</div>
|
|
75
|
+
<a href="/workforce" class="nav-item {% if page_name == 'workforce' %}active{% endif %}">
|
|
76
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
77
|
+
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
|
|
78
|
+
</svg>
|
|
79
|
+
<span>Workforce</span>
|
|
80
|
+
</a>
|
|
81
|
+
<a href="/activity" class="nav-item {% if page_name == 'activity' %}active{% endif %}">
|
|
82
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
83
|
+
<path d="M1.5 1.5A.5.5 0 0 0 1 2v4.8a2.5 2.5 0 0 0 2.5 2.5h9A2.5 2.5 0 0 0 15 6.8V2a.5.5 0 0 0-.5-.5h-13zM1 10.5A1.5 1.5 0 0 1 2.5 9h1A1.5 1.5 0 0 1 5 10.5v1A1.5 1.5 0 0 1 3.5 13h-1A1.5 1.5 0 0 1 1 11.5v-1zm6.5-9a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm2 0a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm2 0a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0z"/>
|
|
84
|
+
</svg>
|
|
85
|
+
<span>Activity</span>
|
|
86
|
+
</a>
|
|
87
|
+
<a href="/messages" class="nav-item {% if page_name == 'messages' %}active{% endif %}">
|
|
88
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
89
|
+
<path d="M5 8a.5.5 0 0 1-.5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708 0L9.5 5.707V7.5a.5.5 0 0 1-1 0V4.5A1.5 1.5 0 0 1 10 3h3a1.5 1.5 0 0 1 1.5 1.5v7A1.5 1.5 0 0 1 13 13H3a1.5 1.5 0 0 1-1.5-1.5V4.5A1.5 1.5 0 0 1 3 3h3a1.5 1.5 0 0 1 1.5 1.5V7.5A.5.5 0 0 1 7 8H5z"/>
|
|
90
|
+
</svg>
|
|
91
|
+
<span>Messages</span>
|
|
92
|
+
</a>
|
|
93
|
+
<a href="/guardrails" class="nav-item {% if page_name == 'guardrails' %}active{% endif %}">
|
|
94
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
95
|
+
<path d="M5.338 1.59a61.44 61.44 0 0 0-2.837.856.481.481 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.725 10.725 0 0 0 2.287 2.233c.346.244.652.42.893.533.12.057.218.095.293.118a.55.55 0 0 0 .101.025.615.615 0 0 0 .1-.025c.076-.023.174-.061.294-.118.24-.113.547-.29.893-.533a10.726 10.726 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524zM5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.775 11.775 0 0 1-2.517 2.453 7.159 7.159 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7.158 7.158 0 0 1-1.048-.625 11.777 11.777 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 62.456 62.456 0 0 1 5.072.56z"/>
|
|
96
|
+
</svg>
|
|
97
|
+
<span>Guardrails</span>
|
|
98
|
+
</a>
|
|
99
|
+
<a href="/journal" class="nav-item {% if page_name == 'journal' %}active{% endif %}">
|
|
100
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
101
|
+
<path d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z"/>
|
|
102
|
+
</svg>
|
|
103
|
+
<span>Journal</span>
|
|
104
|
+
</a>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
<div class="sidebar-section">
|
|
108
|
+
<div class="sidebar-section-title">Administration</div>
|
|
109
|
+
<a href="/dlp" class="nav-item {% if page_name == 'dlp' %}active{% endif %}">
|
|
110
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
111
|
+
<path d="M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10.24 8.051a.5.5 0 0 0-.128.334v2.115l-2.222 1.112a.5.5 0 0 1-.778-.416V8.385a.5.5 0 0 0-.128-.334L2.128 3.84A.5.5 0 0 1 2 3.5v-2z"/>
|
|
112
|
+
</svg>
|
|
113
|
+
<span>DLP</span>
|
|
114
|
+
</a>
|
|
115
|
+
<a href="/compliance" class="nav-item {% if page_name == 'compliance' %}active{% endif %}">
|
|
116
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
117
|
+
<path d="M9.669.864 8 0 6.331.864l-1.858.282-.842 1.68-1.337 1.32L2.6 6l-.306 1.854 1.337 1.32.842 1.68 1.858.282L8 16l1.669-.864 1.858-.282.842-1.68 1.337-1.32L13.4 10l.306-1.854-1.337-1.32-.842-1.68L9.669.864zm1.196 1.193.684 1.365 1.086 1.072L12.387 6l.248 1.506-1.086 1.072-.684 1.365-1.51.229L8 10.874l-1.355-.702-1.51-.229-.684-1.365-1.086-1.072L3.614 6l-.25-1.506 1.087-1.072.684-1.365 1.51-.229L8 1.126l1.356.702 1.509.229z"/>
|
|
118
|
+
</svg>
|
|
119
|
+
<span>Compliance</span>
|
|
120
|
+
</a>
|
|
121
|
+
<a href="/domain-status" class="nav-item {% if page_name == 'domain-status' %}active{% endif %}">
|
|
122
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
123
|
+
<path d="M5.338 1.59a61.44 61.44 0 0 0-2.837.856.481.481 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.725 10.725 0 0 0 2.287 2.233c.346.244.652.42.893.533.12.057.218.095.293.118a.55.55 0 0 0 .101.025.615.615 0 0 0 .1-.025c.076-.023.174-.061.294-.118.24-.113.547-.29.893-.533a10.726 10.726 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524zM5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.775 11.775 0 0 1-2.517 2.453 7.159 7.159 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7.158 7.158 0 0 1-1.048-.625 11.777 11.777 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 62.456 62.456 0 0 1 5.072.56z"/>
|
|
124
|
+
</svg>
|
|
125
|
+
<span>Domain</span>
|
|
126
|
+
</a>
|
|
127
|
+
<a href="/users" class="nav-item {% if page_name == 'users' %}active{% endif %}">
|
|
128
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
129
|
+
<path d="M7 14s-1 0-1-1 1-4 5-4 5 3 5 4-1 1-1 1H7zm4-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/>
|
|
130
|
+
</svg>
|
|
131
|
+
<span>Users</span>
|
|
132
|
+
</a>
|
|
133
|
+
<a href="/vault" class="nav-item {% if page_name == 'vault' %}active{% endif %}">
|
|
134
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
135
|
+
<path d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z"/>
|
|
136
|
+
</svg>
|
|
137
|
+
<span>Vault</span>
|
|
138
|
+
</a>
|
|
139
|
+
<a href="/audit" class="nav-item {% if page_name == 'audit' %}active{% endif %}">
|
|
140
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
141
|
+
<path d="M8.5 5.5a.5.5 0 0 0-1 0v3.362l-1.429 2.38a.5.5 0 1 0 .858.515l1.5-2.5A.5.5 0 0 0 8.5 9V5.5z"/>
|
|
142
|
+
</svg>
|
|
143
|
+
<span>Audit Log</span>
|
|
144
|
+
</a>
|
|
145
|
+
<a href="/settings" class="nav-item {% if page_name == 'settings' %}active{% endif %}">
|
|
146
|
+
<svg width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
|
|
147
|
+
<path d="M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z"/>
|
|
148
|
+
</svg>
|
|
149
|
+
<span>Settings</span>
|
|
150
|
+
</a>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="sidebar-footer">
|
|
154
|
+
<div class="sidebar-user">
|
|
155
|
+
<div class="avatar">{{ user.name.0|default:'A'|upper }}</div>
|
|
156
|
+
<div class="user-info">
|
|
157
|
+
<div class="user-name">{{ user.name|default:user.email }}</div>
|
|
158
|
+
<div class="user-role">{{ user.role|default:'admin' }}</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
38
161
|
</div>
|
|
39
162
|
</div>
|
|
40
|
-
<div class="content">
|
|
41
|
-
|
|
42
|
-
{% if
|
|
43
|
-
|
|
44
|
-
{
|
|
45
|
-
|
|
46
|
-
{
|
|
47
|
-
{% endif %}
|
|
48
|
-
{%
|
|
163
|
+
<div class="main-content">
|
|
164
|
+
<div class="page-content">
|
|
165
|
+
{% if flash_msg %}
|
|
166
|
+
{% if 'error' in flash_msg|lower or 'failed' in flash_msg|lower %}
|
|
167
|
+
<div class="alert alert-error">{{ flash_msg }}</div>
|
|
168
|
+
{% else %}
|
|
169
|
+
<div class="alert alert-success">{{ flash_msg }}</div>
|
|
170
|
+
{% endif %}
|
|
171
|
+
{% endif %}
|
|
172
|
+
{% block content %}{% endblock %}
|
|
173
|
+
</div>
|
|
49
174
|
</div>
|
|
50
175
|
</div>
|
|
51
176
|
</body>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{% extends "layout.html" %}
|
|
2
|
+
|
|
3
|
+
{% block content %}
|
|
4
|
+
<div class="page-title">Skill Connections</div>
|
|
5
|
+
|
|
6
|
+
<div class="stat-grid">
|
|
7
|
+
<div class="stat-card">
|
|
8
|
+
<div class="stat-label">Active Connections</div>
|
|
9
|
+
<div class="stat-value">156</div>
|
|
10
|
+
<div class="stat-change" style="color: var(--success)">+8 this week</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="stat-card">
|
|
13
|
+
<div class="stat-label">Skill Networks</div>
|
|
14
|
+
<div class="stat-value">23</div>
|
|
15
|
+
<div class="stat-change" style="color: var(--success)">+2 new</div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="stat-card">
|
|
18
|
+
<div class="stat-label">Connection Health</div>
|
|
19
|
+
<div class="stat-value" style="color: var(--success)">98%</div>
|
|
20
|
+
<div class="stat-change" style="color: var(--success)">Excellent</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="card">
|
|
25
|
+
<div class="card-header">
|
|
26
|
+
<h3>Connection Map</h3>
|
|
27
|
+
<button class="btn btn-secondary">View Network</button>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="card-body">
|
|
30
|
+
<div style="background: var(--bg-tertiary); border-radius: var(--radius); padding: 40px; text-align: center; margin-bottom: 24px;">
|
|
31
|
+
<div style="font-size: 14px; color: var(--text-muted); margin-bottom: 16px;">
|
|
32
|
+
Interactive skill connection visualization would be displayed here
|
|
33
|
+
</div>
|
|
34
|
+
<button class="btn btn-secondary">Launch Network Viewer</button>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<div class="card">
|
|
40
|
+
<div class="card-header">
|
|
41
|
+
<h3>Active Connections</h3>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="card-body">
|
|
44
|
+
<table>
|
|
45
|
+
<thead>
|
|
46
|
+
<tr>
|
|
47
|
+
<th>Connection</th>
|
|
48
|
+
<th>Skill</th>
|
|
49
|
+
<th>Type</th>
|
|
50
|
+
<th>Usage</th>
|
|
51
|
+
<th>Status</th>
|
|
52
|
+
</tr>
|
|
53
|
+
</thead>
|
|
54
|
+
<tbody>
|
|
55
|
+
<tr>
|
|
56
|
+
<td>Alice ↔ Bob</td>
|
|
57
|
+
<td>Data Analytics</td>
|
|
58
|
+
<td><span class="badge badge-primary">Bidirectional</span></td>
|
|
59
|
+
<td>847 calls</td>
|
|
60
|
+
<td><span class="badge badge-success">Active</span></td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr>
|
|
63
|
+
<td>Bob → Charlie</td>
|
|
64
|
+
<td>API Integration</td>
|
|
65
|
+
<td><span class="badge badge-info">Unidirectional</span></td>
|
|
66
|
+
<td>234 calls</td>
|
|
67
|
+
<td><span class="badge badge-success">Active</span></td>
|
|
68
|
+
</tr>
|
|
69
|
+
</tbody>
|
|
70
|
+
</table>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
{% endblock %}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{% extends "layout.html" %}
|
|
2
|
+
|
|
3
|
+
{% block content %}
|
|
4
|
+
<div class="page-title">Agent Workforce</div>
|
|
5
|
+
|
|
6
|
+
<div class="stat-grid">
|
|
7
|
+
<div class="stat-card">
|
|
8
|
+
<div class="stat-label">Active Agents</div>
|
|
9
|
+
<div class="stat-value">24</div>
|
|
10
|
+
<div class="stat-change" style="color: var(--success)">+3 this week</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="stat-card">
|
|
13
|
+
<div class="stat-label">CPU Usage</div>
|
|
14
|
+
<div class="stat-value">67%</div>
|
|
15
|
+
<div class="stat-change" style="color: var(--warning)">Moderate load</div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="stat-card">
|
|
18
|
+
<div class="stat-label">Tasks Completed</div>
|
|
19
|
+
<div class="stat-value">1,847</div>
|
|
20
|
+
<div class="stat-change" style="color: var(--success)">+18% today</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="card">
|
|
25
|
+
<div class="card-header">
|
|
26
|
+
<h3>Agent Fleet</h3>
|
|
27
|
+
<div>
|
|
28
|
+
<button class="btn btn-secondary">Start All</button>
|
|
29
|
+
<button class="btn btn-secondary" style="margin-left: 8px;">Stop All</button>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="card-body">
|
|
33
|
+
<table>
|
|
34
|
+
<thead>
|
|
35
|
+
<tr>
|
|
36
|
+
<th>Agent</th>
|
|
37
|
+
<th>Department</th>
|
|
38
|
+
<th>Status</th>
|
|
39
|
+
<th>Tasks</th>
|
|
40
|
+
<th>CPU</th>
|
|
41
|
+
<th>Uptime</th>
|
|
42
|
+
<th>Actions</th>
|
|
43
|
+
</tr>
|
|
44
|
+
</thead>
|
|
45
|
+
<tbody>
|
|
46
|
+
<tr>
|
|
47
|
+
<td>
|
|
48
|
+
<div style="display: flex; align-items: center; gap: 8px;">
|
|
49
|
+
<div style="width: 24px; height: 24px; border-radius: 50%; background: var(--accent-soft); color: var(--accent-text); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600;">A1</div>
|
|
50
|
+
Alice Support
|
|
51
|
+
</div>
|
|
52
|
+
</td>
|
|
53
|
+
<td><span class="badge badge-primary">Customer Support</span></td>
|
|
54
|
+
<td>
|
|
55
|
+
<div style="display: flex; align-items: center; gap: 6px;">
|
|
56
|
+
<div style="width: 8px; height: 8px; border-radius: 50%; background: var(--success);"></div>
|
|
57
|
+
<span class="status-running">Running</span>
|
|
58
|
+
</div>
|
|
59
|
+
</td>
|
|
60
|
+
<td>247 completed</td>
|
|
61
|
+
<td>45%</td>
|
|
62
|
+
<td>12h 34m</td>
|
|
63
|
+
<td>
|
|
64
|
+
<button class="btn btn-sm btn-secondary" style="margin-right: 4px;">View</button>
|
|
65
|
+
<button class="btn btn-sm btn-danger">Stop</button>
|
|
66
|
+
</td>
|
|
67
|
+
</tr>
|
|
68
|
+
<tr>
|
|
69
|
+
<td>
|
|
70
|
+
<div style="display: flex; align-items: center; gap: 8px;">
|
|
71
|
+
<div style="width: 24px; height: 24px; border-radius: 50%; background: var(--success-soft); color: var(--success); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600;">B1</div>
|
|
72
|
+
Bob Analytics
|
|
73
|
+
</div>
|
|
74
|
+
</td>
|
|
75
|
+
<td><span class="badge badge-info">Operations</span></td>
|
|
76
|
+
<td>
|
|
77
|
+
<div style="display: flex; align-items: center; gap: 6px;">
|
|
78
|
+
<div style="width: 8px; height: 8px; border-radius: 50%; background: var(--success);"></div>
|
|
79
|
+
<span class="status-running">Running</span>
|
|
80
|
+
</div>
|
|
81
|
+
</td>
|
|
82
|
+
<td>189 completed</td>
|
|
83
|
+
<td>78%</td>
|
|
84
|
+
<td>8h 12m</td>
|
|
85
|
+
<td>
|
|
86
|
+
<button class="btn btn-sm btn-secondary" style="margin-right: 4px;">View</button>
|
|
87
|
+
<button class="btn btn-sm btn-danger">Stop</button>
|
|
88
|
+
</td>
|
|
89
|
+
</tr>
|
|
90
|
+
<tr>
|
|
91
|
+
<td>
|
|
92
|
+
<div style="display: flex; align-items: center; gap: 8px;">
|
|
93
|
+
<div style="width: 24px; height: 24px; border-radius: 50%; background: var(--warning-soft); color: var(--warning); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600;">C1</div>
|
|
94
|
+
Charlie Sales
|
|
95
|
+
</div>
|
|
96
|
+
</td>
|
|
97
|
+
<td><span class="badge badge-success">Sales</span></td>
|
|
98
|
+
<td>
|
|
99
|
+
<div style="display: flex; align-items: center; gap: 6px;">
|
|
100
|
+
<div style="width: 8px; height: 8px; border-radius: 50%; background: var(--text-muted);"></div>
|
|
101
|
+
<span class="status-stopped">Idle</span>
|
|
102
|
+
</div>
|
|
103
|
+
</td>
|
|
104
|
+
<td>34 completed</td>
|
|
105
|
+
<td>12%</td>
|
|
106
|
+
<td>15h 45m</td>
|
|
107
|
+
<td>
|
|
108
|
+
<button class="btn btn-sm" style="background: var(--success); color: white; margin-right: 4px;">Start</button>
|
|
109
|
+
<button class="btn btn-sm btn-secondary">View</button>
|
|
110
|
+
</td>
|
|
111
|
+
</tr>
|
|
112
|
+
</tbody>
|
|
113
|
+
</table>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
{% endblock %}
|
|
@@ -16,6 +16,11 @@ from views.messages import messages_view
|
|
|
16
16
|
from views.compliance import compliance_view
|
|
17
17
|
from views.vault import vault_view
|
|
18
18
|
from views.skills import skills_view
|
|
19
|
+
# New pages
|
|
20
|
+
from views.new_pages import (
|
|
21
|
+
activity_view, approvals_view, community_skills_view, domain_status_view,
|
|
22
|
+
knowledge_view, knowledge_contributions_view, skill_connections_view, workforce_view
|
|
23
|
+
)
|
|
19
24
|
|
|
20
25
|
__all__ = [
|
|
21
26
|
'login_view',
|
|
@@ -35,4 +40,13 @@ __all__ = [
|
|
|
35
40
|
'compliance_view',
|
|
36
41
|
'vault_view',
|
|
37
42
|
'skills_view',
|
|
43
|
+
# New pages
|
|
44
|
+
'activity_view',
|
|
45
|
+
'approvals_view',
|
|
46
|
+
'community_skills_view',
|
|
47
|
+
'domain_status_view',
|
|
48
|
+
'knowledge_view',
|
|
49
|
+
'knowledge_contributions_view',
|
|
50
|
+
'skill_connections_view',
|
|
51
|
+
'workforce_view',
|
|
38
52
|
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Views for new pages added to match main dashboard
|
|
3
|
+
"""
|
|
4
|
+
from django.shortcuts import render
|
|
5
|
+
from utils.api import api_call
|
|
6
|
+
from utils.auth import require_auth
|
|
7
|
+
|
|
8
|
+
@require_auth
|
|
9
|
+
def activity_view(request):
|
|
10
|
+
return render(request, 'activity.html', {'page_name': 'activity'})
|
|
11
|
+
|
|
12
|
+
@require_auth
|
|
13
|
+
def approvals_view(request):
|
|
14
|
+
return render(request, 'approvals.html', {'page_name': 'approvals'})
|
|
15
|
+
|
|
16
|
+
@require_auth
|
|
17
|
+
def community_skills_view(request):
|
|
18
|
+
return render(request, 'community-skills.html', {'page_name': 'community-skills'})
|
|
19
|
+
|
|
20
|
+
@require_auth
|
|
21
|
+
def domain_status_view(request):
|
|
22
|
+
return render(request, 'domain-status.html', {'page_name': 'domain-status'})
|
|
23
|
+
|
|
24
|
+
@require_auth
|
|
25
|
+
def knowledge_view(request):
|
|
26
|
+
return render(request, 'knowledge.html', {'page_name': 'knowledge'})
|
|
27
|
+
|
|
28
|
+
@require_auth
|
|
29
|
+
def knowledge_contributions_view(request):
|
|
30
|
+
return render(request, 'knowledge-contributions.html', {'page_name': 'knowledge-contributions'})
|
|
31
|
+
|
|
32
|
+
@require_auth
|
|
33
|
+
def skill_connections_view(request):
|
|
34
|
+
return render(request, 'skill-connections.html', {'page_name': 'skill-connections'})
|
|
35
|
+
|
|
36
|
+
@require_auth
|
|
37
|
+
def workforce_view(request):
|
|
38
|
+
return render(request, 'workforce.html', {'page_name': 'workforce'})
|
|
@@ -67,6 +67,14 @@ JournalRoutes.Map(app);
|
|
|
67
67
|
SettingRoutes.Map(app);
|
|
68
68
|
VaultRoutes.Map(app);
|
|
69
69
|
SkillRoutes.Map(app);
|
|
70
|
+
ActivityRoutes.Map(app);
|
|
71
|
+
ApprovalRoutes.Map(app);
|
|
72
|
+
CommunitySkillRoutes.Map(app);
|
|
73
|
+
DomainStatusRoutes.Map(app);
|
|
74
|
+
KnowledgeRoutes.Map(app);
|
|
75
|
+
KnowledgeContributionRoutes.Map(app);
|
|
76
|
+
SkillConnectionRoutes.Map(app);
|
|
77
|
+
WorkforceRoutes.Map(app);
|
|
70
78
|
|
|
71
79
|
// --- Start ---
|
|
72
80
|
var port = Environment.GetEnvironmentVariable("PORT") ?? "5002";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
using AgenticMailDashboard.Services;
|
|
2
|
+
using static AgenticMailDashboard.Services.HtmlBuilder;
|
|
3
|
+
|
|
4
|
+
namespace AgenticMailDashboard.Routes;
|
|
5
|
+
|
|
6
|
+
public static class ActivityRoutes
|
|
7
|
+
{
|
|
8
|
+
public static void Map(WebApplication app)
|
|
9
|
+
{
|
|
10
|
+
app.MapGet("/activity", (HttpContext ctx) =>
|
|
11
|
+
{
|
|
12
|
+
var html = @"<div class='page-header'>
|
|
13
|
+
<h1>Activity</h1>
|
|
14
|
+
<p>Real-time activity and tool usage across all agents</p>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div style='margin-bottom:20px'>
|
|
18
|
+
<button class='btn btn-primary' onclick=""location.href='#events'"">Events</button>
|
|
19
|
+
<button class='btn' onclick=""location.href='#tools'"">Tool Calls</button>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class='card'>
|
|
23
|
+
<h3>Recent Events</h3>
|
|
24
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>📋</div>No events recorded<br><small>Agent activity will appear here</small></div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class='card'>
|
|
28
|
+
<h3>Tool Usage</h3>
|
|
29
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>🔧</div>No tool calls recorded<br><small>Tool usage statistics will appear here</small></div>
|
|
30
|
+
</div>";
|
|
31
|
+
|
|
32
|
+
return Results.Content(Page(ctx, "/activity", html), "text/html");
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
using AgenticMailDashboard.Services;
|
|
2
|
+
using static AgenticMailDashboard.Services.HtmlBuilder;
|
|
3
|
+
|
|
4
|
+
namespace AgenticMailDashboard.Routes;
|
|
5
|
+
|
|
6
|
+
public static class ApprovalRoutes
|
|
7
|
+
{
|
|
8
|
+
public static void Map(WebApplication app)
|
|
9
|
+
{
|
|
10
|
+
app.MapGet("/approvals", (HttpContext ctx) =>
|
|
11
|
+
{
|
|
12
|
+
var html = @"<div class='page-header'>
|
|
13
|
+
<h1>Approvals</h1>
|
|
14
|
+
<p>Review and manage pending approval requests</p>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div style='margin-bottom:20px'>
|
|
18
|
+
<button class='btn btn-primary'>Pending</button>
|
|
19
|
+
<button class='btn'>Approved</button>
|
|
20
|
+
<button class='btn'>Rejected</button>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class='card'>
|
|
24
|
+
<h3>Pending Approvals</h3>
|
|
25
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>✅</div>No pending approvals<br><small>Agent approval requests will appear here</small></div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div class='card'>
|
|
29
|
+
<h3>Approval History</h3>
|
|
30
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>📋</div>No approval history<br><small>Past approvals and rejections will appear here</small></div>
|
|
31
|
+
</div>";
|
|
32
|
+
|
|
33
|
+
return Results.Content(Page(ctx, "/approvals", html), "text/html");
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
using AgenticMailDashboard.Services;
|
|
2
|
+
using static AgenticMailDashboard.Services.HtmlBuilder;
|
|
3
|
+
|
|
4
|
+
namespace AgenticMailDashboard.Routes;
|
|
5
|
+
|
|
6
|
+
public static class CommunitySkillRoutes
|
|
7
|
+
{
|
|
8
|
+
public static void Map(WebApplication app)
|
|
9
|
+
{
|
|
10
|
+
app.MapGet("/community-skills", (HttpContext ctx) =>
|
|
11
|
+
{
|
|
12
|
+
var html = @"<div class='page-header'>
|
|
13
|
+
<h1>Community Skills</h1>
|
|
14
|
+
<p>Browse and install skills shared by the community</p>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class='card'>
|
|
18
|
+
<h3>Featured Skills</h3>
|
|
19
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>🏪</div>No community skills available<br><small>Community-shared skills will appear here</small></div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div style='display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px'>
|
|
23
|
+
<div class='card'>
|
|
24
|
+
<h3>Popular Categories</h3>
|
|
25
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>🏷️</div>No categories</div>
|
|
26
|
+
</div>
|
|
27
|
+
<div class='card'>
|
|
28
|
+
<h3>My Contributions</h3>
|
|
29
|
+
<div class='empty-state'><div style='font-size:36px;margin-bottom:10px'>📤</div>No contributions</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>";
|
|
32
|
+
|
|
33
|
+
return Results.Content(Page(ctx, "/community-skills", html), "text/html");
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|