@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,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Activity route — Real-time activity and tool usage
4
+
5
+ get '/activity' do
6
+ require_auth!
7
+ @events = []
8
+ @tool_calls = []
9
+ erb :activity
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Approvals route — Pending approval requests
4
+
5
+ get '/approvals' do
6
+ require_auth!
7
+ @pending_approvals = []
8
+ @approval_history = []
9
+ erb :approvals
10
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Community Skills route — Browse and install community skills
4
+
5
+ get '/community-skills' do
6
+ require_auth!
7
+ @featured_skills = []
8
+ @categories = []
9
+ @my_contributions = []
10
+ erb :community_skills
11
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Domain Status route — Domain configuration and health status
4
+
5
+ get '/domain-status' do
6
+ require_auth!
7
+ @domain_config = {
8
+ 'domain_connected' => true,
9
+ 'dns_configured' => true,
10
+ 'ssl_valid' => true,
11
+ 'dkim_configured' => true,
12
+ 'spf_valid' => true,
13
+ 'dmarc_configured' => false
14
+ }
15
+ erb :domain_status
16
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Knowledge Bases route — Manage knowledge bases and documents
4
+
5
+ get '/knowledge' do
6
+ require_auth!
7
+ @knowledge_bases = []
8
+ @recent_activity = []
9
+ @stats = {}
10
+ erb :knowledge
11
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Knowledge Hub route — Community knowledge sharing and contributions
4
+
5
+ get '/knowledge-contributions' do
6
+ require_auth!
7
+ @featured_knowledge = []
8
+ @latest_contributions = []
9
+ @trending_topics = []
10
+ @my_bookmarks = []
11
+ erb :knowledge_contributions
12
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Skill Connections route — Manage skill relationships and dependencies
4
+
5
+ get '/skill-connections' do
6
+ require_auth!
7
+ @connections = []
8
+ @connection_types = {
9
+ 'dependencies' => 0,
10
+ 'enhancements' => 0,
11
+ 'conflicts' => 0
12
+ }
13
+ @recent_changes = []
14
+ erb :skill_connections
15
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Workforce route — Agent scheduling and workload management
4
+
5
+ get '/workforce' do
6
+ require_auth!
7
+ @stats = {
8
+ 'active_agents' => 0,
9
+ 'pending_tasks' => 0,
10
+ 'utilization' => 0
11
+ }
12
+ @schedules = []
13
+ @workload_data = []
14
+ @performance_metrics = []
15
+ erb :workforce
16
+ end
@@ -0,0 +1,56 @@
1
+ <div class="page-header">
2
+ <h1>Activity</h1>
3
+ <p>Real-time activity and tool usage across all agents</p>
4
+ </div>
5
+
6
+ <div class="tabs">
7
+ <div class="tab active">Events</div>
8
+ <div class="tab">Tool Calls</div>
9
+ </div>
10
+
11
+ <div class="card">
12
+ <h3>Recent Events</h3>
13
+ <% if @events.empty? %>
14
+ <div class="empty"><span class="icon">📋</span>No events recorded<br><small>Agent activity will appear here</small></div>
15
+ <% else %>
16
+ <div class="table-wrap">
17
+ <table>
18
+ <thead><tr><th>Time</th><th>Type</th><th>Agent</th><th>Details</th></tr></thead>
19
+ <tbody>
20
+ <% @events.each do |ev| %>
21
+ <tr>
22
+ <td style="color:var(--text-muted)"><%= ev['timestamp'] %></td>
23
+ <td><span class="badge badge-info"><%= ev['type'] %></span></td>
24
+ <td><%= ev['agent'] %></td>
25
+ <td><%= ev['details'] %></td>
26
+ </tr>
27
+ <% end %>
28
+ </tbody>
29
+ </table>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+
34
+ <div class="card" style="margin-top: 20px;">
35
+ <h3>Tool Usage</h3>
36
+ <% if @tool_calls.empty? %>
37
+ <div class="empty"><span class="icon">🛠️</span>No tool calls recorded<br><small>Tool usage statistics will appear here</small></div>
38
+ <% else %>
39
+ <div class="table-wrap">
40
+ <table>
41
+ <thead><tr><th>Time</th><th>Tool</th><th>Agent</th><th>Duration</th><th>Status</th></tr></thead>
42
+ <tbody>
43
+ <% @tool_calls.each do |tc| %>
44
+ <tr>
45
+ <td style="color:var(--text-muted)"><%= tc['timestamp'] %></td>
46
+ <td><%= tc['tool'] %></td>
47
+ <td><%= tc['agent'] %></td>
48
+ <td><%= tc['duration'] %></td>
49
+ <td><%= tc['status'] %></td>
50
+ </tr>
51
+ <% end %>
52
+ </tbody>
53
+ </table>
54
+ </div>
55
+ <% end %>
56
+ </div>
@@ -0,0 +1,60 @@
1
+ <div class="page-header">
2
+ <h1>Approvals</h1>
3
+ <p>Review and manage pending approval requests</p>
4
+ </div>
5
+
6
+ <div class="tabs">
7
+ <div class="tab active">Pending</div>
8
+ <div class="tab">Approved</div>
9
+ <div class="tab">Rejected</div>
10
+ </div>
11
+
12
+ <div class="card">
13
+ <h3>Pending Approvals</h3>
14
+ <% if @pending_approvals.empty? %>
15
+ <div class="empty"><span class="icon">✅</span>No pending approvals<br><small>Agent approval requests will appear here</small></div>
16
+ <% else %>
17
+ <div class="table-wrap">
18
+ <table>
19
+ <thead><tr><th>Request</th><th>Agent</th><th>Type</th><th>Created</th><th>Actions</th></tr></thead>
20
+ <tbody>
21
+ <% @pending_approvals.each do |approval| %>
22
+ <tr>
23
+ <td><%= approval['request'] %></td>
24
+ <td><%= approval['agent'] %></td>
25
+ <td><%= approval['type'] %></td>
26
+ <td style="color:var(--text-muted)"><%= approval['created'] %></td>
27
+ <td>
28
+ <button class="btn btn-success btn-sm">Approve</button>
29
+ <button class="btn btn-danger btn-sm">Reject</button>
30
+ </td>
31
+ </tr>
32
+ <% end %>
33
+ </tbody>
34
+ </table>
35
+ </div>
36
+ <% end %>
37
+ </div>
38
+
39
+ <div class="card" style="margin-top: 20px;">
40
+ <h3>Approval History</h3>
41
+ <% if @approval_history.empty? %>
42
+ <div class="empty"><span class="icon">📋</span>No approval history<br><small>Past approvals and rejections will appear here</small></div>
43
+ <% else %>
44
+ <div class="table-wrap">
45
+ <table>
46
+ <thead><tr><th>Request</th><th>Status</th><th>Date</th><th>Reviewer</th></tr></thead>
47
+ <tbody>
48
+ <% @approval_history.each do |history| %>
49
+ <tr>
50
+ <td><%= history['request'] %></td>
51
+ <td><span class="badge badge-<%= history['status'] == 'approved' ? 'success' : 'danger' %>"><%= history['status'] %></span></td>
52
+ <td style="color:var(--text-muted)"><%= history['date'] %></td>
53
+ <td><%= history['reviewer'] %></td>
54
+ </tr>
55
+ <% end %>
56
+ </tbody>
57
+ </table>
58
+ </div>
59
+ <% end %>
60
+ </div>
@@ -0,0 +1,69 @@
1
+ <div class="page-header">
2
+ <h1>Community Skills</h1>
3
+ <p>Browse and install skills shared by the community</p>
4
+ </div>
5
+
6
+ <div class="card">
7
+ <h3>Featured Skills</h3>
8
+ <% if @featured_skills.empty? %>
9
+ <div class="empty"><span class="icon">🏪</span>No community skills available<br><small>Community-shared skills will appear here</small></div>
10
+ <% else %>
11
+ <div class="skills-grid">
12
+ <% @featured_skills.each do |skill| %>
13
+ <div class="skill-card">
14
+ <h4><%= skill['name'] %></h4>
15
+ <p><%= skill['description'] %></p>
16
+ <div class="skill-meta">
17
+ <span>By <%= skill['author'] %></span>
18
+ <span>★ <%= skill['rating'] %></span>
19
+ </div>
20
+ <button class="btn btn-primary btn-sm">Install</button>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+ <% end %>
25
+ </div>
26
+
27
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px;">
28
+ <div class="card">
29
+ <h3>Popular Categories</h3>
30
+ <% if @categories.empty? %>
31
+ <div class="empty"><span class="icon">🏷️</span>No categories</div>
32
+ <% else %>
33
+ <div class="category-list">
34
+ <% @categories.each do |category| %>
35
+ <div class="category-item">
36
+ <span><%= category['name'] %></span>
37
+ <span class="badge"><%= category['count'] %></span>
38
+ </div>
39
+ <% end %>
40
+ </div>
41
+ <% end %>
42
+ </div>
43
+
44
+ <div class="card">
45
+ <h3>My Contributions</h3>
46
+ <% if @my_contributions.empty? %>
47
+ <div class="empty"><span class="icon">📤</span>No contributions</div>
48
+ <% else %>
49
+ <div class="contributions-list">
50
+ <% @my_contributions.each do |contribution| %>
51
+ <div class="contribution-item">
52
+ <strong><%= contribution['name'] %></strong>
53
+ <small style="color:var(--text-muted)"><%= contribution['status'] %></small>
54
+ </div>
55
+ <% end %>
56
+ </div>
57
+ <% end %>
58
+ </div>
59
+ </div>
60
+
61
+ <style>
62
+ .skills-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; margin-top: 16px; }
63
+ .skill-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; }
64
+ .skill-card h4 { margin-bottom: 8px; }
65
+ .skill-meta { font-size: 12px; color: var(--text-muted); margin: 12px 0; }
66
+ .category-list, .contributions-list { margin-top: 12px; }
67
+ .category-item, .contribution-item { display: flex; justify-content: space-between; align-items: center; padding: 8px 0; border-bottom: 1px solid var(--border); }
68
+ .category-item:last-child, .contribution-item:last-child { border-bottom: none; }
69
+ </style>
@@ -0,0 +1,75 @@
1
+ <div class="page-header">
2
+ <h1>Domain Status</h1>
3
+ <p>Monitor domain configuration and security status</p>
4
+ </div>
5
+
6
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px;">
7
+ <div class="card">
8
+ <h3>Domain Configuration</h3>
9
+ <div style="padding: 20px;">
10
+ <div class="status-item">
11
+ <span class="status-indicator status-<%= @domain_config['domain_connected'] ? 'success' : 'danger' %>"></span>
12
+ <span>Domain connected</span>
13
+ </div>
14
+ <div class="status-item">
15
+ <span class="status-indicator status-<%= @domain_config['dns_configured'] ? 'success' : 'danger' %>"></span>
16
+ <span>DNS configured</span>
17
+ </div>
18
+ <div class="status-item">
19
+ <span class="status-indicator status-<%= @domain_config['ssl_valid'] ? 'success' : 'danger' %>"></span>
20
+ <span>SSL certificate valid</span>
21
+ </div>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="card">
26
+ <h3>Security Status</h3>
27
+ <div style="padding: 20px;">
28
+ <div class="status-item">
29
+ <span class="status-indicator status-<%= @domain_config['dkim_configured'] ? 'success' : 'danger' %>"></span>
30
+ <span>DKIM configured</span>
31
+ </div>
32
+ <div class="status-item">
33
+ <span class="status-indicator status-<%= @domain_config['spf_valid'] ? 'success' : 'danger' %>"></span>
34
+ <span>SPF record valid</span>
35
+ </div>
36
+ <div class="status-item">
37
+ <span class="status-indicator status-<%= @domain_config['dmarc_configured'] ? 'success' : 'warning' %>"></span>
38
+ <span>DMARC <%= @domain_config['dmarc_configured'] ? 'configured' : 'recommended' %></span>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </div>
43
+
44
+ <div class="card">
45
+ <h3>Domain Health Monitoring</h3>
46
+ <div class="empty"><span class="icon">📊</span>Domain monitoring dashboard<br><small>Real-time domain health metrics will appear here</small></div>
47
+ </div>
48
+
49
+ <style>
50
+ .status-item {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 12px;
54
+ padding: 8px 0;
55
+ border-bottom: 1px solid var(--border);
56
+ }
57
+ .status-item:last-child {
58
+ border-bottom: none;
59
+ }
60
+ .status-indicator {
61
+ width: 8px;
62
+ height: 8px;
63
+ border-radius: 50%;
64
+ flex-shrink: 0;
65
+ }
66
+ .status-success {
67
+ background: var(--success);
68
+ }
69
+ .status-warning {
70
+ background: var(--warning);
71
+ }
72
+ .status-danger {
73
+ background: var(--danger);
74
+ }
75
+ </style>
@@ -0,0 +1,67 @@
1
+ <div class="page-header">
2
+ <h1>Knowledge Bases</h1>
3
+ <p>Manage and organize knowledge bases for your agents</p>
4
+ </div>
5
+
6
+ <div style="margin-bottom: 20px;">
7
+ <button class="btn btn-primary">+ Create Knowledge Base</button>
8
+ </div>
9
+
10
+ <div class="card">
11
+ <h3>Active Knowledge Bases</h3>
12
+ <% if @knowledge_bases.empty? %>
13
+ <div class="empty"><span class="icon">📚</span>No knowledge bases created<br><small>Create your first knowledge base to get started</small></div>
14
+ <% else %>
15
+ <div class="table-wrap">
16
+ <table>
17
+ <thead><tr><th>Name</th><th>Documents</th><th>Size</th><th>Last Updated</th><th>Actions</th></tr></thead>
18
+ <tbody>
19
+ <% @knowledge_bases.each do |kb| %>
20
+ <tr>
21
+ <td><strong><%= kb['name'] %></strong></td>
22
+ <td><%= kb['document_count'] %></td>
23
+ <td><%= kb['size'] %></td>
24
+ <td style="color:var(--text-muted)"><%= kb['updated_at'] %></td>
25
+ <td>
26
+ <button class="btn btn-secondary btn-sm">Edit</button>
27
+ <button class="btn btn-danger btn-sm">Delete</button>
28
+ </td>
29
+ </tr>
30
+ <% end %>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ <% end %>
35
+ </div>
36
+
37
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px;">
38
+ <div class="card">
39
+ <h3>Recent Activity</h3>
40
+ <% if @recent_activity.empty? %>
41
+ <div class="empty"><span class="icon">📈</span>No recent activity</div>
42
+ <% else %>
43
+ <% @recent_activity.each do |activity| %>
44
+ <div style="padding: 8px 0; border-bottom: 1px solid var(--border);">
45
+ <strong><%= activity['action'] %></strong>
46
+ <small style="color:var(--text-muted); display: block;"><%= activity['timestamp'] %></small>
47
+ </div>
48
+ <% end %>
49
+ <% end %>
50
+ </div>
51
+
52
+ <div class="card">
53
+ <h3>Knowledge Stats</h3>
54
+ <% if @stats.empty? %>
55
+ <div class="empty"><span class="icon">📊</span>No statistics available</div>
56
+ <% else %>
57
+ <div class="stats-list">
58
+ <% @stats.each do |key, value| %>
59
+ <div style="display: flex; justify-content: space-between; padding: 8px 0;">
60
+ <span><%= key.humanize %></span>
61
+ <strong><%= value %></strong>
62
+ </div>
63
+ <% end %>
64
+ </div>
65
+ <% end %>
66
+ </div>
67
+ </div>
@@ -0,0 +1,70 @@
1
+ <div class="page-header">
2
+ <h1>Knowledge Hub</h1>
3
+ <p>Share knowledge and learn from the community</p>
4
+ </div>
5
+
6
+ <div class="tabs">
7
+ <div class="tab active">Community</div>
8
+ <div class="tab">My Contributions</div>
9
+ <div class="tab">Bookmarks</div>
10
+ </div>
11
+
12
+ <div class="card">
13
+ <h3>Featured Knowledge</h3>
14
+ <% if @featured_knowledge.empty? %>
15
+ <div class="empty"><span class="icon">🌟</span>No featured knowledge available<br><small>Community-shared knowledge will appear here</small></div>
16
+ <% else %>
17
+ <div class="knowledge-grid">
18
+ <% @featured_knowledge.each do |knowledge| %>
19
+ <div class="knowledge-card">
20
+ <h4><%= knowledge['title'] %></h4>
21
+ <p><%= knowledge['description'] %></p>
22
+ <div class="knowledge-meta">
23
+ <span>By <%= knowledge['author'] %></span>
24
+ <span>👍 <%= knowledge['likes'] %></span>
25
+ </div>
26
+ <button class="btn btn-primary btn-sm">View</button>
27
+ </div>
28
+ <% end %>
29
+ </div>
30
+ <% end %>
31
+ </div>
32
+
33
+ <div style="display: grid; grid-template-columns: 2fr 1fr; gap: 20px; margin-top: 20px;">
34
+ <div class="card">
35
+ <h3>Latest Contributions</h3>
36
+ <% if @latest_contributions.empty? %>
37
+ <div class="empty"><span class="icon">📝</span>No contributions yet<br><small>Recent knowledge contributions will appear here</small></div>
38
+ <% else %>
39
+ <% @latest_contributions.each do |contribution| %>
40
+ <div style="padding: 12px 0; border-bottom: 1px solid var(--border);">
41
+ <strong><%= contribution['title'] %></strong>
42
+ <div style="color:var(--text-muted); font-size: 12px; margin-top: 4px;">
43
+ By <%= contribution['author'] %> • <%= contribution['created_at'] %>
44
+ </div>
45
+ </div>
46
+ <% end %>
47
+ <% end %>
48
+ </div>
49
+
50
+ <div class="card">
51
+ <h3>Trending Topics</h3>
52
+ <% if @trending_topics.empty? %>
53
+ <div class="empty"><span class="icon">🔥</span>No trending topics<br><small>Popular knowledge topics will appear here</small></div>
54
+ <% else %>
55
+ <% @trending_topics.each do |topic| %>
56
+ <div style="padding: 8px 0; border-bottom: 1px solid var(--border);">
57
+ <span><%= topic['name'] %></span>
58
+ <span class="badge" style="float: right;"><%= topic['count'] %></span>
59
+ </div>
60
+ <% end %>
61
+ <% end %>
62
+ </div>
63
+ </div>
64
+
65
+ <style>
66
+ .knowledge-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; margin-top: 16px; }
67
+ .knowledge-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; }
68
+ .knowledge-card h4 { margin-bottom: 8px; }
69
+ .knowledge-meta { font-size: 12px; color: var(--text-muted); margin: 12px 0; }
70
+ </style>
@@ -13,20 +13,29 @@
13
13
  <small>Admin Dashboard &middot; Ruby</small>
14
14
  </div>
15
15
  <nav class="sidebar-nav">
16
- <a href="/" class="<%= active?('/') %>"><span>&#128202;</span> <span>Dashboard</span></a>
17
- <a href="/agents" class="<%= active?('/agents') %>"><span>&#129302;</span> <span>Agents</span></a>
18
- <a href="/users" class="<%= active?('/users') %>"><span>&#128101;</span> <span>Users</span></a>
19
- <a href="/api-keys" class="<%= active?('/api-keys') %>"><span>&#128273;</span> <span>API Keys</span></a>
20
- <a href="/vault" class="<%= active?('/vault') %>"><span>&#128274;</span> <span>Vault</span></a>
21
- <a href="/skills" class="<%= active?('/skills') %>"><span>&#128295;</span> <span>Skills</span></a>
22
- <a href="/audit" class="<%= active?('/audit') %>"><span>&#128220;</span> <span>Audit Log</span></a>
23
- <a href="/settings" class="<%= active?('/settings') %>"><span>&#9881;&#65039;</span> <span>Settings</span></a>
16
+ <small style="display:block;padding:12px 16px 4px;color:var(--text-muted);text-transform:uppercase;font-size:10px;letter-spacing:1px">Overview</small>
17
+ <a href="/" class="<%= active?('/') %>"><span>📊</span> <span>Dashboard</span></a>
24
18
  <small style="display:block;padding:12px 16px 4px;color:var(--text-muted);text-transform:uppercase;font-size:10px;letter-spacing:1px">Management</small>
25
- <a href="/messages" class="<%= active?('/messages') %>"><span>&#128231;</span> <span>Messages</span></a>
26
- <a href="/guardrails" class="<%= active?('/guardrails') %>"><span>&#128737;</span> <span>Guardrails</span></a>
27
- <a href="/journal" class="<%= active?('/journal') %>"><span>&#128214;</span> <span>Journal</span></a>
28
- <a href="/dlp" class="<%= active?('/dlp') %>"><span>&#128274;</span> <span>DLP</span></a>
29
- <a href="/compliance" class="<%= active?('/compliance') %>"><span>&#128203;</span> <span>Compliance</span></a>
19
+ <a href="/agents" class="<%= active?('/agents') %>"><span>🤖</span> <span>Agents</span></a>
20
+ <a href="/skills" class="<%= active?('/skills') %>"><span>🛠️</span> <span>Skills</span></a>
21
+ <a href="/community-skills" class="<%= active?('/community-skills') %>"><span>🏪</span> <span>Community Skills</span></a>
22
+ <a href="/skill-connections" class="<%= active?('/skill-connections') %>"><span>🔗</span> <span>Skill Connections</span></a>
23
+ <a href="/knowledge" class="<%= active?('/knowledge') %>"><span>📚</span> <span>Knowledge Bases</span></a>
24
+ <a href="/knowledge-contributions" class="<%= active?('/knowledge-contributions') %>"><span>📚</span> <span>Knowledge Hub</span></a>
25
+ <a href="/approvals" class="<%= active?('/approvals') %>"><span>✅</span> <span>Approvals</span></a>
26
+ <small style="display:block;padding:12px 16px 4px;color:var(--text-muted);text-transform:uppercase;font-size:10px;letter-spacing:1px">Management</small>
27
+ <a href="/workforce" class="<%= active?('/workforce') %>"><span>🕐</span> <span>Workforce</span></a>
28
+ <a href="/messages" class="<%= active?('/messages') %>"><span>💬</span> <span>Messages</span></a>
29
+ <a href="/guardrails" class="<%= active?('/guardrails') %>"><span>🛡️</span> <span>Guardrails</span></a>
30
+ <a href="/journal" class="<%= active?('/journal') %>"><span>📖</span> <span>Journal</span></a>
31
+ <small style="display:block;padding:12px 16px 4px;color:var(--text-muted);text-transform:uppercase;font-size:10px;letter-spacing:1px">Administration</small>
32
+ <a href="/dlp" class="<%= active?('/dlp') %>"><span>🔒</span> <span>DLP</span></a>
33
+ <a href="/compliance" class="<%= active?('/compliance') %>"><span>📋</span> <span>Compliance</span></a>
34
+ <a href="/domain-status" class="<%= active?('/domain-status') %>"><span>🛡️</span> <span>Domain</span></a>
35
+ <a href="/users" class="<%= active?('/users') %>"><span>👥</span> <span>Users</span></a>
36
+ <a href="/vault" class="<%= active?('/vault') %>"><span>🔐</span> <span>Vault</span></a>
37
+ <a href="/audit" class="<%= active?('/audit') %>"><span>📋</span> <span>Audit Log</span></a>
38
+ <a href="/settings" class="<%= active?('/settings') %>"><span>⚙️</span> <span>Settings</span></a>
30
39
  </nav>
31
40
  <div class="sidebar-footer">
32
41
  <div style="margin-bottom:6px"><%= escape_html(current_user['email'] || current_user['name'] || 'Admin') %></div>