agim-cli 1.2.67 → 1.2.68

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 (155) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/web/public/assets/{a2a-pV7pUaE_.js → a2a-D5jnlU3x.js} +2 -2
  3. package/dist/web/public/assets/{a2a-pV7pUaE_.js.map → a2a-D5jnlU3x.js.map} +1 -1
  4. package/dist/web/public/assets/{activity-BtEeVbL4.js → activity-Ch5O6khO.js} +2 -2
  5. package/dist/web/public/assets/{activity-BtEeVbL4.js.map → activity-Ch5O6khO.js.map} +1 -1
  6. package/dist/web/public/assets/{admins-Cb6gyuWs.js → admins-_M1ylhz4.js} +2 -2
  7. package/dist/web/public/assets/{admins-Cb6gyuWs.js.map → admins-_M1ylhz4.js.map} +1 -1
  8. package/dist/web/public/assets/{agents-Bua9ZDtI.js → agents-ixbQiOsI.js} +2 -2
  9. package/dist/web/public/assets/{agents-Bua9ZDtI.js.map → agents-ixbQiOsI.js.map} +1 -1
  10. package/dist/web/public/assets/{approvals-DgxxWp1m.js → approvals-BrAHLmtR.js} +2 -2
  11. package/dist/web/public/assets/{approvals-DgxxWp1m.js.map → approvals-BrAHLmtR.js.map} +1 -1
  12. package/dist/web/public/assets/{asks-iON_EhzS.js → asks-DSSkZWYd.js} +2 -2
  13. package/dist/web/public/assets/{asks-iON_EhzS.js.map → asks-DSSkZWYd.js.map} +1 -1
  14. package/dist/web/public/assets/{audit-D1sPdKlD.js → audit-CgOnCOYX.js} +2 -2
  15. package/dist/web/public/assets/{audit-D1sPdKlD.js.map → audit-CgOnCOYX.js.map} +1 -1
  16. package/dist/web/public/assets/{bell-B5ZjxlmU.js → bell-DAEjZGtn.js} +2 -2
  17. package/dist/web/public/assets/{bell-B5ZjxlmU.js.map → bell-DAEjZGtn.js.map} +1 -1
  18. package/dist/web/public/assets/{bgjobs-DdnrqmC2.js → bgjobs-B9KPxiJl.js} +2 -2
  19. package/dist/web/public/assets/{bgjobs-DdnrqmC2.js.map → bgjobs-B9KPxiJl.js.map} +1 -1
  20. package/dist/web/public/assets/{brain-Bh8Xm53Q.js → brain-D7iZGtff.js} +2 -2
  21. package/dist/web/public/assets/{brain-Bh8Xm53Q.js.map → brain-D7iZGtff.js.map} +1 -1
  22. package/dist/web/public/assets/{briefcase-Tn3JuAZM.js → briefcase-DVifKdtB.js} +2 -2
  23. package/dist/web/public/assets/{briefcase-Tn3JuAZM.js.map → briefcase-DVifKdtB.js.map} +1 -1
  24. package/dist/web/public/assets/{chevron-right-Bu2Wni-B.js → chevron-right-ES5OLdHR.js} +2 -2
  25. package/dist/web/public/assets/{chevron-right-Bu2Wni-B.js.map → chevron-right-ES5OLdHR.js.map} +1 -1
  26. package/dist/web/public/assets/{circle-check-Bx222bW4.js → circle-check-B56tPP-z.js} +2 -2
  27. package/dist/web/public/assets/{circle-check-Bx222bW4.js.map → circle-check-B56tPP-z.js.map} +1 -1
  28. package/dist/web/public/assets/{circle-check-big-BAGOp63h.js → circle-check-big-krrxgPiD.js} +2 -2
  29. package/dist/web/public/assets/{circle-check-big-BAGOp63h.js.map → circle-check-big-krrxgPiD.js.map} +1 -1
  30. package/dist/web/public/assets/{circle-x-DYSUbjfb.js → circle-x-D6zUfmKm.js} +2 -2
  31. package/dist/web/public/assets/{circle-x-DYSUbjfb.js.map → circle-x-D6zUfmKm.js.map} +1 -1
  32. package/dist/web/public/assets/{confirm-dialog-BkTngEE8.js → confirm-dialog-Dw9H-rCY.js} +2 -2
  33. package/dist/web/public/assets/{confirm-dialog-BkTngEE8.js.map → confirm-dialog-Dw9H-rCY.js.map} +1 -1
  34. package/dist/web/public/assets/{data-table-BlqccxTF.js → data-table-CTpyjb3w.js} +2 -2
  35. package/dist/web/public/assets/{data-table-BlqccxTF.js.map → data-table-CTpyjb3w.js.map} +1 -1
  36. package/dist/web/public/assets/{dialog-CMUp72oB.js → dialog-C65YjHki.js} +2 -2
  37. package/dist/web/public/assets/{dialog-CMUp72oB.js.map → dialog-C65YjHki.js.map} +1 -1
  38. package/dist/web/public/assets/{download-CB0cOUn8.js → download-DsbMB1e1.js} +2 -2
  39. package/dist/web/public/assets/{download-CB0cOUn8.js.map → download-DsbMB1e1.js.map} +1 -1
  40. package/dist/web/public/assets/{email-BCqfN_b2.js → email-CUJkdRDB.js} +2 -2
  41. package/dist/web/public/assets/{email-BCqfN_b2.js.map → email-CUJkdRDB.js.map} +1 -1
  42. package/dist/web/public/assets/{empty-state-DTC7UMRJ.js → empty-state-Cm17gTVv.js} +2 -2
  43. package/dist/web/public/assets/{empty-state-DTC7UMRJ.js.map → empty-state-Cm17gTVv.js.map} +1 -1
  44. package/dist/web/public/assets/{external-link-D7kkHOqE.js → external-link-e4jSLO58.js} +2 -2
  45. package/dist/web/public/assets/{external-link-D7kkHOqE.js.map → external-link-e4jSLO58.js.map} +1 -1
  46. package/dist/web/public/assets/{eye-KM8X6N9N.js → eye-CooHmujZ.js} +2 -2
  47. package/dist/web/public/assets/{eye-KM8X6N9N.js.map → eye-CooHmujZ.js.map} +1 -1
  48. package/dist/web/public/assets/{facts-mHIefs9t.js → facts-DynPEPya.js} +2 -2
  49. package/dist/web/public/assets/{facts-mHIefs9t.js.map → facts-DynPEPya.js.map} +1 -1
  50. package/dist/web/public/assets/{goals-DkW2jRda.js → goals-t0vB4Tfm.js} +2 -2
  51. package/dist/web/public/assets/{goals-DkW2jRda.js.map → goals-t0vB4Tfm.js.map} +1 -1
  52. package/dist/web/public/assets/{health-DqSq0_p8.js → health-B6Nf5nrQ.js} +2 -2
  53. package/dist/web/public/assets/{health-DqSq0_p8.js.map → health-B6Nf5nrQ.js.map} +1 -1
  54. package/dist/web/public/assets/{heart-pulse-Dw9UThda.js → heart-pulse-D167fJJk.js} +2 -2
  55. package/dist/web/public/assets/{heart-pulse-Dw9UThda.js.map → heart-pulse-D167fJJk.js.map} +1 -1
  56. package/dist/web/public/assets/{heartbeat-4Jqvt3ZG.js → heartbeat-mUU1PBDP.js} +2 -2
  57. package/dist/web/public/assets/{heartbeat-4Jqvt3ZG.js.map → heartbeat-mUU1PBDP.js.map} +1 -1
  58. package/dist/web/public/assets/{hot-DwVVYe_Q.js → hot-BSPUd7sX.js} +2 -2
  59. package/dist/web/public/assets/{hot-DwVVYe_Q.js.map → hot-BSPUd7sX.js.map} +1 -1
  60. package/dist/web/public/assets/{index-Dm4bHM0M.js → index-DG_LHVpy.js} +3 -3
  61. package/dist/web/public/assets/{index-Dm4bHM0M.js.map → index-DG_LHVpy.js.map} +1 -1
  62. package/dist/web/public/assets/{installed-CRBbM3d1.js → installed-BsoeXLFx.js} +2 -2
  63. package/dist/web/public/assets/{installed-CRBbM3d1.js.map → installed-BsoeXLFx.js.map} +1 -1
  64. package/dist/web/public/assets/{jobs-DvVu0NEB.js → jobs-HxUYTICT.js} +2 -2
  65. package/dist/web/public/assets/{jobs-DvVu0NEB.js.map → jobs-HxUYTICT.js.map} +1 -1
  66. package/dist/web/public/assets/{layout-DCrcKMGj.js → layout-7GnGj0lA.js} +2 -2
  67. package/dist/web/public/assets/{layout-DCrcKMGj.js.map → layout-7GnGj0lA.js.map} +1 -1
  68. package/dist/web/public/assets/{layout-Cq4zcQuI.js → layout-C_hnc_UF.js} +2 -2
  69. package/dist/web/public/assets/{layout-Cq4zcQuI.js.map → layout-C_hnc_UF.js.map} +1 -1
  70. package/dist/web/public/assets/{layout-C0Dmdrm6.js → layout-Cgu_PEw0.js} +2 -2
  71. package/dist/web/public/assets/{layout-C0Dmdrm6.js.map → layout-Cgu_PEw0.js.map} +1 -1
  72. package/dist/web/public/assets/{layout-CGvFOz3S.js → layout-CvOpVhvp.js} +2 -2
  73. package/dist/web/public/assets/{layout-CGvFOz3S.js.map → layout-CvOpVhvp.js.map} +1 -1
  74. package/dist/web/public/assets/{layout-N_ipr3nA.js → layout-IkZ1uemn.js} +2 -2
  75. package/dist/web/public/assets/{layout-N_ipr3nA.js.map → layout-IkZ1uemn.js.map} +1 -1
  76. package/dist/web/public/assets/{llm-DKruaUsd.js → llm-B2y8oyog.js} +2 -2
  77. package/dist/web/public/assets/{llm-DKruaUsd.js.map → llm-B2y8oyog.js.map} +1 -1
  78. package/dist/web/public/assets/{loader-circle-C8YCUz70.js → loader-circle-DPuvakPP.js} +2 -2
  79. package/dist/web/public/assets/{loader-circle-C8YCUz70.js.map → loader-circle-DPuvakPP.js.map} +1 -1
  80. package/dist/web/public/assets/{map-pin-wZRlA_mV.js → map-pin-DzrzVdfp.js} +2 -2
  81. package/dist/web/public/assets/{map-pin-wZRlA_mV.js.map → map-pin-DzrzVdfp.js.map} +1 -1
  82. package/dist/web/public/assets/{mcp-DJN2vM4F.js → mcp-BvjO6Qxb.js} +2 -2
  83. package/dist/web/public/assets/{mcp-DJN2vM4F.js.map → mcp-BvjO6Qxb.js.map} +1 -1
  84. package/dist/web/public/assets/{memos-zpcFJvTm.js → memos-bmjNc9qk.js} +2 -2
  85. package/dist/web/public/assets/{memos-zpcFJvTm.js.map → memos-bmjNc9qk.js.map} +1 -1
  86. package/dist/web/public/assets/{messengers-ClgibwCS.js → messengers-B5GHoXqI.js} +2 -2
  87. package/dist/web/public/assets/{messengers-ClgibwCS.js.map → messengers-B5GHoXqI.js.map} +1 -1
  88. package/dist/web/public/assets/{native-agent-7mZcks5Q.js → native-agent-yRX-IBe1.js} +2 -2
  89. package/dist/web/public/assets/{native-agent-7mZcks5Q.js.map → native-agent-yRX-IBe1.js.map} +1 -1
  90. package/dist/web/public/assets/{network-BN_4AVjH.js → network-Dac8A7p-.js} +2 -2
  91. package/dist/web/public/assets/{network-BN_4AVjH.js.map → network-Dac8A7p-.js.map} +1 -1
  92. package/dist/web/public/assets/{outbox-CqO2DN9r.js → outbox-Dx_FvKMP.js} +2 -2
  93. package/dist/web/public/assets/{outbox-CqO2DN9r.js.map → outbox-Dx_FvKMP.js.map} +1 -1
  94. package/dist/web/public/assets/{pagination-BN5IlfM7.js → pagination-D9B2d2q0.js} +2 -2
  95. package/dist/web/public/assets/{pagination-BN5IlfM7.js.map → pagination-D9B2d2q0.js.map} +1 -1
  96. package/dist/web/public/assets/{persona-CwiBUs53.js → persona-BXKRIYXm.js} +2 -2
  97. package/dist/web/public/assets/{persona-CwiBUs53.js.map → persona-BXKRIYXm.js.map} +1 -1
  98. package/dist/web/public/assets/{play-DH5aMHyg.js → play-BUdq9hBS.js} +2 -2
  99. package/dist/web/public/assets/{play-DH5aMHyg.js.map → play-BUdq9hBS.js.map} +1 -1
  100. package/dist/web/public/assets/{plus-m81LzTGp.js → plus-CuVC2G0S.js} +2 -2
  101. package/dist/web/public/assets/{plus-m81LzTGp.js.map → plus-CuVC2G0S.js.map} +1 -1
  102. package/dist/web/public/assets/{policy-C4LWbsG1.js → policy-D3lhzoun.js} +2 -2
  103. package/dist/web/public/assets/{policy-C4LWbsG1.js.map → policy-D3lhzoun.js.map} +1 -1
  104. package/dist/web/public/assets/{refresh-ccw-BVkrjmyW.js → refresh-ccw-KVbKtjsH.js} +2 -2
  105. package/dist/web/public/assets/{refresh-ccw-BVkrjmyW.js.map → refresh-ccw-KVbKtjsH.js.map} +1 -1
  106. package/dist/web/public/assets/{reminders-BSQoGyVb.js → reminders-CGyUyQBl.js} +2 -2
  107. package/dist/web/public/assets/{reminders-BSQoGyVb.js.map → reminders-CGyUyQBl.js.map} +1 -1
  108. package/dist/web/public/assets/{save-CODsafFB.js → save-CXEX7AiY.js} +2 -2
  109. package/dist/web/public/assets/{save-CODsafFB.js.map → save-CXEX7AiY.js.map} +1 -1
  110. package/dist/web/public/assets/{schedules-BBH1Ipyd.js → schedules-lWx5lIO-.js} +2 -2
  111. package/dist/web/public/assets/{schedules-BBH1Ipyd.js.map → schedules-lWx5lIO-.js.map} +1 -1
  112. package/dist/web/public/assets/{search-QcBNzBQ7.js → search-BxQJVSx8.js} +2 -2
  113. package/dist/web/public/assets/{search-QcBNzBQ7.js.map → search-BxQJVSx8.js.map} +1 -1
  114. package/dist/web/public/assets/security-DBfcNVw-.js +7 -0
  115. package/dist/web/public/assets/security-DBfcNVw-.js.map +1 -0
  116. package/dist/web/public/assets/{service-Dg3fHa1F.js → service-B5Xmuldn.js} +2 -2
  117. package/dist/web/public/assets/{service-Dg3fHa1F.js.map → service-B5Xmuldn.js.map} +1 -1
  118. package/dist/web/public/assets/{status-badge-COrk0PaU.js → status-badge-MM6M-eFF.js} +2 -2
  119. package/dist/web/public/assets/{status-badge-COrk0PaU.js.map → status-badge-MM6M-eFF.js.map} +1 -1
  120. package/dist/web/public/assets/{subtasks-BoKtrF6e.js → subtasks-B6MyfzRw.js} +2 -2
  121. package/dist/web/public/assets/{subtasks-BoKtrF6e.js.map → subtasks-B6MyfzRw.js.map} +1 -1
  122. package/dist/web/public/assets/{table-CO5iRHXX.js → table-DCYYH-Yk.js} +2 -2
  123. package/dist/web/public/assets/{table-CO5iRHXX.js.map → table-DCYYH-Yk.js.map} +1 -1
  124. package/dist/web/public/assets/{topn-CZpEJB9u.js → topn-CaRu8cFq.js} +2 -2
  125. package/dist/web/public/assets/{topn-CZpEJB9u.js.map → topn-CaRu8cFq.js.map} +1 -1
  126. package/dist/web/public/assets/{trash-2-Cb97xDdm.js → trash-2-BC232qKU.js} +2 -2
  127. package/dist/web/public/assets/{trash-2-Cb97xDdm.js.map → trash-2-BC232qKU.js.map} +1 -1
  128. package/dist/web/public/assets/{use-background-tasks-CJmddApa.js → use-background-tasks-B8Glf2JM.js} +2 -2
  129. package/dist/web/public/assets/{use-background-tasks-CJmddApa.js.map → use-background-tasks-B8Glf2JM.js.map} +1 -1
  130. package/dist/web/public/assets/{use-llm-admin-DszocDJN.js → use-llm-admin-DM34gUYq.js} +2 -2
  131. package/dist/web/public/assets/{use-llm-admin-DszocDJN.js.map → use-llm-admin-DM34gUYq.js.map} +1 -1
  132. package/dist/web/public/assets/{use-memory-fcO8b_OU.js → use-memory-BDlIEEfk.js} +2 -2
  133. package/dist/web/public/assets/{use-memory-fcO8b_OU.js.map → use-memory-BDlIEEfk.js.map} +1 -1
  134. package/dist/web/public/assets/{use-observability-C9g0QTLd.js → use-observability-D7ePifSS.js} +2 -2
  135. package/dist/web/public/assets/{use-observability-C9g0QTLd.js.map → use-observability-D7ePifSS.js.map} +1 -1
  136. package/dist/web/public/assets/{use-settings-Dvc5WX17.js → use-settings-D6y3lscb.js} +2 -2
  137. package/dist/web/public/assets/{use-settings-Dvc5WX17.js.map → use-settings-D6y3lscb.js.map} +1 -1
  138. package/dist/web/public/assets/{use-workspace-DoenH-EZ.js → use-workspace-C9WiGclY.js} +2 -2
  139. package/dist/web/public/assets/{use-workspace-DoenH-EZ.js.map → use-workspace-C9WiGclY.js.map} +1 -1
  140. package/dist/web/public/assets/{useQuery-CwP843k0.js → useQuery-D6icKl-l.js} +2 -2
  141. package/dist/web/public/assets/{useQuery-CwP843k0.js.map → useQuery-D6icKl-l.js.map} +1 -1
  142. package/dist/web/public/assets/{vector-tNx8IrnY.js → vector-DgyB8_1O.js} +2 -2
  143. package/dist/web/public/assets/{vector-tNx8IrnY.js.map → vector-DgyB8_1O.js.map} +1 -1
  144. package/dist/web/public/assets/{viewer-_tE5G30K.js → viewer-D6Lc51GN.js} +2 -2
  145. package/dist/web/public/assets/{viewer-_tE5G30K.js.map → viewer-D6Lc51GN.js.map} +1 -1
  146. package/dist/web/public/assets/{workspace-15Jilg2h.js → workspace-BB3GxkMv.js} +2 -2
  147. package/dist/web/public/assets/{workspace-15Jilg2h.js.map → workspace-BB3GxkMv.js.map} +1 -1
  148. package/dist/web/public/assets/{workspaces-nyFTRkZH.js → workspaces-DeZZzq6K.js} +2 -2
  149. package/dist/web/public/assets/{workspaces-nyFTRkZH.js.map → workspaces-DeZZzq6K.js.map} +1 -1
  150. package/dist/web/public/assets/{x-C7i8kvqL.js → x-CwtxXdNl.js} +2 -2
  151. package/dist/web/public/assets/{x-C7i8kvqL.js.map → x-CwtxXdNl.js.map} +1 -1
  152. package/dist/web/public/index.html +1 -1
  153. package/package.json +1 -1
  154. package/dist/web/public/assets/security-Cv5Tjnb3.js +0 -7
  155. package/dist/web/public/assets/security-Cv5Tjnb3.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"security-Cv5Tjnb3.js","sources":["../../node_modules/lucide-react/dist/esm/icons/shield-alert.js","../../src/routes/settings/security.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldAlert = createLucideIcon(\"ShieldAlert\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"M12 8v4\", key: \"1got3b\" }],\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }]\n]);\n\nexport { ShieldAlert as default };\n//# sourceMappingURL=shield-alert.js.map\n","/**\n * /settings/security — central console for v1.2.66 security controls.\n *\n * Lays out:\n * • Diagnostics card (read-only) — uid 0? env file perms? bwrap? allowlists configured?\n * • Sender allowlist (IMHUB_ALLOWED_USERS)\n * • Native exec (IMHUB_EXEC_SANDBOX, IMHUB_EXEC_SANDBOX_NET, IMHUB_EXEC_TIMEOUT_MS, IMHUB_EXEC_MAX_OUTPUT)\n * • Native web (IMHUB_NATIVE_WEB_ALLOW_PRIVATE, IMHUB_NATIVE_WEB_SSRF_WHITELIST, IMHUB_NATIVE_WEB_TIMEOUT_MS)\n * • Native fs (IMHUB_NATIVE_FS_RESTRICT, IMHUB_NATIVE_FS_TIMEOUT_MS)\n * • Delegation (IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN)\n *\n * All writes go through PUT /api/env (admin-gated). Most knobs are\n * hot-reloaded (read process.env per tool call); the exec sandbox +\n * sender allowlist apply at boot — service restart required.\n */\n\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { AlertTriangle, CheckCircle2, Loader2, RefreshCcw, ShieldAlert } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { useEnv, useUpdateEnv } from '@/hooks/use-settings'\nimport { client } from '@/lib/api/client'\nimport { describeError } from '@/lib/api/errors'\nimport { cn } from '@/lib/utils'\n\ninterface Diagnostics {\n runningAsRoot: boolean | null\n envFile: { exists: boolean; mode: string | null; tooPermissive: boolean }\n bwrapAvailable: boolean\n senderAllowlistConfigured: boolean\n adminAllowlistConfigured: boolean\n liveEnv: Record<string, string | null>\n}\n\nfunction envBool(v: string | undefined): boolean {\n if (v == null) return false\n const t = v.toLowerCase()\n return t === '1' || t === 'true' || t === 'yes' || t === 'on'\n}\n\nexport default function SettingsSecurityRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const envQuery = useEnv()\n const updateEnv = useUpdateEnv()\n const [diagnostics, setDiagnostics] = useState<Diagnostics | null>(null)\n const [diagLoading, setDiagLoading] = useState(false)\n\n async function loadDiagnostics(): Promise<void> {\n setDiagLoading(true)\n try {\n const res = await client.get<{ diagnostics: Diagnostics }>('/api/security/diagnostics')\n setDiagnostics(res.diagnostics)\n } catch (err) {\n toast.error(describeError(err, t).message)\n } finally {\n setDiagLoading(false)\n }\n }\n\n useEffect(() => { void loadDiagnostics() }, [])\n\n async function setValue(key: string, value: string | null): Promise<void> {\n try {\n await updateEnv.mutateAsync({ updates: { [key]: value } })\n toast.success(t('security.savingToast'))\n await loadDiagnostics()\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n const env = envQuery.data?.env ?? {}\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('security.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => { void envQuery.refetch(); void loadDiagnostics() }}\n disabled={envQuery.isFetching || diagLoading}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {envQuery.isFetching || diagLoading\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />\n }\n </Button>\n </div>\n <p className=\"text-sm text-muted\">{t('security.subtitle')}</p>\n </header>\n\n {/* Diagnostics card */}\n <section className=\"rounded-lg border border-border bg-card p-4\">\n <h2 className=\"mb-3 flex items-center gap-2 text-sm font-semibold\">\n <ShieldAlert className=\"h-4 w-4\" />\n {t('security.diagnostics.title')}\n </h2>\n {diagnostics ? (\n <ul className=\"grid gap-2 text-sm sm:grid-cols-2\">\n <DiagRow\n label={t('security.diagnostics.runningAsRoot')}\n ok={diagnostics.runningAsRoot === false}\n text={diagnostics.runningAsRoot === true ? t('security.diagnostics.runningAsRootHelp') : 'OK'}\n />\n <DiagRow\n label={t('security.diagnostics.envFilePerms')}\n ok={diagnostics.envFile.exists && !diagnostics.envFile.tooPermissive}\n text={\n !diagnostics.envFile.exists\n ? '—'\n : diagnostics.envFile.tooPermissive\n ? `${diagnostics.envFile.mode} — ${t('security.diagnostics.envFilePermsLax')}`\n : t('security.diagnostics.envFilePermsOk')\n }\n />\n <DiagRow\n label={t('security.diagnostics.bwrapAvailable')}\n ok={diagnostics.bwrapAvailable}\n text={diagnostics.bwrapAvailable ? '/usr/bin/bwrap' : t('security.diagnostics.bwrapMissing')}\n />\n <DiagRow\n label={t('security.diagnostics.senderAllowlist')}\n ok={diagnostics.senderAllowlistConfigured}\n text={diagnostics.senderAllowlistConfigured\n ? t('security.diagnostics.senderAllowlistOn')\n : t('security.diagnostics.senderAllowlistOff')\n }\n />\n <DiagRow\n label={t('security.diagnostics.adminAllowlist')}\n ok={diagnostics.adminAllowlistConfigured}\n text={diagnostics.adminAllowlistConfigured\n ? t('security.diagnostics.adminAllowlistOn')\n : t('security.diagnostics.adminAllowlistOff')\n }\n />\n </ul>\n ) : (\n <p className=\"text-sm text-muted\">…</p>\n )}\n </section>\n\n {/* Sender allowlist */}\n <ControlCard\n title={t('security.sender.title')}\n description={t('security.sender.description')}\n envKey=\"IMHUB_ALLOWED_USERS\"\n >\n <Input\n defaultValue={env.IMHUB_ALLOWED_USERS ?? ''}\n placeholder={t('security.sender.placeholder')}\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_ALLOWED_USERS', v === '' ? null : v)\n }}\n />\n </ControlCard>\n\n {/* Exec sandbox */}\n <ControlCard\n title={t('security.exec.title')}\n description={t('security.exec.description')}\n >\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <LabeledField label={t('security.exec.sandbox')}>\n <Select\n value={(env.IMHUB_EXEC_SANDBOX ?? '').toLowerCase()}\n onValueChange={(v) => void setValue('IMHUB_EXEC_SANDBOX', v === '' ? null : v)}\n >\n <SelectTrigger><SelectValue placeholder=\"—\" /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"\">{t('security.exec.sandboxNone')}</SelectItem>\n <SelectItem\n value=\"bwrap\"\n disabled={!diagnostics?.bwrapAvailable}\n >\n {t('security.exec.sandboxBwrap')}\n {!diagnostics?.bwrapAvailable && (\n <span className=\"ml-2 text-xs text-muted\">\n ({t('security.exec.sandboxBwrapMissing')})\n </span>\n )}\n </SelectItem>\n </SelectContent>\n </Select>\n </LabeledField>\n\n <LabeledField label={t('security.exec.sandboxNet')}>\n <Select\n value={(env.IMHUB_EXEC_SANDBOX_NET ?? '').toLowerCase() === 'off' ? 'off' : 'on'}\n onValueChange={(v) => void setValue('IMHUB_EXEC_SANDBOX_NET', v === 'off' ? 'off' : null)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"on\">{t('security.exec.sandboxNetOn')}</SelectItem>\n <SelectItem value=\"off\">{t('security.exec.sandboxNetOff')}</SelectItem>\n </SelectContent>\n </Select>\n </LabeledField>\n\n <LabeledField label={t('security.exec.timeoutMs')}>\n <Input\n type=\"number\"\n defaultValue={env.IMHUB_EXEC_TIMEOUT_MS ?? ''}\n placeholder=\"60000\"\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_EXEC_TIMEOUT_MS', v === '' ? null : v)\n }}\n />\n </LabeledField>\n\n <LabeledField label={t('security.exec.maxOutput')}>\n <Input\n type=\"number\"\n defaultValue={env.IMHUB_EXEC_MAX_OUTPUT ?? ''}\n placeholder=\"32768\"\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_EXEC_MAX_OUTPUT', v === '' ? null : v)\n }}\n />\n </LabeledField>\n </div>\n </ControlCard>\n\n {/* Web SSRF */}\n <ControlCard\n title={t('security.web.title')}\n description={t('security.web.description')}\n >\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <LabeledField label={t('security.web.allowPrivate')} hint={t('security.web.allowPrivateHelp')}>\n <Select\n value={envBool(env.IMHUB_NATIVE_WEB_ALLOW_PRIVATE) ? '1' : '0'}\n onValueChange={(v) => void setValue('IMHUB_NATIVE_WEB_ALLOW_PRIVATE', v === '1' ? '1' : null)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"0\">OFF</SelectItem>\n <SelectItem value=\"1\">ON</SelectItem>\n </SelectContent>\n </Select>\n </LabeledField>\n\n <LabeledField label={t('security.web.timeoutMs')}>\n <Input\n type=\"number\"\n defaultValue={env.IMHUB_NATIVE_WEB_TIMEOUT_MS ?? ''}\n placeholder=\"30000\"\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_NATIVE_WEB_TIMEOUT_MS', v === '' ? null : v)\n }}\n />\n </LabeledField>\n\n <div className=\"sm:col-span-2\">\n <LabeledField label={t('security.web.ssrfWhitelist')}>\n <Input\n defaultValue={env.IMHUB_NATIVE_WEB_SSRF_WHITELIST ?? ''}\n placeholder={t('security.web.ssrfWhitelistPlaceholder')}\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_NATIVE_WEB_SSRF_WHITELIST', v === '' ? null : v)\n }}\n />\n </LabeledField>\n </div>\n </div>\n </ControlCard>\n\n {/* FS */}\n <ControlCard\n title={t('security.fs.title')}\n description={t('security.fs.description')}\n >\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <LabeledField label={t('security.fs.restrict')}>\n <Select\n value={(env.IMHUB_NATIVE_FS_RESTRICT ?? '1') === '0' ? '0' : '1'}\n onValueChange={(v) => void setValue('IMHUB_NATIVE_FS_RESTRICT', v === '0' ? '0' : null)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"1\">{t('security.fs.restrictOn')}</SelectItem>\n <SelectItem value=\"0\">{t('security.fs.restrictOff')}</SelectItem>\n </SelectContent>\n </Select>\n </LabeledField>\n\n <LabeledField label={t('security.fs.timeoutMs')}>\n <Input\n type=\"number\"\n defaultValue={env.IMHUB_NATIVE_FS_TIMEOUT_MS ?? ''}\n placeholder=\"60000\"\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_NATIVE_FS_TIMEOUT_MS', v === '' ? null : v)\n }}\n />\n </LabeledField>\n </div>\n </ControlCard>\n\n {/* Delegation cap */}\n <ControlCard\n title={t('security.delegation.title')}\n description={t('security.delegation.description')}\n envKey=\"IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN\"\n >\n <Input\n type=\"number\"\n defaultValue={env.IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN ?? ''}\n placeholder=\"2\"\n onBlur={(e) => {\n const v = e.target.value.trim()\n void setValue('IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN', v === '' ? null : v)\n }}\n />\n </ControlCard>\n </div>\n )\n}\n\nfunction DiagRow({ label, ok, text }: { label: string; ok: boolean; text: string }): JSX.Element {\n return (\n <li className=\"flex items-start gap-2\">\n {ok\n ? <CheckCircle2 className=\"mt-0.5 h-4 w-4 shrink-0 text-success\" />\n : <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-warning\" />\n }\n <div className=\"flex-1\">\n <div className=\"font-medium\">{label}</div>\n <div className={cn('text-xs', ok ? 'text-muted' : 'text-warning')}>{text}</div>\n </div>\n </li>\n )\n}\n\nfunction ControlCard({\n title, description, envKey, children,\n}: { title: string; description: string; envKey?: string; children: React.ReactNode }): JSX.Element {\n return (\n <section className=\"rounded-lg border border-border bg-card p-4\">\n <div className=\"mb-2 flex flex-wrap items-baseline gap-2\">\n <h2 className=\"text-sm font-semibold\">{title}</h2>\n {envKey && <Badge variant=\"outline\" className=\"font-mono text-[10px]\">{envKey}</Badge>}\n </div>\n <p className=\"mb-3 text-xs text-muted\">{description}</p>\n {children}\n </section>\n )\n}\n\nfunction LabeledField({\n label, hint, children,\n}: { label: string; hint?: string; children: React.ReactNode }): JSX.Element {\n return (\n <div className=\"flex flex-col gap-1\">\n <label className=\"text-xs font-medium text-muted\">{label}</label>\n {children}\n {hint && <p className=\"text-[10px] text-muted\">{hint}</p>}\n </div>\n )\n}\n"],"names":["ShieldAlert","createLucideIcon","envBool","v","t","SettingsSecurityRoute","useTranslation","envQuery","useEnv","updateEnv","useUpdateEnv","diagnostics","setDiagnostics","useState","diagLoading","setDiagLoading","loadDiagnostics","res","client","err","toast","describeError","useEffect","setValue","key","value","env","jsxs","jsx","Button","Loader2","RefreshCcw","DiagRow","ControlCard","Input","e","LabeledField","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","label","ok","text","CheckCircle2","AlertTriangle","cn","title","description","envKey","children","Badge","hint"],"mappings":"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","x_google_ignoreList":[0]}