@agenticmail/enterprise 0.5.198 → 0.5.200

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 (1173) hide show
  1. package/dist/dashboard/pages/activity.js +14 -1
  2. package/dist/dashboard/pages/agent-detail/activity.js +17 -1
  3. package/dist/dashboard/pages/agent-detail/autonomy.js +17 -1
  4. package/dist/dashboard/pages/agent-detail/budget.js +25 -2
  5. package/dist/dashboard/pages/agent-detail/channels.js +10 -1
  6. package/dist/dashboard/pages/agent-detail/communication.js +10 -1
  7. package/dist/dashboard/pages/agent-detail/configuration.js +42 -1
  8. package/dist/dashboard/pages/agent-detail/deployment.js +147 -16
  9. package/dist/dashboard/pages/agent-detail/email.js +10 -1
  10. package/dist/dashboard/pages/agent-detail/guardrails.js +27 -3
  11. package/dist/dashboard/pages/agent-detail/manager.js +15 -1
  12. package/dist/dashboard/pages/agent-detail/meeting-browser.js +14 -2
  13. package/dist/dashboard/pages/agent-detail/memory.js +24 -5
  14. package/dist/dashboard/pages/agent-detail/overview.js +159 -21
  15. package/dist/dashboard/pages/agent-detail/permissions.js +28 -7
  16. package/dist/dashboard/pages/agent-detail/personal-details.js +17 -1
  17. package/dist/dashboard/pages/agent-detail/security.js +21 -5
  18. package/dist/dashboard/pages/agent-detail/skills-section.js +9 -1
  19. package/dist/dashboard/pages/agent-detail/tool-security.js +35 -8
  20. package/dist/dashboard/pages/agent-detail/tools.js +10 -1
  21. package/dist/dashboard/pages/agent-detail/whatsapp.js +11 -1
  22. package/dist/dashboard/pages/agent-detail/workforce.js +19 -4
  23. package/dist/dashboard/pages/agents.js +15 -1
  24. package/dist/dashboard/pages/approvals.js +15 -1
  25. package/dist/dashboard/pages/audit.js +23 -1
  26. package/dist/dashboard/pages/compliance.js +24 -2
  27. package/dist/dashboard/pages/dashboard.js +25 -6
  28. package/dist/dashboard/pages/dlp.js +23 -2
  29. package/dist/dashboard/pages/domain-status.js +51 -7
  30. package/dist/dashboard/pages/guardrails.js +29 -3
  31. package/dist/dashboard/pages/journal.js +24 -4
  32. package/dist/dashboard/pages/knowledge-contributions.js +69 -3
  33. package/dist/dashboard/pages/knowledge-import.js +6 -1
  34. package/dist/dashboard/pages/knowledge.js +51 -9
  35. package/dist/dashboard/pages/messages.js +28 -5
  36. package/dist/dashboard/pages/org-chart.js +18 -1
  37. package/dist/dashboard/pages/settings.js +30 -6
  38. package/dist/dashboard/pages/skill-connections.js +18 -4
  39. package/dist/dashboard/pages/skills.js +11 -1
  40. package/dist/dashboard/pages/users.js +14 -1
  41. package/dist/dashboard/pages/vault.js +22 -2
  42. package/dist/dashboard/pages/workforce.js +17 -1
  43. package/package.json +1 -1
  44. package/src/dashboard/HELP-TOOLTIPS-GUIDE.md +45 -0
  45. package/src/dashboard/pages/activity.js +14 -1
  46. package/src/dashboard/pages/agent-detail/activity.js +17 -1
  47. package/src/dashboard/pages/agent-detail/autonomy.js +17 -1
  48. package/src/dashboard/pages/agent-detail/budget.js +25 -2
  49. package/src/dashboard/pages/agent-detail/channels.js +10 -1
  50. package/src/dashboard/pages/agent-detail/communication.js +10 -1
  51. package/src/dashboard/pages/agent-detail/configuration.js +42 -1
  52. package/src/dashboard/pages/agent-detail/deployment.js +147 -16
  53. package/src/dashboard/pages/agent-detail/email.js +10 -1
  54. package/src/dashboard/pages/agent-detail/guardrails.js +27 -3
  55. package/src/dashboard/pages/agent-detail/manager.js +15 -1
  56. package/src/dashboard/pages/agent-detail/meeting-browser.js +14 -2
  57. package/src/dashboard/pages/agent-detail/memory.js +24 -5
  58. package/src/dashboard/pages/agent-detail/overview.js +159 -21
  59. package/src/dashboard/pages/agent-detail/permissions.js +28 -7
  60. package/src/dashboard/pages/agent-detail/personal-details.js +17 -1
  61. package/src/dashboard/pages/agent-detail/security.js +21 -5
  62. package/src/dashboard/pages/agent-detail/skills-section.js +9 -1
  63. package/src/dashboard/pages/agent-detail/tool-security.js +35 -8
  64. package/src/dashboard/pages/agent-detail/tools.js +10 -1
  65. package/src/dashboard/pages/agent-detail/whatsapp.js +11 -1
  66. package/src/dashboard/pages/agent-detail/workforce.js +19 -4
  67. package/src/dashboard/pages/agents.js +15 -1
  68. package/src/dashboard/pages/approvals.js +15 -1
  69. package/src/dashboard/pages/audit.js +23 -1
  70. package/src/dashboard/pages/compliance.js +24 -2
  71. package/src/dashboard/pages/dashboard.js +25 -6
  72. package/src/dashboard/pages/dlp.js +23 -2
  73. package/src/dashboard/pages/domain-status.js +51 -7
  74. package/src/dashboard/pages/guardrails.js +29 -3
  75. package/src/dashboard/pages/journal.js +24 -4
  76. package/src/dashboard/pages/knowledge-contributions.js +69 -3
  77. package/src/dashboard/pages/knowledge-import.js +6 -1
  78. package/src/dashboard/pages/knowledge.js +51 -9
  79. package/src/dashboard/pages/messages.js +28 -5
  80. package/src/dashboard/pages/org-chart.js +18 -1
  81. package/src/dashboard/pages/settings.js +30 -6
  82. package/src/dashboard/pages/skill-connections.js +18 -4
  83. package/src/dashboard/pages/skills.js +11 -1
  84. package/src/dashboard/pages/users.js +14 -1
  85. package/src/dashboard/pages/vault.js +22 -2
  86. package/src/dashboard/pages/workforce.js +17 -1
  87. package/dashboards/README.md +0 -131
  88. package/dashboards/django/app.py +0 -129
  89. package/dashboards/django/static/styles.css +0 -487
  90. package/dashboards/django/templates/activity.html +0 -130
  91. package/dashboards/django/templates/agent_detail.html +0 -501
  92. package/dashboards/django/templates/agents.html +0 -217
  93. package/dashboards/django/templates/api_keys.html +0 -41
  94. package/dashboards/django/templates/approvals.html +0 -115
  95. package/dashboards/django/templates/audit.html +0 -26
  96. package/dashboards/django/templates/community-skills.html +0 -89
  97. package/dashboards/django/templates/compliance.html +0 -33
  98. package/dashboards/django/templates/components/modal.html +0 -6
  99. package/dashboards/django/templates/components/pagination.html +0 -9
  100. package/dashboards/django/templates/components/stats.html +0 -8
  101. package/dashboards/django/templates/dashboard.html +0 -24
  102. package/dashboards/django/templates/dlp.html +0 -70
  103. package/dashboards/django/templates/domain-status.html +0 -59
  104. package/dashboards/django/templates/guardrails.html +0 -78
  105. package/dashboards/django/templates/journal.html +0 -39
  106. package/dashboards/django/templates/knowledge-contributions.html +0 -58
  107. package/dashboards/django/templates/knowledge.html +0 -104
  108. package/dashboards/django/templates/layout.html +0 -177
  109. package/dashboards/django/templates/login.html +0 -30
  110. package/dashboards/django/templates/messages.html +0 -38
  111. package/dashboards/django/templates/settings.html +0 -472
  112. package/dashboards/django/templates/skill-connections.html +0 -73
  113. package/dashboards/django/templates/skills.html +0 -66
  114. package/dashboards/django/templates/users.html +0 -34
  115. package/dashboards/django/templates/vault.html +0 -46
  116. package/dashboards/django/templates/workforce.html +0 -116
  117. package/dashboards/django/utils/__init__.py +0 -0
  118. package/dashboards/django/utils/api.py +0 -20
  119. package/dashboards/django/utils/helpers.py +0 -39
  120. package/dashboards/django/views/__init__.py +0 -52
  121. package/dashboards/django/views/agents.py +0 -343
  122. package/dashboards/django/views/api_keys.py +0 -47
  123. package/dashboards/django/views/audit.py +0 -35
  124. package/dashboards/django/views/auth.py +0 -34
  125. package/dashboards/django/views/compliance.py +0 -37
  126. package/dashboards/django/views/dashboard.py +0 -27
  127. package/dashboards/django/views/dlp.py +0 -53
  128. package/dashboards/django/views/guardrails.py +0 -61
  129. package/dashboards/django/views/journal.py +0 -41
  130. package/dashboards/django/views/messages.py +0 -65
  131. package/dashboards/django/views/new_pages.py +0 -38
  132. package/dashboards/django/views/settings_view.py +0 -335
  133. package/dashboards/django/views/skills.py +0 -50
  134. package/dashboards/django/views/users.py +0 -42
  135. package/dashboards/django/views/vault.py +0 -50
  136. package/dashboards/dotnet/AgenticMailDashboard.csproj +0 -10
  137. package/dashboards/dotnet/Program.cs +0 -89
  138. package/dashboards/dotnet/Routes/ActivityRoutes.cs +0 -35
  139. package/dashboards/dotnet/Routes/AgentRoutes.cs +0 -771
  140. package/dashboards/dotnet/Routes/ApiKeyRoutes.cs +0 -185
  141. package/dashboards/dotnet/Routes/ApprovalRoutes.cs +0 -36
  142. package/dashboards/dotnet/Routes/AuditRoutes.cs +0 -86
  143. package/dashboards/dotnet/Routes/AuthRoutes.cs +0 -50
  144. package/dashboards/dotnet/Routes/CommunitySkillRoutes.cs +0 -36
  145. package/dashboards/dotnet/Routes/ComplianceRoutes.cs +0 -143
  146. package/dashboards/dotnet/Routes/DashboardRoutes.cs +0 -81
  147. package/dashboards/dotnet/Routes/DlpRoutes.cs +0 -230
  148. package/dashboards/dotnet/Routes/DomainStatusRoutes.cs +0 -49
  149. package/dashboards/dotnet/Routes/GuardrailRoutes.cs +0 -285
  150. package/dashboards/dotnet/Routes/JournalRoutes.cs +0 -118
  151. package/dashboards/dotnet/Routes/KnowledgeContributionRoutes.cs +0 -42
  152. package/dashboards/dotnet/Routes/KnowledgeRoutes.cs +0 -40
  153. package/dashboards/dotnet/Routes/MessageRoutes.cs +0 -167
  154. package/dashboards/dotnet/Routes/SettingRoutes.cs +0 -907
  155. package/dashboards/dotnet/Routes/SkillConnectionRoutes.cs +0 -52
  156. package/dashboards/dotnet/Routes/SkillRoutes.cs +0 -198
  157. package/dashboards/dotnet/Routes/UserRoutes.cs +0 -111
  158. package/dashboards/dotnet/Routes/VaultRoutes.cs +0 -162
  159. package/dashboards/dotnet/Routes/WorkforceRoutes.cs +0 -55
  160. package/dashboards/dotnet/Services/ApiClient.cs +0 -103
  161. package/dashboards/dotnet/Services/HtmlBuilder.cs +0 -258
  162. package/dashboards/dotnet/wwwroot/styles.css +0 -546
  163. package/dashboards/express/app.js +0 -65
  164. package/dashboards/express/middleware/auth.js +0 -10
  165. package/dashboards/express/node_modules/.package-lock.json +0 -913
  166. package/dashboards/express/node_modules/accepts/HISTORY.md +0 -250
  167. package/dashboards/express/node_modules/accepts/LICENSE +0 -23
  168. package/dashboards/express/node_modules/accepts/README.md +0 -140
  169. package/dashboards/express/node_modules/accepts/index.js +0 -238
  170. package/dashboards/express/node_modules/accepts/package.json +0 -47
  171. package/dashboards/express/node_modules/body-parser/LICENSE +0 -23
  172. package/dashboards/express/node_modules/body-parser/README.md +0 -494
  173. package/dashboards/express/node_modules/body-parser/index.js +0 -71
  174. package/dashboards/express/node_modules/body-parser/lib/read.js +0 -247
  175. package/dashboards/express/node_modules/body-parser/lib/types/json.js +0 -158
  176. package/dashboards/express/node_modules/body-parser/lib/types/raw.js +0 -42
  177. package/dashboards/express/node_modules/body-parser/lib/types/text.js +0 -36
  178. package/dashboards/express/node_modules/body-parser/lib/types/urlencoded.js +0 -142
  179. package/dashboards/express/node_modules/body-parser/lib/utils.js +0 -98
  180. package/dashboards/express/node_modules/body-parser/package.json +0 -52
  181. package/dashboards/express/node_modules/bytes/History.md +0 -97
  182. package/dashboards/express/node_modules/bytes/LICENSE +0 -23
  183. package/dashboards/express/node_modules/bytes/Readme.md +0 -152
  184. package/dashboards/express/node_modules/bytes/index.js +0 -170
  185. package/dashboards/express/node_modules/bytes/package.json +0 -42
  186. package/dashboards/express/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
  187. package/dashboards/express/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
  188. package/dashboards/express/node_modules/call-bind-apply-helpers/.nycrc +0 -9
  189. package/dashboards/express/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
  190. package/dashboards/express/node_modules/call-bind-apply-helpers/LICENSE +0 -21
  191. package/dashboards/express/node_modules/call-bind-apply-helpers/README.md +0 -62
  192. package/dashboards/express/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
  193. package/dashboards/express/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
  194. package/dashboards/express/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
  195. package/dashboards/express/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
  196. package/dashboards/express/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
  197. package/dashboards/express/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
  198. package/dashboards/express/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
  199. package/dashboards/express/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
  200. package/dashboards/express/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
  201. package/dashboards/express/node_modules/call-bind-apply-helpers/index.js +0 -15
  202. package/dashboards/express/node_modules/call-bind-apply-helpers/package.json +0 -85
  203. package/dashboards/express/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
  204. package/dashboards/express/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
  205. package/dashboards/express/node_modules/call-bind-apply-helpers/test/index.js +0 -63
  206. package/dashboards/express/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
  207. package/dashboards/express/node_modules/call-bound/.eslintrc +0 -13
  208. package/dashboards/express/node_modules/call-bound/.github/FUNDING.yml +0 -12
  209. package/dashboards/express/node_modules/call-bound/.nycrc +0 -9
  210. package/dashboards/express/node_modules/call-bound/CHANGELOG.md +0 -42
  211. package/dashboards/express/node_modules/call-bound/LICENSE +0 -21
  212. package/dashboards/express/node_modules/call-bound/README.md +0 -53
  213. package/dashboards/express/node_modules/call-bound/index.d.ts +0 -94
  214. package/dashboards/express/node_modules/call-bound/index.js +0 -19
  215. package/dashboards/express/node_modules/call-bound/package.json +0 -99
  216. package/dashboards/express/node_modules/call-bound/test/index.js +0 -61
  217. package/dashboards/express/node_modules/call-bound/tsconfig.json +0 -10
  218. package/dashboards/express/node_modules/content-disposition/HISTORY.md +0 -72
  219. package/dashboards/express/node_modules/content-disposition/LICENSE +0 -22
  220. package/dashboards/express/node_modules/content-disposition/README.md +0 -142
  221. package/dashboards/express/node_modules/content-disposition/index.js +0 -458
  222. package/dashboards/express/node_modules/content-disposition/package.json +0 -43
  223. package/dashboards/express/node_modules/content-type/HISTORY.md +0 -29
  224. package/dashboards/express/node_modules/content-type/LICENSE +0 -22
  225. package/dashboards/express/node_modules/content-type/README.md +0 -94
  226. package/dashboards/express/node_modules/content-type/index.js +0 -225
  227. package/dashboards/express/node_modules/content-type/package.json +0 -42
  228. package/dashboards/express/node_modules/cookie/LICENSE +0 -24
  229. package/dashboards/express/node_modules/cookie/README.md +0 -317
  230. package/dashboards/express/node_modules/cookie/SECURITY.md +0 -25
  231. package/dashboards/express/node_modules/cookie/index.js +0 -335
  232. package/dashboards/express/node_modules/cookie/package.json +0 -44
  233. package/dashboards/express/node_modules/cookie-signature/History.md +0 -70
  234. package/dashboards/express/node_modules/cookie-signature/LICENSE +0 -22
  235. package/dashboards/express/node_modules/cookie-signature/Readme.md +0 -23
  236. package/dashboards/express/node_modules/cookie-signature/index.js +0 -47
  237. package/dashboards/express/node_modules/cookie-signature/package.json +0 -24
  238. package/dashboards/express/node_modules/debug/LICENSE +0 -20
  239. package/dashboards/express/node_modules/debug/README.md +0 -481
  240. package/dashboards/express/node_modules/debug/package.json +0 -64
  241. package/dashboards/express/node_modules/debug/src/browser.js +0 -272
  242. package/dashboards/express/node_modules/debug/src/common.js +0 -292
  243. package/dashboards/express/node_modules/debug/src/index.js +0 -10
  244. package/dashboards/express/node_modules/debug/src/node.js +0 -263
  245. package/dashboards/express/node_modules/depd/History.md +0 -103
  246. package/dashboards/express/node_modules/depd/LICENSE +0 -22
  247. package/dashboards/express/node_modules/depd/Readme.md +0 -280
  248. package/dashboards/express/node_modules/depd/index.js +0 -538
  249. package/dashboards/express/node_modules/depd/lib/browser/index.js +0 -77
  250. package/dashboards/express/node_modules/depd/package.json +0 -45
  251. package/dashboards/express/node_modules/dunder-proto/.eslintrc +0 -5
  252. package/dashboards/express/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
  253. package/dashboards/express/node_modules/dunder-proto/.nycrc +0 -13
  254. package/dashboards/express/node_modules/dunder-proto/CHANGELOG.md +0 -24
  255. package/dashboards/express/node_modules/dunder-proto/LICENSE +0 -21
  256. package/dashboards/express/node_modules/dunder-proto/README.md +0 -54
  257. package/dashboards/express/node_modules/dunder-proto/get.d.ts +0 -5
  258. package/dashboards/express/node_modules/dunder-proto/get.js +0 -30
  259. package/dashboards/express/node_modules/dunder-proto/package.json +0 -76
  260. package/dashboards/express/node_modules/dunder-proto/set.d.ts +0 -5
  261. package/dashboards/express/node_modules/dunder-proto/set.js +0 -35
  262. package/dashboards/express/node_modules/dunder-proto/test/get.js +0 -34
  263. package/dashboards/express/node_modules/dunder-proto/test/index.js +0 -4
  264. package/dashboards/express/node_modules/dunder-proto/test/set.js +0 -50
  265. package/dashboards/express/node_modules/dunder-proto/tsconfig.json +0 -9
  266. package/dashboards/express/node_modules/ee-first/LICENSE +0 -22
  267. package/dashboards/express/node_modules/ee-first/README.md +0 -80
  268. package/dashboards/express/node_modules/ee-first/index.js +0 -95
  269. package/dashboards/express/node_modules/ee-first/package.json +0 -29
  270. package/dashboards/express/node_modules/encodeurl/LICENSE +0 -22
  271. package/dashboards/express/node_modules/encodeurl/README.md +0 -109
  272. package/dashboards/express/node_modules/encodeurl/index.js +0 -60
  273. package/dashboards/express/node_modules/encodeurl/package.json +0 -40
  274. package/dashboards/express/node_modules/es-define-property/.eslintrc +0 -13
  275. package/dashboards/express/node_modules/es-define-property/.github/FUNDING.yml +0 -12
  276. package/dashboards/express/node_modules/es-define-property/.nycrc +0 -9
  277. package/dashboards/express/node_modules/es-define-property/CHANGELOG.md +0 -29
  278. package/dashboards/express/node_modules/es-define-property/LICENSE +0 -21
  279. package/dashboards/express/node_modules/es-define-property/README.md +0 -49
  280. package/dashboards/express/node_modules/es-define-property/index.d.ts +0 -3
  281. package/dashboards/express/node_modules/es-define-property/index.js +0 -14
  282. package/dashboards/express/node_modules/es-define-property/package.json +0 -81
  283. package/dashboards/express/node_modules/es-define-property/test/index.js +0 -56
  284. package/dashboards/express/node_modules/es-define-property/tsconfig.json +0 -10
  285. package/dashboards/express/node_modules/es-errors/.eslintrc +0 -5
  286. package/dashboards/express/node_modules/es-errors/.github/FUNDING.yml +0 -12
  287. package/dashboards/express/node_modules/es-errors/CHANGELOG.md +0 -40
  288. package/dashboards/express/node_modules/es-errors/LICENSE +0 -21
  289. package/dashboards/express/node_modules/es-errors/README.md +0 -55
  290. package/dashboards/express/node_modules/es-errors/eval.d.ts +0 -3
  291. package/dashboards/express/node_modules/es-errors/eval.js +0 -4
  292. package/dashboards/express/node_modules/es-errors/index.d.ts +0 -3
  293. package/dashboards/express/node_modules/es-errors/index.js +0 -4
  294. package/dashboards/express/node_modules/es-errors/package.json +0 -80
  295. package/dashboards/express/node_modules/es-errors/range.d.ts +0 -3
  296. package/dashboards/express/node_modules/es-errors/range.js +0 -4
  297. package/dashboards/express/node_modules/es-errors/ref.d.ts +0 -3
  298. package/dashboards/express/node_modules/es-errors/ref.js +0 -4
  299. package/dashboards/express/node_modules/es-errors/syntax.d.ts +0 -3
  300. package/dashboards/express/node_modules/es-errors/syntax.js +0 -4
  301. package/dashboards/express/node_modules/es-errors/test/index.js +0 -19
  302. package/dashboards/express/node_modules/es-errors/tsconfig.json +0 -49
  303. package/dashboards/express/node_modules/es-errors/type.d.ts +0 -3
  304. package/dashboards/express/node_modules/es-errors/type.js +0 -4
  305. package/dashboards/express/node_modules/es-errors/uri.d.ts +0 -3
  306. package/dashboards/express/node_modules/es-errors/uri.js +0 -4
  307. package/dashboards/express/node_modules/es-object-atoms/.eslintrc +0 -16
  308. package/dashboards/express/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
  309. package/dashboards/express/node_modules/es-object-atoms/CHANGELOG.md +0 -37
  310. package/dashboards/express/node_modules/es-object-atoms/LICENSE +0 -21
  311. package/dashboards/express/node_modules/es-object-atoms/README.md +0 -63
  312. package/dashboards/express/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
  313. package/dashboards/express/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
  314. package/dashboards/express/node_modules/es-object-atoms/ToObject.d.ts +0 -7
  315. package/dashboards/express/node_modules/es-object-atoms/ToObject.js +0 -10
  316. package/dashboards/express/node_modules/es-object-atoms/index.d.ts +0 -3
  317. package/dashboards/express/node_modules/es-object-atoms/index.js +0 -4
  318. package/dashboards/express/node_modules/es-object-atoms/isObject.d.ts +0 -3
  319. package/dashboards/express/node_modules/es-object-atoms/isObject.js +0 -6
  320. package/dashboards/express/node_modules/es-object-atoms/package.json +0 -80
  321. package/dashboards/express/node_modules/es-object-atoms/test/index.js +0 -38
  322. package/dashboards/express/node_modules/es-object-atoms/tsconfig.json +0 -6
  323. package/dashboards/express/node_modules/escape-html/LICENSE +0 -24
  324. package/dashboards/express/node_modules/escape-html/Readme.md +0 -43
  325. package/dashboards/express/node_modules/escape-html/index.js +0 -78
  326. package/dashboards/express/node_modules/escape-html/package.json +0 -24
  327. package/dashboards/express/node_modules/etag/HISTORY.md +0 -83
  328. package/dashboards/express/node_modules/etag/LICENSE +0 -22
  329. package/dashboards/express/node_modules/etag/README.md +0 -159
  330. package/dashboards/express/node_modules/etag/index.js +0 -131
  331. package/dashboards/express/node_modules/etag/package.json +0 -47
  332. package/dashboards/express/node_modules/express/LICENSE +0 -24
  333. package/dashboards/express/node_modules/express/Readme.md +0 -276
  334. package/dashboards/express/node_modules/express/index.js +0 -11
  335. package/dashboards/express/node_modules/express/lib/application.js +0 -631
  336. package/dashboards/express/node_modules/express/lib/express.js +0 -81
  337. package/dashboards/express/node_modules/express/lib/request.js +0 -514
  338. package/dashboards/express/node_modules/express/lib/response.js +0 -1053
  339. package/dashboards/express/node_modules/express/lib/utils.js +0 -271
  340. package/dashboards/express/node_modules/express/lib/view.js +0 -205
  341. package/dashboards/express/node_modules/express/package.json +0 -99
  342. package/dashboards/express/node_modules/express-session/LICENSE +0 -24
  343. package/dashboards/express/node_modules/express-session/README.md +0 -1061
  344. package/dashboards/express/node_modules/express-session/index.js +0 -700
  345. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/History.md +0 -42
  346. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/Readme.md +0 -42
  347. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/index.js +0 -51
  348. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/package.json +0 -18
  349. package/dashboards/express/node_modules/express-session/node_modules/debug/.coveralls.yml +0 -1
  350. package/dashboards/express/node_modules/express-session/node_modules/debug/.eslintrc +0 -11
  351. package/dashboards/express/node_modules/express-session/node_modules/debug/.travis.yml +0 -14
  352. package/dashboards/express/node_modules/express-session/node_modules/debug/CHANGELOG.md +0 -362
  353. package/dashboards/express/node_modules/express-session/node_modules/debug/LICENSE +0 -19
  354. package/dashboards/express/node_modules/express-session/node_modules/debug/Makefile +0 -50
  355. package/dashboards/express/node_modules/express-session/node_modules/debug/README.md +0 -312
  356. package/dashboards/express/node_modules/express-session/node_modules/debug/component.json +0 -19
  357. package/dashboards/express/node_modules/express-session/node_modules/debug/karma.conf.js +0 -70
  358. package/dashboards/express/node_modules/express-session/node_modules/debug/node.js +0 -1
  359. package/dashboards/express/node_modules/express-session/node_modules/debug/package.json +0 -49
  360. package/dashboards/express/node_modules/express-session/node_modules/debug/src/browser.js +0 -185
  361. package/dashboards/express/node_modules/express-session/node_modules/debug/src/debug.js +0 -202
  362. package/dashboards/express/node_modules/express-session/node_modules/debug/src/index.js +0 -10
  363. package/dashboards/express/node_modules/express-session/node_modules/debug/src/inspector-log.js +0 -15
  364. package/dashboards/express/node_modules/express-session/node_modules/debug/src/node.js +0 -248
  365. package/dashboards/express/node_modules/express-session/node_modules/ms/index.js +0 -152
  366. package/dashboards/express/node_modules/express-session/node_modules/ms/license.md +0 -21
  367. package/dashboards/express/node_modules/express-session/node_modules/ms/package.json +0 -37
  368. package/dashboards/express/node_modules/express-session/node_modules/ms/readme.md +0 -51
  369. package/dashboards/express/node_modules/express-session/package.json +0 -50
  370. package/dashboards/express/node_modules/express-session/session/cookie.js +0 -152
  371. package/dashboards/express/node_modules/express-session/session/memory.js +0 -187
  372. package/dashboards/express/node_modules/express-session/session/session.js +0 -143
  373. package/dashboards/express/node_modules/express-session/session/store.js +0 -102
  374. package/dashboards/express/node_modules/finalhandler/HISTORY.md +0 -239
  375. package/dashboards/express/node_modules/finalhandler/LICENSE +0 -22
  376. package/dashboards/express/node_modules/finalhandler/README.md +0 -150
  377. package/dashboards/express/node_modules/finalhandler/index.js +0 -293
  378. package/dashboards/express/node_modules/finalhandler/package.json +0 -47
  379. package/dashboards/express/node_modules/forwarded/HISTORY.md +0 -21
  380. package/dashboards/express/node_modules/forwarded/LICENSE +0 -22
  381. package/dashboards/express/node_modules/forwarded/README.md +0 -57
  382. package/dashboards/express/node_modules/forwarded/index.js +0 -90
  383. package/dashboards/express/node_modules/forwarded/package.json +0 -45
  384. package/dashboards/express/node_modules/fresh/HISTORY.md +0 -80
  385. package/dashboards/express/node_modules/fresh/LICENSE +0 -23
  386. package/dashboards/express/node_modules/fresh/README.md +0 -117
  387. package/dashboards/express/node_modules/fresh/index.js +0 -136
  388. package/dashboards/express/node_modules/fresh/package.json +0 -46
  389. package/dashboards/express/node_modules/function-bind/.eslintrc +0 -21
  390. package/dashboards/express/node_modules/function-bind/.github/FUNDING.yml +0 -12
  391. package/dashboards/express/node_modules/function-bind/.github/SECURITY.md +0 -3
  392. package/dashboards/express/node_modules/function-bind/.nycrc +0 -13
  393. package/dashboards/express/node_modules/function-bind/CHANGELOG.md +0 -136
  394. package/dashboards/express/node_modules/function-bind/LICENSE +0 -20
  395. package/dashboards/express/node_modules/function-bind/README.md +0 -46
  396. package/dashboards/express/node_modules/function-bind/implementation.js +0 -84
  397. package/dashboards/express/node_modules/function-bind/index.js +0 -5
  398. package/dashboards/express/node_modules/function-bind/package.json +0 -87
  399. package/dashboards/express/node_modules/function-bind/test/.eslintrc +0 -9
  400. package/dashboards/express/node_modules/function-bind/test/index.js +0 -252
  401. package/dashboards/express/node_modules/get-intrinsic/.eslintrc +0 -42
  402. package/dashboards/express/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  403. package/dashboards/express/node_modules/get-intrinsic/.nycrc +0 -9
  404. package/dashboards/express/node_modules/get-intrinsic/CHANGELOG.md +0 -186
  405. package/dashboards/express/node_modules/get-intrinsic/LICENSE +0 -21
  406. package/dashboards/express/node_modules/get-intrinsic/README.md +0 -71
  407. package/dashboards/express/node_modules/get-intrinsic/index.js +0 -378
  408. package/dashboards/express/node_modules/get-intrinsic/package.json +0 -97
  409. package/dashboards/express/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  410. package/dashboards/express/node_modules/get-proto/.eslintrc +0 -10
  411. package/dashboards/express/node_modules/get-proto/.github/FUNDING.yml +0 -12
  412. package/dashboards/express/node_modules/get-proto/.nycrc +0 -9
  413. package/dashboards/express/node_modules/get-proto/CHANGELOG.md +0 -21
  414. package/dashboards/express/node_modules/get-proto/LICENSE +0 -21
  415. package/dashboards/express/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
  416. package/dashboards/express/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
  417. package/dashboards/express/node_modules/get-proto/README.md +0 -50
  418. package/dashboards/express/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
  419. package/dashboards/express/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
  420. package/dashboards/express/node_modules/get-proto/index.d.ts +0 -5
  421. package/dashboards/express/node_modules/get-proto/index.js +0 -27
  422. package/dashboards/express/node_modules/get-proto/package.json +0 -81
  423. package/dashboards/express/node_modules/get-proto/test/index.js +0 -68
  424. package/dashboards/express/node_modules/get-proto/tsconfig.json +0 -9
  425. package/dashboards/express/node_modules/gopd/.eslintrc +0 -16
  426. package/dashboards/express/node_modules/gopd/.github/FUNDING.yml +0 -12
  427. package/dashboards/express/node_modules/gopd/CHANGELOG.md +0 -45
  428. package/dashboards/express/node_modules/gopd/LICENSE +0 -21
  429. package/dashboards/express/node_modules/gopd/README.md +0 -40
  430. package/dashboards/express/node_modules/gopd/gOPD.d.ts +0 -1
  431. package/dashboards/express/node_modules/gopd/gOPD.js +0 -4
  432. package/dashboards/express/node_modules/gopd/index.d.ts +0 -5
  433. package/dashboards/express/node_modules/gopd/index.js +0 -15
  434. package/dashboards/express/node_modules/gopd/package.json +0 -77
  435. package/dashboards/express/node_modules/gopd/test/index.js +0 -36
  436. package/dashboards/express/node_modules/gopd/tsconfig.json +0 -9
  437. package/dashboards/express/node_modules/has-symbols/.eslintrc +0 -11
  438. package/dashboards/express/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  439. package/dashboards/express/node_modules/has-symbols/.nycrc +0 -9
  440. package/dashboards/express/node_modules/has-symbols/CHANGELOG.md +0 -91
  441. package/dashboards/express/node_modules/has-symbols/LICENSE +0 -21
  442. package/dashboards/express/node_modules/has-symbols/README.md +0 -46
  443. package/dashboards/express/node_modules/has-symbols/index.d.ts +0 -3
  444. package/dashboards/express/node_modules/has-symbols/index.js +0 -14
  445. package/dashboards/express/node_modules/has-symbols/package.json +0 -111
  446. package/dashboards/express/node_modules/has-symbols/shams.d.ts +0 -3
  447. package/dashboards/express/node_modules/has-symbols/shams.js +0 -45
  448. package/dashboards/express/node_modules/has-symbols/test/index.js +0 -22
  449. package/dashboards/express/node_modules/has-symbols/test/shams/core-js.js +0 -29
  450. package/dashboards/express/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
  451. package/dashboards/express/node_modules/has-symbols/test/tests.js +0 -58
  452. package/dashboards/express/node_modules/has-symbols/tsconfig.json +0 -10
  453. package/dashboards/express/node_modules/hasown/.eslintrc +0 -5
  454. package/dashboards/express/node_modules/hasown/.github/FUNDING.yml +0 -12
  455. package/dashboards/express/node_modules/hasown/.nycrc +0 -13
  456. package/dashboards/express/node_modules/hasown/CHANGELOG.md +0 -40
  457. package/dashboards/express/node_modules/hasown/LICENSE +0 -21
  458. package/dashboards/express/node_modules/hasown/README.md +0 -40
  459. package/dashboards/express/node_modules/hasown/index.d.ts +0 -3
  460. package/dashboards/express/node_modules/hasown/index.js +0 -8
  461. package/dashboards/express/node_modules/hasown/package.json +0 -92
  462. package/dashboards/express/node_modules/hasown/tsconfig.json +0 -6
  463. package/dashboards/express/node_modules/http-errors/HISTORY.md +0 -186
  464. package/dashboards/express/node_modules/http-errors/LICENSE +0 -23
  465. package/dashboards/express/node_modules/http-errors/README.md +0 -169
  466. package/dashboards/express/node_modules/http-errors/index.js +0 -290
  467. package/dashboards/express/node_modules/http-errors/package.json +0 -54
  468. package/dashboards/express/node_modules/iconv-lite/LICENSE +0 -21
  469. package/dashboards/express/node_modules/iconv-lite/README.md +0 -138
  470. package/dashboards/express/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -532
  471. package/dashboards/express/node_modules/iconv-lite/encodings/dbcs-data.js +0 -185
  472. package/dashboards/express/node_modules/iconv-lite/encodings/index.js +0 -23
  473. package/dashboards/express/node_modules/iconv-lite/encodings/internal.js +0 -218
  474. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -75
  475. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  476. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-data.js +0 -178
  477. package/dashboards/express/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  478. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  479. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  480. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  481. package/dashboards/express/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  482. package/dashboards/express/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  483. package/dashboards/express/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -56
  484. package/dashboards/express/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  485. package/dashboards/express/node_modules/iconv-lite/encodings/utf16.js +0 -187
  486. package/dashboards/express/node_modules/iconv-lite/encodings/utf32.js +0 -307
  487. package/dashboards/express/node_modules/iconv-lite/encodings/utf7.js +0 -283
  488. package/dashboards/express/node_modules/iconv-lite/lib/bom-handling.js +0 -48
  489. package/dashboards/express/node_modules/iconv-lite/lib/helpers/merge-exports.js +0 -13
  490. package/dashboards/express/node_modules/iconv-lite/lib/index.d.ts +0 -129
  491. package/dashboards/express/node_modules/iconv-lite/lib/index.js +0 -182
  492. package/dashboards/express/node_modules/iconv-lite/lib/streams.js +0 -105
  493. package/dashboards/express/node_modules/iconv-lite/package.json +0 -70
  494. package/dashboards/express/node_modules/iconv-lite/types/encodings.d.ts +0 -423
  495. package/dashboards/express/node_modules/inherits/LICENSE +0 -16
  496. package/dashboards/express/node_modules/inherits/README.md +0 -42
  497. package/dashboards/express/node_modules/inherits/inherits.js +0 -9
  498. package/dashboards/express/node_modules/inherits/inherits_browser.js +0 -27
  499. package/dashboards/express/node_modules/inherits/package.json +0 -29
  500. package/dashboards/express/node_modules/ipaddr.js/LICENSE +0 -19
  501. package/dashboards/express/node_modules/ipaddr.js/README.md +0 -233
  502. package/dashboards/express/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  503. package/dashboards/express/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  504. package/dashboards/express/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  505. package/dashboards/express/node_modules/ipaddr.js/package.json +0 -35
  506. package/dashboards/express/node_modules/is-promise/LICENSE +0 -19
  507. package/dashboards/express/node_modules/is-promise/index.d.ts +0 -2
  508. package/dashboards/express/node_modules/is-promise/index.js +0 -6
  509. package/dashboards/express/node_modules/is-promise/index.mjs +0 -3
  510. package/dashboards/express/node_modules/is-promise/package.json +0 -30
  511. package/dashboards/express/node_modules/is-promise/readme.md +0 -33
  512. package/dashboards/express/node_modules/math-intrinsics/.eslintrc +0 -16
  513. package/dashboards/express/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
  514. package/dashboards/express/node_modules/math-intrinsics/CHANGELOG.md +0 -24
  515. package/dashboards/express/node_modules/math-intrinsics/LICENSE +0 -21
  516. package/dashboards/express/node_modules/math-intrinsics/README.md +0 -50
  517. package/dashboards/express/node_modules/math-intrinsics/abs.d.ts +0 -1
  518. package/dashboards/express/node_modules/math-intrinsics/abs.js +0 -4
  519. package/dashboards/express/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
  520. package/dashboards/express/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
  521. package/dashboards/express/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
  522. package/dashboards/express/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
  523. package/dashboards/express/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
  524. package/dashboards/express/node_modules/math-intrinsics/constants/maxValue.js +0 -5
  525. package/dashboards/express/node_modules/math-intrinsics/floor.d.ts +0 -1
  526. package/dashboards/express/node_modules/math-intrinsics/floor.js +0 -4
  527. package/dashboards/express/node_modules/math-intrinsics/isFinite.d.ts +0 -3
  528. package/dashboards/express/node_modules/math-intrinsics/isFinite.js +0 -12
  529. package/dashboards/express/node_modules/math-intrinsics/isInteger.d.ts +0 -3
  530. package/dashboards/express/node_modules/math-intrinsics/isInteger.js +0 -16
  531. package/dashboards/express/node_modules/math-intrinsics/isNaN.d.ts +0 -1
  532. package/dashboards/express/node_modules/math-intrinsics/isNaN.js +0 -6
  533. package/dashboards/express/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
  534. package/dashboards/express/node_modules/math-intrinsics/isNegativeZero.js +0 -6
  535. package/dashboards/express/node_modules/math-intrinsics/max.d.ts +0 -1
  536. package/dashboards/express/node_modules/math-intrinsics/max.js +0 -4
  537. package/dashboards/express/node_modules/math-intrinsics/min.d.ts +0 -1
  538. package/dashboards/express/node_modules/math-intrinsics/min.js +0 -4
  539. package/dashboards/express/node_modules/math-intrinsics/mod.d.ts +0 -3
  540. package/dashboards/express/node_modules/math-intrinsics/mod.js +0 -9
  541. package/dashboards/express/node_modules/math-intrinsics/package.json +0 -86
  542. package/dashboards/express/node_modules/math-intrinsics/pow.d.ts +0 -1
  543. package/dashboards/express/node_modules/math-intrinsics/pow.js +0 -4
  544. package/dashboards/express/node_modules/math-intrinsics/round.d.ts +0 -1
  545. package/dashboards/express/node_modules/math-intrinsics/round.js +0 -4
  546. package/dashboards/express/node_modules/math-intrinsics/sign.d.ts +0 -3
  547. package/dashboards/express/node_modules/math-intrinsics/sign.js +0 -11
  548. package/dashboards/express/node_modules/math-intrinsics/test/index.js +0 -192
  549. package/dashboards/express/node_modules/math-intrinsics/tsconfig.json +0 -3
  550. package/dashboards/express/node_modules/media-typer/HISTORY.md +0 -50
  551. package/dashboards/express/node_modules/media-typer/LICENSE +0 -22
  552. package/dashboards/express/node_modules/media-typer/README.md +0 -93
  553. package/dashboards/express/node_modules/media-typer/index.js +0 -143
  554. package/dashboards/express/node_modules/media-typer/package.json +0 -33
  555. package/dashboards/express/node_modules/merge-descriptors/index.d.ts +0 -11
  556. package/dashboards/express/node_modules/merge-descriptors/index.js +0 -26
  557. package/dashboards/express/node_modules/merge-descriptors/license +0 -11
  558. package/dashboards/express/node_modules/merge-descriptors/package.json +0 -50
  559. package/dashboards/express/node_modules/merge-descriptors/readme.md +0 -55
  560. package/dashboards/express/node_modules/mime-db/HISTORY.md +0 -541
  561. package/dashboards/express/node_modules/mime-db/LICENSE +0 -23
  562. package/dashboards/express/node_modules/mime-db/README.md +0 -109
  563. package/dashboards/express/node_modules/mime-db/db.json +0 -9342
  564. package/dashboards/express/node_modules/mime-db/index.js +0 -12
  565. package/dashboards/express/node_modules/mime-db/package.json +0 -56
  566. package/dashboards/express/node_modules/mime-types/HISTORY.md +0 -428
  567. package/dashboards/express/node_modules/mime-types/LICENSE +0 -23
  568. package/dashboards/express/node_modules/mime-types/README.md +0 -126
  569. package/dashboards/express/node_modules/mime-types/index.js +0 -211
  570. package/dashboards/express/node_modules/mime-types/mimeScore.js +0 -57
  571. package/dashboards/express/node_modules/mime-types/package.json +0 -49
  572. package/dashboards/express/node_modules/ms/index.js +0 -162
  573. package/dashboards/express/node_modules/ms/license.md +0 -21
  574. package/dashboards/express/node_modules/ms/package.json +0 -38
  575. package/dashboards/express/node_modules/ms/readme.md +0 -59
  576. package/dashboards/express/node_modules/negotiator/HISTORY.md +0 -114
  577. package/dashboards/express/node_modules/negotiator/LICENSE +0 -24
  578. package/dashboards/express/node_modules/negotiator/README.md +0 -212
  579. package/dashboards/express/node_modules/negotiator/index.js +0 -83
  580. package/dashboards/express/node_modules/negotiator/lib/charset.js +0 -169
  581. package/dashboards/express/node_modules/negotiator/lib/encoding.js +0 -205
  582. package/dashboards/express/node_modules/negotiator/lib/language.js +0 -179
  583. package/dashboards/express/node_modules/negotiator/lib/mediaType.js +0 -294
  584. package/dashboards/express/node_modules/negotiator/package.json +0 -43
  585. package/dashboards/express/node_modules/object-inspect/.eslintrc +0 -53
  586. package/dashboards/express/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  587. package/dashboards/express/node_modules/object-inspect/.nycrc +0 -13
  588. package/dashboards/express/node_modules/object-inspect/CHANGELOG.md +0 -424
  589. package/dashboards/express/node_modules/object-inspect/LICENSE +0 -21
  590. package/dashboards/express/node_modules/object-inspect/example/all.js +0 -23
  591. package/dashboards/express/node_modules/object-inspect/example/circular.js +0 -6
  592. package/dashboards/express/node_modules/object-inspect/example/fn.js +0 -5
  593. package/dashboards/express/node_modules/object-inspect/example/inspect.js +0 -10
  594. package/dashboards/express/node_modules/object-inspect/index.js +0 -544
  595. package/dashboards/express/node_modules/object-inspect/package-support.json +0 -20
  596. package/dashboards/express/node_modules/object-inspect/package.json +0 -105
  597. package/dashboards/express/node_modules/object-inspect/readme.markdown +0 -84
  598. package/dashboards/express/node_modules/object-inspect/test/bigint.js +0 -58
  599. package/dashboards/express/node_modules/object-inspect/test/browser/dom.js +0 -15
  600. package/dashboards/express/node_modules/object-inspect/test/circular.js +0 -16
  601. package/dashboards/express/node_modules/object-inspect/test/deep.js +0 -12
  602. package/dashboards/express/node_modules/object-inspect/test/element.js +0 -53
  603. package/dashboards/express/node_modules/object-inspect/test/err.js +0 -48
  604. package/dashboards/express/node_modules/object-inspect/test/fakes.js +0 -29
  605. package/dashboards/express/node_modules/object-inspect/test/fn.js +0 -76
  606. package/dashboards/express/node_modules/object-inspect/test/global.js +0 -17
  607. package/dashboards/express/node_modules/object-inspect/test/has.js +0 -15
  608. package/dashboards/express/node_modules/object-inspect/test/holes.js +0 -15
  609. package/dashboards/express/node_modules/object-inspect/test/indent-option.js +0 -271
  610. package/dashboards/express/node_modules/object-inspect/test/inspect.js +0 -139
  611. package/dashboards/express/node_modules/object-inspect/test/lowbyte.js +0 -12
  612. package/dashboards/express/node_modules/object-inspect/test/number.js +0 -58
  613. package/dashboards/express/node_modules/object-inspect/test/quoteStyle.js +0 -26
  614. package/dashboards/express/node_modules/object-inspect/test/toStringTag.js +0 -40
  615. package/dashboards/express/node_modules/object-inspect/test/undef.js +0 -12
  616. package/dashboards/express/node_modules/object-inspect/test/values.js +0 -261
  617. package/dashboards/express/node_modules/object-inspect/test-core-js.js +0 -26
  618. package/dashboards/express/node_modules/object-inspect/util.inspect.js +0 -1
  619. package/dashboards/express/node_modules/on-finished/HISTORY.md +0 -98
  620. package/dashboards/express/node_modules/on-finished/LICENSE +0 -23
  621. package/dashboards/express/node_modules/on-finished/README.md +0 -162
  622. package/dashboards/express/node_modules/on-finished/index.js +0 -234
  623. package/dashboards/express/node_modules/on-finished/package.json +0 -39
  624. package/dashboards/express/node_modules/on-headers/HISTORY.md +0 -26
  625. package/dashboards/express/node_modules/on-headers/LICENSE +0 -22
  626. package/dashboards/express/node_modules/on-headers/README.md +0 -81
  627. package/dashboards/express/node_modules/on-headers/index.js +0 -180
  628. package/dashboards/express/node_modules/on-headers/package.json +0 -44
  629. package/dashboards/express/node_modules/once/LICENSE +0 -15
  630. package/dashboards/express/node_modules/once/README.md +0 -79
  631. package/dashboards/express/node_modules/once/once.js +0 -42
  632. package/dashboards/express/node_modules/once/package.json +0 -33
  633. package/dashboards/express/node_modules/parseurl/HISTORY.md +0 -58
  634. package/dashboards/express/node_modules/parseurl/LICENSE +0 -24
  635. package/dashboards/express/node_modules/parseurl/README.md +0 -133
  636. package/dashboards/express/node_modules/parseurl/index.js +0 -158
  637. package/dashboards/express/node_modules/parseurl/package.json +0 -40
  638. package/dashboards/express/node_modules/path-to-regexp/LICENSE +0 -21
  639. package/dashboards/express/node_modules/path-to-regexp/Readme.md +0 -224
  640. package/dashboards/express/node_modules/path-to-regexp/dist/index.d.ts +0 -144
  641. package/dashboards/express/node_modules/path-to-regexp/dist/index.js +0 -409
  642. package/dashboards/express/node_modules/path-to-regexp/dist/index.js.map +0 -1
  643. package/dashboards/express/node_modules/path-to-regexp/package.json +0 -64
  644. package/dashboards/express/node_modules/proxy-addr/HISTORY.md +0 -161
  645. package/dashboards/express/node_modules/proxy-addr/LICENSE +0 -22
  646. package/dashboards/express/node_modules/proxy-addr/README.md +0 -139
  647. package/dashboards/express/node_modules/proxy-addr/index.js +0 -327
  648. package/dashboards/express/node_modules/proxy-addr/package.json +0 -47
  649. package/dashboards/express/node_modules/qs/.editorconfig +0 -46
  650. package/dashboards/express/node_modules/qs/.github/FUNDING.yml +0 -12
  651. package/dashboards/express/node_modules/qs/.github/SECURITY.md +0 -11
  652. package/dashboards/express/node_modules/qs/.github/THREAT_MODEL.md +0 -78
  653. package/dashboards/express/node_modules/qs/.nycrc +0 -13
  654. package/dashboards/express/node_modules/qs/CHANGELOG.md +0 -806
  655. package/dashboards/express/node_modules/qs/LICENSE.md +0 -29
  656. package/dashboards/express/node_modules/qs/README.md +0 -758
  657. package/dashboards/express/node_modules/qs/dist/qs.js +0 -141
  658. package/dashboards/express/node_modules/qs/eslint.config.mjs +0 -56
  659. package/dashboards/express/node_modules/qs/lib/formats.js +0 -23
  660. package/dashboards/express/node_modules/qs/lib/index.js +0 -11
  661. package/dashboards/express/node_modules/qs/lib/parse.js +0 -373
  662. package/dashboards/express/node_modules/qs/lib/stringify.js +0 -356
  663. package/dashboards/express/node_modules/qs/lib/utils.js +0 -342
  664. package/dashboards/express/node_modules/qs/package.json +0 -94
  665. package/dashboards/express/node_modules/qs/test/empty-keys-cases.js +0 -267
  666. package/dashboards/express/node_modules/qs/test/parse.js +0 -1568
  667. package/dashboards/express/node_modules/qs/test/stringify.js +0 -1310
  668. package/dashboards/express/node_modules/qs/test/utils.js +0 -404
  669. package/dashboards/express/node_modules/random-bytes/HISTORY.md +0 -4
  670. package/dashboards/express/node_modules/random-bytes/LICENSE +0 -21
  671. package/dashboards/express/node_modules/random-bytes/README.md +0 -77
  672. package/dashboards/express/node_modules/random-bytes/index.js +0 -101
  673. package/dashboards/express/node_modules/random-bytes/package.json +0 -36
  674. package/dashboards/express/node_modules/range-parser/HISTORY.md +0 -56
  675. package/dashboards/express/node_modules/range-parser/LICENSE +0 -23
  676. package/dashboards/express/node_modules/range-parser/README.md +0 -84
  677. package/dashboards/express/node_modules/range-parser/index.js +0 -162
  678. package/dashboards/express/node_modules/range-parser/package.json +0 -44
  679. package/dashboards/express/node_modules/raw-body/LICENSE +0 -22
  680. package/dashboards/express/node_modules/raw-body/README.md +0 -223
  681. package/dashboards/express/node_modules/raw-body/index.d.ts +0 -85
  682. package/dashboards/express/node_modules/raw-body/index.js +0 -336
  683. package/dashboards/express/node_modules/raw-body/package.json +0 -46
  684. package/dashboards/express/node_modules/router/HISTORY.md +0 -228
  685. package/dashboards/express/node_modules/router/LICENSE +0 -23
  686. package/dashboards/express/node_modules/router/README.md +0 -416
  687. package/dashboards/express/node_modules/router/index.js +0 -748
  688. package/dashboards/express/node_modules/router/lib/layer.js +0 -247
  689. package/dashboards/express/node_modules/router/lib/route.js +0 -242
  690. package/dashboards/express/node_modules/router/package.json +0 -44
  691. package/dashboards/express/node_modules/safe-buffer/LICENSE +0 -21
  692. package/dashboards/express/node_modules/safe-buffer/README.md +0 -584
  693. package/dashboards/express/node_modules/safe-buffer/index.d.ts +0 -187
  694. package/dashboards/express/node_modules/safe-buffer/index.js +0 -65
  695. package/dashboards/express/node_modules/safe-buffer/package.json +0 -51
  696. package/dashboards/express/node_modules/safer-buffer/LICENSE +0 -21
  697. package/dashboards/express/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  698. package/dashboards/express/node_modules/safer-buffer/Readme.md +0 -156
  699. package/dashboards/express/node_modules/safer-buffer/dangerous.js +0 -58
  700. package/dashboards/express/node_modules/safer-buffer/package.json +0 -34
  701. package/dashboards/express/node_modules/safer-buffer/safer.js +0 -77
  702. package/dashboards/express/node_modules/safer-buffer/tests.js +0 -406
  703. package/dashboards/express/node_modules/send/LICENSE +0 -23
  704. package/dashboards/express/node_modules/send/README.md +0 -317
  705. package/dashboards/express/node_modules/send/index.js +0 -997
  706. package/dashboards/express/node_modules/send/package.json +0 -63
  707. package/dashboards/express/node_modules/serve-static/LICENSE +0 -25
  708. package/dashboards/express/node_modules/serve-static/README.md +0 -253
  709. package/dashboards/express/node_modules/serve-static/index.js +0 -208
  710. package/dashboards/express/node_modules/serve-static/package.json +0 -44
  711. package/dashboards/express/node_modules/setprototypeof/LICENSE +0 -13
  712. package/dashboards/express/node_modules/setprototypeof/README.md +0 -31
  713. package/dashboards/express/node_modules/setprototypeof/index.d.ts +0 -2
  714. package/dashboards/express/node_modules/setprototypeof/index.js +0 -17
  715. package/dashboards/express/node_modules/setprototypeof/package.json +0 -38
  716. package/dashboards/express/node_modules/setprototypeof/test/index.js +0 -24
  717. package/dashboards/express/node_modules/side-channel/.editorconfig +0 -9
  718. package/dashboards/express/node_modules/side-channel/.eslintrc +0 -12
  719. package/dashboards/express/node_modules/side-channel/.github/FUNDING.yml +0 -12
  720. package/dashboards/express/node_modules/side-channel/.nycrc +0 -13
  721. package/dashboards/express/node_modules/side-channel/CHANGELOG.md +0 -110
  722. package/dashboards/express/node_modules/side-channel/LICENSE +0 -21
  723. package/dashboards/express/node_modules/side-channel/README.md +0 -61
  724. package/dashboards/express/node_modules/side-channel/index.d.ts +0 -14
  725. package/dashboards/express/node_modules/side-channel/index.js +0 -43
  726. package/dashboards/express/node_modules/side-channel/package.json +0 -85
  727. package/dashboards/express/node_modules/side-channel/test/index.js +0 -104
  728. package/dashboards/express/node_modules/side-channel/tsconfig.json +0 -9
  729. package/dashboards/express/node_modules/side-channel-list/.editorconfig +0 -9
  730. package/dashboards/express/node_modules/side-channel-list/.eslintrc +0 -11
  731. package/dashboards/express/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
  732. package/dashboards/express/node_modules/side-channel-list/.nycrc +0 -13
  733. package/dashboards/express/node_modules/side-channel-list/CHANGELOG.md +0 -15
  734. package/dashboards/express/node_modules/side-channel-list/LICENSE +0 -21
  735. package/dashboards/express/node_modules/side-channel-list/README.md +0 -62
  736. package/dashboards/express/node_modules/side-channel-list/index.d.ts +0 -13
  737. package/dashboards/express/node_modules/side-channel-list/index.js +0 -113
  738. package/dashboards/express/node_modules/side-channel-list/list.d.ts +0 -14
  739. package/dashboards/express/node_modules/side-channel-list/package.json +0 -77
  740. package/dashboards/express/node_modules/side-channel-list/test/index.js +0 -104
  741. package/dashboards/express/node_modules/side-channel-list/tsconfig.json +0 -9
  742. package/dashboards/express/node_modules/side-channel-map/.editorconfig +0 -9
  743. package/dashboards/express/node_modules/side-channel-map/.eslintrc +0 -11
  744. package/dashboards/express/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
  745. package/dashboards/express/node_modules/side-channel-map/.nycrc +0 -13
  746. package/dashboards/express/node_modules/side-channel-map/CHANGELOG.md +0 -22
  747. package/dashboards/express/node_modules/side-channel-map/LICENSE +0 -21
  748. package/dashboards/express/node_modules/side-channel-map/README.md +0 -62
  749. package/dashboards/express/node_modules/side-channel-map/index.d.ts +0 -15
  750. package/dashboards/express/node_modules/side-channel-map/index.js +0 -68
  751. package/dashboards/express/node_modules/side-channel-map/package.json +0 -80
  752. package/dashboards/express/node_modules/side-channel-map/test/index.js +0 -114
  753. package/dashboards/express/node_modules/side-channel-map/tsconfig.json +0 -9
  754. package/dashboards/express/node_modules/side-channel-weakmap/.editorconfig +0 -9
  755. package/dashboards/express/node_modules/side-channel-weakmap/.eslintrc +0 -12
  756. package/dashboards/express/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
  757. package/dashboards/express/node_modules/side-channel-weakmap/.nycrc +0 -13
  758. package/dashboards/express/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
  759. package/dashboards/express/node_modules/side-channel-weakmap/LICENSE +0 -21
  760. package/dashboards/express/node_modules/side-channel-weakmap/README.md +0 -62
  761. package/dashboards/express/node_modules/side-channel-weakmap/index.d.ts +0 -15
  762. package/dashboards/express/node_modules/side-channel-weakmap/index.js +0 -84
  763. package/dashboards/express/node_modules/side-channel-weakmap/package.json +0 -87
  764. package/dashboards/express/node_modules/side-channel-weakmap/test/index.js +0 -114
  765. package/dashboards/express/node_modules/side-channel-weakmap/tsconfig.json +0 -9
  766. package/dashboards/express/node_modules/statuses/HISTORY.md +0 -87
  767. package/dashboards/express/node_modules/statuses/LICENSE +0 -23
  768. package/dashboards/express/node_modules/statuses/README.md +0 -139
  769. package/dashboards/express/node_modules/statuses/codes.json +0 -65
  770. package/dashboards/express/node_modules/statuses/index.js +0 -146
  771. package/dashboards/express/node_modules/statuses/package.json +0 -49
  772. package/dashboards/express/node_modules/toidentifier/HISTORY.md +0 -9
  773. package/dashboards/express/node_modules/toidentifier/LICENSE +0 -21
  774. package/dashboards/express/node_modules/toidentifier/README.md +0 -61
  775. package/dashboards/express/node_modules/toidentifier/index.js +0 -32
  776. package/dashboards/express/node_modules/toidentifier/package.json +0 -38
  777. package/dashboards/express/node_modules/type-is/HISTORY.md +0 -292
  778. package/dashboards/express/node_modules/type-is/LICENSE +0 -23
  779. package/dashboards/express/node_modules/type-is/README.md +0 -198
  780. package/dashboards/express/node_modules/type-is/index.js +0 -250
  781. package/dashboards/express/node_modules/type-is/package.json +0 -47
  782. package/dashboards/express/node_modules/uid-safe/HISTORY.md +0 -61
  783. package/dashboards/express/node_modules/uid-safe/LICENSE +0 -22
  784. package/dashboards/express/node_modules/uid-safe/README.md +0 -77
  785. package/dashboards/express/node_modules/uid-safe/index.js +0 -107
  786. package/dashboards/express/node_modules/uid-safe/package.json +0 -46
  787. package/dashboards/express/node_modules/unpipe/HISTORY.md +0 -4
  788. package/dashboards/express/node_modules/unpipe/LICENSE +0 -22
  789. package/dashboards/express/node_modules/unpipe/README.md +0 -43
  790. package/dashboards/express/node_modules/unpipe/index.js +0 -69
  791. package/dashboards/express/node_modules/unpipe/package.json +0 -27
  792. package/dashboards/express/node_modules/vary/HISTORY.md +0 -39
  793. package/dashboards/express/node_modules/vary/LICENSE +0 -22
  794. package/dashboards/express/node_modules/vary/README.md +0 -101
  795. package/dashboards/express/node_modules/vary/index.js +0 -149
  796. package/dashboards/express/node_modules/vary/package.json +0 -43
  797. package/dashboards/express/node_modules/wrappy/LICENSE +0 -15
  798. package/dashboards/express/node_modules/wrappy/README.md +0 -36
  799. package/dashboards/express/node_modules/wrappy/package.json +0 -29
  800. package/dashboards/express/node_modules/wrappy/wrappy.js +0 -33
  801. package/dashboards/express/package-lock.json +0 -922
  802. package/dashboards/express/package.json +0 -17
  803. package/dashboards/express/public/styles.css +0 -175
  804. package/dashboards/express/routes/activity.js +0 -101
  805. package/dashboards/express/routes/agents.js +0 -771
  806. package/dashboards/express/routes/apiKeys.js +0 -107
  807. package/dashboards/express/routes/approvals.js +0 -100
  808. package/dashboards/express/routes/audit.js +0 -75
  809. package/dashboards/express/routes/auth.js +0 -38
  810. package/dashboards/express/routes/community-skills.js +0 -83
  811. package/dashboards/express/routes/compliance.js +0 -93
  812. package/dashboards/express/routes/dashboard.js +0 -65
  813. package/dashboards/express/routes/dlp.js +0 -165
  814. package/dashboards/express/routes/domain-status.js +0 -78
  815. package/dashboards/express/routes/guardrails.js +0 -195
  816. package/dashboards/express/routes/journal.js +0 -95
  817. package/dashboards/express/routes/knowledge-contributions.js +0 -85
  818. package/dashboards/express/routes/knowledge.js +0 -83
  819. package/dashboards/express/routes/messages.js +0 -97
  820. package/dashboards/express/routes/settings.js +0 -830
  821. package/dashboards/express/routes/skill-connections.js +0 -86
  822. package/dashboards/express/routes/skills.js +0 -141
  823. package/dashboards/express/routes/users.js +0 -69
  824. package/dashboards/express/routes/vault.js +0 -141
  825. package/dashboards/express/routes/workforce.js +0 -126
  826. package/dashboards/express/utils/api.js +0 -44
  827. package/dashboards/express/utils/helpers.js +0 -46
  828. package/dashboards/express/views/components/modal.js +0 -255
  829. package/dashboards/express/views/components/stats.js +0 -22
  830. package/dashboards/express/views/components/table.js +0 -31
  831. package/dashboards/express/views/layout.js +0 -94
  832. package/dashboards/express/views/login.js +0 -45
  833. package/dashboards/go/go.mod +0 -3
  834. package/dashboards/go/handlers/activity.go +0 -30
  835. package/dashboards/go/handlers/agents.go +0 -790
  836. package/dashboards/go/handlers/apikeys.go +0 -38
  837. package/dashboards/go/handlers/approvals.go +0 -31
  838. package/dashboards/go/handlers/audit.go +0 -52
  839. package/dashboards/go/handlers/auth.go +0 -39
  840. package/dashboards/go/handlers/community_skills.go +0 -32
  841. package/dashboards/go/handlers/compliance.go +0 -58
  842. package/dashboards/go/handlers/dashboard.go +0 -43
  843. package/dashboards/go/handlers/dlp.go +0 -78
  844. package/dashboards/go/handlers/domain_status.go +0 -62
  845. package/dashboards/go/handlers/guardrails.go +0 -89
  846. package/dashboards/go/handlers/journal.go +0 -60
  847. package/dashboards/go/handlers/knowledge.go +0 -35
  848. package/dashboards/go/handlers/knowledge_contributions.go +0 -37
  849. package/dashboards/go/handlers/messages.go +0 -59
  850. package/dashboards/go/handlers/settings.go +0 -951
  851. package/dashboards/go/handlers/skill_connections.go +0 -59
  852. package/dashboards/go/handlers/skills.go +0 -129
  853. package/dashboards/go/handlers/users.go +0 -54
  854. package/dashboards/go/handlers/vault.go +0 -85
  855. package/dashboards/go/handlers/workforce.go +0 -60
  856. package/dashboards/go/main.go +0 -71
  857. package/dashboards/go/middleware/auth.go +0 -17
  858. package/dashboards/go/services/api.go +0 -38
  859. package/dashboards/go/services/session.go +0 -52
  860. package/dashboards/go/static/styles.css +0 -546
  861. package/dashboards/go/templates/components.go +0 -45
  862. package/dashboards/go/templates/helpers.go +0 -35
  863. package/dashboards/go/templates/layout.go +0 -64
  864. package/dashboards/html/index.html +0 -432
  865. package/dashboards/html/package.json +0 -11
  866. package/dashboards/html/public/styles.css +0 -546
  867. package/dashboards/html/src/api.js +0 -36
  868. package/dashboards/html/src/components/badge.js +0 -13
  869. package/dashboards/html/src/components/layout.js +0 -11
  870. package/dashboards/html/src/components/modal.js +0 -9
  871. package/dashboards/html/src/components/pagination.js +0 -12
  872. package/dashboards/html/src/components/stat-card.js +0 -14
  873. package/dashboards/html/src/components/table.js +0 -6
  874. package/dashboards/html/src/main.js +0 -83
  875. package/dashboards/html/src/pages/activity.js +0 -137
  876. package/dashboards/html/src/pages/agents.js +0 -831
  877. package/dashboards/html/src/pages/api-keys.js +0 -80
  878. package/dashboards/html/src/pages/approvals.js +0 -155
  879. package/dashboards/html/src/pages/audit.js +0 -50
  880. package/dashboards/html/src/pages/community-skills.js +0 -236
  881. package/dashboards/html/src/pages/compliance.js +0 -69
  882. package/dashboards/html/src/pages/dashboard.js +0 -25
  883. package/dashboards/html/src/pages/dlp.js +0 -112
  884. package/dashboards/html/src/pages/domain-status.js +0 -182
  885. package/dashboards/html/src/pages/guardrails.js +0 -127
  886. package/dashboards/html/src/pages/journal.js +0 -54
  887. package/dashboards/html/src/pages/knowledge-contributions.js +0 -319
  888. package/dashboards/html/src/pages/knowledge.js +0 -251
  889. package/dashboards/html/src/pages/login.js +0 -84
  890. package/dashboards/html/src/pages/messages.js +0 -90
  891. package/dashboards/html/src/pages/settings.js +0 -656
  892. package/dashboards/html/src/pages/skill-connections.js +0 -293
  893. package/dashboards/html/src/pages/skills.js +0 -114
  894. package/dashboards/html/src/pages/users.js +0 -62
  895. package/dashboards/html/src/pages/vault.js +0 -105
  896. package/dashboards/html/src/pages/workforce.js +0 -418
  897. package/dashboards/html/src/router.js +0 -91
  898. package/dashboards/html/src/utils/escape.js +0 -7
  899. package/dashboards/html/src/utils/time.js +0 -16
  900. package/dashboards/html/src/utils/toast.js +0 -10
  901. package/dashboards/java/AgenticMailDashboard.java +0 -161
  902. package/dashboards/java/handlers/ActivityHandler.java +0 -42
  903. package/dashboards/java/handlers/AgentsHandler.java +0 -807
  904. package/dashboards/java/handlers/ApiKeysHandler.java +0 -201
  905. package/dashboards/java/handlers/ApprovalsHandler.java +0 -43
  906. package/dashboards/java/handlers/AuditHandler.java +0 -95
  907. package/dashboards/java/handlers/AuthHandler.java +0 -71
  908. package/dashboards/java/handlers/CommunitySkillsHandler.java +0 -45
  909. package/dashboards/java/handlers/ComplianceHandler.java +0 -192
  910. package/dashboards/java/handlers/DashboardHandler.java +0 -98
  911. package/dashboards/java/handlers/DlpHandler.java +0 -230
  912. package/dashboards/java/handlers/DomainStatusHandler.java +0 -58
  913. package/dashboards/java/handlers/GuardrailsHandler.java +0 -272
  914. package/dashboards/java/handlers/JournalHandler.java +0 -130
  915. package/dashboards/java/handlers/KnowledgeContributionsHandler.java +0 -51
  916. package/dashboards/java/handlers/KnowledgeHandler.java +0 -49
  917. package/dashboards/java/handlers/MessagesHandler.java +0 -168
  918. package/dashboards/java/handlers/SettingsHandler.java +0 -1017
  919. package/dashboards/java/handlers/SkillConnectionsHandler.java +0 -61
  920. package/dashboards/java/handlers/SkillsHandler.java +0 -198
  921. package/dashboards/java/handlers/UsersHandler.java +0 -118
  922. package/dashboards/java/handlers/VaultHandler.java +0 -168
  923. package/dashboards/java/handlers/WorkforceHandler.java +0 -64
  924. package/dashboards/java/services/ApiClient.java +0 -233
  925. package/dashboards/java/services/SessionManager.java +0 -138
  926. package/dashboards/java/static/styles.css +0 -546
  927. package/dashboards/java/templates/Components.java +0 -142
  928. package/dashboards/java/templates/Helpers.java +0 -106
  929. package/dashboards/java/templates/Layout.java +0 -106
  930. package/dashboards/laravel/controllers/ActivityController.php +0 -18
  931. package/dashboards/laravel/controllers/AgentController.php +0 -250
  932. package/dashboards/laravel/controllers/ApiKeyController.php +0 -73
  933. package/dashboards/laravel/controllers/ApprovalsController.php +0 -18
  934. package/dashboards/laravel/controllers/AuditController.php +0 -31
  935. package/dashboards/laravel/controllers/AuthController.php +0 -44
  936. package/dashboards/laravel/controllers/CommunitySkillsController.php +0 -18
  937. package/dashboards/laravel/controllers/ComplianceController.php +0 -55
  938. package/dashboards/laravel/controllers/DashboardController.php +0 -28
  939. package/dashboards/laravel/controllers/DlpController.php +0 -88
  940. package/dashboards/laravel/controllers/DomainStatusController.php +0 -18
  941. package/dashboards/laravel/controllers/GuardrailController.php +0 -110
  942. package/dashboards/laravel/controllers/JournalController.php +0 -44
  943. package/dashboards/laravel/controllers/KnowledgeContributionsController.php +0 -18
  944. package/dashboards/laravel/controllers/KnowledgeController.php +0 -18
  945. package/dashboards/laravel/controllers/MessageController.php +0 -47
  946. package/dashboards/laravel/controllers/SettingController.php +0 -258
  947. package/dashboards/laravel/controllers/SkillConnectionsController.php +0 -18
  948. package/dashboards/laravel/controllers/SkillController.php +0 -74
  949. package/dashboards/laravel/controllers/UserController.php +0 -47
  950. package/dashboards/laravel/controllers/VaultController.php +0 -94
  951. package/dashboards/laravel/controllers/WorkforceController.php +0 -18
  952. package/dashboards/laravel/index.php +0 -375
  953. package/dashboards/laravel/lib/Api.php +0 -73
  954. package/dashboards/laravel/lib/Helpers.php +0 -123
  955. package/dashboards/laravel/public/styles.css +0 -175
  956. package/dashboards/laravel/views/activity.php +0 -127
  957. package/dashboards/laravel/views/agent-detail.php +0 -534
  958. package/dashboards/laravel/views/agents.php +0 -204
  959. package/dashboards/laravel/views/api-keys.php +0 -55
  960. package/dashboards/laravel/views/approvals.php +0 -152
  961. package/dashboards/laravel/views/audit.php +0 -30
  962. package/dashboards/laravel/views/community-skills.php +0 -131
  963. package/dashboards/laravel/views/compliance.php +0 -48
  964. package/dashboards/laravel/views/components/modal.php +0 -59
  965. package/dashboards/laravel/views/components/stats.php +0 -21
  966. package/dashboards/laravel/views/components/table.php +0 -35
  967. package/dashboards/laravel/views/dashboard.php +0 -31
  968. package/dashboards/laravel/views/dlp.php +0 -87
  969. package/dashboards/laravel/views/domain-status.php +0 -167
  970. package/dashboards/laravel/views/guardrails.php +0 -95
  971. package/dashboards/laravel/views/journal.php +0 -50
  972. package/dashboards/laravel/views/knowledge-contributions.php +0 -185
  973. package/dashboards/laravel/views/knowledge.php +0 -167
  974. package/dashboards/laravel/views/layout.php +0 -95
  975. package/dashboards/laravel/views/login.php +0 -45
  976. package/dashboards/laravel/views/messages.php +0 -60
  977. package/dashboards/laravel/views/settings.php +0 -622
  978. package/dashboards/laravel/views/skill-connections.php +0 -192
  979. package/dashboards/laravel/views/skills.php +0 -74
  980. package/dashboards/laravel/views/users.php +0 -42
  981. package/dashboards/laravel/views/vault.php +0 -80
  982. package/dashboards/laravel/views/workforce.php +0 -265
  983. package/dashboards/php/components/layout.php +0 -85
  984. package/dashboards/php/components/modal.php +0 -22
  985. package/dashboards/php/components/stats.php +0 -20
  986. package/dashboards/php/components/table.php +0 -33
  987. package/dashboards/php/index.php +0 -696
  988. package/dashboards/php/lib/api.php +0 -37
  989. package/dashboards/php/lib/auth.php +0 -47
  990. package/dashboards/php/lib/helpers.php +0 -69
  991. package/dashboards/php/pages/activity.php +0 -35
  992. package/dashboards/php/pages/agent-detail.php +0 -552
  993. package/dashboards/php/pages/agents.php +0 -185
  994. package/dashboards/php/pages/api-keys.php +0 -34
  995. package/dashboards/php/pages/approvals.php +0 -36
  996. package/dashboards/php/pages/audit.php +0 -31
  997. package/dashboards/php/pages/community-skills.php +0 -39
  998. package/dashboards/php/pages/compliance.php +0 -38
  999. package/dashboards/php/pages/dashboard.php +0 -29
  1000. package/dashboards/php/pages/dlp.php +0 -65
  1001. package/dashboards/php/pages/domain-status.php +0 -87
  1002. package/dashboards/php/pages/guardrails.php +0 -70
  1003. package/dashboards/php/pages/journal.php +0 -53
  1004. package/dashboards/php/pages/knowledge-contributions.php +0 -47
  1005. package/dashboards/php/pages/knowledge.php +0 -43
  1006. package/dashboards/php/pages/login.php +0 -34
  1007. package/dashboards/php/pages/messages.php +0 -53
  1008. package/dashboards/php/pages/settings.php +0 -687
  1009. package/dashboards/php/pages/skill-connections.php +0 -94
  1010. package/dashboards/php/pages/skills.php +0 -70
  1011. package/dashboards/php/pages/users.php +0 -37
  1012. package/dashboards/php/pages/vault.php +0 -70
  1013. package/dashboards/php/pages/workforce.php +0 -89
  1014. package/dashboards/php/public/styles.css +0 -175
  1015. package/dashboards/python/app.py +0 -91
  1016. package/dashboards/python/routes/__init__.py +0 -0
  1017. package/dashboards/python/routes/activity.py +0 -11
  1018. package/dashboards/python/routes/agents.py +0 -296
  1019. package/dashboards/python/routes/api_keys.py +0 -49
  1020. package/dashboards/python/routes/approvals.py +0 -11
  1021. package/dashboards/python/routes/audit.py +0 -33
  1022. package/dashboards/python/routes/auth.py +0 -30
  1023. package/dashboards/python/routes/community_skills.py +0 -11
  1024. package/dashboards/python/routes/compliance.py +0 -50
  1025. package/dashboards/python/routes/dashboard.py +0 -32
  1026. package/dashboards/python/routes/dlp.py +0 -64
  1027. package/dashboards/python/routes/domain_status.py +0 -11
  1028. package/dashboards/python/routes/guardrails.py +0 -79
  1029. package/dashboards/python/routes/journal.py +0 -40
  1030. package/dashboards/python/routes/knowledge.py +0 -11
  1031. package/dashboards/python/routes/knowledge_contributions.py +0 -11
  1032. package/dashboards/python/routes/messages.py +0 -46
  1033. package/dashboards/python/routes/settings.py +0 -260
  1034. package/dashboards/python/routes/skill_connections.py +0 -11
  1035. package/dashboards/python/routes/skills.py +0 -59
  1036. package/dashboards/python/routes/users.py +0 -43
  1037. package/dashboards/python/routes/vault.py +0 -59
  1038. package/dashboards/python/routes/workforce.py +0 -11
  1039. package/dashboards/python/static/styles.css +0 -175
  1040. package/dashboards/python/templates/activity.html +0 -87
  1041. package/dashboards/python/templates/agent_detail.html +0 -552
  1042. package/dashboards/python/templates/agents.html +0 -246
  1043. package/dashboards/python/templates/api_keys.html +0 -64
  1044. package/dashboards/python/templates/approvals.html +0 -86
  1045. package/dashboards/python/templates/audit.html +0 -50
  1046. package/dashboards/python/templates/community-skills.html +0 -69
  1047. package/dashboards/python/templates/compliance.html +0 -74
  1048. package/dashboards/python/templates/components/modal.html +0 -43
  1049. package/dashboards/python/templates/components/stats.html +0 -26
  1050. package/dashboards/python/templates/components/table.html +0 -43
  1051. package/dashboards/python/templates/dashboard.html +0 -34
  1052. package/dashboards/python/templates/dlp.html +0 -159
  1053. package/dashboards/python/templates/domain-status.html +0 -64
  1054. package/dashboards/python/templates/guardrails.html +0 -131
  1055. package/dashboards/python/templates/journal.html +0 -66
  1056. package/dashboards/python/templates/knowledge-contributions.html +0 -71
  1057. package/dashboards/python/templates/knowledge.html +0 -69
  1058. package/dashboards/python/templates/layout.html +0 -121
  1059. package/dashboards/python/templates/login.html +0 -36
  1060. package/dashboards/python/templates/messages.html +0 -90
  1061. package/dashboards/python/templates/settings.html +0 -624
  1062. package/dashboards/python/templates/skill-connections.html +0 -72
  1063. package/dashboards/python/templates/skills.html +0 -89
  1064. package/dashboards/python/templates/users.html +0 -70
  1065. package/dashboards/python/templates/vault.html +0 -73
  1066. package/dashboards/python/templates/workforce.html +0 -112
  1067. package/dashboards/python/utils/__init__.py +0 -0
  1068. package/dashboards/python/utils/api.py +0 -35
  1069. package/dashboards/python/utils/helpers.py +0 -90
  1070. package/dashboards/rails/app.rb +0 -64
  1071. package/dashboards/rails/helpers/api.rb +0 -39
  1072. package/dashboards/rails/helpers/auth.rb +0 -11
  1073. package/dashboards/rails/helpers/view.rb +0 -95
  1074. package/dashboards/rails/public/styles.css +0 -546
  1075. package/dashboards/rails/routes/activity.rb +0 -10
  1076. package/dashboards/rails/routes/agents.rb +0 -173
  1077. package/dashboards/rails/routes/api_keys.rb +0 -30
  1078. package/dashboards/rails/routes/approvals.rb +0 -10
  1079. package/dashboards/rails/routes/audit.rb +0 -15
  1080. package/dashboards/rails/routes/auth.rb +0 -29
  1081. package/dashboards/rails/routes/community_skills.rb +0 -11
  1082. package/dashboards/rails/routes/compliance.rb +0 -25
  1083. package/dashboards/rails/routes/dashboard.rb +0 -13
  1084. package/dashboards/rails/routes/dlp.rb +0 -40
  1085. package/dashboards/rails/routes/domain_status.rb +0 -16
  1086. package/dashboards/rails/routes/guardrails.rb +0 -51
  1087. package/dashboards/rails/routes/journal.rb +0 -24
  1088. package/dashboards/rails/routes/knowledge.rb +0 -11
  1089. package/dashboards/rails/routes/knowledge_contributions.rb +0 -12
  1090. package/dashboards/rails/routes/messages.rb +0 -22
  1091. package/dashboards/rails/routes/settings.rb +0 -196
  1092. package/dashboards/rails/routes/skill_connections.rb +0 -15
  1093. package/dashboards/rails/routes/skills.rb +0 -38
  1094. package/dashboards/rails/routes/users.rb +0 -18
  1095. package/dashboards/rails/routes/vault.rb +0 -37
  1096. package/dashboards/rails/routes/workforce.rb +0 -16
  1097. package/dashboards/rails/views/activity.erb +0 -56
  1098. package/dashboards/rails/views/agent_detail.erb +0 -550
  1099. package/dashboards/rails/views/agents.erb +0 -214
  1100. package/dashboards/rails/views/api_keys.erb +0 -52
  1101. package/dashboards/rails/views/approvals.erb +0 -60
  1102. package/dashboards/rails/views/audit.erb +0 -38
  1103. package/dashboards/rails/views/community_skills.erb +0 -69
  1104. package/dashboards/rails/views/compliance.erb +0 -69
  1105. package/dashboards/rails/views/dashboard.erb +0 -46
  1106. package/dashboards/rails/views/dlp.erb +0 -104
  1107. package/dashboards/rails/views/domain_status.erb +0 -75
  1108. package/dashboards/rails/views/guardrails.erb +0 -107
  1109. package/dashboards/rails/views/journal.erb +0 -65
  1110. package/dashboards/rails/views/knowledge.erb +0 -67
  1111. package/dashboards/rails/views/knowledge_contributions.erb +0 -70
  1112. package/dashboards/rails/views/layout.erb +0 -61
  1113. package/dashboards/rails/views/login.erb +0 -47
  1114. package/dashboards/rails/views/messages.erb +0 -62
  1115. package/dashboards/rails/views/settings.erb +0 -578
  1116. package/dashboards/rails/views/skill_connections.erb +0 -109
  1117. package/dashboards/rails/views/skills.erb +0 -66
  1118. package/dashboards/rails/views/users.erb +0 -53
  1119. package/dashboards/rails/views/vault.erb +0 -66
  1120. package/dashboards/rails/views/workforce.erb +0 -124
  1121. package/dashboards/ruby/app.rb +0 -74
  1122. package/dashboards/ruby/helpers/api.rb +0 -63
  1123. package/dashboards/ruby/helpers/auth.rb +0 -20
  1124. package/dashboards/ruby/helpers/view.rb +0 -91
  1125. package/dashboards/ruby/public/styles.css +0 -546
  1126. package/dashboards/ruby/routes/activity.rb +0 -10
  1127. package/dashboards/ruby/routes/agents.rb +0 -197
  1128. package/dashboards/ruby/routes/api_keys.rb +0 -43
  1129. package/dashboards/ruby/routes/approvals.rb +0 -10
  1130. package/dashboards/ruby/routes/audit.rb +0 -15
  1131. package/dashboards/ruby/routes/auth.rb +0 -29
  1132. package/dashboards/ruby/routes/community_skills.rb +0 -11
  1133. package/dashboards/ruby/routes/compliance.rb +0 -28
  1134. package/dashboards/ruby/routes/dashboard.rb +0 -13
  1135. package/dashboards/ruby/routes/dlp.rb +0 -55
  1136. package/dashboards/ruby/routes/domain_status.rb +0 -16
  1137. package/dashboards/ruby/routes/guardrails.rb +0 -77
  1138. package/dashboards/ruby/routes/journal.rb +0 -24
  1139. package/dashboards/ruby/routes/knowledge.rb +0 -11
  1140. package/dashboards/ruby/routes/knowledge_contributions.rb +0 -12
  1141. package/dashboards/ruby/routes/messages.rb +0 -27
  1142. package/dashboards/ruby/routes/settings.rb +0 -214
  1143. package/dashboards/ruby/routes/skill_connections.rb +0 -15
  1144. package/dashboards/ruby/routes/skills.rb +0 -50
  1145. package/dashboards/ruby/routes/users.rb +0 -26
  1146. package/dashboards/ruby/routes/vault.rb +0 -49
  1147. package/dashboards/ruby/routes/workforce.rb +0 -16
  1148. package/dashboards/ruby/views/activity.erb +0 -56
  1149. package/dashboards/ruby/views/agent_detail.erb +0 -550
  1150. package/dashboards/ruby/views/agents.erb +0 -214
  1151. package/dashboards/ruby/views/api_keys.erb +0 -59
  1152. package/dashboards/ruby/views/approvals.erb +0 -60
  1153. package/dashboards/ruby/views/audit.erb +0 -38
  1154. package/dashboards/ruby/views/community_skills.erb +0 -69
  1155. package/dashboards/ruby/views/compliance.erb +0 -45
  1156. package/dashboards/ruby/views/dashboard.erb +0 -46
  1157. package/dashboards/ruby/views/dlp.erb +0 -88
  1158. package/dashboards/ruby/views/domain_status.erb +0 -75
  1159. package/dashboards/ruby/views/guardrails.erb +0 -103
  1160. package/dashboards/ruby/views/journal.erb +0 -53
  1161. package/dashboards/ruby/views/knowledge.erb +0 -67
  1162. package/dashboards/ruby/views/knowledge_contributions.erb +0 -70
  1163. package/dashboards/ruby/views/layout.erb +0 -61
  1164. package/dashboards/ruby/views/login.erb +0 -31
  1165. package/dashboards/ruby/views/messages.erb +0 -51
  1166. package/dashboards/ruby/views/settings.erb +0 -579
  1167. package/dashboards/ruby/views/skill_connections.erb +0 -109
  1168. package/dashboards/ruby/views/skills.erb +0 -66
  1169. package/dashboards/ruby/views/users.erb +0 -53
  1170. package/dashboards/ruby/views/vault.erb +0 -66
  1171. package/dashboards/ruby/views/workforce.erb +0 -124
  1172. package/dashboards/shared/styles.css +0 -546
  1173. package/dashboards/shared-styles.css +0 -546
@@ -1,1017 +0,0 @@
1
- /**
2
- * SettingsHandler — Read + update organization settings.
3
- * Routes: GET /settings, POST /settings
4
- */
5
-
6
- import com.sun.net.httpserver.*;
7
- import java.io.*;
8
- import java.util.*;
9
-
10
- public class SettingsHandler implements HttpHandler {
11
-
12
- @Override
13
- public void handle(HttpExchange ex) throws IOException {
14
- try {
15
- if (!SessionManager.isAuthenticated(ex)) {
16
- SessionManager.redirect(ex, "/login");
17
- return;
18
- }
19
-
20
- if ("POST".equals(ex.getRequestMethod())) {
21
- handleUpdate(ex);
22
- return;
23
- }
24
-
25
- handleRead(ex);
26
-
27
- } catch (Exception e) {
28
- SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
29
- }
30
- }
31
-
32
- private void handleUpdate(HttpExchange ex) throws IOException {
33
- String token = SessionManager.getToken(ex);
34
- Map<String, String> form = SessionManager.parseForm(ex);
35
-
36
- // Check if this is a tool security save
37
- if ("tool-security".equals(form.get("_form"))) {
38
- handleToolSecurityUpdate(ex, token, form);
39
- return;
40
- }
41
-
42
- // Check if this is a firewall save
43
- if ("firewall".equals(form.get("_form"))) {
44
- handleFirewallUpdate(ex, token, form);
45
- return;
46
- }
47
-
48
- // Check if this is a model pricing save
49
- if ("model-pricing".equals(form.get("_form"))) {
50
- handleModelPricingUpdate(ex, token, form);
51
- return;
52
- }
53
-
54
- Map<String, Object> payload = new LinkedHashMap<>();
55
- String[] fields = {"org_name", "default_model", "max_agents", "rate_limit", "webhook_url"};
56
- for (String key : fields) {
57
- String val = form.get(key);
58
- if (val != null && !val.isEmpty()) {
59
- // Convert numeric fields
60
- if ("max_agents".equals(key) || "rate_limit".equals(key)) {
61
- try {
62
- payload.put(key, Integer.parseInt(val));
63
- } catch (NumberFormatException e) {
64
- payload.put(key, val);
65
- }
66
- } else {
67
- payload.put(key, val);
68
- }
69
- }
70
- }
71
-
72
- var result = ApiClient.patch("/api/settings", token, ApiClient.toJsonMixed(payload));
73
- int status = Helpers.intVal(result, "_status");
74
-
75
- if (status > 0 && status < 300) {
76
- SessionManager.setFlash(ex, "Settings updated successfully", "success");
77
- } else {
78
- String err = Helpers.strVal(result, "error");
79
- if (err.isEmpty()) err = "Failed to update settings";
80
- SessionManager.setFlash(ex, err, "danger");
81
- }
82
-
83
- SessionManager.redirect(ex, "/settings");
84
- }
85
-
86
- private void handleToolSecurityUpdate(HttpExchange ex, String token, Map<String, String> form) throws IOException {
87
- Map<String, Object> payload = new LinkedHashMap<>();
88
-
89
- Map<String, Object> security = new LinkedHashMap<>();
90
-
91
- Map<String, Object> pathSandbox = new LinkedHashMap<>();
92
- pathSandbox.put("enabled", "1".equals(form.get("ps_enabled")));
93
- pathSandbox.put("allowedDirs", splitTrim(form.getOrDefault("ps_allowedDirs", "")));
94
- pathSandbox.put("blockedPatterns", splitTrim(form.getOrDefault("ps_blockedPatterns", "")));
95
- security.put("pathSandbox", pathSandbox);
96
-
97
- Map<String, Object> ssrf = new LinkedHashMap<>();
98
- ssrf.put("enabled", "1".equals(form.get("ssrf_enabled")));
99
- ssrf.put("allowedHosts", splitTrim(form.getOrDefault("ssrf_allowedHosts", "")));
100
- ssrf.put("blockedCidrs", splitTrim(form.getOrDefault("ssrf_blockedCidrs", "")));
101
- security.put("ssrf", ssrf);
102
-
103
- Map<String, Object> cmdSanitizer = new LinkedHashMap<>();
104
- cmdSanitizer.put("enabled", "1".equals(form.get("cmd_enabled")));
105
- cmdSanitizer.put("mode", form.getOrDefault("cmd_mode", "blocklist"));
106
- cmdSanitizer.put("allowedCommands", splitTrim(form.getOrDefault("cmd_allowedCommands", "")));
107
- cmdSanitizer.put("blockedPatterns", splitTrim(form.getOrDefault("cmd_blockedPatterns", "")));
108
- security.put("commandSanitizer", cmdSanitizer);
109
-
110
- payload.put("security", security);
111
-
112
- Map<String, Object> middleware = new LinkedHashMap<>();
113
-
114
- Map<String, Object> audit = new LinkedHashMap<>();
115
- audit.put("enabled", "1".equals(form.get("audit_enabled")));
116
- audit.put("redactKeys", splitTrim(form.getOrDefault("audit_redactKeys", "")));
117
- middleware.put("audit", audit);
118
-
119
- Map<String, Object> rateLimit = new LinkedHashMap<>();
120
- rateLimit.put("enabled", "1".equals(form.get("rl_enabled")));
121
- rateLimit.put("overrides", new LinkedHashMap<>());
122
- middleware.put("rateLimit", rateLimit);
123
-
124
- Map<String, Object> circuitBreaker = new LinkedHashMap<>();
125
- circuitBreaker.put("enabled", "1".equals(form.get("cb_enabled")));
126
- middleware.put("circuitBreaker", circuitBreaker);
127
-
128
- Map<String, Object> telemetry = new LinkedHashMap<>();
129
- telemetry.put("enabled", "1".equals(form.get("tel_enabled")));
130
- middleware.put("telemetry", telemetry);
131
-
132
- payload.put("middleware", middleware);
133
-
134
- var result = ApiClient.put("/api/settings/tool-security", token, buildNestedJson(payload));
135
- int status = Helpers.intVal(result, "_status");
136
-
137
- if (status > 0 && status < 300) {
138
- SessionManager.setFlash(ex, "Tool security settings updated", "success");
139
- } else {
140
- String err = Helpers.strVal(result, "error");
141
- if (err.isEmpty()) err = "Failed to update tool security settings";
142
- SessionManager.setFlash(ex, err, "danger");
143
- }
144
-
145
- SessionManager.redirect(ex, "/settings");
146
- }
147
-
148
- private List<String> splitTrim(String val) {
149
- List<String> result = new ArrayList<>();
150
- if (val == null || val.isEmpty()) return result;
151
- for (String part : val.split(",")) {
152
- String trimmed = part.trim();
153
- if (!trimmed.isEmpty()) result.add(trimmed);
154
- }
155
- return result;
156
- }
157
-
158
- @SuppressWarnings("unchecked")
159
- private String buildNestedJson(Map<String, Object> map) {
160
- StringBuilder sb = new StringBuilder("{");
161
- boolean first = true;
162
- for (var entry : map.entrySet()) {
163
- if (!first) sb.append(",");
164
- first = false;
165
- sb.append("\"").append(escJson(entry.getKey())).append("\":");
166
- appendValue(sb, entry.getValue());
167
- }
168
- sb.append("}");
169
- return sb.toString();
170
- }
171
-
172
- @SuppressWarnings("unchecked")
173
- private void appendValue(StringBuilder sb, Object v) {
174
- if (v == null) {
175
- sb.append("null");
176
- } else if (v instanceof Boolean) {
177
- sb.append(v);
178
- } else if (v instanceof Number) {
179
- sb.append(v);
180
- } else if (v instanceof Map) {
181
- sb.append(buildNestedJson((Map<String, Object>) v));
182
- } else if (v instanceof List) {
183
- sb.append("[");
184
- boolean f = true;
185
- for (Object item : (List<?>) v) {
186
- if (!f) sb.append(",");
187
- f = false;
188
- if (item instanceof String) {
189
- sb.append("\"").append(escJson(item.toString())).append("\"");
190
- } else {
191
- appendValue(sb, item);
192
- }
193
- }
194
- sb.append("]");
195
- } else {
196
- sb.append("\"").append(escJson(v.toString())).append("\"");
197
- }
198
- }
199
-
200
- private String escJson(String s) {
201
- if (s == null) return "";
202
- return s.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t");
203
- }
204
-
205
- private void handleRead(HttpExchange ex) throws IOException {
206
- String token = SessionManager.getToken(ex);
207
- var settings = ApiClient.get("/api/settings", token);
208
-
209
- StringBuilder html = new StringBuilder();
210
- html.append(Components.pageHeader("Settings", "Configure your AgenticMail Enterprise instance"));
211
-
212
- // Tabs
213
- html.append("<div style='border-bottom:1px solid var(--border);margin-bottom:20px'>");
214
- html.append("<div class='tabs' style='padding:0'>");
215
- html.append("<div class='tab active' data-settings-tab='general' onclick=\"switchSettingsTab('general')\">General</div>");
216
- html.append("<div class='tab' data-settings-tab='tool-security' onclick=\"switchSettingsTab('tool-security')\">Tool Security</div>");
217
- html.append("<div class='tab' data-settings-tab='firewall' onclick=\"switchSettingsTab('firewall')\">Network &amp; Firewall</div>");
218
- html.append("<div class='tab' data-settings-tab='model-pricing' onclick=\"switchSettingsTab('model-pricing')\">Model Pricing</div>");
219
- html.append("</div></div>");
220
-
221
- // General panel start
222
- html.append("<div id='settings-panel-general'>");
223
-
224
- // Settings form
225
- html.append("<div class='card'>");
226
- html.append("<div style='display:flex;align-items:center;gap:0'>");
227
- html.append("<h3>Organization Settings</h3>");
228
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('general')\" title='Learn more'>?</button>");
229
- html.append("</div>");
230
- html.append("<div id='help-general' class='settings-help-panel'>");
231
- html.append("<p>The General section configures your organization&rsquo;s identity and email delivery.</p>");
232
- html.append("<h4>Organization</h4>");
233
- html.append("<ul>");
234
- html.append("<li><strong>Company Name</strong> &mdash; Appears throughout the dashboard and in emails sent by agents.</li>");
235
- html.append("<li><strong>Domain</strong> &mdash; Your company&rsquo;s primary domain, used for agent email addresses.</li>");
236
- html.append("<li><strong>Subdomain</strong> &mdash; Your unique ID on the AgenticMail cloud (subdomain.agenticmail.io).</li>");
237
- html.append("<li><strong>Logo URL</strong> &mdash; Link to your company logo, shown in dashboard and emails.</li>");
238
- html.append("<li><strong>Primary Color</strong> &mdash; Customizes the dashboard accent color to match your brand.</li>");
239
- html.append("</ul>");
240
- html.append("<h4>SMTP Configuration</h4>");
241
- html.append("<p>Controls outgoing email delivery. Leave blank to use the default AgenticMail relay. Configure custom SMTP to send from your own mail infrastructure.</p>");
242
- html.append("</div>");
243
- html.append("<form method='POST' action='/settings'>");
244
- html.append("<div class='form-row'>");
245
- html.append("<div class='form-group'><label>Organization Name</label>");
246
- html.append("<input type='text' name='org_name' value='").append(Helpers.esc(Helpers.strVal(settings, "org_name")));
247
- html.append("' placeholder='Your Org'></div>");
248
- html.append("<div class='form-group'><label>Default Model</label>");
249
- html.append("<input type='text' name='default_model' value='").append(Helpers.esc(Helpers.strVal(settings, "default_model")));
250
- html.append("' placeholder='gpt-4o'></div>");
251
- html.append("</div>");
252
-
253
- html.append("<div class='form-row'>");
254
- html.append("<div class='form-group'><label>Max Agents</label>");
255
- html.append("<input type='number' name='max_agents' value='").append(Helpers.esc(Helpers.strVal(settings, "max_agents")));
256
- html.append("' placeholder='50'></div>");
257
- html.append("<div class='form-group'><label>Rate Limit (req/min)</label>");
258
- html.append("<input type='number' name='rate_limit' value='").append(Helpers.esc(Helpers.strVal(settings, "rate_limit")));
259
- html.append("' placeholder='1000'></div>");
260
- html.append("</div>");
261
-
262
- html.append("<div class='form-group'><label>Webhook URL</label>");
263
- html.append("<input type='url' name='webhook_url' value='").append(Helpers.esc(Helpers.strVal(settings, "webhook_url")));
264
- html.append("' placeholder='https://hooks.example.com/events'></div>");
265
-
266
- html.append("<button class='btn btn-primary' type='submit'>Save Settings</button>");
267
- html.append("</form>");
268
- html.append("</div>");
269
-
270
- // Instance info
271
- html.append(Components.cardStart("Instance Information"));
272
- html.append("<div class='table-wrap'><table><tbody>");
273
-
274
- html.append("<tr><td style='font-weight:600;width:200px'>API Endpoint</td>");
275
- html.append("<td><code>").append(Helpers.esc(ApiClient.API_URL)).append("</code></td></tr>");
276
-
277
- String version = Helpers.strVal(settings, "version");
278
- if (version.isEmpty()) version = Helpers.strVal(settings, "app_version");
279
- if (version.isEmpty()) version = "-";
280
- html.append("<tr><td style='font-weight:600'>Version</td>");
281
- html.append("<td>").append(Helpers.esc(version)).append("</td></tr>");
282
-
283
- String plan = Helpers.strVal(settings, "plan");
284
- if (plan.isEmpty()) plan = Helpers.strVal(settings, "tier");
285
- if (plan.isEmpty()) plan = "Enterprise";
286
- html.append("<tr><td style='font-weight:600'>Plan</td>");
287
- html.append("<td>").append(Helpers.esc(plan)).append("</td></tr>");
288
-
289
- String region = Helpers.strVal(settings, "region");
290
- if (region.isEmpty()) region = "-";
291
- html.append("<tr><td style='font-weight:600'>Region</td>");
292
- html.append("<td>").append(Helpers.esc(region)).append("</td></tr>");
293
-
294
- // Additional fields that might exist
295
- String domain = Helpers.strVal(settings, "domain");
296
- if (!domain.isEmpty()) {
297
- html.append("<tr><td style='font-weight:600'>Domain</td>");
298
- html.append("<td>").append(Helpers.esc(domain)).append("</td></tr>");
299
- }
300
-
301
- String subdomain = Helpers.strVal(settings, "subdomain");
302
- if (!subdomain.isEmpty()) {
303
- html.append("<tr><td style='font-weight:600'>Subdomain</td>");
304
- html.append("<td>").append(Helpers.esc(subdomain)).append(".agenticmail.io</td></tr>");
305
- }
306
-
307
- String name = Helpers.strVal(settings, "name");
308
- if (!name.isEmpty()) {
309
- html.append("<tr><td style='font-weight:600'>Org Name</td>");
310
- html.append("<td>").append(Helpers.esc(name)).append("</td></tr>");
311
- }
312
-
313
- html.append("</tbody></table></div>");
314
- html.append(Components.cardEnd());
315
-
316
- // General panel end
317
- html.append("</div>");
318
-
319
- // Tool Security panel
320
- renderToolSecurityPanel(html, token);
321
-
322
- // Firewall panel
323
- renderFirewallPanel(html, token);
324
-
325
- // Model Pricing panel
326
- renderModelPricingPanel(html, token);
327
-
328
- // Help panel styles
329
- html.append("<style>");
330
- html.append(".settings-help-btn{background:none;border:1px solid var(--border,#ddd);border-radius:50%;width:22px;height:22px;font-size:13px;font-weight:700;color:var(--text-muted,#888);cursor:pointer;margin-left:8px;line-height:1;padding:0;display:inline-flex;align-items:center;justify-content:center}");
331
- html.append(".settings-help-btn:hover{background:var(--bg-secondary,#f0f0f0);color:var(--text,#333)}");
332
- html.append(".settings-help-panel{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease;padding:0 16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;margin-bottom:0;border:1px solid transparent}");
333
- html.append(".settings-help-panel.open{max-height:600px;padding:16px;border-color:var(--border,#ddd);margin-bottom:16px}");
334
- html.append(".settings-help-panel h4{margin:12px 0 6px;font-size:14px}");
335
- html.append(".settings-help-panel ul{margin:4px 0 8px 18px;padding:0}");
336
- html.append(".settings-help-panel li{margin-bottom:4px;font-size:13px;line-height:1.5}");
337
- html.append(".settings-help-panel p{margin:4px 0 8px;font-size:13px;line-height:1.5}");
338
- html.append("</style>");
339
-
340
- // Tab switching script + help toggle
341
- html.append("<script>");
342
- html.append("function switchSettingsTab(tab){document.querySelectorAll('[id^=\"settings-panel-\"]').forEach(function(p){p.style.display='none'});document.querySelectorAll('[data-settings-tab]').forEach(function(t){t.classList.remove('active')});document.getElementById('settings-panel-'+tab).style.display='block';document.querySelector('[data-settings-tab=\"'+tab+'\"]').classList.add('active')}");
343
- html.append("function toggleSettingsHelp(id){var p=document.getElementById('help-'+id);if(p)p.classList.toggle('open')}");
344
- html.append("</script>");
345
-
346
- String flash = SessionManager.consumeFlash(ex);
347
- SessionManager.respond(ex, 200, Layout.layout("/settings", SessionManager.getUser(ex), flash, html.toString()));
348
- }
349
-
350
- @SuppressWarnings("unchecked")
351
- private void renderToolSecurityPanel(StringBuilder html, String token) {
352
- var tsData = ApiClient.get("/api/settings/tool-security", token);
353
- if (tsData == null) tsData = new HashMap<>();
354
-
355
- // Unwrap toolSecurityConfig if present
356
- Map<String, Object> cfg = tsData;
357
- Map<String, Object> tsc = Helpers.mapVal(tsData, "toolSecurityConfig");
358
- if (!tsc.isEmpty()) cfg = tsc;
359
-
360
- Map<String, Object> security = Helpers.mapVal(cfg, "security");
361
- Map<String, Object> middleware = Helpers.mapVal(cfg, "middleware");
362
-
363
- // Security sub-objects
364
- Map<String, Object> pathSandbox = Helpers.mapVal(security, "pathSandbox");
365
- Map<String, Object> ssrf = Helpers.mapVal(security, "ssrf");
366
- Map<String, Object> cmdSanitizer = Helpers.mapVal(security, "commandSanitizer");
367
-
368
- // Middleware sub-objects
369
- Map<String, Object> audit = Helpers.mapVal(middleware, "audit");
370
- Map<String, Object> rateLimit = Helpers.mapVal(middleware, "rateLimit");
371
- Map<String, Object> circuitBreaker = Helpers.mapVal(middleware, "circuitBreaker");
372
- Map<String, Object> telemetry = Helpers.mapVal(middleware, "telemetry");
373
-
374
- String cmdMode = Helpers.strVal(cmdSanitizer, "mode");
375
- if (cmdMode.isEmpty()) cmdMode = "blocklist";
376
-
377
- html.append("<div id='settings-panel-tool-security' style='display:none'>");
378
- html.append("<form method='POST' action='/settings'>");
379
- html.append("<input type='hidden' name='_form' value='tool-security'>");
380
-
381
- // Security Policies card
382
- html.append("<div class='card'>");
383
- html.append("<div style='display:flex;align-items:center;gap:0'>");
384
- html.append("<h3>Security Policies</h3>");
385
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('tool-security')\" title='Learn more'>?</button>");
386
- html.append("</div>");
387
- html.append("<div id='help-tool-security' class='settings-help-panel'>");
388
- html.append("<p>Tool Security controls what AI agents are allowed to do at the system level &mdash; safety guardrails that prevent agents from accessing sensitive resources.</p>");
389
- html.append("<h4>Security Sandboxes</h4>");
390
- html.append("<ul>");
391
- html.append("<li><strong>Path Sandbox</strong> &mdash; Restricts which folders agents can read/write. Prevents access to sensitive files.</li>");
392
- html.append("<li><strong>SSRF Protection</strong> &mdash; Blocks agents from reaching internal networks, cloud metadata, or private IPs.</li>");
393
- html.append("<li><strong>Command Sanitizer</strong> &mdash; Controls which shell commands agents can execute. Blocklist blocks dangerous patterns; Allowlist only permits specified commands.</li>");
394
- html.append("</ul>");
395
- html.append("</div>");
396
- html.append("<div style='display:grid;gap:20px'>");
397
-
398
- // Path Sandbox
399
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
400
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
401
- html.append("<div><strong style='font-size:14px'>Path Sandbox</strong><div style='font-size:12px;color:var(--text-muted)'>Restrict file system access to allowed directories</div></div>");
402
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='ps_enabled' value='1'").append(checkedAttr(pathSandbox, "enabled")).append("> Enabled</label>");
403
- html.append("</div>");
404
- html.append("<div class='form-group'><label>Allowed Directories (comma-separated)</label>");
405
- html.append("<input type='text' name='ps_allowedDirs' value='").append(Helpers.esc(joinList(pathSandbox, "allowedDirs"))).append("' placeholder='/tmp, /var/data'></div>");
406
- html.append("<div class='form-group'><label>Blocked Patterns (comma-separated)</label>");
407
- html.append("<input type='text' name='ps_blockedPatterns' value='").append(Helpers.esc(joinList(pathSandbox, "blockedPatterns"))).append("' placeholder='*.exe, /etc/shadow'></div>");
408
- html.append("</div>");
409
-
410
- // SSRF Protection
411
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
412
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
413
- html.append("<div><strong style='font-size:14px'>SSRF Protection</strong><div style='font-size:12px;color:var(--text-muted)'>Prevent server-side request forgery attacks</div></div>");
414
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='ssrf_enabled' value='1'").append(checkedAttr(ssrf, "enabled")).append("> Enabled</label>");
415
- html.append("</div>");
416
- html.append("<div class='form-group'><label>Allowed Hosts (comma-separated)</label>");
417
- html.append("<input type='text' name='ssrf_allowedHosts' value='").append(Helpers.esc(joinList(ssrf, "allowedHosts"))).append("' placeholder='api.example.com, cdn.example.com'></div>");
418
- html.append("<div class='form-group'><label>Blocked CIDRs (comma-separated)</label>");
419
- html.append("<input type='text' name='ssrf_blockedCidrs' value='").append(Helpers.esc(joinList(ssrf, "blockedCidrs"))).append("' placeholder='10.0.0.0/8, 172.16.0.0/12'></div>");
420
- html.append("</div>");
421
-
422
- // Command Sanitizer
423
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
424
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
425
- html.append("<div><strong style='font-size:14px'>Command Sanitizer</strong><div style='font-size:12px;color:var(--text-muted)'>Control which shell commands agents can execute</div></div>");
426
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='cmd_enabled' value='1'").append(checkedAttr(cmdSanitizer, "enabled")).append("> Enabled</label>");
427
- html.append("</div>");
428
- html.append("<div class='form-group'><label>Mode</label>");
429
- html.append("<select name='cmd_mode'><option value='blocklist'").append("blocklist".equals(cmdMode) ? " selected" : "").append(">Blocklist</option>");
430
- html.append("<option value='allowlist'").append("allowlist".equals(cmdMode) ? " selected" : "").append(">Allowlist</option></select></div>");
431
- html.append("<div class='form-group'><label>Allowed Commands (comma-separated)</label>");
432
- html.append("<input type='text' name='cmd_allowedCommands' value='").append(Helpers.esc(joinList(cmdSanitizer, "allowedCommands"))).append("' placeholder='ls, cat, grep'></div>");
433
- html.append("<div class='form-group'><label>Blocked Patterns (comma-separated)</label>");
434
- html.append("<input type='text' name='cmd_blockedPatterns' value='").append(Helpers.esc(joinList(cmdSanitizer, "blockedPatterns"))).append("' placeholder='rm -rf, sudo, chmod'></div>");
435
- html.append("</div>");
436
-
437
- html.append("</div>");
438
- html.append("</div>");
439
-
440
- // Middleware card
441
- html.append("<div class='card'>");
442
- html.append("<div style='display:flex;align-items:center;gap:0'>");
443
- html.append("<h3>Middleware</h3>");
444
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('middleware')\" title='Learn more'>?</button>");
445
- html.append("</div>");
446
- html.append("<div id='help-middleware' class='settings-help-panel'>");
447
- html.append("<h4>Middleware &amp; Observability</h4>");
448
- html.append("<ul>");
449
- html.append("<li><strong>Audit Logging</strong> &mdash; Records every tool action: what, when, success/failure, duration. Sensitive fields are auto-redacted.</li>");
450
- html.append("<li><strong>Rate Limiting</strong> &mdash; Limits tool calls per minute per agent. Prevents system overload.</li>");
451
- html.append("<li><strong>Circuit Breaker</strong> &mdash; Auto-pauses tools that keep failing (5 consecutive errors). Waits 30s before retry.</li>");
452
- html.append("<li><strong>Telemetry</strong> &mdash; Collects performance metrics: call duration, success rates, output sizes.</li>");
453
- html.append("</ul>");
454
- html.append("</div>");
455
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:16px'>");
456
-
457
- // Audit
458
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
459
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
460
- html.append("<div><strong style='font-size:14px'>Audit Logging</strong><div style='font-size:12px;color:var(--text-muted)'>Log all tool invocations</div></div>");
461
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='audit_enabled' value='1'").append(checkedAttr(audit, "enabled")).append("> Enabled</label>");
462
- html.append("</div>");
463
- html.append("<div class='form-group'><label>Redact Keys (comma-separated)</label>");
464
- html.append("<input type='text' name='audit_redactKeys' value='").append(Helpers.esc(joinList(audit, "redactKeys"))).append("' placeholder='password, secret, token'></div>");
465
- html.append("</div>");
466
-
467
- // Rate Limiting
468
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
469
- html.append("<div style='display:flex;justify-content:space-between;align-items:center'>");
470
- html.append("<div><strong style='font-size:14px'>Rate Limiting</strong><div style='font-size:12px;color:var(--text-muted)'>Throttle tool calls</div></div>");
471
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='rl_enabled' value='1'").append(checkedAttr(rateLimit, "enabled")).append("> Enabled</label>");
472
- html.append("</div></div>");
473
-
474
- // Circuit Breaker
475
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
476
- html.append("<div style='display:flex;justify-content:space-between;align-items:center'>");
477
- html.append("<div><strong style='font-size:14px'>Circuit Breaker</strong><div style='font-size:12px;color:var(--text-muted)'>Halt tools after repeated failures</div></div>");
478
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='cb_enabled' value='1'").append(checkedAttr(circuitBreaker, "enabled")).append("> Enabled</label>");
479
- html.append("</div></div>");
480
-
481
- // Telemetry
482
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
483
- html.append("<div style='display:flex;justify-content:space-between;align-items:center'>");
484
- html.append("<div><strong style='font-size:14px'>Telemetry</strong><div style='font-size:12px;color:var(--text-muted)'>Collect tool usage metrics</div></div>");
485
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='tel_enabled' value='1'").append(checkedAttr(telemetry, "enabled")).append("> Enabled</label>");
486
- html.append("</div></div>");
487
-
488
- html.append("</div>");
489
- html.append("</div>");
490
-
491
- html.append("<button class='btn btn-primary' type='submit'>Save Tool Security</button>");
492
- html.append("</form>");
493
- html.append("</div>");
494
- }
495
-
496
- @SuppressWarnings("unchecked")
497
- private void renderFirewallPanel(StringBuilder html, String token) {
498
- var fwData = ApiClient.get("/api/settings/firewall", token);
499
- if (fwData == null) fwData = new HashMap<>();
500
-
501
- // Unwrap firewallConfig if present
502
- Map<String, Object> cfg = fwData;
503
- Map<String, Object> fc = Helpers.mapVal(fwData, "firewallConfig");
504
- if (!fc.isEmpty()) cfg = fc;
505
-
506
- Map<String, Object> ipAccess = Helpers.mapVal(cfg, "ipAccess");
507
- Map<String, Object> egress = Helpers.mapVal(cfg, "egress");
508
- Map<String, Object> proxy = Helpers.mapVal(cfg, "proxy");
509
- Map<String, Object> trustedProxies = Helpers.mapVal(cfg, "trustedProxies");
510
- Map<String, Object> network = Helpers.mapVal(cfg, "network");
511
- Map<String, Object> netRateLimit = Helpers.mapVal(network, "rateLimit");
512
- Map<String, Object> httpsEnforcement = Helpers.mapVal(network, "httpsEnforcement");
513
- Map<String, Object> secHeaders = Helpers.mapVal(network, "securityHeaders");
514
-
515
- String ipMode = Helpers.strVal(ipAccess, "mode");
516
- if (ipMode.isEmpty()) ipMode = "allowlist";
517
-
518
- String egressMode = Helpers.strVal(egress, "mode");
519
- if (egressMode.isEmpty()) egressMode = "blocklist";
520
-
521
- int rpm = Helpers.intVal(netRateLimit, "requestsPerMinute");
522
- if (rpm == 0) rpm = 120;
523
-
524
- int hstsMaxAge = Helpers.intVal(secHeaders, "hstsMaxAge");
525
- if (hstsMaxAge == 0) hstsMaxAge = 31536000;
526
-
527
- String xFrameOptions = Helpers.strVal(secHeaders, "xFrameOptions");
528
- if (xFrameOptions.isEmpty()) xFrameOptions = "DENY";
529
-
530
- String referrerPolicy = Helpers.strVal(secHeaders, "referrerPolicy");
531
- if (referrerPolicy.isEmpty()) referrerPolicy = "strict-origin-when-cross-origin";
532
-
533
- String permissionsPolicy = Helpers.strVal(secHeaders, "permissionsPolicy");
534
- if (permissionsPolicy.isEmpty()) permissionsPolicy = "camera=(), microphone=(), geolocation=()";
535
-
536
- html.append("<div id='settings-panel-firewall' style='display:none'>");
537
- html.append("<form method='POST' action='/settings'>");
538
- html.append("<input type='hidden' name='_form' value='firewall'>");
539
-
540
- // IP Access Control card
541
- html.append("<div class='card'>");
542
- html.append("<div style='display:flex;align-items:center;gap:0'>");
543
- html.append("<h3>IP Access Control</h3>");
544
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('ip-access')\" title='Learn more'>?</button>");
545
- html.append("</div>");
546
- html.append("<div id='help-ip-access' class='settings-help-panel'>");
547
- html.append("<p>Restricts which IPs can reach the dashboard and APIs. Allowlist = only listed IPs connect. Blocklist = all except blocked IPs.</p>");
548
- html.append("</div>");
549
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
550
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
551
- html.append("<div><strong style='font-size:14px'>IP Access Control</strong><div style='font-size:12px;color:var(--text-muted)'>Restrict access by IP address</div></div>");
552
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='ip_enabled' value='1'").append(checkedAttr(ipAccess, "enabled")).append("> Enabled</label>");
553
- html.append("</div>");
554
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
555
- html.append("<div class='form-group'><label>Mode</label>");
556
- html.append("<select name='ip_mode'><option value='allowlist'").append("allowlist".equals(ipMode) ? " selected" : "").append(">Allowlist</option>");
557
- html.append("<option value='blocklist'").append("blocklist".equals(ipMode) ? " selected" : "").append(">Blocklist</option></select></div>");
558
- html.append("<div></div>");
559
- html.append("<div class='form-group'><label>Allowlist IPs (comma-separated)</label>");
560
- html.append("<input type='text' name='ip_allowlist' value='").append(Helpers.esc(joinList(ipAccess, "allowlist"))).append("' placeholder='192.168.1.0/24, 10.0.0.1'></div>");
561
- html.append("<div class='form-group'><label>Blocklist IPs (comma-separated)</label>");
562
- html.append("<input type='text' name='ip_blocklist' value='").append(Helpers.esc(joinList(ipAccess, "blocklist"))).append("' placeholder='203.0.113.0/24'></div>");
563
- html.append("<div class='form-group' style='grid-column:1/-1'><label>Bypass Paths (comma-separated)</label>");
564
- html.append("<input type='text' name='ip_bypassPaths' value='").append(Helpers.esc(joinList(ipAccess, "bypassPaths"))).append("' placeholder='/health, /ready'></div>");
565
- html.append("</div></div>");
566
- html.append("</div>");
567
-
568
- // Outbound Egress card
569
- html.append("<div class='card'>");
570
- html.append("<div style='display:flex;align-items:center;gap:0'>");
571
- html.append("<h3>Outbound Egress</h3>");
572
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('egress')\" title='Learn more'>?</button>");
573
- html.append("</div>");
574
- html.append("<div id='help-egress' class='settings-help-panel'>");
575
- html.append("<p>Controls which external hosts/ports agents can reach. Allowlist = only approved hosts. Blocklist = everything except blocked hosts.</p>");
576
- html.append("</div>");
577
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
578
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
579
- html.append("<div><strong style='font-size:14px'>Egress Filtering</strong><div style='font-size:12px;color:var(--text-muted)'>Control outbound network connections</div></div>");
580
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='eg_enabled' value='1'").append(checkedAttr(egress, "enabled")).append("> Enabled</label>");
581
- html.append("</div>");
582
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
583
- html.append("<div class='form-group'><label>Mode</label>");
584
- html.append("<select name='eg_mode'><option value='blocklist'").append("blocklist".equals(egressMode) ? " selected" : "").append(">Blocklist</option>");
585
- html.append("<option value='allowlist'").append("allowlist".equals(egressMode) ? " selected" : "").append(">Allowlist</option></select></div>");
586
- html.append("<div></div>");
587
- html.append("<div class='form-group'><label>Allowed Hosts (comma-separated)</label>");
588
- html.append("<input type='text' name='eg_allowedHosts' value='").append(Helpers.esc(joinList(egress, "allowedHosts"))).append("' placeholder='api.example.com'></div>");
589
- html.append("<div class='form-group'><label>Blocked Hosts (comma-separated)</label>");
590
- html.append("<input type='text' name='eg_blockedHosts' value='").append(Helpers.esc(joinList(egress, "blockedHosts"))).append("' placeholder='evil.com'></div>");
591
- html.append("<div class='form-group'><label>Allowed Ports (comma-separated)</label>");
592
- html.append("<input type='text' name='eg_allowedPorts' value='").append(Helpers.esc(joinList(egress, "allowedPorts"))).append("' placeholder='443, 80'></div>");
593
- html.append("<div class='form-group'><label>Blocked Ports (comma-separated)</label>");
594
- html.append("<input type='text' name='eg_blockedPorts' value='").append(Helpers.esc(joinList(egress, "blockedPorts"))).append("' placeholder='25, 445'></div>");
595
- html.append("</div></div>");
596
- html.append("</div>");
597
-
598
- // Proxy Configuration card
599
- html.append("<div class='card'>");
600
- html.append("<div style='display:flex;align-items:center;gap:0'>");
601
- html.append("<h3>Proxy Configuration</h3>");
602
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('proxy')\" title='Learn more'>?</button>");
603
- html.append("</div>");
604
- html.append("<div id='help-proxy' class='settings-help-panel'>");
605
- html.append("<ul>");
606
- html.append("<li><strong>Proxy Config</strong> &mdash; HTTP/HTTPS proxy URLs for outbound access. &ldquo;No-Proxy&rdquo; bypasses the proxy.</li>");
607
- html.append("<li><strong>Trusted Proxies</strong> &mdash; IPs of your load balancers/reverse proxies, so IP access control sees real client IPs.</li>");
608
- html.append("</ul>");
609
- html.append("</div>");
610
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
611
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
612
- html.append("<div class='form-group'><label>HTTP Proxy</label>");
613
- html.append("<input type='text' name='proxy_http' value='").append(Helpers.esc(Helpers.strVal(proxy, "httpProxy"))).append("' placeholder='http://proxy:8080'></div>");
614
- html.append("<div class='form-group'><label>HTTPS Proxy</label>");
615
- html.append("<input type='text' name='proxy_https' value='").append(Helpers.esc(Helpers.strVal(proxy, "httpsProxy"))).append("' placeholder='http://proxy:8443'></div>");
616
- html.append("<div class='form-group' style='grid-column:1/-1'><label>No-Proxy Hosts (comma-separated)</label>");
617
- html.append("<input type='text' name='proxy_noProxy' value='").append(Helpers.esc(joinList(proxy, "noProxy"))).append("' placeholder='localhost, 127.0.0.1'></div>");
618
- html.append("</div></div>");
619
- html.append("</div>");
620
-
621
- // Trusted Proxies card
622
- html.append("<div class='card'>");
623
- html.append("<div style='display:flex;align-items:center;gap:0'>");
624
- html.append("<h3>Trusted Proxies</h3>");
625
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('trusted-proxies')\" title='Learn more'>?</button>");
626
- html.append("</div>");
627
- html.append("<div id='help-trusted-proxies' class='settings-help-panel'>");
628
- html.append("<p>IPs of your load balancers/reverse proxies, so IP access control sees real client IPs instead of proxy IPs.</p>");
629
- html.append("</div>");
630
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
631
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
632
- html.append("<div><strong style='font-size:14px'>Trusted Proxies</strong><div style='font-size:12px;color:var(--text-muted)'>Configure trusted reverse proxy IPs/CIDRs</div></div>");
633
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='tp_enabled' value='1'").append(checkedAttr(trustedProxies, "enabled")).append("> Enabled</label>");
634
- html.append("</div>");
635
- html.append("<div class='form-group'><label>IPs/CIDRs (comma-separated)</label>");
636
- html.append("<input type='text' name='tp_ips' value='").append(Helpers.esc(joinList(trustedProxies, "ips"))).append("' placeholder='10.0.0.0/8, 172.16.0.0/12'></div>");
637
- html.append("</div>");
638
- html.append("</div>");
639
-
640
- // Network Settings card
641
- html.append("<div class='card'>");
642
- html.append("<div style='display:flex;align-items:center;gap:0'>");
643
- html.append("<h3>Network Settings</h3>");
644
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('network')\" title='Learn more'>?</button>");
645
- html.append("</div>");
646
- html.append("<div id='help-network' class='settings-help-panel'>");
647
- html.append("<ul>");
648
- html.append("<li><strong>CORS Origins</strong> &mdash; Which websites can make API calls to AgenticMail. Empty = allow all.</li>");
649
- html.append("<li><strong>Rate Limiting</strong> &mdash; Limits API requests per IP per minute. Protects against abuse.</li>");
650
- html.append("<li><strong>HTTPS Enforcement</strong> &mdash; Forces encrypted connections. Recommended for production.</li>");
651
- html.append("<li><strong>Security Headers</strong> &mdash; Browser security: HSTS, X-Frame-Options, Content-Type-Options.</li>");
652
- html.append("</ul>");
653
- html.append("</div>");
654
- html.append("<div style='display:grid;gap:20px'>");
655
-
656
- // CORS
657
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
658
- html.append("<strong style='font-size:14px'>CORS</strong><div style='font-size:12px;color:var(--text-muted);margin-bottom:12px'>Allowed origins for cross-origin requests</div>");
659
- html.append("<div class='form-group'><label>CORS Origins (comma-separated)</label>");
660
- html.append("<input type='text' name='net_corsOrigins' value='").append(Helpers.esc(joinList(network, "corsOrigins"))).append("' placeholder='https://app.example.com'></div>");
661
- html.append("</div>");
662
-
663
- // Rate Limiting
664
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
665
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
666
- html.append("<div><strong style='font-size:14px'>Rate Limiting</strong><div style='font-size:12px;color:var(--text-muted)'>Throttle incoming requests</div></div>");
667
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_rl_enabled' value='1'").append(checkedAttr(netRateLimit, "enabled")).append("> Enabled</label>");
668
- html.append("</div>");
669
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
670
- html.append("<div class='form-group'><label>Requests Per Minute</label>");
671
- html.append("<input type='number' name='net_rl_rpm' value='").append(rpm).append("' placeholder='120'></div>");
672
- html.append("<div class='form-group'><label>Skip Paths (comma-separated)</label>");
673
- html.append("<input type='text' name='net_rl_skipPaths' value='").append(Helpers.esc(joinList(netRateLimit, "skipPaths"))).append("' placeholder='/health, /ready'></div>");
674
- html.append("</div></div>");
675
-
676
- // HTTPS Enforcement
677
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
678
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
679
- html.append("<div><strong style='font-size:14px'>HTTPS Enforcement</strong><div style='font-size:12px;color:var(--text-muted)'>Redirect HTTP to HTTPS</div></div>");
680
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_https_enabled' value='1'").append(checkedAttr(httpsEnforcement, "enabled")).append("> Enabled</label>");
681
- html.append("</div>");
682
- html.append("<div class='form-group'><label>Exclude Paths (comma-separated)</label>");
683
- html.append("<input type='text' name='net_https_excludePaths' value='").append(Helpers.esc(joinList(httpsEnforcement, "excludePaths"))).append("' placeholder='/health, /ready'></div>");
684
- html.append("</div>");
685
-
686
- // Security Headers
687
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
688
- html.append("<strong style='font-size:14px'>Security Headers</strong><div style='font-size:12px;color:var(--text-muted);margin-bottom:12px'>HTTP security response headers</div>");
689
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
690
- html.append("<div class='form-group'><label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_hsts' value='1'").append(checkedAttr(secHeaders, "hsts")).append("> HSTS</label></div>");
691
- html.append("<div class='form-group'><label>HSTS Max-Age (seconds)</label>");
692
- html.append("<input type='number' name='net_hstsMaxAge' value='").append(hstsMaxAge).append("'></div>");
693
- html.append("<div class='form-group'><label>X-Frame-Options</label>");
694
- html.append("<select name='net_xFrameOptions'><option value='DENY'").append("DENY".equals(xFrameOptions) ? " selected" : "").append(">DENY</option>");
695
- html.append("<option value='SAMEORIGIN'").append("SAMEORIGIN".equals(xFrameOptions) ? " selected" : "").append(">SAMEORIGIN</option></select></div>");
696
- html.append("<div class='form-group'><label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_xContentTypeOptions' value='1'").append(checkedAttr(secHeaders, "xContentTypeOptions")).append("> X-Content-Type-Options: nosniff</label></div>");
697
- html.append("<div class='form-group'><label>Referrer Policy</label>");
698
- html.append("<input type='text' name='net_referrerPolicy' value='").append(Helpers.esc(referrerPolicy)).append("'></div>");
699
- html.append("<div class='form-group'><label>Permissions Policy</label>");
700
- html.append("<input type='text' name='net_permissionsPolicy' value='").append(Helpers.esc(permissionsPolicy)).append("'></div>");
701
- html.append("</div></div>");
702
-
703
- html.append("</div>");
704
- html.append("</div>");
705
-
706
- html.append("<button class='btn btn-primary' type='submit'>Save Network &amp; Firewall</button>");
707
- html.append("</form>");
708
- html.append("</div>");
709
- }
710
-
711
- @SuppressWarnings("unchecked")
712
- private void renderModelPricingPanel(StringBuilder html, String token) {
713
- var mpData = ApiClient.get("/api/settings/model-pricing", token);
714
- if (mpData == null) mpData = new HashMap<>();
715
-
716
- // Unwrap modelPricingConfig if present
717
- Map<String, Object> cfg = mpData;
718
- Map<String, Object> mpc = Helpers.mapVal(mpData, "modelPricingConfig");
719
- if (!mpc.isEmpty()) cfg = mpc;
720
-
721
- String currency = Helpers.strVal(cfg, "currency");
722
- if (currency.isEmpty()) currency = "USD";
723
-
724
- List<?> models = new ArrayList<>();
725
- Object modelsObj = cfg.get("models");
726
- if (modelsObj instanceof List) {
727
- models = (List<?>) modelsObj;
728
- }
729
-
730
- // Provider display name mapping
731
- Map<String, String> providerLabelsMap = new LinkedHashMap<>();
732
- providerLabelsMap.put("anthropic", "Anthropic");
733
- providerLabelsMap.put("openai", "OpenAI");
734
- providerLabelsMap.put("google", "Google");
735
- providerLabelsMap.put("deepseek", "DeepSeek");
736
- providerLabelsMap.put("xai", "xAI (Grok)");
737
- providerLabelsMap.put("mistral", "Mistral");
738
- providerLabelsMap.put("groq", "Groq");
739
- providerLabelsMap.put("together", "Together");
740
- providerLabelsMap.put("fireworks", "Fireworks");
741
- providerLabelsMap.put("moonshot", "Moonshot (Kimi)");
742
- providerLabelsMap.put("cerebras", "Cerebras");
743
- providerLabelsMap.put("openrouter", "OpenRouter");
744
- providerLabelsMap.put("ollama", "Ollama (Local)");
745
- providerLabelsMap.put("vllm", "vLLM (Local)");
746
- providerLabelsMap.put("lmstudio", "LM Studio (Local)");
747
- providerLabelsMap.put("litellm", "LiteLLM (Local)");
748
-
749
- // Group models by provider
750
- List<String> providerOrder = new ArrayList<>();
751
- Map<String, List<Map<String, Object>>> providerModels = new LinkedHashMap<>();
752
- for (Object item : models) {
753
- if (!(item instanceof Map)) continue;
754
- Map<String, Object> m = (Map<String, Object>) item;
755
- String provider = Helpers.strVal(m, "provider");
756
- if (!providerModels.containsKey(provider)) {
757
- providerOrder.add(provider);
758
- providerModels.put(provider, new ArrayList<>());
759
- }
760
- providerModels.get(provider).add(m);
761
- }
762
-
763
- html.append("<div id='settings-panel-model-pricing' style='display:none'>");
764
- html.append("<form method='POST' action='/settings'>");
765
- html.append("<input type='hidden' name='_form' value='model-pricing'>");
766
-
767
- html.append("<div class='card'>");
768
- html.append("<div style='display:flex;align-items:center;gap:0'>");
769
- html.append("<h3>Model Pricing</h3>");
770
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('model-pricing')\" title='Learn more'>?</button>");
771
- html.append("</div>");
772
- html.append("<div id='help-model-pricing' class='settings-help-panel'>");
773
- html.append("<p>Configure per-model pricing for cost estimation and budget tracking. Costs are per million tokens.</p>");
774
- html.append("<h4>How It Works</h4>");
775
- html.append("<ul>");
776
- html.append("<li><strong>Input Cost</strong> &mdash; Cost per million input (prompt) tokens sent to the model.</li>");
777
- html.append("<li><strong>Output Cost</strong> &mdash; Cost per million output (completion) tokens generated by the model.</li>");
778
- html.append("<li><strong>Context Window</strong> &mdash; Maximum number of tokens the model supports in a single request.</li>");
779
- html.append("</ul>");
780
- html.append("</div>");
781
- html.append("<div style='font-size:13px;color:var(--text-muted);margin-bottom:12px'>Currency: ").append(Helpers.esc(currency)).append("</div>");
782
-
783
- if (models.isEmpty()) {
784
- html.append("<p style='color:var(--text-muted);font-size:13px'>No models configured yet. Add one below.</p>");
785
- } else {
786
- for (String provider : providerOrder) {
787
- List<Map<String, Object>> pModels = providerModels.get(provider);
788
- String providerLabel = providerLabelsMap.getOrDefault(provider, provider.isEmpty() ? "Unknown" : provider);
789
- html.append("<div style='margin-bottom:16px'><strong style='font-size:14px'>").append(Helpers.esc(providerLabel)).append("</strong>");
790
- html.append("<div class='table-wrap' style='margin-top:8px'><table><thead><tr><th>Model ID</th><th>Display Name</th><th>Input Cost/M</th><th>Output Cost/M</th><th>Context Window</th><th></th></tr></thead><tbody>");
791
- for (int i = 0; i < pModels.size(); i++) {
792
- Map<String, Object> m = pModels.get(i);
793
- String prefix = "model_" + provider + "_" + i + "_";
794
- String modelId = Helpers.strVal(m, "modelId");
795
- String displayName = Helpers.strVal(m, "displayName");
796
- String inputCost = numStr(m, "inputCostPerMillion");
797
- String outputCost = numStr(m, "outputCostPerMillion");
798
- String contextWindow = numStr(m, "contextWindow");
799
-
800
- html.append("<tr>");
801
- html.append("<td><input type='text' name='").append(prefix).append("modelId' value='").append(Helpers.esc(modelId)).append("' style='min-width:140px'></td>");
802
- html.append("<td><input type='text' name='").append(prefix).append("displayName' value='").append(Helpers.esc(displayName)).append("' style='min-width:120px'></td>");
803
- html.append("<td><input type='number' step='0.01' name='").append(prefix).append("inputCost' value='").append(Helpers.esc(inputCost)).append("' style='width:100px'></td>");
804
- html.append("<td><input type='number' step='0.01' name='").append(prefix).append("outputCost' value='").append(Helpers.esc(outputCost)).append("' style='width:100px'></td>");
805
- html.append("<td><input type='number' name='").append(prefix).append("contextWindow' value='").append(Helpers.esc(contextWindow)).append("' style='width:110px'></td>");
806
- html.append("<td><input type='hidden' name='").append(prefix).append("provider' value='").append(Helpers.esc(provider)).append("'>");
807
- html.append("<button type='button' class='btn' style='padding:4px 10px;font-size:12px;color:var(--danger,#e53e3e)' onclick='this.closest(\"tr\").remove()'>Remove</button></td>");
808
- html.append("</tr>");
809
- }
810
- html.append("</tbody></table></div></div>");
811
- }
812
- }
813
-
814
- html.append("</div>");
815
-
816
- html.append("<div class='card'>");
817
- html.append("<h3>Add Model</h3>");
818
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px'>");
819
- html.append("<div class='form-group'><label>Provider</label><select name='new_provider'><option value='anthropic'>Anthropic</option><option value='openai'>OpenAI</option><option value='google'>Google</option><option value='deepseek'>DeepSeek</option><option value='xai'>xAI (Grok)</option><option value='mistral'>Mistral</option><option value='groq'>Groq</option><option value='together'>Together</option><option value='fireworks'>Fireworks</option><option value='moonshot'>Moonshot (Kimi)</option><option value='cerebras'>Cerebras</option><option value='openrouter'>OpenRouter</option><option value='ollama'>Ollama (Local)</option><option value='vllm'>vLLM (Local)</option><option value='lmstudio'>LM Studio (Local)</option><option value='litellm'>LiteLLM (Local)</option></select></div>");
820
- html.append("<div class='form-group'><label>Model ID</label><input type='text' name='new_modelId' placeholder='gpt-4o'></div>");
821
- html.append("<div class='form-group'><label>Display Name</label><input type='text' name='new_displayName' placeholder='GPT-4o'></div>");
822
- html.append("<div class='form-group'><label>Input Cost / Million Tokens</label><input type='number' step='0.01' name='new_inputCost' placeholder='2.50'></div>");
823
- html.append("<div class='form-group'><label>Output Cost / Million Tokens</label><input type='number' step='0.01' name='new_outputCost' placeholder='10.00'></div>");
824
- html.append("<div class='form-group'><label>Context Window</label><input type='number' name='new_contextWindow' placeholder='128000'></div>");
825
- html.append("</div></div>");
826
-
827
- html.append("<button class='btn btn-primary' type='submit'>Save Model Pricing</button>");
828
- html.append("</form>");
829
- html.append("</div>");
830
- }
831
-
832
- private String numStr(Map<String, Object> m, String key) {
833
- Object v = m.get(key);
834
- if (v == null) return "0";
835
- return v.toString();
836
- }
837
-
838
- private void handleModelPricingUpdate(HttpExchange ex, String token, Map<String, String> form) throws IOException {
839
- // Collect existing models from form fields (model_{provider}_{index}_*)
840
- Map<String, Boolean> seenPrefixes = new LinkedHashMap<>();
841
- for (String key : form.keySet()) {
842
- if (key.startsWith("model_") && key.endsWith("provider")) {
843
- String prefix = key.substring(0, key.length() - "provider".length());
844
- seenPrefixes.put(prefix, true);
845
- }
846
- }
847
-
848
- List<Object> models = new ArrayList<>();
849
- for (String prefix : seenPrefixes.keySet()) {
850
- String modelId = form.getOrDefault(prefix + "modelId", "");
851
- if (modelId.isEmpty()) continue;
852
-
853
- double inputCost = 0;
854
- try { inputCost = Double.parseDouble(form.getOrDefault(prefix + "inputCost", "0")); } catch (NumberFormatException e) { }
855
- double outputCost = 0;
856
- try { outputCost = Double.parseDouble(form.getOrDefault(prefix + "outputCost", "0")); } catch (NumberFormatException e) { }
857
- int contextWindow = 0;
858
- try { contextWindow = Integer.parseInt(form.getOrDefault(prefix + "contextWindow", "0")); } catch (NumberFormatException e) { }
859
-
860
- Map<String, Object> model = new LinkedHashMap<>();
861
- model.put("provider", form.getOrDefault(prefix + "provider", ""));
862
- model.put("modelId", modelId);
863
- model.put("displayName", form.getOrDefault(prefix + "displayName", ""));
864
- model.put("inputCostPerMillion", inputCost);
865
- model.put("outputCostPerMillion", outputCost);
866
- model.put("contextWindow", contextWindow);
867
- models.add(model);
868
- }
869
-
870
- // Add new model if provided
871
- String newModelId = form.getOrDefault("new_modelId", "");
872
- if (!newModelId.isEmpty()) {
873
- double newInputCost = 0;
874
- try { newInputCost = Double.parseDouble(form.getOrDefault("new_inputCost", "0")); } catch (NumberFormatException e) { }
875
- double newOutputCost = 0;
876
- try { newOutputCost = Double.parseDouble(form.getOrDefault("new_outputCost", "0")); } catch (NumberFormatException e) { }
877
- int newContextWindow = 0;
878
- try { newContextWindow = Integer.parseInt(form.getOrDefault("new_contextWindow", "0")); } catch (NumberFormatException e) { }
879
-
880
- Map<String, Object> newModel = new LinkedHashMap<>();
881
- newModel.put("provider", form.getOrDefault("new_provider", ""));
882
- newModel.put("modelId", newModelId);
883
- newModel.put("displayName", form.getOrDefault("new_displayName", ""));
884
- newModel.put("inputCostPerMillion", newInputCost);
885
- newModel.put("outputCostPerMillion", newOutputCost);
886
- newModel.put("contextWindow", newContextWindow);
887
- models.add(newModel);
888
- }
889
-
890
- Map<String, Object> payload = new LinkedHashMap<>();
891
- payload.put("models", models);
892
- payload.put("currency", "USD");
893
-
894
- var result = ApiClient.put("/api/settings/model-pricing", token, buildNestedJson(payload));
895
- int status = Helpers.intVal(result, "_status");
896
-
897
- if (status > 0 && status < 300) {
898
- SessionManager.setFlash(ex, "Model pricing settings updated", "success");
899
- } else {
900
- String err = Helpers.strVal(result, "error");
901
- if (err.isEmpty()) err = "Failed to update model pricing settings";
902
- SessionManager.setFlash(ex, err, "danger");
903
- }
904
-
905
- SessionManager.redirect(ex, "/settings");
906
- }
907
-
908
- private void handleFirewallUpdate(HttpExchange ex, String token, Map<String, String> form) throws IOException {
909
- Map<String, Object> payload = new LinkedHashMap<>();
910
-
911
- Map<String, Object> ipAccess = new LinkedHashMap<>();
912
- ipAccess.put("enabled", "1".equals(form.get("ip_enabled")));
913
- ipAccess.put("mode", form.getOrDefault("ip_mode", "allowlist"));
914
- ipAccess.put("allowlist", splitTrim(form.getOrDefault("ip_allowlist", "")));
915
- ipAccess.put("blocklist", splitTrim(form.getOrDefault("ip_blocklist", "")));
916
- ipAccess.put("bypassPaths", splitTrim(form.getOrDefault("ip_bypassPaths", "")));
917
- payload.put("ipAccess", ipAccess);
918
-
919
- Map<String, Object> egress = new LinkedHashMap<>();
920
- egress.put("enabled", "1".equals(form.get("eg_enabled")));
921
- egress.put("mode", form.getOrDefault("eg_mode", "blocklist"));
922
- egress.put("allowedHosts", splitTrim(form.getOrDefault("eg_allowedHosts", "")));
923
- egress.put("blockedHosts", splitTrim(form.getOrDefault("eg_blockedHosts", "")));
924
- egress.put("allowedPorts", splitTrimInt(form.getOrDefault("eg_allowedPorts", "")));
925
- egress.put("blockedPorts", splitTrimInt(form.getOrDefault("eg_blockedPorts", "")));
926
- payload.put("egress", egress);
927
-
928
- Map<String, Object> proxy = new LinkedHashMap<>();
929
- proxy.put("httpProxy", form.getOrDefault("proxy_http", ""));
930
- proxy.put("httpsProxy", form.getOrDefault("proxy_https", ""));
931
- proxy.put("noProxy", splitTrim(form.getOrDefault("proxy_noProxy", "")));
932
- payload.put("proxy", proxy);
933
-
934
- Map<String, Object> trustedProxies = new LinkedHashMap<>();
935
- trustedProxies.put("enabled", "1".equals(form.get("tp_enabled")));
936
- trustedProxies.put("ips", splitTrim(form.getOrDefault("tp_ips", "")));
937
- payload.put("trustedProxies", trustedProxies);
938
-
939
- int rpm = 120;
940
- try { rpm = Integer.parseInt(form.getOrDefault("net_rl_rpm", "120")); } catch (NumberFormatException e) { }
941
- int hstsMaxAge = 31536000;
942
- try { hstsMaxAge = Integer.parseInt(form.getOrDefault("net_hstsMaxAge", "31536000")); } catch (NumberFormatException e) { }
943
-
944
- Map<String, Object> network = new LinkedHashMap<>();
945
- network.put("corsOrigins", splitTrim(form.getOrDefault("net_corsOrigins", "")));
946
-
947
- Map<String, Object> rateLimit = new LinkedHashMap<>();
948
- rateLimit.put("enabled", "1".equals(form.get("net_rl_enabled")));
949
- rateLimit.put("requestsPerMinute", rpm);
950
- rateLimit.put("skipPaths", splitTrim(form.getOrDefault("net_rl_skipPaths", "")));
951
- network.put("rateLimit", rateLimit);
952
-
953
- Map<String, Object> httpsEnforcement = new LinkedHashMap<>();
954
- httpsEnforcement.put("enabled", "1".equals(form.get("net_https_enabled")));
955
- httpsEnforcement.put("excludePaths", splitTrim(form.getOrDefault("net_https_excludePaths", "")));
956
- network.put("httpsEnforcement", httpsEnforcement);
957
-
958
- Map<String, Object> securityHeaders = new LinkedHashMap<>();
959
- securityHeaders.put("hsts", "1".equals(form.get("net_hsts")));
960
- securityHeaders.put("hstsMaxAge", hstsMaxAge);
961
- securityHeaders.put("xFrameOptions", form.getOrDefault("net_xFrameOptions", "DENY"));
962
- securityHeaders.put("xContentTypeOptions", "1".equals(form.get("net_xContentTypeOptions")));
963
- securityHeaders.put("referrerPolicy", form.getOrDefault("net_referrerPolicy", "strict-origin-when-cross-origin"));
964
- securityHeaders.put("permissionsPolicy", form.getOrDefault("net_permissionsPolicy", "camera=(), microphone=(), geolocation=()"));
965
- network.put("securityHeaders", securityHeaders);
966
-
967
- payload.put("network", network);
968
-
969
- var result = ApiClient.put("/api/settings/firewall", token, buildNestedJson(payload));
970
- int status = Helpers.intVal(result, "_status");
971
-
972
- if (status > 0 && status < 300) {
973
- SessionManager.setFlash(ex, "Network & firewall settings updated", "success");
974
- } else {
975
- String err = Helpers.strVal(result, "error");
976
- if (err.isEmpty()) err = "Failed to update network & firewall settings";
977
- SessionManager.setFlash(ex, err, "danger");
978
- }
979
-
980
- SessionManager.redirect(ex, "/settings");
981
- }
982
-
983
- private List<Integer> splitTrimInt(String val) {
984
- List<Integer> result = new ArrayList<>();
985
- if (val == null || val.isEmpty()) return result;
986
- for (String part : val.split(",")) {
987
- String trimmed = part.trim();
988
- if (!trimmed.isEmpty()) {
989
- try { result.add(Integer.parseInt(trimmed)); }
990
- catch (NumberFormatException e) { /* skip */ }
991
- }
992
- }
993
- return result;
994
- }
995
-
996
- private String checkedAttr(Map<String, Object> m, String key) {
997
- Object v = m.get(key);
998
- if (Boolean.TRUE.equals(v)) return " checked";
999
- return "";
1000
- }
1001
-
1002
- @SuppressWarnings("unchecked")
1003
- private String joinList(Map<String, Object> m, String key) {
1004
- Object v = m.get(key);
1005
- if (v instanceof List) {
1006
- StringBuilder sb = new StringBuilder();
1007
- boolean first = true;
1008
- for (Object item : (List<?>) v) {
1009
- if (!first) sb.append(", ");
1010
- first = false;
1011
- sb.append(item != null ? item.toString() : "");
1012
- }
1013
- return sb.toString();
1014
- }
1015
- return "";
1016
- }
1017
- }