@agenticmail/enterprise 0.5.198 → 0.5.199

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 (1088) hide show
  1. package/package.json +1 -1
  2. package/dashboards/README.md +0 -131
  3. package/dashboards/django/app.py +0 -129
  4. package/dashboards/django/static/styles.css +0 -487
  5. package/dashboards/django/templates/activity.html +0 -130
  6. package/dashboards/django/templates/agent_detail.html +0 -501
  7. package/dashboards/django/templates/agents.html +0 -217
  8. package/dashboards/django/templates/api_keys.html +0 -41
  9. package/dashboards/django/templates/approvals.html +0 -115
  10. package/dashboards/django/templates/audit.html +0 -26
  11. package/dashboards/django/templates/community-skills.html +0 -89
  12. package/dashboards/django/templates/compliance.html +0 -33
  13. package/dashboards/django/templates/components/modal.html +0 -6
  14. package/dashboards/django/templates/components/pagination.html +0 -9
  15. package/dashboards/django/templates/components/stats.html +0 -8
  16. package/dashboards/django/templates/dashboard.html +0 -24
  17. package/dashboards/django/templates/dlp.html +0 -70
  18. package/dashboards/django/templates/domain-status.html +0 -59
  19. package/dashboards/django/templates/guardrails.html +0 -78
  20. package/dashboards/django/templates/journal.html +0 -39
  21. package/dashboards/django/templates/knowledge-contributions.html +0 -58
  22. package/dashboards/django/templates/knowledge.html +0 -104
  23. package/dashboards/django/templates/layout.html +0 -177
  24. package/dashboards/django/templates/login.html +0 -30
  25. package/dashboards/django/templates/messages.html +0 -38
  26. package/dashboards/django/templates/settings.html +0 -472
  27. package/dashboards/django/templates/skill-connections.html +0 -73
  28. package/dashboards/django/templates/skills.html +0 -66
  29. package/dashboards/django/templates/users.html +0 -34
  30. package/dashboards/django/templates/vault.html +0 -46
  31. package/dashboards/django/templates/workforce.html +0 -116
  32. package/dashboards/django/utils/__init__.py +0 -0
  33. package/dashboards/django/utils/api.py +0 -20
  34. package/dashboards/django/utils/helpers.py +0 -39
  35. package/dashboards/django/views/__init__.py +0 -52
  36. package/dashboards/django/views/agents.py +0 -343
  37. package/dashboards/django/views/api_keys.py +0 -47
  38. package/dashboards/django/views/audit.py +0 -35
  39. package/dashboards/django/views/auth.py +0 -34
  40. package/dashboards/django/views/compliance.py +0 -37
  41. package/dashboards/django/views/dashboard.py +0 -27
  42. package/dashboards/django/views/dlp.py +0 -53
  43. package/dashboards/django/views/guardrails.py +0 -61
  44. package/dashboards/django/views/journal.py +0 -41
  45. package/dashboards/django/views/messages.py +0 -65
  46. package/dashboards/django/views/new_pages.py +0 -38
  47. package/dashboards/django/views/settings_view.py +0 -335
  48. package/dashboards/django/views/skills.py +0 -50
  49. package/dashboards/django/views/users.py +0 -42
  50. package/dashboards/django/views/vault.py +0 -50
  51. package/dashboards/dotnet/AgenticMailDashboard.csproj +0 -10
  52. package/dashboards/dotnet/Program.cs +0 -89
  53. package/dashboards/dotnet/Routes/ActivityRoutes.cs +0 -35
  54. package/dashboards/dotnet/Routes/AgentRoutes.cs +0 -771
  55. package/dashboards/dotnet/Routes/ApiKeyRoutes.cs +0 -185
  56. package/dashboards/dotnet/Routes/ApprovalRoutes.cs +0 -36
  57. package/dashboards/dotnet/Routes/AuditRoutes.cs +0 -86
  58. package/dashboards/dotnet/Routes/AuthRoutes.cs +0 -50
  59. package/dashboards/dotnet/Routes/CommunitySkillRoutes.cs +0 -36
  60. package/dashboards/dotnet/Routes/ComplianceRoutes.cs +0 -143
  61. package/dashboards/dotnet/Routes/DashboardRoutes.cs +0 -81
  62. package/dashboards/dotnet/Routes/DlpRoutes.cs +0 -230
  63. package/dashboards/dotnet/Routes/DomainStatusRoutes.cs +0 -49
  64. package/dashboards/dotnet/Routes/GuardrailRoutes.cs +0 -285
  65. package/dashboards/dotnet/Routes/JournalRoutes.cs +0 -118
  66. package/dashboards/dotnet/Routes/KnowledgeContributionRoutes.cs +0 -42
  67. package/dashboards/dotnet/Routes/KnowledgeRoutes.cs +0 -40
  68. package/dashboards/dotnet/Routes/MessageRoutes.cs +0 -167
  69. package/dashboards/dotnet/Routes/SettingRoutes.cs +0 -907
  70. package/dashboards/dotnet/Routes/SkillConnectionRoutes.cs +0 -52
  71. package/dashboards/dotnet/Routes/SkillRoutes.cs +0 -198
  72. package/dashboards/dotnet/Routes/UserRoutes.cs +0 -111
  73. package/dashboards/dotnet/Routes/VaultRoutes.cs +0 -162
  74. package/dashboards/dotnet/Routes/WorkforceRoutes.cs +0 -55
  75. package/dashboards/dotnet/Services/ApiClient.cs +0 -103
  76. package/dashboards/dotnet/Services/HtmlBuilder.cs +0 -258
  77. package/dashboards/dotnet/wwwroot/styles.css +0 -546
  78. package/dashboards/express/app.js +0 -65
  79. package/dashboards/express/middleware/auth.js +0 -10
  80. package/dashboards/express/node_modules/.package-lock.json +0 -913
  81. package/dashboards/express/node_modules/accepts/HISTORY.md +0 -250
  82. package/dashboards/express/node_modules/accepts/LICENSE +0 -23
  83. package/dashboards/express/node_modules/accepts/README.md +0 -140
  84. package/dashboards/express/node_modules/accepts/index.js +0 -238
  85. package/dashboards/express/node_modules/accepts/package.json +0 -47
  86. package/dashboards/express/node_modules/body-parser/LICENSE +0 -23
  87. package/dashboards/express/node_modules/body-parser/README.md +0 -494
  88. package/dashboards/express/node_modules/body-parser/index.js +0 -71
  89. package/dashboards/express/node_modules/body-parser/lib/read.js +0 -247
  90. package/dashboards/express/node_modules/body-parser/lib/types/json.js +0 -158
  91. package/dashboards/express/node_modules/body-parser/lib/types/raw.js +0 -42
  92. package/dashboards/express/node_modules/body-parser/lib/types/text.js +0 -36
  93. package/dashboards/express/node_modules/body-parser/lib/types/urlencoded.js +0 -142
  94. package/dashboards/express/node_modules/body-parser/lib/utils.js +0 -98
  95. package/dashboards/express/node_modules/body-parser/package.json +0 -52
  96. package/dashboards/express/node_modules/bytes/History.md +0 -97
  97. package/dashboards/express/node_modules/bytes/LICENSE +0 -23
  98. package/dashboards/express/node_modules/bytes/Readme.md +0 -152
  99. package/dashboards/express/node_modules/bytes/index.js +0 -170
  100. package/dashboards/express/node_modules/bytes/package.json +0 -42
  101. package/dashboards/express/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
  102. package/dashboards/express/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
  103. package/dashboards/express/node_modules/call-bind-apply-helpers/.nycrc +0 -9
  104. package/dashboards/express/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
  105. package/dashboards/express/node_modules/call-bind-apply-helpers/LICENSE +0 -21
  106. package/dashboards/express/node_modules/call-bind-apply-helpers/README.md +0 -62
  107. package/dashboards/express/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
  108. package/dashboards/express/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
  109. package/dashboards/express/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
  110. package/dashboards/express/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
  111. package/dashboards/express/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
  112. package/dashboards/express/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
  113. package/dashboards/express/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
  114. package/dashboards/express/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
  115. package/dashboards/express/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
  116. package/dashboards/express/node_modules/call-bind-apply-helpers/index.js +0 -15
  117. package/dashboards/express/node_modules/call-bind-apply-helpers/package.json +0 -85
  118. package/dashboards/express/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
  119. package/dashboards/express/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
  120. package/dashboards/express/node_modules/call-bind-apply-helpers/test/index.js +0 -63
  121. package/dashboards/express/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
  122. package/dashboards/express/node_modules/call-bound/.eslintrc +0 -13
  123. package/dashboards/express/node_modules/call-bound/.github/FUNDING.yml +0 -12
  124. package/dashboards/express/node_modules/call-bound/.nycrc +0 -9
  125. package/dashboards/express/node_modules/call-bound/CHANGELOG.md +0 -42
  126. package/dashboards/express/node_modules/call-bound/LICENSE +0 -21
  127. package/dashboards/express/node_modules/call-bound/README.md +0 -53
  128. package/dashboards/express/node_modules/call-bound/index.d.ts +0 -94
  129. package/dashboards/express/node_modules/call-bound/index.js +0 -19
  130. package/dashboards/express/node_modules/call-bound/package.json +0 -99
  131. package/dashboards/express/node_modules/call-bound/test/index.js +0 -61
  132. package/dashboards/express/node_modules/call-bound/tsconfig.json +0 -10
  133. package/dashboards/express/node_modules/content-disposition/HISTORY.md +0 -72
  134. package/dashboards/express/node_modules/content-disposition/LICENSE +0 -22
  135. package/dashboards/express/node_modules/content-disposition/README.md +0 -142
  136. package/dashboards/express/node_modules/content-disposition/index.js +0 -458
  137. package/dashboards/express/node_modules/content-disposition/package.json +0 -43
  138. package/dashboards/express/node_modules/content-type/HISTORY.md +0 -29
  139. package/dashboards/express/node_modules/content-type/LICENSE +0 -22
  140. package/dashboards/express/node_modules/content-type/README.md +0 -94
  141. package/dashboards/express/node_modules/content-type/index.js +0 -225
  142. package/dashboards/express/node_modules/content-type/package.json +0 -42
  143. package/dashboards/express/node_modules/cookie/LICENSE +0 -24
  144. package/dashboards/express/node_modules/cookie/README.md +0 -317
  145. package/dashboards/express/node_modules/cookie/SECURITY.md +0 -25
  146. package/dashboards/express/node_modules/cookie/index.js +0 -335
  147. package/dashboards/express/node_modules/cookie/package.json +0 -44
  148. package/dashboards/express/node_modules/cookie-signature/History.md +0 -70
  149. package/dashboards/express/node_modules/cookie-signature/LICENSE +0 -22
  150. package/dashboards/express/node_modules/cookie-signature/Readme.md +0 -23
  151. package/dashboards/express/node_modules/cookie-signature/index.js +0 -47
  152. package/dashboards/express/node_modules/cookie-signature/package.json +0 -24
  153. package/dashboards/express/node_modules/debug/LICENSE +0 -20
  154. package/dashboards/express/node_modules/debug/README.md +0 -481
  155. package/dashboards/express/node_modules/debug/package.json +0 -64
  156. package/dashboards/express/node_modules/debug/src/browser.js +0 -272
  157. package/dashboards/express/node_modules/debug/src/common.js +0 -292
  158. package/dashboards/express/node_modules/debug/src/index.js +0 -10
  159. package/dashboards/express/node_modules/debug/src/node.js +0 -263
  160. package/dashboards/express/node_modules/depd/History.md +0 -103
  161. package/dashboards/express/node_modules/depd/LICENSE +0 -22
  162. package/dashboards/express/node_modules/depd/Readme.md +0 -280
  163. package/dashboards/express/node_modules/depd/index.js +0 -538
  164. package/dashboards/express/node_modules/depd/lib/browser/index.js +0 -77
  165. package/dashboards/express/node_modules/depd/package.json +0 -45
  166. package/dashboards/express/node_modules/dunder-proto/.eslintrc +0 -5
  167. package/dashboards/express/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
  168. package/dashboards/express/node_modules/dunder-proto/.nycrc +0 -13
  169. package/dashboards/express/node_modules/dunder-proto/CHANGELOG.md +0 -24
  170. package/dashboards/express/node_modules/dunder-proto/LICENSE +0 -21
  171. package/dashboards/express/node_modules/dunder-proto/README.md +0 -54
  172. package/dashboards/express/node_modules/dunder-proto/get.d.ts +0 -5
  173. package/dashboards/express/node_modules/dunder-proto/get.js +0 -30
  174. package/dashboards/express/node_modules/dunder-proto/package.json +0 -76
  175. package/dashboards/express/node_modules/dunder-proto/set.d.ts +0 -5
  176. package/dashboards/express/node_modules/dunder-proto/set.js +0 -35
  177. package/dashboards/express/node_modules/dunder-proto/test/get.js +0 -34
  178. package/dashboards/express/node_modules/dunder-proto/test/index.js +0 -4
  179. package/dashboards/express/node_modules/dunder-proto/test/set.js +0 -50
  180. package/dashboards/express/node_modules/dunder-proto/tsconfig.json +0 -9
  181. package/dashboards/express/node_modules/ee-first/LICENSE +0 -22
  182. package/dashboards/express/node_modules/ee-first/README.md +0 -80
  183. package/dashboards/express/node_modules/ee-first/index.js +0 -95
  184. package/dashboards/express/node_modules/ee-first/package.json +0 -29
  185. package/dashboards/express/node_modules/encodeurl/LICENSE +0 -22
  186. package/dashboards/express/node_modules/encodeurl/README.md +0 -109
  187. package/dashboards/express/node_modules/encodeurl/index.js +0 -60
  188. package/dashboards/express/node_modules/encodeurl/package.json +0 -40
  189. package/dashboards/express/node_modules/es-define-property/.eslintrc +0 -13
  190. package/dashboards/express/node_modules/es-define-property/.github/FUNDING.yml +0 -12
  191. package/dashboards/express/node_modules/es-define-property/.nycrc +0 -9
  192. package/dashboards/express/node_modules/es-define-property/CHANGELOG.md +0 -29
  193. package/dashboards/express/node_modules/es-define-property/LICENSE +0 -21
  194. package/dashboards/express/node_modules/es-define-property/README.md +0 -49
  195. package/dashboards/express/node_modules/es-define-property/index.d.ts +0 -3
  196. package/dashboards/express/node_modules/es-define-property/index.js +0 -14
  197. package/dashboards/express/node_modules/es-define-property/package.json +0 -81
  198. package/dashboards/express/node_modules/es-define-property/test/index.js +0 -56
  199. package/dashboards/express/node_modules/es-define-property/tsconfig.json +0 -10
  200. package/dashboards/express/node_modules/es-errors/.eslintrc +0 -5
  201. package/dashboards/express/node_modules/es-errors/.github/FUNDING.yml +0 -12
  202. package/dashboards/express/node_modules/es-errors/CHANGELOG.md +0 -40
  203. package/dashboards/express/node_modules/es-errors/LICENSE +0 -21
  204. package/dashboards/express/node_modules/es-errors/README.md +0 -55
  205. package/dashboards/express/node_modules/es-errors/eval.d.ts +0 -3
  206. package/dashboards/express/node_modules/es-errors/eval.js +0 -4
  207. package/dashboards/express/node_modules/es-errors/index.d.ts +0 -3
  208. package/dashboards/express/node_modules/es-errors/index.js +0 -4
  209. package/dashboards/express/node_modules/es-errors/package.json +0 -80
  210. package/dashboards/express/node_modules/es-errors/range.d.ts +0 -3
  211. package/dashboards/express/node_modules/es-errors/range.js +0 -4
  212. package/dashboards/express/node_modules/es-errors/ref.d.ts +0 -3
  213. package/dashboards/express/node_modules/es-errors/ref.js +0 -4
  214. package/dashboards/express/node_modules/es-errors/syntax.d.ts +0 -3
  215. package/dashboards/express/node_modules/es-errors/syntax.js +0 -4
  216. package/dashboards/express/node_modules/es-errors/test/index.js +0 -19
  217. package/dashboards/express/node_modules/es-errors/tsconfig.json +0 -49
  218. package/dashboards/express/node_modules/es-errors/type.d.ts +0 -3
  219. package/dashboards/express/node_modules/es-errors/type.js +0 -4
  220. package/dashboards/express/node_modules/es-errors/uri.d.ts +0 -3
  221. package/dashboards/express/node_modules/es-errors/uri.js +0 -4
  222. package/dashboards/express/node_modules/es-object-atoms/.eslintrc +0 -16
  223. package/dashboards/express/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
  224. package/dashboards/express/node_modules/es-object-atoms/CHANGELOG.md +0 -37
  225. package/dashboards/express/node_modules/es-object-atoms/LICENSE +0 -21
  226. package/dashboards/express/node_modules/es-object-atoms/README.md +0 -63
  227. package/dashboards/express/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
  228. package/dashboards/express/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
  229. package/dashboards/express/node_modules/es-object-atoms/ToObject.d.ts +0 -7
  230. package/dashboards/express/node_modules/es-object-atoms/ToObject.js +0 -10
  231. package/dashboards/express/node_modules/es-object-atoms/index.d.ts +0 -3
  232. package/dashboards/express/node_modules/es-object-atoms/index.js +0 -4
  233. package/dashboards/express/node_modules/es-object-atoms/isObject.d.ts +0 -3
  234. package/dashboards/express/node_modules/es-object-atoms/isObject.js +0 -6
  235. package/dashboards/express/node_modules/es-object-atoms/package.json +0 -80
  236. package/dashboards/express/node_modules/es-object-atoms/test/index.js +0 -38
  237. package/dashboards/express/node_modules/es-object-atoms/tsconfig.json +0 -6
  238. package/dashboards/express/node_modules/escape-html/LICENSE +0 -24
  239. package/dashboards/express/node_modules/escape-html/Readme.md +0 -43
  240. package/dashboards/express/node_modules/escape-html/index.js +0 -78
  241. package/dashboards/express/node_modules/escape-html/package.json +0 -24
  242. package/dashboards/express/node_modules/etag/HISTORY.md +0 -83
  243. package/dashboards/express/node_modules/etag/LICENSE +0 -22
  244. package/dashboards/express/node_modules/etag/README.md +0 -159
  245. package/dashboards/express/node_modules/etag/index.js +0 -131
  246. package/dashboards/express/node_modules/etag/package.json +0 -47
  247. package/dashboards/express/node_modules/express/LICENSE +0 -24
  248. package/dashboards/express/node_modules/express/Readme.md +0 -276
  249. package/dashboards/express/node_modules/express/index.js +0 -11
  250. package/dashboards/express/node_modules/express/lib/application.js +0 -631
  251. package/dashboards/express/node_modules/express/lib/express.js +0 -81
  252. package/dashboards/express/node_modules/express/lib/request.js +0 -514
  253. package/dashboards/express/node_modules/express/lib/response.js +0 -1053
  254. package/dashboards/express/node_modules/express/lib/utils.js +0 -271
  255. package/dashboards/express/node_modules/express/lib/view.js +0 -205
  256. package/dashboards/express/node_modules/express/package.json +0 -99
  257. package/dashboards/express/node_modules/express-session/LICENSE +0 -24
  258. package/dashboards/express/node_modules/express-session/README.md +0 -1061
  259. package/dashboards/express/node_modules/express-session/index.js +0 -700
  260. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/History.md +0 -42
  261. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/Readme.md +0 -42
  262. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/index.js +0 -51
  263. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/package.json +0 -18
  264. package/dashboards/express/node_modules/express-session/node_modules/debug/.coveralls.yml +0 -1
  265. package/dashboards/express/node_modules/express-session/node_modules/debug/.eslintrc +0 -11
  266. package/dashboards/express/node_modules/express-session/node_modules/debug/.travis.yml +0 -14
  267. package/dashboards/express/node_modules/express-session/node_modules/debug/CHANGELOG.md +0 -362
  268. package/dashboards/express/node_modules/express-session/node_modules/debug/LICENSE +0 -19
  269. package/dashboards/express/node_modules/express-session/node_modules/debug/Makefile +0 -50
  270. package/dashboards/express/node_modules/express-session/node_modules/debug/README.md +0 -312
  271. package/dashboards/express/node_modules/express-session/node_modules/debug/component.json +0 -19
  272. package/dashboards/express/node_modules/express-session/node_modules/debug/karma.conf.js +0 -70
  273. package/dashboards/express/node_modules/express-session/node_modules/debug/node.js +0 -1
  274. package/dashboards/express/node_modules/express-session/node_modules/debug/package.json +0 -49
  275. package/dashboards/express/node_modules/express-session/node_modules/debug/src/browser.js +0 -185
  276. package/dashboards/express/node_modules/express-session/node_modules/debug/src/debug.js +0 -202
  277. package/dashboards/express/node_modules/express-session/node_modules/debug/src/index.js +0 -10
  278. package/dashboards/express/node_modules/express-session/node_modules/debug/src/inspector-log.js +0 -15
  279. package/dashboards/express/node_modules/express-session/node_modules/debug/src/node.js +0 -248
  280. package/dashboards/express/node_modules/express-session/node_modules/ms/index.js +0 -152
  281. package/dashboards/express/node_modules/express-session/node_modules/ms/license.md +0 -21
  282. package/dashboards/express/node_modules/express-session/node_modules/ms/package.json +0 -37
  283. package/dashboards/express/node_modules/express-session/node_modules/ms/readme.md +0 -51
  284. package/dashboards/express/node_modules/express-session/package.json +0 -50
  285. package/dashboards/express/node_modules/express-session/session/cookie.js +0 -152
  286. package/dashboards/express/node_modules/express-session/session/memory.js +0 -187
  287. package/dashboards/express/node_modules/express-session/session/session.js +0 -143
  288. package/dashboards/express/node_modules/express-session/session/store.js +0 -102
  289. package/dashboards/express/node_modules/finalhandler/HISTORY.md +0 -239
  290. package/dashboards/express/node_modules/finalhandler/LICENSE +0 -22
  291. package/dashboards/express/node_modules/finalhandler/README.md +0 -150
  292. package/dashboards/express/node_modules/finalhandler/index.js +0 -293
  293. package/dashboards/express/node_modules/finalhandler/package.json +0 -47
  294. package/dashboards/express/node_modules/forwarded/HISTORY.md +0 -21
  295. package/dashboards/express/node_modules/forwarded/LICENSE +0 -22
  296. package/dashboards/express/node_modules/forwarded/README.md +0 -57
  297. package/dashboards/express/node_modules/forwarded/index.js +0 -90
  298. package/dashboards/express/node_modules/forwarded/package.json +0 -45
  299. package/dashboards/express/node_modules/fresh/HISTORY.md +0 -80
  300. package/dashboards/express/node_modules/fresh/LICENSE +0 -23
  301. package/dashboards/express/node_modules/fresh/README.md +0 -117
  302. package/dashboards/express/node_modules/fresh/index.js +0 -136
  303. package/dashboards/express/node_modules/fresh/package.json +0 -46
  304. package/dashboards/express/node_modules/function-bind/.eslintrc +0 -21
  305. package/dashboards/express/node_modules/function-bind/.github/FUNDING.yml +0 -12
  306. package/dashboards/express/node_modules/function-bind/.github/SECURITY.md +0 -3
  307. package/dashboards/express/node_modules/function-bind/.nycrc +0 -13
  308. package/dashboards/express/node_modules/function-bind/CHANGELOG.md +0 -136
  309. package/dashboards/express/node_modules/function-bind/LICENSE +0 -20
  310. package/dashboards/express/node_modules/function-bind/README.md +0 -46
  311. package/dashboards/express/node_modules/function-bind/implementation.js +0 -84
  312. package/dashboards/express/node_modules/function-bind/index.js +0 -5
  313. package/dashboards/express/node_modules/function-bind/package.json +0 -87
  314. package/dashboards/express/node_modules/function-bind/test/.eslintrc +0 -9
  315. package/dashboards/express/node_modules/function-bind/test/index.js +0 -252
  316. package/dashboards/express/node_modules/get-intrinsic/.eslintrc +0 -42
  317. package/dashboards/express/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  318. package/dashboards/express/node_modules/get-intrinsic/.nycrc +0 -9
  319. package/dashboards/express/node_modules/get-intrinsic/CHANGELOG.md +0 -186
  320. package/dashboards/express/node_modules/get-intrinsic/LICENSE +0 -21
  321. package/dashboards/express/node_modules/get-intrinsic/README.md +0 -71
  322. package/dashboards/express/node_modules/get-intrinsic/index.js +0 -378
  323. package/dashboards/express/node_modules/get-intrinsic/package.json +0 -97
  324. package/dashboards/express/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  325. package/dashboards/express/node_modules/get-proto/.eslintrc +0 -10
  326. package/dashboards/express/node_modules/get-proto/.github/FUNDING.yml +0 -12
  327. package/dashboards/express/node_modules/get-proto/.nycrc +0 -9
  328. package/dashboards/express/node_modules/get-proto/CHANGELOG.md +0 -21
  329. package/dashboards/express/node_modules/get-proto/LICENSE +0 -21
  330. package/dashboards/express/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
  331. package/dashboards/express/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
  332. package/dashboards/express/node_modules/get-proto/README.md +0 -50
  333. package/dashboards/express/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
  334. package/dashboards/express/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
  335. package/dashboards/express/node_modules/get-proto/index.d.ts +0 -5
  336. package/dashboards/express/node_modules/get-proto/index.js +0 -27
  337. package/dashboards/express/node_modules/get-proto/package.json +0 -81
  338. package/dashboards/express/node_modules/get-proto/test/index.js +0 -68
  339. package/dashboards/express/node_modules/get-proto/tsconfig.json +0 -9
  340. package/dashboards/express/node_modules/gopd/.eslintrc +0 -16
  341. package/dashboards/express/node_modules/gopd/.github/FUNDING.yml +0 -12
  342. package/dashboards/express/node_modules/gopd/CHANGELOG.md +0 -45
  343. package/dashboards/express/node_modules/gopd/LICENSE +0 -21
  344. package/dashboards/express/node_modules/gopd/README.md +0 -40
  345. package/dashboards/express/node_modules/gopd/gOPD.d.ts +0 -1
  346. package/dashboards/express/node_modules/gopd/gOPD.js +0 -4
  347. package/dashboards/express/node_modules/gopd/index.d.ts +0 -5
  348. package/dashboards/express/node_modules/gopd/index.js +0 -15
  349. package/dashboards/express/node_modules/gopd/package.json +0 -77
  350. package/dashboards/express/node_modules/gopd/test/index.js +0 -36
  351. package/dashboards/express/node_modules/gopd/tsconfig.json +0 -9
  352. package/dashboards/express/node_modules/has-symbols/.eslintrc +0 -11
  353. package/dashboards/express/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  354. package/dashboards/express/node_modules/has-symbols/.nycrc +0 -9
  355. package/dashboards/express/node_modules/has-symbols/CHANGELOG.md +0 -91
  356. package/dashboards/express/node_modules/has-symbols/LICENSE +0 -21
  357. package/dashboards/express/node_modules/has-symbols/README.md +0 -46
  358. package/dashboards/express/node_modules/has-symbols/index.d.ts +0 -3
  359. package/dashboards/express/node_modules/has-symbols/index.js +0 -14
  360. package/dashboards/express/node_modules/has-symbols/package.json +0 -111
  361. package/dashboards/express/node_modules/has-symbols/shams.d.ts +0 -3
  362. package/dashboards/express/node_modules/has-symbols/shams.js +0 -45
  363. package/dashboards/express/node_modules/has-symbols/test/index.js +0 -22
  364. package/dashboards/express/node_modules/has-symbols/test/shams/core-js.js +0 -29
  365. package/dashboards/express/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
  366. package/dashboards/express/node_modules/has-symbols/test/tests.js +0 -58
  367. package/dashboards/express/node_modules/has-symbols/tsconfig.json +0 -10
  368. package/dashboards/express/node_modules/hasown/.eslintrc +0 -5
  369. package/dashboards/express/node_modules/hasown/.github/FUNDING.yml +0 -12
  370. package/dashboards/express/node_modules/hasown/.nycrc +0 -13
  371. package/dashboards/express/node_modules/hasown/CHANGELOG.md +0 -40
  372. package/dashboards/express/node_modules/hasown/LICENSE +0 -21
  373. package/dashboards/express/node_modules/hasown/README.md +0 -40
  374. package/dashboards/express/node_modules/hasown/index.d.ts +0 -3
  375. package/dashboards/express/node_modules/hasown/index.js +0 -8
  376. package/dashboards/express/node_modules/hasown/package.json +0 -92
  377. package/dashboards/express/node_modules/hasown/tsconfig.json +0 -6
  378. package/dashboards/express/node_modules/http-errors/HISTORY.md +0 -186
  379. package/dashboards/express/node_modules/http-errors/LICENSE +0 -23
  380. package/dashboards/express/node_modules/http-errors/README.md +0 -169
  381. package/dashboards/express/node_modules/http-errors/index.js +0 -290
  382. package/dashboards/express/node_modules/http-errors/package.json +0 -54
  383. package/dashboards/express/node_modules/iconv-lite/LICENSE +0 -21
  384. package/dashboards/express/node_modules/iconv-lite/README.md +0 -138
  385. package/dashboards/express/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -532
  386. package/dashboards/express/node_modules/iconv-lite/encodings/dbcs-data.js +0 -185
  387. package/dashboards/express/node_modules/iconv-lite/encodings/index.js +0 -23
  388. package/dashboards/express/node_modules/iconv-lite/encodings/internal.js +0 -218
  389. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -75
  390. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  391. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-data.js +0 -178
  392. package/dashboards/express/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  393. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  394. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  395. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  396. package/dashboards/express/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  397. package/dashboards/express/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  398. package/dashboards/express/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -56
  399. package/dashboards/express/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  400. package/dashboards/express/node_modules/iconv-lite/encodings/utf16.js +0 -187
  401. package/dashboards/express/node_modules/iconv-lite/encodings/utf32.js +0 -307
  402. package/dashboards/express/node_modules/iconv-lite/encodings/utf7.js +0 -283
  403. package/dashboards/express/node_modules/iconv-lite/lib/bom-handling.js +0 -48
  404. package/dashboards/express/node_modules/iconv-lite/lib/helpers/merge-exports.js +0 -13
  405. package/dashboards/express/node_modules/iconv-lite/lib/index.d.ts +0 -129
  406. package/dashboards/express/node_modules/iconv-lite/lib/index.js +0 -182
  407. package/dashboards/express/node_modules/iconv-lite/lib/streams.js +0 -105
  408. package/dashboards/express/node_modules/iconv-lite/package.json +0 -70
  409. package/dashboards/express/node_modules/iconv-lite/types/encodings.d.ts +0 -423
  410. package/dashboards/express/node_modules/inherits/LICENSE +0 -16
  411. package/dashboards/express/node_modules/inherits/README.md +0 -42
  412. package/dashboards/express/node_modules/inherits/inherits.js +0 -9
  413. package/dashboards/express/node_modules/inherits/inherits_browser.js +0 -27
  414. package/dashboards/express/node_modules/inherits/package.json +0 -29
  415. package/dashboards/express/node_modules/ipaddr.js/LICENSE +0 -19
  416. package/dashboards/express/node_modules/ipaddr.js/README.md +0 -233
  417. package/dashboards/express/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  418. package/dashboards/express/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  419. package/dashboards/express/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  420. package/dashboards/express/node_modules/ipaddr.js/package.json +0 -35
  421. package/dashboards/express/node_modules/is-promise/LICENSE +0 -19
  422. package/dashboards/express/node_modules/is-promise/index.d.ts +0 -2
  423. package/dashboards/express/node_modules/is-promise/index.js +0 -6
  424. package/dashboards/express/node_modules/is-promise/index.mjs +0 -3
  425. package/dashboards/express/node_modules/is-promise/package.json +0 -30
  426. package/dashboards/express/node_modules/is-promise/readme.md +0 -33
  427. package/dashboards/express/node_modules/math-intrinsics/.eslintrc +0 -16
  428. package/dashboards/express/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
  429. package/dashboards/express/node_modules/math-intrinsics/CHANGELOG.md +0 -24
  430. package/dashboards/express/node_modules/math-intrinsics/LICENSE +0 -21
  431. package/dashboards/express/node_modules/math-intrinsics/README.md +0 -50
  432. package/dashboards/express/node_modules/math-intrinsics/abs.d.ts +0 -1
  433. package/dashboards/express/node_modules/math-intrinsics/abs.js +0 -4
  434. package/dashboards/express/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
  435. package/dashboards/express/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
  436. package/dashboards/express/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
  437. package/dashboards/express/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
  438. package/dashboards/express/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
  439. package/dashboards/express/node_modules/math-intrinsics/constants/maxValue.js +0 -5
  440. package/dashboards/express/node_modules/math-intrinsics/floor.d.ts +0 -1
  441. package/dashboards/express/node_modules/math-intrinsics/floor.js +0 -4
  442. package/dashboards/express/node_modules/math-intrinsics/isFinite.d.ts +0 -3
  443. package/dashboards/express/node_modules/math-intrinsics/isFinite.js +0 -12
  444. package/dashboards/express/node_modules/math-intrinsics/isInteger.d.ts +0 -3
  445. package/dashboards/express/node_modules/math-intrinsics/isInteger.js +0 -16
  446. package/dashboards/express/node_modules/math-intrinsics/isNaN.d.ts +0 -1
  447. package/dashboards/express/node_modules/math-intrinsics/isNaN.js +0 -6
  448. package/dashboards/express/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
  449. package/dashboards/express/node_modules/math-intrinsics/isNegativeZero.js +0 -6
  450. package/dashboards/express/node_modules/math-intrinsics/max.d.ts +0 -1
  451. package/dashboards/express/node_modules/math-intrinsics/max.js +0 -4
  452. package/dashboards/express/node_modules/math-intrinsics/min.d.ts +0 -1
  453. package/dashboards/express/node_modules/math-intrinsics/min.js +0 -4
  454. package/dashboards/express/node_modules/math-intrinsics/mod.d.ts +0 -3
  455. package/dashboards/express/node_modules/math-intrinsics/mod.js +0 -9
  456. package/dashboards/express/node_modules/math-intrinsics/package.json +0 -86
  457. package/dashboards/express/node_modules/math-intrinsics/pow.d.ts +0 -1
  458. package/dashboards/express/node_modules/math-intrinsics/pow.js +0 -4
  459. package/dashboards/express/node_modules/math-intrinsics/round.d.ts +0 -1
  460. package/dashboards/express/node_modules/math-intrinsics/round.js +0 -4
  461. package/dashboards/express/node_modules/math-intrinsics/sign.d.ts +0 -3
  462. package/dashboards/express/node_modules/math-intrinsics/sign.js +0 -11
  463. package/dashboards/express/node_modules/math-intrinsics/test/index.js +0 -192
  464. package/dashboards/express/node_modules/math-intrinsics/tsconfig.json +0 -3
  465. package/dashboards/express/node_modules/media-typer/HISTORY.md +0 -50
  466. package/dashboards/express/node_modules/media-typer/LICENSE +0 -22
  467. package/dashboards/express/node_modules/media-typer/README.md +0 -93
  468. package/dashboards/express/node_modules/media-typer/index.js +0 -143
  469. package/dashboards/express/node_modules/media-typer/package.json +0 -33
  470. package/dashboards/express/node_modules/merge-descriptors/index.d.ts +0 -11
  471. package/dashboards/express/node_modules/merge-descriptors/index.js +0 -26
  472. package/dashboards/express/node_modules/merge-descriptors/license +0 -11
  473. package/dashboards/express/node_modules/merge-descriptors/package.json +0 -50
  474. package/dashboards/express/node_modules/merge-descriptors/readme.md +0 -55
  475. package/dashboards/express/node_modules/mime-db/HISTORY.md +0 -541
  476. package/dashboards/express/node_modules/mime-db/LICENSE +0 -23
  477. package/dashboards/express/node_modules/mime-db/README.md +0 -109
  478. package/dashboards/express/node_modules/mime-db/db.json +0 -9342
  479. package/dashboards/express/node_modules/mime-db/index.js +0 -12
  480. package/dashboards/express/node_modules/mime-db/package.json +0 -56
  481. package/dashboards/express/node_modules/mime-types/HISTORY.md +0 -428
  482. package/dashboards/express/node_modules/mime-types/LICENSE +0 -23
  483. package/dashboards/express/node_modules/mime-types/README.md +0 -126
  484. package/dashboards/express/node_modules/mime-types/index.js +0 -211
  485. package/dashboards/express/node_modules/mime-types/mimeScore.js +0 -57
  486. package/dashboards/express/node_modules/mime-types/package.json +0 -49
  487. package/dashboards/express/node_modules/ms/index.js +0 -162
  488. package/dashboards/express/node_modules/ms/license.md +0 -21
  489. package/dashboards/express/node_modules/ms/package.json +0 -38
  490. package/dashboards/express/node_modules/ms/readme.md +0 -59
  491. package/dashboards/express/node_modules/negotiator/HISTORY.md +0 -114
  492. package/dashboards/express/node_modules/negotiator/LICENSE +0 -24
  493. package/dashboards/express/node_modules/negotiator/README.md +0 -212
  494. package/dashboards/express/node_modules/negotiator/index.js +0 -83
  495. package/dashboards/express/node_modules/negotiator/lib/charset.js +0 -169
  496. package/dashboards/express/node_modules/negotiator/lib/encoding.js +0 -205
  497. package/dashboards/express/node_modules/negotiator/lib/language.js +0 -179
  498. package/dashboards/express/node_modules/negotiator/lib/mediaType.js +0 -294
  499. package/dashboards/express/node_modules/negotiator/package.json +0 -43
  500. package/dashboards/express/node_modules/object-inspect/.eslintrc +0 -53
  501. package/dashboards/express/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  502. package/dashboards/express/node_modules/object-inspect/.nycrc +0 -13
  503. package/dashboards/express/node_modules/object-inspect/CHANGELOG.md +0 -424
  504. package/dashboards/express/node_modules/object-inspect/LICENSE +0 -21
  505. package/dashboards/express/node_modules/object-inspect/example/all.js +0 -23
  506. package/dashboards/express/node_modules/object-inspect/example/circular.js +0 -6
  507. package/dashboards/express/node_modules/object-inspect/example/fn.js +0 -5
  508. package/dashboards/express/node_modules/object-inspect/example/inspect.js +0 -10
  509. package/dashboards/express/node_modules/object-inspect/index.js +0 -544
  510. package/dashboards/express/node_modules/object-inspect/package-support.json +0 -20
  511. package/dashboards/express/node_modules/object-inspect/package.json +0 -105
  512. package/dashboards/express/node_modules/object-inspect/readme.markdown +0 -84
  513. package/dashboards/express/node_modules/object-inspect/test/bigint.js +0 -58
  514. package/dashboards/express/node_modules/object-inspect/test/browser/dom.js +0 -15
  515. package/dashboards/express/node_modules/object-inspect/test/circular.js +0 -16
  516. package/dashboards/express/node_modules/object-inspect/test/deep.js +0 -12
  517. package/dashboards/express/node_modules/object-inspect/test/element.js +0 -53
  518. package/dashboards/express/node_modules/object-inspect/test/err.js +0 -48
  519. package/dashboards/express/node_modules/object-inspect/test/fakes.js +0 -29
  520. package/dashboards/express/node_modules/object-inspect/test/fn.js +0 -76
  521. package/dashboards/express/node_modules/object-inspect/test/global.js +0 -17
  522. package/dashboards/express/node_modules/object-inspect/test/has.js +0 -15
  523. package/dashboards/express/node_modules/object-inspect/test/holes.js +0 -15
  524. package/dashboards/express/node_modules/object-inspect/test/indent-option.js +0 -271
  525. package/dashboards/express/node_modules/object-inspect/test/inspect.js +0 -139
  526. package/dashboards/express/node_modules/object-inspect/test/lowbyte.js +0 -12
  527. package/dashboards/express/node_modules/object-inspect/test/number.js +0 -58
  528. package/dashboards/express/node_modules/object-inspect/test/quoteStyle.js +0 -26
  529. package/dashboards/express/node_modules/object-inspect/test/toStringTag.js +0 -40
  530. package/dashboards/express/node_modules/object-inspect/test/undef.js +0 -12
  531. package/dashboards/express/node_modules/object-inspect/test/values.js +0 -261
  532. package/dashboards/express/node_modules/object-inspect/test-core-js.js +0 -26
  533. package/dashboards/express/node_modules/object-inspect/util.inspect.js +0 -1
  534. package/dashboards/express/node_modules/on-finished/HISTORY.md +0 -98
  535. package/dashboards/express/node_modules/on-finished/LICENSE +0 -23
  536. package/dashboards/express/node_modules/on-finished/README.md +0 -162
  537. package/dashboards/express/node_modules/on-finished/index.js +0 -234
  538. package/dashboards/express/node_modules/on-finished/package.json +0 -39
  539. package/dashboards/express/node_modules/on-headers/HISTORY.md +0 -26
  540. package/dashboards/express/node_modules/on-headers/LICENSE +0 -22
  541. package/dashboards/express/node_modules/on-headers/README.md +0 -81
  542. package/dashboards/express/node_modules/on-headers/index.js +0 -180
  543. package/dashboards/express/node_modules/on-headers/package.json +0 -44
  544. package/dashboards/express/node_modules/once/LICENSE +0 -15
  545. package/dashboards/express/node_modules/once/README.md +0 -79
  546. package/dashboards/express/node_modules/once/once.js +0 -42
  547. package/dashboards/express/node_modules/once/package.json +0 -33
  548. package/dashboards/express/node_modules/parseurl/HISTORY.md +0 -58
  549. package/dashboards/express/node_modules/parseurl/LICENSE +0 -24
  550. package/dashboards/express/node_modules/parseurl/README.md +0 -133
  551. package/dashboards/express/node_modules/parseurl/index.js +0 -158
  552. package/dashboards/express/node_modules/parseurl/package.json +0 -40
  553. package/dashboards/express/node_modules/path-to-regexp/LICENSE +0 -21
  554. package/dashboards/express/node_modules/path-to-regexp/Readme.md +0 -224
  555. package/dashboards/express/node_modules/path-to-regexp/dist/index.d.ts +0 -144
  556. package/dashboards/express/node_modules/path-to-regexp/dist/index.js +0 -409
  557. package/dashboards/express/node_modules/path-to-regexp/dist/index.js.map +0 -1
  558. package/dashboards/express/node_modules/path-to-regexp/package.json +0 -64
  559. package/dashboards/express/node_modules/proxy-addr/HISTORY.md +0 -161
  560. package/dashboards/express/node_modules/proxy-addr/LICENSE +0 -22
  561. package/dashboards/express/node_modules/proxy-addr/README.md +0 -139
  562. package/dashboards/express/node_modules/proxy-addr/index.js +0 -327
  563. package/dashboards/express/node_modules/proxy-addr/package.json +0 -47
  564. package/dashboards/express/node_modules/qs/.editorconfig +0 -46
  565. package/dashboards/express/node_modules/qs/.github/FUNDING.yml +0 -12
  566. package/dashboards/express/node_modules/qs/.github/SECURITY.md +0 -11
  567. package/dashboards/express/node_modules/qs/.github/THREAT_MODEL.md +0 -78
  568. package/dashboards/express/node_modules/qs/.nycrc +0 -13
  569. package/dashboards/express/node_modules/qs/CHANGELOG.md +0 -806
  570. package/dashboards/express/node_modules/qs/LICENSE.md +0 -29
  571. package/dashboards/express/node_modules/qs/README.md +0 -758
  572. package/dashboards/express/node_modules/qs/dist/qs.js +0 -141
  573. package/dashboards/express/node_modules/qs/eslint.config.mjs +0 -56
  574. package/dashboards/express/node_modules/qs/lib/formats.js +0 -23
  575. package/dashboards/express/node_modules/qs/lib/index.js +0 -11
  576. package/dashboards/express/node_modules/qs/lib/parse.js +0 -373
  577. package/dashboards/express/node_modules/qs/lib/stringify.js +0 -356
  578. package/dashboards/express/node_modules/qs/lib/utils.js +0 -342
  579. package/dashboards/express/node_modules/qs/package.json +0 -94
  580. package/dashboards/express/node_modules/qs/test/empty-keys-cases.js +0 -267
  581. package/dashboards/express/node_modules/qs/test/parse.js +0 -1568
  582. package/dashboards/express/node_modules/qs/test/stringify.js +0 -1310
  583. package/dashboards/express/node_modules/qs/test/utils.js +0 -404
  584. package/dashboards/express/node_modules/random-bytes/HISTORY.md +0 -4
  585. package/dashboards/express/node_modules/random-bytes/LICENSE +0 -21
  586. package/dashboards/express/node_modules/random-bytes/README.md +0 -77
  587. package/dashboards/express/node_modules/random-bytes/index.js +0 -101
  588. package/dashboards/express/node_modules/random-bytes/package.json +0 -36
  589. package/dashboards/express/node_modules/range-parser/HISTORY.md +0 -56
  590. package/dashboards/express/node_modules/range-parser/LICENSE +0 -23
  591. package/dashboards/express/node_modules/range-parser/README.md +0 -84
  592. package/dashboards/express/node_modules/range-parser/index.js +0 -162
  593. package/dashboards/express/node_modules/range-parser/package.json +0 -44
  594. package/dashboards/express/node_modules/raw-body/LICENSE +0 -22
  595. package/dashboards/express/node_modules/raw-body/README.md +0 -223
  596. package/dashboards/express/node_modules/raw-body/index.d.ts +0 -85
  597. package/dashboards/express/node_modules/raw-body/index.js +0 -336
  598. package/dashboards/express/node_modules/raw-body/package.json +0 -46
  599. package/dashboards/express/node_modules/router/HISTORY.md +0 -228
  600. package/dashboards/express/node_modules/router/LICENSE +0 -23
  601. package/dashboards/express/node_modules/router/README.md +0 -416
  602. package/dashboards/express/node_modules/router/index.js +0 -748
  603. package/dashboards/express/node_modules/router/lib/layer.js +0 -247
  604. package/dashboards/express/node_modules/router/lib/route.js +0 -242
  605. package/dashboards/express/node_modules/router/package.json +0 -44
  606. package/dashboards/express/node_modules/safe-buffer/LICENSE +0 -21
  607. package/dashboards/express/node_modules/safe-buffer/README.md +0 -584
  608. package/dashboards/express/node_modules/safe-buffer/index.d.ts +0 -187
  609. package/dashboards/express/node_modules/safe-buffer/index.js +0 -65
  610. package/dashboards/express/node_modules/safe-buffer/package.json +0 -51
  611. package/dashboards/express/node_modules/safer-buffer/LICENSE +0 -21
  612. package/dashboards/express/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  613. package/dashboards/express/node_modules/safer-buffer/Readme.md +0 -156
  614. package/dashboards/express/node_modules/safer-buffer/dangerous.js +0 -58
  615. package/dashboards/express/node_modules/safer-buffer/package.json +0 -34
  616. package/dashboards/express/node_modules/safer-buffer/safer.js +0 -77
  617. package/dashboards/express/node_modules/safer-buffer/tests.js +0 -406
  618. package/dashboards/express/node_modules/send/LICENSE +0 -23
  619. package/dashboards/express/node_modules/send/README.md +0 -317
  620. package/dashboards/express/node_modules/send/index.js +0 -997
  621. package/dashboards/express/node_modules/send/package.json +0 -63
  622. package/dashboards/express/node_modules/serve-static/LICENSE +0 -25
  623. package/dashboards/express/node_modules/serve-static/README.md +0 -253
  624. package/dashboards/express/node_modules/serve-static/index.js +0 -208
  625. package/dashboards/express/node_modules/serve-static/package.json +0 -44
  626. package/dashboards/express/node_modules/setprototypeof/LICENSE +0 -13
  627. package/dashboards/express/node_modules/setprototypeof/README.md +0 -31
  628. package/dashboards/express/node_modules/setprototypeof/index.d.ts +0 -2
  629. package/dashboards/express/node_modules/setprototypeof/index.js +0 -17
  630. package/dashboards/express/node_modules/setprototypeof/package.json +0 -38
  631. package/dashboards/express/node_modules/setprototypeof/test/index.js +0 -24
  632. package/dashboards/express/node_modules/side-channel/.editorconfig +0 -9
  633. package/dashboards/express/node_modules/side-channel/.eslintrc +0 -12
  634. package/dashboards/express/node_modules/side-channel/.github/FUNDING.yml +0 -12
  635. package/dashboards/express/node_modules/side-channel/.nycrc +0 -13
  636. package/dashboards/express/node_modules/side-channel/CHANGELOG.md +0 -110
  637. package/dashboards/express/node_modules/side-channel/LICENSE +0 -21
  638. package/dashboards/express/node_modules/side-channel/README.md +0 -61
  639. package/dashboards/express/node_modules/side-channel/index.d.ts +0 -14
  640. package/dashboards/express/node_modules/side-channel/index.js +0 -43
  641. package/dashboards/express/node_modules/side-channel/package.json +0 -85
  642. package/dashboards/express/node_modules/side-channel/test/index.js +0 -104
  643. package/dashboards/express/node_modules/side-channel/tsconfig.json +0 -9
  644. package/dashboards/express/node_modules/side-channel-list/.editorconfig +0 -9
  645. package/dashboards/express/node_modules/side-channel-list/.eslintrc +0 -11
  646. package/dashboards/express/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
  647. package/dashboards/express/node_modules/side-channel-list/.nycrc +0 -13
  648. package/dashboards/express/node_modules/side-channel-list/CHANGELOG.md +0 -15
  649. package/dashboards/express/node_modules/side-channel-list/LICENSE +0 -21
  650. package/dashboards/express/node_modules/side-channel-list/README.md +0 -62
  651. package/dashboards/express/node_modules/side-channel-list/index.d.ts +0 -13
  652. package/dashboards/express/node_modules/side-channel-list/index.js +0 -113
  653. package/dashboards/express/node_modules/side-channel-list/list.d.ts +0 -14
  654. package/dashboards/express/node_modules/side-channel-list/package.json +0 -77
  655. package/dashboards/express/node_modules/side-channel-list/test/index.js +0 -104
  656. package/dashboards/express/node_modules/side-channel-list/tsconfig.json +0 -9
  657. package/dashboards/express/node_modules/side-channel-map/.editorconfig +0 -9
  658. package/dashboards/express/node_modules/side-channel-map/.eslintrc +0 -11
  659. package/dashboards/express/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
  660. package/dashboards/express/node_modules/side-channel-map/.nycrc +0 -13
  661. package/dashboards/express/node_modules/side-channel-map/CHANGELOG.md +0 -22
  662. package/dashboards/express/node_modules/side-channel-map/LICENSE +0 -21
  663. package/dashboards/express/node_modules/side-channel-map/README.md +0 -62
  664. package/dashboards/express/node_modules/side-channel-map/index.d.ts +0 -15
  665. package/dashboards/express/node_modules/side-channel-map/index.js +0 -68
  666. package/dashboards/express/node_modules/side-channel-map/package.json +0 -80
  667. package/dashboards/express/node_modules/side-channel-map/test/index.js +0 -114
  668. package/dashboards/express/node_modules/side-channel-map/tsconfig.json +0 -9
  669. package/dashboards/express/node_modules/side-channel-weakmap/.editorconfig +0 -9
  670. package/dashboards/express/node_modules/side-channel-weakmap/.eslintrc +0 -12
  671. package/dashboards/express/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
  672. package/dashboards/express/node_modules/side-channel-weakmap/.nycrc +0 -13
  673. package/dashboards/express/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
  674. package/dashboards/express/node_modules/side-channel-weakmap/LICENSE +0 -21
  675. package/dashboards/express/node_modules/side-channel-weakmap/README.md +0 -62
  676. package/dashboards/express/node_modules/side-channel-weakmap/index.d.ts +0 -15
  677. package/dashboards/express/node_modules/side-channel-weakmap/index.js +0 -84
  678. package/dashboards/express/node_modules/side-channel-weakmap/package.json +0 -87
  679. package/dashboards/express/node_modules/side-channel-weakmap/test/index.js +0 -114
  680. package/dashboards/express/node_modules/side-channel-weakmap/tsconfig.json +0 -9
  681. package/dashboards/express/node_modules/statuses/HISTORY.md +0 -87
  682. package/dashboards/express/node_modules/statuses/LICENSE +0 -23
  683. package/dashboards/express/node_modules/statuses/README.md +0 -139
  684. package/dashboards/express/node_modules/statuses/codes.json +0 -65
  685. package/dashboards/express/node_modules/statuses/index.js +0 -146
  686. package/dashboards/express/node_modules/statuses/package.json +0 -49
  687. package/dashboards/express/node_modules/toidentifier/HISTORY.md +0 -9
  688. package/dashboards/express/node_modules/toidentifier/LICENSE +0 -21
  689. package/dashboards/express/node_modules/toidentifier/README.md +0 -61
  690. package/dashboards/express/node_modules/toidentifier/index.js +0 -32
  691. package/dashboards/express/node_modules/toidentifier/package.json +0 -38
  692. package/dashboards/express/node_modules/type-is/HISTORY.md +0 -292
  693. package/dashboards/express/node_modules/type-is/LICENSE +0 -23
  694. package/dashboards/express/node_modules/type-is/README.md +0 -198
  695. package/dashboards/express/node_modules/type-is/index.js +0 -250
  696. package/dashboards/express/node_modules/type-is/package.json +0 -47
  697. package/dashboards/express/node_modules/uid-safe/HISTORY.md +0 -61
  698. package/dashboards/express/node_modules/uid-safe/LICENSE +0 -22
  699. package/dashboards/express/node_modules/uid-safe/README.md +0 -77
  700. package/dashboards/express/node_modules/uid-safe/index.js +0 -107
  701. package/dashboards/express/node_modules/uid-safe/package.json +0 -46
  702. package/dashboards/express/node_modules/unpipe/HISTORY.md +0 -4
  703. package/dashboards/express/node_modules/unpipe/LICENSE +0 -22
  704. package/dashboards/express/node_modules/unpipe/README.md +0 -43
  705. package/dashboards/express/node_modules/unpipe/index.js +0 -69
  706. package/dashboards/express/node_modules/unpipe/package.json +0 -27
  707. package/dashboards/express/node_modules/vary/HISTORY.md +0 -39
  708. package/dashboards/express/node_modules/vary/LICENSE +0 -22
  709. package/dashboards/express/node_modules/vary/README.md +0 -101
  710. package/dashboards/express/node_modules/vary/index.js +0 -149
  711. package/dashboards/express/node_modules/vary/package.json +0 -43
  712. package/dashboards/express/node_modules/wrappy/LICENSE +0 -15
  713. package/dashboards/express/node_modules/wrappy/README.md +0 -36
  714. package/dashboards/express/node_modules/wrappy/package.json +0 -29
  715. package/dashboards/express/node_modules/wrappy/wrappy.js +0 -33
  716. package/dashboards/express/package-lock.json +0 -922
  717. package/dashboards/express/package.json +0 -17
  718. package/dashboards/express/public/styles.css +0 -175
  719. package/dashboards/express/routes/activity.js +0 -101
  720. package/dashboards/express/routes/agents.js +0 -771
  721. package/dashboards/express/routes/apiKeys.js +0 -107
  722. package/dashboards/express/routes/approvals.js +0 -100
  723. package/dashboards/express/routes/audit.js +0 -75
  724. package/dashboards/express/routes/auth.js +0 -38
  725. package/dashboards/express/routes/community-skills.js +0 -83
  726. package/dashboards/express/routes/compliance.js +0 -93
  727. package/dashboards/express/routes/dashboard.js +0 -65
  728. package/dashboards/express/routes/dlp.js +0 -165
  729. package/dashboards/express/routes/domain-status.js +0 -78
  730. package/dashboards/express/routes/guardrails.js +0 -195
  731. package/dashboards/express/routes/journal.js +0 -95
  732. package/dashboards/express/routes/knowledge-contributions.js +0 -85
  733. package/dashboards/express/routes/knowledge.js +0 -83
  734. package/dashboards/express/routes/messages.js +0 -97
  735. package/dashboards/express/routes/settings.js +0 -830
  736. package/dashboards/express/routes/skill-connections.js +0 -86
  737. package/dashboards/express/routes/skills.js +0 -141
  738. package/dashboards/express/routes/users.js +0 -69
  739. package/dashboards/express/routes/vault.js +0 -141
  740. package/dashboards/express/routes/workforce.js +0 -126
  741. package/dashboards/express/utils/api.js +0 -44
  742. package/dashboards/express/utils/helpers.js +0 -46
  743. package/dashboards/express/views/components/modal.js +0 -255
  744. package/dashboards/express/views/components/stats.js +0 -22
  745. package/dashboards/express/views/components/table.js +0 -31
  746. package/dashboards/express/views/layout.js +0 -94
  747. package/dashboards/express/views/login.js +0 -45
  748. package/dashboards/go/go.mod +0 -3
  749. package/dashboards/go/handlers/activity.go +0 -30
  750. package/dashboards/go/handlers/agents.go +0 -790
  751. package/dashboards/go/handlers/apikeys.go +0 -38
  752. package/dashboards/go/handlers/approvals.go +0 -31
  753. package/dashboards/go/handlers/audit.go +0 -52
  754. package/dashboards/go/handlers/auth.go +0 -39
  755. package/dashboards/go/handlers/community_skills.go +0 -32
  756. package/dashboards/go/handlers/compliance.go +0 -58
  757. package/dashboards/go/handlers/dashboard.go +0 -43
  758. package/dashboards/go/handlers/dlp.go +0 -78
  759. package/dashboards/go/handlers/domain_status.go +0 -62
  760. package/dashboards/go/handlers/guardrails.go +0 -89
  761. package/dashboards/go/handlers/journal.go +0 -60
  762. package/dashboards/go/handlers/knowledge.go +0 -35
  763. package/dashboards/go/handlers/knowledge_contributions.go +0 -37
  764. package/dashboards/go/handlers/messages.go +0 -59
  765. package/dashboards/go/handlers/settings.go +0 -951
  766. package/dashboards/go/handlers/skill_connections.go +0 -59
  767. package/dashboards/go/handlers/skills.go +0 -129
  768. package/dashboards/go/handlers/users.go +0 -54
  769. package/dashboards/go/handlers/vault.go +0 -85
  770. package/dashboards/go/handlers/workforce.go +0 -60
  771. package/dashboards/go/main.go +0 -71
  772. package/dashboards/go/middleware/auth.go +0 -17
  773. package/dashboards/go/services/api.go +0 -38
  774. package/dashboards/go/services/session.go +0 -52
  775. package/dashboards/go/static/styles.css +0 -546
  776. package/dashboards/go/templates/components.go +0 -45
  777. package/dashboards/go/templates/helpers.go +0 -35
  778. package/dashboards/go/templates/layout.go +0 -64
  779. package/dashboards/html/index.html +0 -432
  780. package/dashboards/html/package.json +0 -11
  781. package/dashboards/html/public/styles.css +0 -546
  782. package/dashboards/html/src/api.js +0 -36
  783. package/dashboards/html/src/components/badge.js +0 -13
  784. package/dashboards/html/src/components/layout.js +0 -11
  785. package/dashboards/html/src/components/modal.js +0 -9
  786. package/dashboards/html/src/components/pagination.js +0 -12
  787. package/dashboards/html/src/components/stat-card.js +0 -14
  788. package/dashboards/html/src/components/table.js +0 -6
  789. package/dashboards/html/src/main.js +0 -83
  790. package/dashboards/html/src/pages/activity.js +0 -137
  791. package/dashboards/html/src/pages/agents.js +0 -831
  792. package/dashboards/html/src/pages/api-keys.js +0 -80
  793. package/dashboards/html/src/pages/approvals.js +0 -155
  794. package/dashboards/html/src/pages/audit.js +0 -50
  795. package/dashboards/html/src/pages/community-skills.js +0 -236
  796. package/dashboards/html/src/pages/compliance.js +0 -69
  797. package/dashboards/html/src/pages/dashboard.js +0 -25
  798. package/dashboards/html/src/pages/dlp.js +0 -112
  799. package/dashboards/html/src/pages/domain-status.js +0 -182
  800. package/dashboards/html/src/pages/guardrails.js +0 -127
  801. package/dashboards/html/src/pages/journal.js +0 -54
  802. package/dashboards/html/src/pages/knowledge-contributions.js +0 -319
  803. package/dashboards/html/src/pages/knowledge.js +0 -251
  804. package/dashboards/html/src/pages/login.js +0 -84
  805. package/dashboards/html/src/pages/messages.js +0 -90
  806. package/dashboards/html/src/pages/settings.js +0 -656
  807. package/dashboards/html/src/pages/skill-connections.js +0 -293
  808. package/dashboards/html/src/pages/skills.js +0 -114
  809. package/dashboards/html/src/pages/users.js +0 -62
  810. package/dashboards/html/src/pages/vault.js +0 -105
  811. package/dashboards/html/src/pages/workforce.js +0 -418
  812. package/dashboards/html/src/router.js +0 -91
  813. package/dashboards/html/src/utils/escape.js +0 -7
  814. package/dashboards/html/src/utils/time.js +0 -16
  815. package/dashboards/html/src/utils/toast.js +0 -10
  816. package/dashboards/java/AgenticMailDashboard.java +0 -161
  817. package/dashboards/java/handlers/ActivityHandler.java +0 -42
  818. package/dashboards/java/handlers/AgentsHandler.java +0 -807
  819. package/dashboards/java/handlers/ApiKeysHandler.java +0 -201
  820. package/dashboards/java/handlers/ApprovalsHandler.java +0 -43
  821. package/dashboards/java/handlers/AuditHandler.java +0 -95
  822. package/dashboards/java/handlers/AuthHandler.java +0 -71
  823. package/dashboards/java/handlers/CommunitySkillsHandler.java +0 -45
  824. package/dashboards/java/handlers/ComplianceHandler.java +0 -192
  825. package/dashboards/java/handlers/DashboardHandler.java +0 -98
  826. package/dashboards/java/handlers/DlpHandler.java +0 -230
  827. package/dashboards/java/handlers/DomainStatusHandler.java +0 -58
  828. package/dashboards/java/handlers/GuardrailsHandler.java +0 -272
  829. package/dashboards/java/handlers/JournalHandler.java +0 -130
  830. package/dashboards/java/handlers/KnowledgeContributionsHandler.java +0 -51
  831. package/dashboards/java/handlers/KnowledgeHandler.java +0 -49
  832. package/dashboards/java/handlers/MessagesHandler.java +0 -168
  833. package/dashboards/java/handlers/SettingsHandler.java +0 -1017
  834. package/dashboards/java/handlers/SkillConnectionsHandler.java +0 -61
  835. package/dashboards/java/handlers/SkillsHandler.java +0 -198
  836. package/dashboards/java/handlers/UsersHandler.java +0 -118
  837. package/dashboards/java/handlers/VaultHandler.java +0 -168
  838. package/dashboards/java/handlers/WorkforceHandler.java +0 -64
  839. package/dashboards/java/services/ApiClient.java +0 -233
  840. package/dashboards/java/services/SessionManager.java +0 -138
  841. package/dashboards/java/static/styles.css +0 -546
  842. package/dashboards/java/templates/Components.java +0 -142
  843. package/dashboards/java/templates/Helpers.java +0 -106
  844. package/dashboards/java/templates/Layout.java +0 -106
  845. package/dashboards/laravel/controllers/ActivityController.php +0 -18
  846. package/dashboards/laravel/controllers/AgentController.php +0 -250
  847. package/dashboards/laravel/controllers/ApiKeyController.php +0 -73
  848. package/dashboards/laravel/controllers/ApprovalsController.php +0 -18
  849. package/dashboards/laravel/controllers/AuditController.php +0 -31
  850. package/dashboards/laravel/controllers/AuthController.php +0 -44
  851. package/dashboards/laravel/controllers/CommunitySkillsController.php +0 -18
  852. package/dashboards/laravel/controllers/ComplianceController.php +0 -55
  853. package/dashboards/laravel/controllers/DashboardController.php +0 -28
  854. package/dashboards/laravel/controllers/DlpController.php +0 -88
  855. package/dashboards/laravel/controllers/DomainStatusController.php +0 -18
  856. package/dashboards/laravel/controllers/GuardrailController.php +0 -110
  857. package/dashboards/laravel/controllers/JournalController.php +0 -44
  858. package/dashboards/laravel/controllers/KnowledgeContributionsController.php +0 -18
  859. package/dashboards/laravel/controllers/KnowledgeController.php +0 -18
  860. package/dashboards/laravel/controllers/MessageController.php +0 -47
  861. package/dashboards/laravel/controllers/SettingController.php +0 -258
  862. package/dashboards/laravel/controllers/SkillConnectionsController.php +0 -18
  863. package/dashboards/laravel/controllers/SkillController.php +0 -74
  864. package/dashboards/laravel/controllers/UserController.php +0 -47
  865. package/dashboards/laravel/controllers/VaultController.php +0 -94
  866. package/dashboards/laravel/controllers/WorkforceController.php +0 -18
  867. package/dashboards/laravel/index.php +0 -375
  868. package/dashboards/laravel/lib/Api.php +0 -73
  869. package/dashboards/laravel/lib/Helpers.php +0 -123
  870. package/dashboards/laravel/public/styles.css +0 -175
  871. package/dashboards/laravel/views/activity.php +0 -127
  872. package/dashboards/laravel/views/agent-detail.php +0 -534
  873. package/dashboards/laravel/views/agents.php +0 -204
  874. package/dashboards/laravel/views/api-keys.php +0 -55
  875. package/dashboards/laravel/views/approvals.php +0 -152
  876. package/dashboards/laravel/views/audit.php +0 -30
  877. package/dashboards/laravel/views/community-skills.php +0 -131
  878. package/dashboards/laravel/views/compliance.php +0 -48
  879. package/dashboards/laravel/views/components/modal.php +0 -59
  880. package/dashboards/laravel/views/components/stats.php +0 -21
  881. package/dashboards/laravel/views/components/table.php +0 -35
  882. package/dashboards/laravel/views/dashboard.php +0 -31
  883. package/dashboards/laravel/views/dlp.php +0 -87
  884. package/dashboards/laravel/views/domain-status.php +0 -167
  885. package/dashboards/laravel/views/guardrails.php +0 -95
  886. package/dashboards/laravel/views/journal.php +0 -50
  887. package/dashboards/laravel/views/knowledge-contributions.php +0 -185
  888. package/dashboards/laravel/views/knowledge.php +0 -167
  889. package/dashboards/laravel/views/layout.php +0 -95
  890. package/dashboards/laravel/views/login.php +0 -45
  891. package/dashboards/laravel/views/messages.php +0 -60
  892. package/dashboards/laravel/views/settings.php +0 -622
  893. package/dashboards/laravel/views/skill-connections.php +0 -192
  894. package/dashboards/laravel/views/skills.php +0 -74
  895. package/dashboards/laravel/views/users.php +0 -42
  896. package/dashboards/laravel/views/vault.php +0 -80
  897. package/dashboards/laravel/views/workforce.php +0 -265
  898. package/dashboards/php/components/layout.php +0 -85
  899. package/dashboards/php/components/modal.php +0 -22
  900. package/dashboards/php/components/stats.php +0 -20
  901. package/dashboards/php/components/table.php +0 -33
  902. package/dashboards/php/index.php +0 -696
  903. package/dashboards/php/lib/api.php +0 -37
  904. package/dashboards/php/lib/auth.php +0 -47
  905. package/dashboards/php/lib/helpers.php +0 -69
  906. package/dashboards/php/pages/activity.php +0 -35
  907. package/dashboards/php/pages/agent-detail.php +0 -552
  908. package/dashboards/php/pages/agents.php +0 -185
  909. package/dashboards/php/pages/api-keys.php +0 -34
  910. package/dashboards/php/pages/approvals.php +0 -36
  911. package/dashboards/php/pages/audit.php +0 -31
  912. package/dashboards/php/pages/community-skills.php +0 -39
  913. package/dashboards/php/pages/compliance.php +0 -38
  914. package/dashboards/php/pages/dashboard.php +0 -29
  915. package/dashboards/php/pages/dlp.php +0 -65
  916. package/dashboards/php/pages/domain-status.php +0 -87
  917. package/dashboards/php/pages/guardrails.php +0 -70
  918. package/dashboards/php/pages/journal.php +0 -53
  919. package/dashboards/php/pages/knowledge-contributions.php +0 -47
  920. package/dashboards/php/pages/knowledge.php +0 -43
  921. package/dashboards/php/pages/login.php +0 -34
  922. package/dashboards/php/pages/messages.php +0 -53
  923. package/dashboards/php/pages/settings.php +0 -687
  924. package/dashboards/php/pages/skill-connections.php +0 -94
  925. package/dashboards/php/pages/skills.php +0 -70
  926. package/dashboards/php/pages/users.php +0 -37
  927. package/dashboards/php/pages/vault.php +0 -70
  928. package/dashboards/php/pages/workforce.php +0 -89
  929. package/dashboards/php/public/styles.css +0 -175
  930. package/dashboards/python/app.py +0 -91
  931. package/dashboards/python/routes/__init__.py +0 -0
  932. package/dashboards/python/routes/activity.py +0 -11
  933. package/dashboards/python/routes/agents.py +0 -296
  934. package/dashboards/python/routes/api_keys.py +0 -49
  935. package/dashboards/python/routes/approvals.py +0 -11
  936. package/dashboards/python/routes/audit.py +0 -33
  937. package/dashboards/python/routes/auth.py +0 -30
  938. package/dashboards/python/routes/community_skills.py +0 -11
  939. package/dashboards/python/routes/compliance.py +0 -50
  940. package/dashboards/python/routes/dashboard.py +0 -32
  941. package/dashboards/python/routes/dlp.py +0 -64
  942. package/dashboards/python/routes/domain_status.py +0 -11
  943. package/dashboards/python/routes/guardrails.py +0 -79
  944. package/dashboards/python/routes/journal.py +0 -40
  945. package/dashboards/python/routes/knowledge.py +0 -11
  946. package/dashboards/python/routes/knowledge_contributions.py +0 -11
  947. package/dashboards/python/routes/messages.py +0 -46
  948. package/dashboards/python/routes/settings.py +0 -260
  949. package/dashboards/python/routes/skill_connections.py +0 -11
  950. package/dashboards/python/routes/skills.py +0 -59
  951. package/dashboards/python/routes/users.py +0 -43
  952. package/dashboards/python/routes/vault.py +0 -59
  953. package/dashboards/python/routes/workforce.py +0 -11
  954. package/dashboards/python/static/styles.css +0 -175
  955. package/dashboards/python/templates/activity.html +0 -87
  956. package/dashboards/python/templates/agent_detail.html +0 -552
  957. package/dashboards/python/templates/agents.html +0 -246
  958. package/dashboards/python/templates/api_keys.html +0 -64
  959. package/dashboards/python/templates/approvals.html +0 -86
  960. package/dashboards/python/templates/audit.html +0 -50
  961. package/dashboards/python/templates/community-skills.html +0 -69
  962. package/dashboards/python/templates/compliance.html +0 -74
  963. package/dashboards/python/templates/components/modal.html +0 -43
  964. package/dashboards/python/templates/components/stats.html +0 -26
  965. package/dashboards/python/templates/components/table.html +0 -43
  966. package/dashboards/python/templates/dashboard.html +0 -34
  967. package/dashboards/python/templates/dlp.html +0 -159
  968. package/dashboards/python/templates/domain-status.html +0 -64
  969. package/dashboards/python/templates/guardrails.html +0 -131
  970. package/dashboards/python/templates/journal.html +0 -66
  971. package/dashboards/python/templates/knowledge-contributions.html +0 -71
  972. package/dashboards/python/templates/knowledge.html +0 -69
  973. package/dashboards/python/templates/layout.html +0 -121
  974. package/dashboards/python/templates/login.html +0 -36
  975. package/dashboards/python/templates/messages.html +0 -90
  976. package/dashboards/python/templates/settings.html +0 -624
  977. package/dashboards/python/templates/skill-connections.html +0 -72
  978. package/dashboards/python/templates/skills.html +0 -89
  979. package/dashboards/python/templates/users.html +0 -70
  980. package/dashboards/python/templates/vault.html +0 -73
  981. package/dashboards/python/templates/workforce.html +0 -112
  982. package/dashboards/python/utils/__init__.py +0 -0
  983. package/dashboards/python/utils/api.py +0 -35
  984. package/dashboards/python/utils/helpers.py +0 -90
  985. package/dashboards/rails/app.rb +0 -64
  986. package/dashboards/rails/helpers/api.rb +0 -39
  987. package/dashboards/rails/helpers/auth.rb +0 -11
  988. package/dashboards/rails/helpers/view.rb +0 -95
  989. package/dashboards/rails/public/styles.css +0 -546
  990. package/dashboards/rails/routes/activity.rb +0 -10
  991. package/dashboards/rails/routes/agents.rb +0 -173
  992. package/dashboards/rails/routes/api_keys.rb +0 -30
  993. package/dashboards/rails/routes/approvals.rb +0 -10
  994. package/dashboards/rails/routes/audit.rb +0 -15
  995. package/dashboards/rails/routes/auth.rb +0 -29
  996. package/dashboards/rails/routes/community_skills.rb +0 -11
  997. package/dashboards/rails/routes/compliance.rb +0 -25
  998. package/dashboards/rails/routes/dashboard.rb +0 -13
  999. package/dashboards/rails/routes/dlp.rb +0 -40
  1000. package/dashboards/rails/routes/domain_status.rb +0 -16
  1001. package/dashboards/rails/routes/guardrails.rb +0 -51
  1002. package/dashboards/rails/routes/journal.rb +0 -24
  1003. package/dashboards/rails/routes/knowledge.rb +0 -11
  1004. package/dashboards/rails/routes/knowledge_contributions.rb +0 -12
  1005. package/dashboards/rails/routes/messages.rb +0 -22
  1006. package/dashboards/rails/routes/settings.rb +0 -196
  1007. package/dashboards/rails/routes/skill_connections.rb +0 -15
  1008. package/dashboards/rails/routes/skills.rb +0 -38
  1009. package/dashboards/rails/routes/users.rb +0 -18
  1010. package/dashboards/rails/routes/vault.rb +0 -37
  1011. package/dashboards/rails/routes/workforce.rb +0 -16
  1012. package/dashboards/rails/views/activity.erb +0 -56
  1013. package/dashboards/rails/views/agent_detail.erb +0 -550
  1014. package/dashboards/rails/views/agents.erb +0 -214
  1015. package/dashboards/rails/views/api_keys.erb +0 -52
  1016. package/dashboards/rails/views/approvals.erb +0 -60
  1017. package/dashboards/rails/views/audit.erb +0 -38
  1018. package/dashboards/rails/views/community_skills.erb +0 -69
  1019. package/dashboards/rails/views/compliance.erb +0 -69
  1020. package/dashboards/rails/views/dashboard.erb +0 -46
  1021. package/dashboards/rails/views/dlp.erb +0 -104
  1022. package/dashboards/rails/views/domain_status.erb +0 -75
  1023. package/dashboards/rails/views/guardrails.erb +0 -107
  1024. package/dashboards/rails/views/journal.erb +0 -65
  1025. package/dashboards/rails/views/knowledge.erb +0 -67
  1026. package/dashboards/rails/views/knowledge_contributions.erb +0 -70
  1027. package/dashboards/rails/views/layout.erb +0 -61
  1028. package/dashboards/rails/views/login.erb +0 -47
  1029. package/dashboards/rails/views/messages.erb +0 -62
  1030. package/dashboards/rails/views/settings.erb +0 -578
  1031. package/dashboards/rails/views/skill_connections.erb +0 -109
  1032. package/dashboards/rails/views/skills.erb +0 -66
  1033. package/dashboards/rails/views/users.erb +0 -53
  1034. package/dashboards/rails/views/vault.erb +0 -66
  1035. package/dashboards/rails/views/workforce.erb +0 -124
  1036. package/dashboards/ruby/app.rb +0 -74
  1037. package/dashboards/ruby/helpers/api.rb +0 -63
  1038. package/dashboards/ruby/helpers/auth.rb +0 -20
  1039. package/dashboards/ruby/helpers/view.rb +0 -91
  1040. package/dashboards/ruby/public/styles.css +0 -546
  1041. package/dashboards/ruby/routes/activity.rb +0 -10
  1042. package/dashboards/ruby/routes/agents.rb +0 -197
  1043. package/dashboards/ruby/routes/api_keys.rb +0 -43
  1044. package/dashboards/ruby/routes/approvals.rb +0 -10
  1045. package/dashboards/ruby/routes/audit.rb +0 -15
  1046. package/dashboards/ruby/routes/auth.rb +0 -29
  1047. package/dashboards/ruby/routes/community_skills.rb +0 -11
  1048. package/dashboards/ruby/routes/compliance.rb +0 -28
  1049. package/dashboards/ruby/routes/dashboard.rb +0 -13
  1050. package/dashboards/ruby/routes/dlp.rb +0 -55
  1051. package/dashboards/ruby/routes/domain_status.rb +0 -16
  1052. package/dashboards/ruby/routes/guardrails.rb +0 -77
  1053. package/dashboards/ruby/routes/journal.rb +0 -24
  1054. package/dashboards/ruby/routes/knowledge.rb +0 -11
  1055. package/dashboards/ruby/routes/knowledge_contributions.rb +0 -12
  1056. package/dashboards/ruby/routes/messages.rb +0 -27
  1057. package/dashboards/ruby/routes/settings.rb +0 -214
  1058. package/dashboards/ruby/routes/skill_connections.rb +0 -15
  1059. package/dashboards/ruby/routes/skills.rb +0 -50
  1060. package/dashboards/ruby/routes/users.rb +0 -26
  1061. package/dashboards/ruby/routes/vault.rb +0 -49
  1062. package/dashboards/ruby/routes/workforce.rb +0 -16
  1063. package/dashboards/ruby/views/activity.erb +0 -56
  1064. package/dashboards/ruby/views/agent_detail.erb +0 -550
  1065. package/dashboards/ruby/views/agents.erb +0 -214
  1066. package/dashboards/ruby/views/api_keys.erb +0 -59
  1067. package/dashboards/ruby/views/approvals.erb +0 -60
  1068. package/dashboards/ruby/views/audit.erb +0 -38
  1069. package/dashboards/ruby/views/community_skills.erb +0 -69
  1070. package/dashboards/ruby/views/compliance.erb +0 -45
  1071. package/dashboards/ruby/views/dashboard.erb +0 -46
  1072. package/dashboards/ruby/views/dlp.erb +0 -88
  1073. package/dashboards/ruby/views/domain_status.erb +0 -75
  1074. package/dashboards/ruby/views/guardrails.erb +0 -103
  1075. package/dashboards/ruby/views/journal.erb +0 -53
  1076. package/dashboards/ruby/views/knowledge.erb +0 -67
  1077. package/dashboards/ruby/views/knowledge_contributions.erb +0 -70
  1078. package/dashboards/ruby/views/layout.erb +0 -61
  1079. package/dashboards/ruby/views/login.erb +0 -31
  1080. package/dashboards/ruby/views/messages.erb +0 -51
  1081. package/dashboards/ruby/views/settings.erb +0 -579
  1082. package/dashboards/ruby/views/skill_connections.erb +0 -109
  1083. package/dashboards/ruby/views/skills.erb +0 -66
  1084. package/dashboards/ruby/views/users.erb +0 -53
  1085. package/dashboards/ruby/views/vault.erb +0 -66
  1086. package/dashboards/ruby/views/workforce.erb +0 -124
  1087. package/dashboards/shared/styles.css +0 -546
  1088. 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
- }