agim-cli 1.3.7 → 1.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/cli-ui/tui/app.js +1 -1
- package/dist/cli-ui/tui/app.js.map +1 -1
- package/dist/cli-ui/tui/markdown.d.ts +46 -2
- package/dist/cli-ui/tui/markdown.d.ts.map +1 -1
- package/dist/cli-ui/tui/markdown.js +362 -34
- package/dist/cli-ui/tui/markdown.js.map +1 -1
- package/dist/cli-ui/tui/markdown.test.d.ts +2 -0
- package/dist/cli-ui/tui/markdown.test.d.ts.map +1 -0
- package/dist/cli-ui/tui/markdown.test.js +240 -0
- package/dist/cli-ui/tui/markdown.test.js.map +1 -0
- package/dist/web/public/assets/{a2a-Bk51ozUt.js → a2a-D_I9ZX8i.js} +2 -2
- package/dist/web/public/assets/{a2a-Bk51ozUt.js.map → a2a-D_I9ZX8i.js.map} +1 -1
- package/dist/web/public/assets/{activity-DzKONPpA.js → activity-ZxWknBf9.js} +2 -2
- package/dist/web/public/assets/{activity-DzKONPpA.js.map → activity-ZxWknBf9.js.map} +1 -1
- package/dist/web/public/assets/{admins-CmZ4eQnt.js → admins-DFZcKgq0.js} +2 -2
- package/dist/web/public/assets/{admins-CmZ4eQnt.js.map → admins-DFZcKgq0.js.map} +1 -1
- package/dist/web/public/assets/{agents-lj76gn9U.js → agents-DTONSU0R.js} +2 -2
- package/dist/web/public/assets/{agents-lj76gn9U.js.map → agents-DTONSU0R.js.map} +1 -1
- package/dist/web/public/assets/{approvals-C5-3WBcb.js → approvals-BdDJvH8b.js} +2 -2
- package/dist/web/public/assets/{approvals-C5-3WBcb.js.map → approvals-BdDJvH8b.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-DAjYgwW2.js → arrow-down-Bhl7hNwa.js} +2 -2
- package/dist/web/public/assets/{arrow-down-DAjYgwW2.js.map → arrow-down-Bhl7hNwa.js.map} +1 -1
- package/dist/web/public/assets/{arrow-up-Cba9TuAO.js → arrow-up-DZLw3qr1.js} +2 -2
- package/dist/web/public/assets/{arrow-up-Cba9TuAO.js.map → arrow-up-DZLw3qr1.js.map} +1 -1
- package/dist/web/public/assets/{asks-qlttx_de.js → asks-Cj2QazUD.js} +2 -2
- package/dist/web/public/assets/{asks-qlttx_de.js.map → asks-Cj2QazUD.js.map} +1 -1
- package/dist/web/public/assets/{audit-CSjpfK6P.js → audit-sxS7UUa6.js} +2 -2
- package/dist/web/public/assets/{audit-CSjpfK6P.js.map → audit-sxS7UUa6.js.map} +1 -1
- package/dist/web/public/assets/{bell-Dm9oEZR5.js → bell-CqimaF3k.js} +2 -2
- package/dist/web/public/assets/{bell-Dm9oEZR5.js.map → bell-CqimaF3k.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-IOX_MrKV.js → bgjobs-BnXdz4TP.js} +2 -2
- package/dist/web/public/assets/{bgjobs-IOX_MrKV.js.map → bgjobs-BnXdz4TP.js.map} +1 -1
- package/dist/web/public/assets/{brain-D24bSBeM.js → brain-4TIClaVZ.js} +2 -2
- package/dist/web/public/assets/{brain-D24bSBeM.js.map → brain-4TIClaVZ.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-BrIzC9EZ.js → briefcase-iKF60CJd.js} +2 -2
- package/dist/web/public/assets/{briefcase-BrIzC9EZ.js.map → briefcase-iKF60CJd.js.map} +1 -1
- package/dist/web/public/assets/{chat-DXki5zbL.js → chat-Cjp0ECm5.js} +2 -2
- package/dist/web/public/assets/{chat-DXki5zbL.js.map → chat-Cjp0ECm5.js.map} +1 -1
- package/dist/web/public/assets/{chevron-left-C8Ha_lMZ.js → chevron-left-sZyMkeG-.js} +2 -2
- package/dist/web/public/assets/{chevron-left-C8Ha_lMZ.js.map → chevron-left-sZyMkeG-.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-LF_j8BGd.js → chevron-right-CPHPRLSX.js} +2 -2
- package/dist/web/public/assets/{chevron-right-LF_j8BGd.js.map → chevron-right-CPHPRLSX.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-CpSR3rJi.js → circle-check-BB11MxVm.js} +2 -2
- package/dist/web/public/assets/{circle-check-CpSR3rJi.js.map → circle-check-BB11MxVm.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-Dbz0XziN.js → circle-check-big-Sj-6H_3x.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-Dbz0XziN.js.map → circle-check-big-Sj-6H_3x.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-XWMjbfp5.js → circle-x-DYcD4BUu.js} +2 -2
- package/dist/web/public/assets/{circle-x-XWMjbfp5.js.map → circle-x-DYcD4BUu.js.map} +1 -1
- package/dist/web/public/assets/{clock-BjVFYz37.js → clock-BVXa81yB.js} +2 -2
- package/dist/web/public/assets/{clock-BjVFYz37.js.map → clock-BVXa81yB.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-C8nuBNh3.js → confirm-dialog-C2melodU.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-C8nuBNh3.js.map → confirm-dialog-C2melodU.js.map} +1 -1
- package/dist/web/public/assets/{copy-BUxvUnbP.js → copy-D1OIgfLU.js} +2 -2
- package/dist/web/public/assets/{copy-BUxvUnbP.js.map → copy-D1OIgfLU.js.map} +1 -1
- package/dist/web/public/assets/{data-table-BHctKsHM.js → data-table-BYJ2qMyY.js} +2 -2
- package/dist/web/public/assets/{data-table-BHctKsHM.js.map → data-table-BYJ2qMyY.js.map} +1 -1
- package/dist/web/public/assets/{download-C0hikBL7.js → download-BChufhnl.js} +2 -2
- package/dist/web/public/assets/{download-C0hikBL7.js.map → download-BChufhnl.js.map} +1 -1
- package/dist/web/public/assets/{email-D940p9kF.js → email-exon2FvQ.js} +2 -2
- package/dist/web/public/assets/{email-D940p9kF.js.map → email-exon2FvQ.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-BzzUgjlL.js → empty-state-De5ls0uC.js} +2 -2
- package/dist/web/public/assets/{empty-state-BzzUgjlL.js.map → empty-state-De5ls0uC.js.map} +1 -1
- package/dist/web/public/assets/{external-link-Cjuz11n7.js → external-link-CiJZi5YL.js} +2 -2
- package/dist/web/public/assets/{external-link-Cjuz11n7.js.map → external-link-CiJZi5YL.js.map} +1 -1
- package/dist/web/public/assets/{eye-DVQjbb2Z.js → eye-DowB5M1R.js} +2 -2
- package/dist/web/public/assets/{eye-DVQjbb2Z.js.map → eye-DowB5M1R.js.map} +1 -1
- package/dist/web/public/assets/{facts-C4hVaO6t.js → facts-BdnrzWfV.js} +2 -2
- package/dist/web/public/assets/{facts-C4hVaO6t.js.map → facts-BdnrzWfV.js.map} +1 -1
- package/dist/web/public/assets/{goals-89sYO75m.js → goals-D6ibCBqb.js} +2 -2
- package/dist/web/public/assets/{goals-89sYO75m.js.map → goals-D6ibCBqb.js.map} +1 -1
- package/dist/web/public/assets/{health-CKfZBddX.js → health-BA8ydz1A.js} +2 -2
- package/dist/web/public/assets/{health-CKfZBddX.js.map → health-BA8ydz1A.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-BfYs3KFD.js → heart-pulse-ClrbGrB7.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-BfYs3KFD.js.map → heart-pulse-ClrbGrB7.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-oKkyHWgV.js → heartbeat-j03zupAy.js} +2 -2
- package/dist/web/public/assets/{heartbeat-oKkyHWgV.js.map → heartbeat-j03zupAy.js.map} +1 -1
- package/dist/web/public/assets/{hot-Cas_nZv9.js → hot-D3bwuObi.js} +2 -2
- package/dist/web/public/assets/{hot-Cas_nZv9.js.map → hot-D3bwuObi.js.map} +1 -1
- package/dist/web/public/assets/{index-B795P_3p.js → index-DvWldAJY.js} +15 -15
- package/dist/web/public/assets/{index-B795P_3p.js.map → index-DvWldAJY.js.map} +1 -1
- package/dist/web/public/assets/{injection-DksSjIsi.js → injection-C89g9123.js} +2 -2
- package/dist/web/public/assets/{injection-DksSjIsi.js.map → injection-C89g9123.js.map} +1 -1
- package/dist/web/public/assets/{installed-DWq0Eluy.js → installed-1Hal8dxW.js} +2 -2
- package/dist/web/public/assets/{installed-DWq0Eluy.js.map → installed-1Hal8dxW.js.map} +1 -1
- package/dist/web/public/assets/{jobs-CqY-xtBr.js → jobs-cQ7V-7ec.js} +2 -2
- package/dist/web/public/assets/{jobs-CqY-xtBr.js.map → jobs-cQ7V-7ec.js.map} +1 -1
- package/dist/web/public/assets/{layout-DsoDxB0i.js → layout-BbRAk_tA.js} +2 -2
- package/dist/web/public/assets/{layout-DsoDxB0i.js.map → layout-BbRAk_tA.js.map} +1 -1
- package/dist/web/public/assets/{layout-CqgDOB5t.js → layout-CXGgZCd2.js} +2 -2
- package/dist/web/public/assets/{layout-CqgDOB5t.js.map → layout-CXGgZCd2.js.map} +1 -1
- package/dist/web/public/assets/{layout-Cltp3ikG.js → layout-CZ9hb8_a.js} +2 -2
- package/dist/web/public/assets/{layout-Cltp3ikG.js.map → layout-CZ9hb8_a.js.map} +1 -1
- package/dist/web/public/assets/{layout-BiAVhWgU.js → layout-U5o6RgqN.js} +2 -2
- package/dist/web/public/assets/{layout-BiAVhWgU.js.map → layout-U5o6RgqN.js.map} +1 -1
- package/dist/web/public/assets/{layout-BodTIhhE.js → layout-Y9JSZczb.js} +2 -2
- package/dist/web/public/assets/{layout-BodTIhhE.js.map → layout-Y9JSZczb.js.map} +1 -1
- package/dist/web/public/assets/{llm-D3Kd9gqa.js → llm-CumYZM83.js} +2 -2
- package/dist/web/public/assets/{llm-D3Kd9gqa.js.map → llm-CumYZM83.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-DsLQMvHE.js → loader-circle-CZQXsfz7.js} +2 -2
- package/dist/web/public/assets/{loader-circle-DsLQMvHE.js.map → loader-circle-CZQXsfz7.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-e694Eet6.js → map-pin-CYj0xBbt.js} +2 -2
- package/dist/web/public/assets/{map-pin-e694Eet6.js.map → map-pin-CYj0xBbt.js.map} +1 -1
- package/dist/web/public/assets/{mcp-BoWJqog4.js → mcp-DP4Vj1Nh.js} +2 -2
- package/dist/web/public/assets/{mcp-BoWJqog4.js.map → mcp-DP4Vj1Nh.js.map} +1 -1
- package/dist/web/public/assets/{memos-C81bimPJ.js → memos-ZDpt1S28.js} +2 -2
- package/dist/web/public/assets/{memos-C81bimPJ.js.map → memos-ZDpt1S28.js.map} +1 -1
- package/dist/web/public/assets/{messengers-CGcjXUeJ.js → messengers-B007J8et.js} +2 -2
- package/dist/web/public/assets/{messengers-CGcjXUeJ.js.map → messengers-B007J8et.js.map} +1 -1
- package/dist/web/public/assets/{mobile-Duy_If5A.js → mobile-Crm0YJ36.js} +2 -2
- package/dist/web/public/assets/{mobile-Duy_If5A.js.map → mobile-Crm0YJ36.js.map} +1 -1
- package/dist/web/public/assets/{network-DnBhCncp.js → network-BYbGwOEp.js} +2 -2
- package/dist/web/public/assets/{network-DnBhCncp.js.map → network-BYbGwOEp.js.map} +1 -1
- package/dist/web/public/assets/{outbox-DrReVtHr.js → outbox-D7xZ5y2T.js} +2 -2
- package/dist/web/public/assets/{outbox-DrReVtHr.js.map → outbox-D7xZ5y2T.js.map} +1 -1
- package/dist/web/public/assets/{pagination-DgS8vaZM.js → pagination-bzSoQOAd.js} +2 -2
- package/dist/web/public/assets/{pagination-DgS8vaZM.js.map → pagination-bzSoQOAd.js.map} +1 -1
- package/dist/web/public/assets/{persona-NTg-RuPa.js → persona-VT6A3VYL.js} +2 -2
- package/dist/web/public/assets/{persona-NTg-RuPa.js.map → persona-VT6A3VYL.js.map} +1 -1
- package/dist/web/public/assets/{plans-CUsr4aMb.js → plans-b4DAc_3a.js} +2 -2
- package/dist/web/public/assets/{plans-CUsr4aMb.js.map → plans-b4DAc_3a.js.map} +1 -1
- package/dist/web/public/assets/{play-G96k2QBR.js → play-SPYhVFeC.js} +2 -2
- package/dist/web/public/assets/{play-G96k2QBR.js.map → play-SPYhVFeC.js.map} +1 -1
- package/dist/web/public/assets/{plus-6RZ3XScp.js → plus-D__n9IVW.js} +2 -2
- package/dist/web/public/assets/{plus-6RZ3XScp.js.map → plus-D__n9IVW.js.map} +1 -1
- package/dist/web/public/assets/{policy-BFlQnPo5.js → policy-CWeiR9UO.js} +2 -2
- package/dist/web/public/assets/{policy-BFlQnPo5.js.map → policy-CWeiR9UO.js.map} +1 -1
- package/dist/web/public/assets/{qr-code-L7ClZ31U.js → qr-code-BqDQw03Z.js} +2 -2
- package/dist/web/public/assets/{qr-code-L7ClZ31U.js.map → qr-code-BqDQw03Z.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-S3sFYfDb.js → refresh-ccw-CW2loqyz.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-S3sFYfDb.js.map → refresh-ccw-CW2loqyz.js.map} +1 -1
- package/dist/web/public/assets/{reminders-DVzHdBpK.js → reminders-BAl8NC0R.js} +2 -2
- package/dist/web/public/assets/{reminders-DVzHdBpK.js.map → reminders-BAl8NC0R.js.map} +1 -1
- package/dist/web/public/assets/{save-DetwgDjo.js → save-DzWp78MC.js} +2 -2
- package/dist/web/public/assets/{save-DetwgDjo.js.map → save-DzWp78MC.js.map} +1 -1
- package/dist/web/public/assets/{schedules-CslP2Ntr.js → schedules-6cyfjv0O.js} +2 -2
- package/dist/web/public/assets/{schedules-CslP2Ntr.js.map → schedules-6cyfjv0O.js.map} +1 -1
- package/dist/web/public/assets/{search-ByHc__pY.js → search-Bh7gD1Aq.js} +2 -2
- package/dist/web/public/assets/{search-ByHc__pY.js.map → search-Bh7gD1Aq.js.map} +1 -1
- package/dist/web/public/assets/{search-Bx2TNvqF.js → search-DVWPME2t.js} +2 -2
- package/dist/web/public/assets/{search-Bx2TNvqF.js.map → search-DVWPME2t.js.map} +1 -1
- package/dist/web/public/assets/{security-B4dw2-ZU.js → security-DlZ_rDwC.js} +2 -2
- package/dist/web/public/assets/{security-B4dw2-ZU.js.map → security-DlZ_rDwC.js.map} +1 -1
- package/dist/web/public/assets/{service-LujRx8DT.js → service-DKkji52r.js} +2 -2
- package/dist/web/public/assets/{service-LujRx8DT.js.map → service-DKkji52r.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-BM2sbwiD.js → shield-alert-5pYX52s1.js} +2 -2
- package/dist/web/public/assets/{shield-alert-BM2sbwiD.js.map → shield-alert-5pYX52s1.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-Bz0a-nE1.js → status-badge-W8PRNBT2.js} +2 -2
- package/dist/web/public/assets/{status-badge-Bz0a-nE1.js.map → status-badge-W8PRNBT2.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-BEAppda9.js → subtasks-DSvOTpF0.js} +2 -2
- package/dist/web/public/assets/{subtasks-BEAppda9.js.map → subtasks-DSvOTpF0.js.map} +1 -1
- package/dist/web/public/assets/{table-Dl8Faxz-.js → table-B695Fh_p.js} +2 -2
- package/dist/web/public/assets/{table-Dl8Faxz-.js.map → table-B695Fh_p.js.map} +1 -1
- package/dist/web/public/assets/{topn-CXTn3Qdn.js → topn-DqUC9bYh.js} +2 -2
- package/dist/web/public/assets/{topn-CXTn3Qdn.js.map → topn-DqUC9bYh.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-DUSLukqd.js → trash-2-DH4UNSUm.js} +2 -2
- package/dist/web/public/assets/{trash-2-DUSLukqd.js.map → trash-2-DH4UNSUm.js.map} +1 -1
- package/dist/web/public/assets/{use-agim-skills-BD1AIi8d.js → use-agim-skills-BD17YQCK.js} +2 -2
- package/dist/web/public/assets/{use-agim-skills-BD1AIi8d.js.map → use-agim-skills-BD17YQCK.js.map} +1 -1
- package/dist/web/public/assets/{use-background-tasks-FuodO-_C.js → use-background-tasks-Clyo1IGE.js} +2 -2
- package/dist/web/public/assets/{use-background-tasks-FuodO-_C.js.map → use-background-tasks-Clyo1IGE.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-4xOyJX4L.js → use-memory-BGvVWIQX.js} +2 -2
- package/dist/web/public/assets/{use-memory-4xOyJX4L.js.map → use-memory-BGvVWIQX.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-DMebP5-1.js → use-observability-IlURblVq.js} +2 -2
- package/dist/web/public/assets/{use-observability-DMebP5-1.js.map → use-observability-IlURblVq.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-GPajsGBB.js → use-settings-DFTGCq8J.js} +2 -2
- package/dist/web/public/assets/{use-settings-GPajsGBB.js.map → use-settings-DFTGCq8J.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-C6qix-sY.js → use-workspace-DaXX6QdK.js} +2 -2
- package/dist/web/public/assets/{use-workspace-C6qix-sY.js.map → use-workspace-DaXX6QdK.js.map} +1 -1
- package/dist/web/public/assets/{vector-hGc2RFNQ.js → vector-CKUwZBiK.js} +2 -2
- package/dist/web/public/assets/{vector-hGc2RFNQ.js.map → vector-CKUwZBiK.js.map} +1 -1
- package/dist/web/public/assets/{viewer-YkLMRkmd.js → viewer-edlHJiVg.js} +2 -2
- package/dist/web/public/assets/{viewer-YkLMRkmd.js.map → viewer-edlHJiVg.js.map} +1 -1
- package/dist/web/public/assets/{workspace-0GRMLd5j.js → workspace-B0jlv7Gj.js} +2 -2
- package/dist/web/public/assets/{workspace-0GRMLd5j.js.map → workspace-B0jlv7Gj.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-DPa7ByRm.js → workspaces-_Ho1uiD-.js} +2 -2
- package/dist/web/public/assets/{workspaces-DPa7ByRm.js.map → workspaces-_Ho1uiD-.js.map} +1 -1
- package/dist/web/public/index.html +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-D3Kd9gqa.js","sources":["../../node_modules/lucide-react/dist/esm/icons/cpu.js","../../node_modules/lucide-react/dist/esm/icons/file-stack.js","../../node_modules/lucide-react/dist/esm/icons/gauge.js","../../node_modules/lucide-react/dist/esm/icons/waves.js","../../node_modules/lucide-react/dist/esm/icons/zap.js","../../src/routes/settings/native-agent.tsx","../../src/routes/settings/llm.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 Cpu = createLucideIcon(\"Cpu\", [\n [\"rect\", { width: \"16\", height: \"16\", x: \"4\", y: \"4\", rx: \"2\", key: \"14l7u7\" }],\n [\"rect\", { width: \"6\", height: \"6\", x: \"9\", y: \"9\", rx: \"1\", key: \"5aljv4\" }],\n [\"path\", { d: \"M15 2v2\", key: \"13l42r\" }],\n [\"path\", { d: \"M15 20v2\", key: \"15mkzm\" }],\n [\"path\", { d: \"M2 15h2\", key: \"1gxd5l\" }],\n [\"path\", { d: \"M2 9h2\", key: \"1bbxkp\" }],\n [\"path\", { d: \"M20 15h2\", key: \"19e6y8\" }],\n [\"path\", { d: \"M20 9h2\", key: \"19tzq7\" }],\n [\"path\", { d: \"M9 2v2\", key: \"165o2o\" }],\n [\"path\", { d: \"M9 20v2\", key: \"i2bqo8\" }]\n]);\n\nexport { Cpu as default };\n//# sourceMappingURL=cpu.js.map\n","/**\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 FileStack = createLucideIcon(\"FileStack\", [\n [\"path\", { d: \"M21 7h-3a2 2 0 0 1-2-2V2\", key: \"9rb54x\" }],\n [\n \"path\",\n {\n d: \"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17Z\",\n key: \"1059l0\"\n }\n ],\n [\"path\", { d: \"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15\", key: \"16874u\" }],\n [\"path\", { d: \"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11\", key: \"k2ox98\" }]\n]);\n\nexport { FileStack as default };\n//# sourceMappingURL=file-stack.js.map\n","/**\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 Gauge = createLucideIcon(\"Gauge\", [\n [\"path\", { d: \"m12 14 4-4\", key: \"9kzdfg\" }],\n [\"path\", { d: \"M3.34 19a10 10 0 1 1 17.32 0\", key: \"19p75a\" }]\n]);\n\nexport { Gauge as default };\n//# sourceMappingURL=gauge.js.map\n","/**\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 Waves = createLucideIcon(\"Waves\", [\n [\n \"path\",\n {\n d: \"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"knzxuh\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"2jd2cc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"rd2r6e\"\n }\n ]\n]);\n\nexport { Waves as default };\n//# sourceMappingURL=waves.js.map\n","/**\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 Zap = createLucideIcon(\"Zap\", [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n]);\n\nexport { Zap as default };\n//# sourceMappingURL=zap.js.map\n","/**\n * /settings/native-agent — focused env editor for Agim Agent +\n * notification evaluator + heartbeat (Stage 6).\n *\n * All three subsystems are env-driven; their env keys are already in\n * ENV_EDITABLE_KEYS so the generic /api/env GET+PUT pair works. This\n * page just gives them a curated form so operators don't have to dig\n * through the 200+-key generic env editor.\n *\n * The actual model API selection (which LLM, which role) lives on\n * /settings/llm; this module covers behavioral knobs.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Bell, Cpu, FileStack, Gauge, HeartPulse, Loader2, Network,\n RefreshCcw, Save, ShieldAlert, Waves, X,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport { useEnv, useUpdateEnv } from '@/hooks/use-settings'\n\ntype ApprovalMode = 'allow-all' | 'read-only' | 'allow-list' | 'deny-all'\n\ninterface Draft {\n // Agim Agent\n role: string\n mode: ApprovalMode\n autoAllow: string\n denyList: string\n // Notification evaluator\n evalEnabled: boolean\n evalSources: string\n // Heartbeat\n hbEnabled: boolean\n hbTickMs: string\n hbDefaultMin: string\n // v1.2.126 — runtime caps (each one optional / empty = use default)\n toolResultCap: string\n toolTimeoutMs: string\n blankRetryMax: string\n lengthRecoveryMax: string\n // v1.2.127 — A2A 子 Agent 派生\n a2aMaxDepth: string\n a2aTimeoutMs: string\n callAgentInProcess: boolean\n callAgentMaxPerTurn: string\n // v1.2.127 — 早停 + 复盘\n semanticStuckLoop: boolean\n criticEnabled: boolean\n criticRole: string\n planModeDefault: boolean\n // v1.2.135 — heuristic auto-enter on plan-intent keywords\n planIntentAuto: boolean\n planIntentPhrases: string\n // v1.2.127 — Auto-compact 4 旋钮(OpenHands Condenser)\n compactTriggerChars: string\n compactKeepTurns: string\n compactKeepFirst: string\n compactSummaryChars: string\n // v1.2.127 — 流式 + 迭代\n streamPartial: boolean\n maxIter: string\n}\n\nfunction draftFromEnv(env: Record<string, string>): Draft {\n return {\n role: env.IMHUB_NATIVE_AGENT_ROLE ?? '',\n mode: (env.IMHUB_NATIVE_AGENT_MODE as ApprovalMode | undefined) || 'read-only',\n autoAllow: env.IMHUB_NATIVE_AGENT_AUTOALLOW ?? '',\n denyList: env.IMHUB_NATIVE_AGENT_DENYLIST ?? '',\n evalEnabled: isTruthy(env.IMHUB_NOTIFICATION_EVALUATOR),\n evalSources: env.IMHUB_NOTIFICATION_EVALUATOR_SOURCES ?? '',\n hbEnabled: isTruthy(env.IMHUB_HEARTBEAT_ENABLED),\n hbTickMs: env.IMHUB_HEARTBEAT_TICK_INTERVAL_MS ?? '',\n hbDefaultMin: env.IMHUB_HEARTBEAT_DEFAULT_INTERVAL_MIN ?? '',\n toolResultCap: env.IMHUB_NATIVE_TOOL_RESULT_MAX_CHARS ?? '',\n toolTimeoutMs: env.IMHUB_NATIVE_TOOL_TIMEOUT_MS ?? '',\n blankRetryMax: env.IMHUB_NATIVE_BLANK_RETRY_MAX ?? '',\n lengthRecoveryMax: env.IMHUB_NATIVE_LENGTH_RECOVERY_MAX ?? '',\n a2aMaxDepth: env.IMHUB_A2A_MAX_DEPTH ?? '',\n a2aTimeoutMs: env.IMHUB_A2A_TIMEOUT_DEFAULT_MS ?? '',\n // Default ON: only 'off' / '0' / 'no' / 'false' disable.\n callAgentInProcess: !isFalsy(env.IMHUB_NATIVE_CALL_AGENT_IN_PROCESS),\n callAgentMaxPerTurn: env.IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN ?? '',\n semanticStuckLoop: !isFalsy(env.IMHUB_NATIVE_SEMANTIC_STUCK_LOOP),\n criticEnabled: isTruthy(env.IMHUB_NATIVE_CRITIC),\n criticRole: env.IMHUB_NATIVE_CRITIC_ROLE ?? '',\n planModeDefault: isTruthy(env.IMHUB_NATIVE_PLAN_MODE),\n planIntentAuto: isTruthy(env.IMHUB_PLAN_INTENT_AUTO),\n planIntentPhrases: env.IMHUB_PLAN_INTENT_PHRASES ?? '',\n compactTriggerChars: env.IMHUB_NATIVE_COMPACT_TRIGGER_CHARS ?? '',\n compactKeepTurns: env.IMHUB_NATIVE_COMPACT_KEEP_TURNS ?? '',\n compactKeepFirst: env.IMHUB_NATIVE_COMPACT_KEEP_FIRST ?? '',\n compactSummaryChars: env.IMHUB_NATIVE_COMPACT_SUMMARY_CHARS ?? '',\n streamPartial: !isFalsy(env.IMHUB_NATIVE_STREAM_PARTIAL),\n maxIter: env.IMHUB_NATIVE_AGENT_MAX_ITER ?? '',\n }\n}\n\n/** Mirror of the native-side parser: 'off' / '0' / 'no' / 'false'\n * (case-insensitive) disables a feature whose default is ON. Empty\n * string means \"not set\" — caller decides whether that's ON or OFF\n * depending on the variable's default. */\nfunction isFalsy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase().trim()\n return s === 'off' || s === 'false' || s === '0' || s === 'no'\n}\n\nfunction isTruthy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase()\n return s === '1' || s === 'true' || s === 'yes' || s === 'on'\n}\n\nfunction SubtitleWithLlmLink(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const subtitle = t('nativeAgent.subtitle')\n const link = t('nativeAgent.llmLink')\n const idx = subtitle.indexOf(link)\n if (idx === -1) {\n return <p className=\"text-sm text-text-dim\">{subtitle}</p>\n }\n return (\n <p className=\"text-sm text-text-dim\">\n {subtitle.slice(0, idx)}\n <a className=\"underline\" href={link}>{link}</a>\n {subtitle.slice(idx + link.length)}\n </p>\n )\n}\n\nexport default function SettingsNativeAgentRoute(): JSX.Element {\n return <NativeAgentSettingsPanel />\n}\n\nexport interface NativeAgentSettingsPanelProps {\n embedded?: boolean\n}\n\nexport function NativeAgentSettingsPanel({ embedded = false }: NativeAgentSettingsPanelProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const envQuery = useEnv({ reveal: false })\n const updateEnv = useUpdateEnv()\n\n const envData = envQuery.data?.env ?? {}\n const current = useMemo(() => draftFromEnv(envData), [envData])\n const [draft, setDraft] = useState<Draft>(current)\n const [syncedHash, setSyncedHash] = useState('')\n\n useEffect(() => {\n const hash = JSON.stringify(current)\n if (hash !== syncedHash) {\n setDraft(current)\n setSyncedHash(hash)\n }\n }, [current, syncedHash])\n\n const isDirty = JSON.stringify(draft) !== JSON.stringify(current)\n\n function setField<K extends keyof Draft>(k: K, v: Draft[K]): void {\n setDraft((d) => ({ ...d, [k]: v }))\n }\n\n async function onSave(): Promise<void> {\n const updates: Record<string, string | null> = {}\n if (draft.role !== current.role) {\n updates.IMHUB_NATIVE_AGENT_ROLE = draft.role.trim() || null\n }\n if (draft.mode !== current.mode) {\n updates.IMHUB_NATIVE_AGENT_MODE = draft.mode\n }\n if (draft.autoAllow !== current.autoAllow) {\n updates.IMHUB_NATIVE_AGENT_AUTOALLOW = draft.autoAllow.trim() || null\n }\n if (draft.denyList !== current.denyList) {\n updates.IMHUB_NATIVE_AGENT_DENYLIST = draft.denyList.trim() || null\n }\n if (draft.evalEnabled !== current.evalEnabled) {\n updates.IMHUB_NOTIFICATION_EVALUATOR = draft.evalEnabled ? 'on' : null\n }\n if (draft.evalSources !== current.evalSources) {\n updates.IMHUB_NOTIFICATION_EVALUATOR_SOURCES = draft.evalSources.trim() || null\n }\n if (draft.hbEnabled !== current.hbEnabled) {\n updates.IMHUB_HEARTBEAT_ENABLED = draft.hbEnabled ? 'on' : null\n }\n if (draft.hbTickMs !== current.hbTickMs) {\n updates.IMHUB_HEARTBEAT_TICK_INTERVAL_MS = draft.hbTickMs.trim() || null\n }\n if (draft.hbDefaultMin !== current.hbDefaultMin) {\n updates.IMHUB_HEARTBEAT_DEFAULT_INTERVAL_MIN = draft.hbDefaultMin.trim() || null\n }\n if (draft.toolResultCap !== current.toolResultCap) {\n updates.IMHUB_NATIVE_TOOL_RESULT_MAX_CHARS = draft.toolResultCap.trim() || null\n }\n if (draft.toolTimeoutMs !== current.toolTimeoutMs) {\n updates.IMHUB_NATIVE_TOOL_TIMEOUT_MS = draft.toolTimeoutMs.trim() || null\n }\n if (draft.blankRetryMax !== current.blankRetryMax) {\n updates.IMHUB_NATIVE_BLANK_RETRY_MAX = draft.blankRetryMax.trim() || null\n }\n if (draft.lengthRecoveryMax !== current.lengthRecoveryMax) {\n updates.IMHUB_NATIVE_LENGTH_RECOVERY_MAX = draft.lengthRecoveryMax.trim() || null\n }\n // v1.2.127 — A2A\n if (draft.a2aMaxDepth !== current.a2aMaxDepth) {\n updates.IMHUB_A2A_MAX_DEPTH = draft.a2aMaxDepth.trim() || null\n }\n if (draft.a2aTimeoutMs !== current.a2aTimeoutMs) {\n updates.IMHUB_A2A_TIMEOUT_DEFAULT_MS = draft.a2aTimeoutMs.trim() || null\n }\n if (draft.callAgentInProcess !== current.callAgentInProcess) {\n // Default ON: write only when operator turned OFF; ON = delete the env.\n updates.IMHUB_NATIVE_CALL_AGENT_IN_PROCESS = draft.callAgentInProcess ? null : 'off'\n }\n if (draft.callAgentMaxPerTurn !== current.callAgentMaxPerTurn) {\n updates.IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN = draft.callAgentMaxPerTurn.trim() || null\n }\n // v1.2.127 — 早停 + 复盘\n if (draft.semanticStuckLoop !== current.semanticStuckLoop) {\n updates.IMHUB_NATIVE_SEMANTIC_STUCK_LOOP = draft.semanticStuckLoop ? null : 'off'\n }\n if (draft.criticEnabled !== current.criticEnabled) {\n updates.IMHUB_NATIVE_CRITIC = draft.criticEnabled ? 'on' : null\n }\n if (draft.criticRole !== current.criticRole) {\n updates.IMHUB_NATIVE_CRITIC_ROLE = draft.criticRole.trim() || null\n }\n if (draft.planModeDefault !== current.planModeDefault) {\n updates.IMHUB_NATIVE_PLAN_MODE = draft.planModeDefault ? '1' : null\n }\n if (draft.planIntentAuto !== current.planIntentAuto) {\n updates.IMHUB_PLAN_INTENT_AUTO = draft.planIntentAuto ? 'on' : null\n }\n if (draft.planIntentPhrases !== current.planIntentPhrases) {\n updates.IMHUB_PLAN_INTENT_PHRASES = draft.planIntentPhrases.trim() || null\n }\n // v1.2.127 — Auto-compact\n if (draft.compactTriggerChars !== current.compactTriggerChars) {\n updates.IMHUB_NATIVE_COMPACT_TRIGGER_CHARS = draft.compactTriggerChars.trim() || null\n }\n if (draft.compactKeepTurns !== current.compactKeepTurns) {\n updates.IMHUB_NATIVE_COMPACT_KEEP_TURNS = draft.compactKeepTurns.trim() || null\n }\n if (draft.compactKeepFirst !== current.compactKeepFirst) {\n updates.IMHUB_NATIVE_COMPACT_KEEP_FIRST = draft.compactKeepFirst.trim() || null\n }\n if (draft.compactSummaryChars !== current.compactSummaryChars) {\n updates.IMHUB_NATIVE_COMPACT_SUMMARY_CHARS = draft.compactSummaryChars.trim() || null\n }\n // v1.2.127 — 流式 + 迭代\n if (draft.streamPartial !== current.streamPartial) {\n updates.IMHUB_NATIVE_STREAM_PARTIAL = draft.streamPartial ? null : 'off'\n }\n if (draft.maxIter !== current.maxIter) {\n updates.IMHUB_NATIVE_AGENT_MAX_ITER = draft.maxIter.trim() || null\n }\n if (Object.keys(updates).length === 0) return\n try {\n await updateEnv.mutateAsync({ updates })\n toast.success(t('nativeAgent.savedToast'))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n function onDiscard(): void {\n setDraft(current)\n }\n\n return (\n <div className={embedded ? 'flex flex-col gap-6' : 'mx-auto flex max-w-4xl flex-col gap-6'}>\n {!embedded && (\n <>\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('nativeAgent.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void envQuery.refetch()}\n disabled={envQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {envQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('nativeAgent.refresh')}</span>\n </Button>\n </header>\n <SubtitleWithLlmLink />\n </>\n )}\n\n {envQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <NativeAgentCard draft={draft} setField={setField} />\n <RuntimeCapsCard draft={draft} setField={setField} />\n <A2ACard draft={draft} setField={setField} />\n <CriticCard draft={draft} setField={setField} />\n <CompactCard draft={draft} setField={setField} />\n <StreamCard draft={draft} setField={setField} />\n <EvaluatorCard draft={draft} setField={setField} />\n <HeartbeatCard draft={draft} setField={setField} />\n </>\n )}\n\n {isDirty && (\n <div className={embedded\n ? 'flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'\n : 'sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'}\n >\n <Badge variant=\"info\">{t('nativeAgent.unsaved')}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={onDiscard}\n disabled={updateEnv.isPending}\n >\n <X className=\"h-4 w-4\" /> {t('nativeAgent.discard')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateEnv.isPending}\n >\n {updateEnv.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Save className=\"h-4 w-4\" />}\n {t('nativeAgent.save')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\ninterface CardProps {\n draft: Draft\n setField: <K extends keyof Draft>(k: K, v: Draft[K]) => void\n}\n\nfunction NativeAgentCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Cpu className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.agentCard')}</h2>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.roleOverride')}\n hint={t('nativeAgent.roleHint')}\n >\n <Input\n value={draft.role}\n onChange={(e) => setField('role', e.target.value)}\n placeholder=\"native-chat\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.approvalMode')}\n hint={t('nativeAgent.approvalHint')}\n >\n <Select\n value={draft.mode}\n onValueChange={(v) => setField('mode', v as ApprovalMode)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"read-only\">{t('nativeAgent.modeReadOnly')}</SelectItem>\n <SelectItem value=\"allow-list\">{t('nativeAgent.modeAllowList')}</SelectItem>\n <SelectItem value=\"allow-all\">{t('nativeAgent.modeAllowAll')}</SelectItem>\n <SelectItem value=\"deny-all\">{t('nativeAgent.modeDenyAll')}</SelectItem>\n </SelectContent>\n </Select>\n </Field>\n <Field\n label={t('nativeAgent.autoAllow')}\n hint={t('nativeAgent.autoAllowHint')}\n >\n <Input\n value={draft.autoAllow}\n onChange={(e) => setField('autoAllow', e.target.value)}\n placeholder=\"native_,mcp_filesystem_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.denyList')}\n hint={t('nativeAgent.denyListHint')}\n >\n <Input\n value={draft.denyList}\n onChange={(e) => setField('denyList', e.target.value)}\n placeholder=\"mcp_shell_,mcp_dangerous_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction EvaluatorCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Bell className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.evaluatorCard')}</h2>\n {draft.evalEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.evalDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field label={t('nativeAgent.enableGate')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.evalEnabled}\n onChange={(e) => setField('evalEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.filterViaLlm')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.evalSources')}\n hint={t('nativeAgent.evalSourcesHint')}\n >\n <Input\n value={draft.evalSources}\n onChange={(e) => setField('evalSources', e.target.value)}\n placeholder=\"push,heartbeat\"\n className=\"font-mono text-xs\"\n disabled={!draft.evalEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction HeartbeatCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <HeartPulse className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.heartbeatCard')}</h2>\n {draft.hbEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.hbDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n <Field label={t('nativeAgent.enableScheduler')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.hbEnabled}\n onChange={(e) => setField('hbEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.startScanLoop')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.tickInterval')}\n hint={t('nativeAgent.tickHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbTickMs}\n onChange={(e) => setField('hbTickMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.defaultInterval')}\n hint={t('nativeAgent.defaultIntervalHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbDefaultMin}\n onChange={(e) => setField('hbDefaultMin', e.target.value)}\n placeholder=\"15\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction RuntimeCapsCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Gauge className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.runtimeCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.runtimeDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.toolResultCap')}\n hint={t('nativeAgent.toolResultCapHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolResultCap}\n onChange={(e) => setField('toolResultCap', e.target.value)}\n placeholder=\"64000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.toolTimeoutMs')}\n hint={t('nativeAgent.toolTimeoutHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolTimeoutMs}\n onChange={(e) => setField('toolTimeoutMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.blankRetryMax')}\n hint={t('nativeAgent.blankRetryHint')}\n >\n <Input\n type=\"number\"\n value={draft.blankRetryMax}\n onChange={(e) => setField('blankRetryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.lengthRecoveryMax')}\n hint={t('nativeAgent.lengthRecoveryHint')}\n >\n <Input\n type=\"number\"\n value={draft.lengthRecoveryMax}\n onChange={(e) => setField('lengthRecoveryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction A2ACard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Network className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.a2aCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.a2aDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.a2aMaxDepth')}\n hint={t('nativeAgent.a2aMaxDepthHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aMaxDepth}\n onChange={(e) => setField('a2aMaxDepth', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.a2aTimeoutMs')}\n hint={t('nativeAgent.a2aTimeoutMsHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aTimeoutMs}\n onChange={(e) => setField('a2aTimeoutMs', e.target.value)}\n placeholder=\"1800000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.callAgentInProcess')}\n hint={t('nativeAgent.callAgentInProcessHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.callAgentInProcess}\n onChange={(e) => setField('callAgentInProcess', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.callAgentInProcess ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.callAgentMaxPerTurn')}\n hint={t('nativeAgent.callAgentMaxPerTurnHint')}\n >\n <Input\n type=\"number\"\n value={draft.callAgentMaxPerTurn}\n onChange={(e) => setField('callAgentMaxPerTurn', e.target.value)}\n placeholder=\"2\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CriticCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <ShieldAlert className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.criticCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.criticDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.semanticStuckLoop')}\n hint={t('nativeAgent.semanticStuckLoopHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.semanticStuckLoop}\n onChange={(e) => setField('semanticStuckLoop', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.semanticStuckLoop ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticEnabled')}\n hint={t('nativeAgent.criticEnabledHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.criticEnabled}\n onChange={(e) => setField('criticEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.criticEnabled ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticRole')}\n hint={t('nativeAgent.criticRoleHint')}\n >\n <Input\n value={draft.criticRole}\n onChange={(e) => setField('criticRole', e.target.value)}\n placeholder=\"(use main backend)\"\n className=\"font-mono text-xs\"\n disabled={!draft.criticEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.planModeDefault')}\n hint={t('nativeAgent.planModeDefaultHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planModeDefault}\n onChange={(e) => setField('planModeDefault', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planModeDefault ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentAuto')}\n hint={t('nativeAgent.planIntentAutoHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planIntentAuto}\n onChange={(e) => setField('planIntentAuto', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planIntentAuto ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentPhrases')}\n hint={t('nativeAgent.planIntentPhrasesHint')}\n >\n <Input\n value={draft.planIntentPhrases}\n onChange={(e) => setField('planIntentPhrases', e.target.value)}\n placeholder=\"先想想,plan only,don't act yet\"\n className=\"font-mono text-xs\"\n disabled={!draft.planIntentAuto}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CompactCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <FileStack className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.compactCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.compactDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.compactTriggerChars')}\n hint={t('nativeAgent.compactTriggerCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactTriggerChars}\n onChange={(e) => setField('compactTriggerChars', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepTurns')}\n hint={t('nativeAgent.compactKeepTurnsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepTurns}\n onChange={(e) => setField('compactKeepTurns', e.target.value)}\n placeholder=\"6\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepFirst')}\n hint={t('nativeAgent.compactKeepFirstHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepFirst}\n onChange={(e) => setField('compactKeepFirst', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactSummaryChars')}\n hint={t('nativeAgent.compactSummaryCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactSummaryChars}\n onChange={(e) => setField('compactSummaryChars', e.target.value)}\n placeholder=\"1500\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction StreamCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Waves className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.streamCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.streamDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.streamPartial')}\n hint={t('nativeAgent.streamPartialHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.streamPartial}\n onChange={(e) => setField('streamPartial', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.streamPartial ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.maxIter')}\n hint={t('nativeAgent.maxIterHint')}\n >\n <Input\n type=\"number\"\n value={draft.maxIter}\n onChange={(e) => setField('maxIter', e.target.value)}\n placeholder=\"50\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\ninterface FieldProps {\n label: string\n hint?: string\n children: React.ReactNode\n}\nfunction Field({ label, hint, children }: FieldProps): JSX.Element {\n return (\n <div className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{label}</Label>\n {children}\n {hint && <p className=\"text-[11px] text-text-dim\">{hint}</p>}\n </div>\n )\n}\n","/**\n * /settings/llm — Agim Agent model APIs + runtime settings.\n *\n * Front-end for the `/api/llm/*` REST surface that landed in Stage 4.\n * Operators add an OpenAI-compatible or Anthropic API, paste an API\n * key, optionally bind roles (cheap / evaluator / native-chat), and\n * tune built-in Agim Agent runtime behavior without hand-editing\n * ~/.agim/config.json.\n *\n * Intentionally minimal styling — focused on doing the job; matches\n * the existing settings pages' shadcn look without bespoke chrome.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { CheckCircle2, Loader2, Plus, RefreshCcw, Trash2, Zap } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useLlmList, useLlmAddBackend, useLlmRemoveBackend, useLlmPutRoles, useLlmPing,\n} from '@/hooks/use-llm-admin'\nimport { NativeAgentSettingsPanel } from '@/routes/settings/native-agent'\n\nconst KNOWN_ROLES = ['cheap', 'evaluator', 'native-chat'] as const\nconst UNBIND_SENTINEL = '__unbind__'\n\ninterface ProviderPreset {\n provider: 'openai-compat' | 'anthropic'\n baseUrl: string\n modelHint: string\n}\n\nconst PRESET_KEYS = ['deepseek', 'moonshot', 'zhipu', 'openai', 'anthropic', 'custom'] as const\n\nconst PRESETS: ProviderPreset[] = [\n { provider: 'openai-compat',\n baseUrl: 'https://api.deepseek.com/v1', modelHint: 'deepseek-chat' },\n { provider: 'openai-compat',\n baseUrl: 'https://api.moonshot.cn/v1', modelHint: 'moonshot-v1-8k' },\n { provider: 'openai-compat',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4', modelHint: 'glm-4-air' },\n { provider: 'openai-compat',\n baseUrl: 'https://api.openai.com/v1', modelHint: 'gpt-4o-mini' },\n { provider: 'anthropic',\n // No trailing /v1: the Anthropic provider appends `/v1/messages` itself.\n baseUrl: 'https://api.anthropic.com', modelHint: 'claude-3-5-sonnet-20241022' },\n { provider: 'openai-compat',\n baseUrl: '', modelHint: '' },\n]\n\nexport default function SettingsLlmRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useLlmList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('llm.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('llm.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('llm.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <BackendsCard data={listQuery.data} />\n <AddBackendCard />\n <RolesCard data={listQuery.data} />\n <section id=\"agim-agent\" className=\"rounded-md border border-border bg-surface px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.agimAgentRuntimeTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.agimAgentRuntimeHint')}</p>\n </section>\n <NativeAgentSettingsPanel embedded />\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Backends list ─────────────── */\n\nfunction BackendsCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeBackend = useLlmRemoveBackend()\n const ping = useLlmPing()\n const [pingResults, setPingResults] = useState<Record<string, string>>({})\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('llm.removeConfirm', { name }))) return\n try {\n const r = await removeBackend.mutateAsync(name)\n toast.success(t('llm.removedToast', { count: r.removedRoles }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onPing(name: string): Promise<void> {\n setPingResults((m) => ({ ...m, [name]: t('llm.pinging') }))\n try {\n const r = await ping.mutateAsync(name)\n const msg = r.ok\n ? `✓ ${r.durationMs}ms · tokens ${r.tokensIn}→${r.tokensOut}`\n : `✗ ${r.error}`\n setPingResults((m) => ({ ...m, [name]: msg }))\n } catch (err) {\n setPingResults((m) => ({ ...m, [name]: `✗ ${((err as Error)?.message ?? String(err))}` }))\n }\n }\n\n const rows = data?.backends ?? []\n if (rows.length === 0) {\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('llm.backendsEmpty')}\n </section>\n )\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.backendsTitle', { count: rows.length })}</h2>\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('llm.col.name')}</TableHead>\n <TableHead>{t('llm.col.provider')}</TableHead>\n <TableHead>{t('llm.col.model')}</TableHead>\n <TableHead>{t('llm.col.baseUrl')}</TableHead>\n <TableHead>{t('llm.col.apiKey')}</TableHead>\n <TableHead>{t('llm.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((b) => {\n const keyBadge = b.secret.source === 'none'\n ? <Badge variant=\"outline\">{t('llm.secretMissing')}</Badge>\n : <Badge variant=\"success\">{b.secret.source}</Badge>\n return (\n <TableRow key={b.name}>\n <TableCell className=\"font-mono text-xs\">{b.name}</TableCell>\n <TableCell>{b.provider}</TableCell>\n <TableCell className=\"font-mono text-xs\">{b.model}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{b.baseUrl ?? '—'}</TableCell>\n <TableCell>{keyBadge}</TableCell>\n <TableCell className=\"flex flex-col gap-1 sm:flex-row sm:items-center\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onPing(b.name)}\n disabled={ping.isPending || b.secret.source === 'none'}\n title={b.secret.source === 'none' ? t('llm.setKeyFirst') : t('llm.pingHint')}\n >\n <Zap className=\"h-4 w-4\" />\n <span>{t('llm.ping')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(b.name)}\n disabled={removeBackend.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('llm.remove')}</span>\n </Button>\n {pingResults[b.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{pingResults[b.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\n/* ─────────────── Role bindings ─────────────── */\n\nfunction RolesCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const putRoles = useLlmPutRoles()\n const backendNames = (data?.backends ?? []).map((b) => b.name)\n const current = data?.roles ?? {}\n\n async function onChangeRole(role: string, value: string): Promise<void> {\n const next: Record<string, string | null> = {\n [role]: value === UNBIND_SENTINEL ? null : value,\n }\n try {\n await putRoles.mutateAsync(next)\n toast.success(t('llm.roleUpdated', { role }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.rolesTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.rolesOptionalHint')}</p>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n {KNOWN_ROLES.map((role) => (\n <div key={role} className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{role}</Label>\n <Select\n value={current[role] ?? UNBIND_SENTINEL}\n onValueChange={(v) => void onChangeRole(role, v)}\n disabled={backendNames.length === 0 || putRoles.isPending}\n >\n <SelectTrigger className=\"font-mono text-xs\">\n <SelectValue placeholder={t('llm.unset')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={UNBIND_SENTINEL}>{t('llm.unbound')}</SelectItem>\n {backendNames.map((n) => (\n <SelectItem key={n} value={n}>{n}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-[11px] text-text-dim\">\n {t(`llm.roleHint.${role}`)}\n </p>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\n/* ─────────────── Add backend form ─────────────── */\n\nfunction AddBackendCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addBackend = useLlmAddBackend()\n const [presetIdx, setPresetIdx] = useState(0)\n const [name, setName] = useState('')\n const [baseUrl, setBaseUrl] = useState(PRESETS[0]?.baseUrl ?? '')\n const [model, setModel] = useState(PRESETS[0]?.modelHint ?? '')\n const [apiKey, setApiKey] = useState('')\n const [formError, setFormError] = useState<string | null>(null)\n\n function fail(message: string): void {\n setFormError(message)\n toast.error(message)\n }\n\n function onPickPreset(idx: number): void {\n setPresetIdx(idx)\n const p = PRESETS[idx]\n if (!p) return\n setBaseUrl(p.baseUrl)\n setModel(p.modelHint)\n }\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n const p = PRESETS[presetIdx]\n if (!p) { fail(t('llm.invalidPreset')); return }\n if (!name.trim()) { fail(t('llm.nameRequired')); return }\n if (!baseUrl.trim()) { fail(t('llm.baseUrlRequired')); return }\n if (!model.trim()) { fail(t('llm.modelRequired')); return }\n if (!apiKey.trim()) { fail(t('llm.apiKeyRequired')); return }\n try {\n await addBackend.mutateAsync({\n name: name.trim(),\n provider: p.provider,\n baseUrl: baseUrl.trim(),\n model: model.trim(),\n apiKey: apiKey.trim(),\n })\n setFormError(null)\n toast.success(t('llm.addedWithKey', { name: name.trim() }))\n setName(''); setApiKey('')\n } catch (err) {\n const message = ((err as Error)?.message ?? String(err))\n fail(message)\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.addTitle')}</h2>\n </header>\n <form onSubmit={(e) => void onSubmit(e)} className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.preset')}</Label>\n <Select value={String(presetIdx)} onValueChange={(v) => onPickPreset(Number(v))}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {PRESETS.map((_p, i) => (\n <SelectItem key={PRESET_KEYS[i]} value={String(i)}>\n {t(`llm.presets.${PRESET_KEYS[i]}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.name')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('llm.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('llm.baseUrl')}</Label>\n <Input\n value={baseUrl} onChange={(e) => setBaseUrl(e.target.value)}\n placeholder={t('llm.baseUrlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.model')}</Label>\n <Input\n value={model} onChange={(e) => setModel(e.target.value)}\n placeholder={t('llm.modelPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.apiKey')}</Label>\n <Input\n type=\"password\"\n value={apiKey} onChange={(e) => setApiKey(e.target.value)}\n placeholder={t('llm.apiKeyPlaceholder')}\n className=\"font-mono text-xs\"\n autoComplete=\"off\"\n />\n </div>\n <div className=\"sm:col-span-2 flex\">\n <div className=\"flex w-full flex-col gap-2 sm:items-end\">\n {formError && (\n <p className=\"text-xs text-danger\">{formError}</p>\n )}\n <Button\n type=\"submit\"\n disabled={addBackend.isPending}\n className=\"ml-auto\"\n >\n {addBackend.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('llm.addBackend')}\n </Button>\n </div>\n </div>\n </form>\n </section>\n )\n}\n\n/* helper — toast tag passthrough */\nfunction _unused(): typeof CheckCircle2 { return CheckCircle2 }\nvoid _unused\n"],"names":["Cpu","createLucideIcon","FileStack","Gauge","Waves","Zap","draftFromEnv","env","isTruthy","isFalsy","v","SubtitleWithLlmLink","useTranslation","subtitle","link","idx","jsx","jsxs","NativeAgentSettingsPanel","embedded","t","envQuery","useEnv","updateEnv","useUpdateEnv","envData","current","useMemo","draft","setDraft","useState","syncedHash","setSyncedHash","useEffect","hash","isDirty","setField","k","d","onSave","updates","toast","err","onDiscard","Fragment","Button","Loader2","RefreshCcw","NativeAgentCard","RuntimeCapsCard","A2ACard","CriticCard","CompactCard","StreamCard","EvaluatorCard","HeartbeatCard","Badge","X","Save","Field","Input","e","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Bell","HeartPulse","Network","ShieldAlert","label","hint","children","Label","KNOWN_ROLES","UNBIND_SENTINEL","PRESET_KEYS","PRESETS","SettingsLlmRoute","listQuery","useLlmList","BackendsCard","AddBackendCard","RolesCard","data","removeBackend","useLlmRemoveBackend","ping","useLlmPing","pingResults","setPingResults","onRemove","name","r","onPing","m","msg","rows","Table","TableHeader","TableRow","TableHead","TableBody","b","keyBadge","TableCell","Trash2","putRoles","useLlmPutRoles","backendNames","onChangeRole","role","value","next","n","addBackend","useLlmAddBackend","presetIdx","setPresetIdx","setName","baseUrl","setBaseUrl","model","setModel","apiKey","setApiKey","formError","setFormError","fail","message","onPickPreset","p","onSubmit","_p","i","Plus"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|
|
1
|
+
{"version":3,"file":"llm-CumYZM83.js","sources":["../../node_modules/lucide-react/dist/esm/icons/cpu.js","../../node_modules/lucide-react/dist/esm/icons/file-stack.js","../../node_modules/lucide-react/dist/esm/icons/gauge.js","../../node_modules/lucide-react/dist/esm/icons/waves.js","../../node_modules/lucide-react/dist/esm/icons/zap.js","../../src/routes/settings/native-agent.tsx","../../src/routes/settings/llm.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 Cpu = createLucideIcon(\"Cpu\", [\n [\"rect\", { width: \"16\", height: \"16\", x: \"4\", y: \"4\", rx: \"2\", key: \"14l7u7\" }],\n [\"rect\", { width: \"6\", height: \"6\", x: \"9\", y: \"9\", rx: \"1\", key: \"5aljv4\" }],\n [\"path\", { d: \"M15 2v2\", key: \"13l42r\" }],\n [\"path\", { d: \"M15 20v2\", key: \"15mkzm\" }],\n [\"path\", { d: \"M2 15h2\", key: \"1gxd5l\" }],\n [\"path\", { d: \"M2 9h2\", key: \"1bbxkp\" }],\n [\"path\", { d: \"M20 15h2\", key: \"19e6y8\" }],\n [\"path\", { d: \"M20 9h2\", key: \"19tzq7\" }],\n [\"path\", { d: \"M9 2v2\", key: \"165o2o\" }],\n [\"path\", { d: \"M9 20v2\", key: \"i2bqo8\" }]\n]);\n\nexport { Cpu as default };\n//# sourceMappingURL=cpu.js.map\n","/**\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 FileStack = createLucideIcon(\"FileStack\", [\n [\"path\", { d: \"M21 7h-3a2 2 0 0 1-2-2V2\", key: \"9rb54x\" }],\n [\n \"path\",\n {\n d: \"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17Z\",\n key: \"1059l0\"\n }\n ],\n [\"path\", { d: \"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15\", key: \"16874u\" }],\n [\"path\", { d: \"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11\", key: \"k2ox98\" }]\n]);\n\nexport { FileStack as default };\n//# sourceMappingURL=file-stack.js.map\n","/**\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 Gauge = createLucideIcon(\"Gauge\", [\n [\"path\", { d: \"m12 14 4-4\", key: \"9kzdfg\" }],\n [\"path\", { d: \"M3.34 19a10 10 0 1 1 17.32 0\", key: \"19p75a\" }]\n]);\n\nexport { Gauge as default };\n//# sourceMappingURL=gauge.js.map\n","/**\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 Waves = createLucideIcon(\"Waves\", [\n [\n \"path\",\n {\n d: \"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"knzxuh\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"2jd2cc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"rd2r6e\"\n }\n ]\n]);\n\nexport { Waves as default };\n//# sourceMappingURL=waves.js.map\n","/**\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 Zap = createLucideIcon(\"Zap\", [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n]);\n\nexport { Zap as default };\n//# sourceMappingURL=zap.js.map\n","/**\n * /settings/native-agent — focused env editor for Agim Agent +\n * notification evaluator + heartbeat (Stage 6).\n *\n * All three subsystems are env-driven; their env keys are already in\n * ENV_EDITABLE_KEYS so the generic /api/env GET+PUT pair works. This\n * page just gives them a curated form so operators don't have to dig\n * through the 200+-key generic env editor.\n *\n * The actual model API selection (which LLM, which role) lives on\n * /settings/llm; this module covers behavioral knobs.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Bell, Cpu, FileStack, Gauge, HeartPulse, Loader2, Network,\n RefreshCcw, Save, ShieldAlert, Waves, X,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport { useEnv, useUpdateEnv } from '@/hooks/use-settings'\n\ntype ApprovalMode = 'allow-all' | 'read-only' | 'allow-list' | 'deny-all'\n\ninterface Draft {\n // Agim Agent\n role: string\n mode: ApprovalMode\n autoAllow: string\n denyList: string\n // Notification evaluator\n evalEnabled: boolean\n evalSources: string\n // Heartbeat\n hbEnabled: boolean\n hbTickMs: string\n hbDefaultMin: string\n // v1.2.126 — runtime caps (each one optional / empty = use default)\n toolResultCap: string\n toolTimeoutMs: string\n blankRetryMax: string\n lengthRecoveryMax: string\n // v1.2.127 — A2A 子 Agent 派生\n a2aMaxDepth: string\n a2aTimeoutMs: string\n callAgentInProcess: boolean\n callAgentMaxPerTurn: string\n // v1.2.127 — 早停 + 复盘\n semanticStuckLoop: boolean\n criticEnabled: boolean\n criticRole: string\n planModeDefault: boolean\n // v1.2.135 — heuristic auto-enter on plan-intent keywords\n planIntentAuto: boolean\n planIntentPhrases: string\n // v1.2.127 — Auto-compact 4 旋钮(OpenHands Condenser)\n compactTriggerChars: string\n compactKeepTurns: string\n compactKeepFirst: string\n compactSummaryChars: string\n // v1.2.127 — 流式 + 迭代\n streamPartial: boolean\n maxIter: string\n}\n\nfunction draftFromEnv(env: Record<string, string>): Draft {\n return {\n role: env.IMHUB_NATIVE_AGENT_ROLE ?? '',\n mode: (env.IMHUB_NATIVE_AGENT_MODE as ApprovalMode | undefined) || 'read-only',\n autoAllow: env.IMHUB_NATIVE_AGENT_AUTOALLOW ?? '',\n denyList: env.IMHUB_NATIVE_AGENT_DENYLIST ?? '',\n evalEnabled: isTruthy(env.IMHUB_NOTIFICATION_EVALUATOR),\n evalSources: env.IMHUB_NOTIFICATION_EVALUATOR_SOURCES ?? '',\n hbEnabled: isTruthy(env.IMHUB_HEARTBEAT_ENABLED),\n hbTickMs: env.IMHUB_HEARTBEAT_TICK_INTERVAL_MS ?? '',\n hbDefaultMin: env.IMHUB_HEARTBEAT_DEFAULT_INTERVAL_MIN ?? '',\n toolResultCap: env.IMHUB_NATIVE_TOOL_RESULT_MAX_CHARS ?? '',\n toolTimeoutMs: env.IMHUB_NATIVE_TOOL_TIMEOUT_MS ?? '',\n blankRetryMax: env.IMHUB_NATIVE_BLANK_RETRY_MAX ?? '',\n lengthRecoveryMax: env.IMHUB_NATIVE_LENGTH_RECOVERY_MAX ?? '',\n a2aMaxDepth: env.IMHUB_A2A_MAX_DEPTH ?? '',\n a2aTimeoutMs: env.IMHUB_A2A_TIMEOUT_DEFAULT_MS ?? '',\n // Default ON: only 'off' / '0' / 'no' / 'false' disable.\n callAgentInProcess: !isFalsy(env.IMHUB_NATIVE_CALL_AGENT_IN_PROCESS),\n callAgentMaxPerTurn: env.IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN ?? '',\n semanticStuckLoop: !isFalsy(env.IMHUB_NATIVE_SEMANTIC_STUCK_LOOP),\n criticEnabled: isTruthy(env.IMHUB_NATIVE_CRITIC),\n criticRole: env.IMHUB_NATIVE_CRITIC_ROLE ?? '',\n planModeDefault: isTruthy(env.IMHUB_NATIVE_PLAN_MODE),\n planIntentAuto: isTruthy(env.IMHUB_PLAN_INTENT_AUTO),\n planIntentPhrases: env.IMHUB_PLAN_INTENT_PHRASES ?? '',\n compactTriggerChars: env.IMHUB_NATIVE_COMPACT_TRIGGER_CHARS ?? '',\n compactKeepTurns: env.IMHUB_NATIVE_COMPACT_KEEP_TURNS ?? '',\n compactKeepFirst: env.IMHUB_NATIVE_COMPACT_KEEP_FIRST ?? '',\n compactSummaryChars: env.IMHUB_NATIVE_COMPACT_SUMMARY_CHARS ?? '',\n streamPartial: !isFalsy(env.IMHUB_NATIVE_STREAM_PARTIAL),\n maxIter: env.IMHUB_NATIVE_AGENT_MAX_ITER ?? '',\n }\n}\n\n/** Mirror of the native-side parser: 'off' / '0' / 'no' / 'false'\n * (case-insensitive) disables a feature whose default is ON. Empty\n * string means \"not set\" — caller decides whether that's ON or OFF\n * depending on the variable's default. */\nfunction isFalsy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase().trim()\n return s === 'off' || s === 'false' || s === '0' || s === 'no'\n}\n\nfunction isTruthy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase()\n return s === '1' || s === 'true' || s === 'yes' || s === 'on'\n}\n\nfunction SubtitleWithLlmLink(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const subtitle = t('nativeAgent.subtitle')\n const link = t('nativeAgent.llmLink')\n const idx = subtitle.indexOf(link)\n if (idx === -1) {\n return <p className=\"text-sm text-text-dim\">{subtitle}</p>\n }\n return (\n <p className=\"text-sm text-text-dim\">\n {subtitle.slice(0, idx)}\n <a className=\"underline\" href={link}>{link}</a>\n {subtitle.slice(idx + link.length)}\n </p>\n )\n}\n\nexport default function SettingsNativeAgentRoute(): JSX.Element {\n return <NativeAgentSettingsPanel />\n}\n\nexport interface NativeAgentSettingsPanelProps {\n embedded?: boolean\n}\n\nexport function NativeAgentSettingsPanel({ embedded = false }: NativeAgentSettingsPanelProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const envQuery = useEnv({ reveal: false })\n const updateEnv = useUpdateEnv()\n\n const envData = envQuery.data?.env ?? {}\n const current = useMemo(() => draftFromEnv(envData), [envData])\n const [draft, setDraft] = useState<Draft>(current)\n const [syncedHash, setSyncedHash] = useState('')\n\n useEffect(() => {\n const hash = JSON.stringify(current)\n if (hash !== syncedHash) {\n setDraft(current)\n setSyncedHash(hash)\n }\n }, [current, syncedHash])\n\n const isDirty = JSON.stringify(draft) !== JSON.stringify(current)\n\n function setField<K extends keyof Draft>(k: K, v: Draft[K]): void {\n setDraft((d) => ({ ...d, [k]: v }))\n }\n\n async function onSave(): Promise<void> {\n const updates: Record<string, string | null> = {}\n if (draft.role !== current.role) {\n updates.IMHUB_NATIVE_AGENT_ROLE = draft.role.trim() || null\n }\n if (draft.mode !== current.mode) {\n updates.IMHUB_NATIVE_AGENT_MODE = draft.mode\n }\n if (draft.autoAllow !== current.autoAllow) {\n updates.IMHUB_NATIVE_AGENT_AUTOALLOW = draft.autoAllow.trim() || null\n }\n if (draft.denyList !== current.denyList) {\n updates.IMHUB_NATIVE_AGENT_DENYLIST = draft.denyList.trim() || null\n }\n if (draft.evalEnabled !== current.evalEnabled) {\n updates.IMHUB_NOTIFICATION_EVALUATOR = draft.evalEnabled ? 'on' : null\n }\n if (draft.evalSources !== current.evalSources) {\n updates.IMHUB_NOTIFICATION_EVALUATOR_SOURCES = draft.evalSources.trim() || null\n }\n if (draft.hbEnabled !== current.hbEnabled) {\n updates.IMHUB_HEARTBEAT_ENABLED = draft.hbEnabled ? 'on' : null\n }\n if (draft.hbTickMs !== current.hbTickMs) {\n updates.IMHUB_HEARTBEAT_TICK_INTERVAL_MS = draft.hbTickMs.trim() || null\n }\n if (draft.hbDefaultMin !== current.hbDefaultMin) {\n updates.IMHUB_HEARTBEAT_DEFAULT_INTERVAL_MIN = draft.hbDefaultMin.trim() || null\n }\n if (draft.toolResultCap !== current.toolResultCap) {\n updates.IMHUB_NATIVE_TOOL_RESULT_MAX_CHARS = draft.toolResultCap.trim() || null\n }\n if (draft.toolTimeoutMs !== current.toolTimeoutMs) {\n updates.IMHUB_NATIVE_TOOL_TIMEOUT_MS = draft.toolTimeoutMs.trim() || null\n }\n if (draft.blankRetryMax !== current.blankRetryMax) {\n updates.IMHUB_NATIVE_BLANK_RETRY_MAX = draft.blankRetryMax.trim() || null\n }\n if (draft.lengthRecoveryMax !== current.lengthRecoveryMax) {\n updates.IMHUB_NATIVE_LENGTH_RECOVERY_MAX = draft.lengthRecoveryMax.trim() || null\n }\n // v1.2.127 — A2A\n if (draft.a2aMaxDepth !== current.a2aMaxDepth) {\n updates.IMHUB_A2A_MAX_DEPTH = draft.a2aMaxDepth.trim() || null\n }\n if (draft.a2aTimeoutMs !== current.a2aTimeoutMs) {\n updates.IMHUB_A2A_TIMEOUT_DEFAULT_MS = draft.a2aTimeoutMs.trim() || null\n }\n if (draft.callAgentInProcess !== current.callAgentInProcess) {\n // Default ON: write only when operator turned OFF; ON = delete the env.\n updates.IMHUB_NATIVE_CALL_AGENT_IN_PROCESS = draft.callAgentInProcess ? null : 'off'\n }\n if (draft.callAgentMaxPerTurn !== current.callAgentMaxPerTurn) {\n updates.IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN = draft.callAgentMaxPerTurn.trim() || null\n }\n // v1.2.127 — 早停 + 复盘\n if (draft.semanticStuckLoop !== current.semanticStuckLoop) {\n updates.IMHUB_NATIVE_SEMANTIC_STUCK_LOOP = draft.semanticStuckLoop ? null : 'off'\n }\n if (draft.criticEnabled !== current.criticEnabled) {\n updates.IMHUB_NATIVE_CRITIC = draft.criticEnabled ? 'on' : null\n }\n if (draft.criticRole !== current.criticRole) {\n updates.IMHUB_NATIVE_CRITIC_ROLE = draft.criticRole.trim() || null\n }\n if (draft.planModeDefault !== current.planModeDefault) {\n updates.IMHUB_NATIVE_PLAN_MODE = draft.planModeDefault ? '1' : null\n }\n if (draft.planIntentAuto !== current.planIntentAuto) {\n updates.IMHUB_PLAN_INTENT_AUTO = draft.planIntentAuto ? 'on' : null\n }\n if (draft.planIntentPhrases !== current.planIntentPhrases) {\n updates.IMHUB_PLAN_INTENT_PHRASES = draft.planIntentPhrases.trim() || null\n }\n // v1.2.127 — Auto-compact\n if (draft.compactTriggerChars !== current.compactTriggerChars) {\n updates.IMHUB_NATIVE_COMPACT_TRIGGER_CHARS = draft.compactTriggerChars.trim() || null\n }\n if (draft.compactKeepTurns !== current.compactKeepTurns) {\n updates.IMHUB_NATIVE_COMPACT_KEEP_TURNS = draft.compactKeepTurns.trim() || null\n }\n if (draft.compactKeepFirst !== current.compactKeepFirst) {\n updates.IMHUB_NATIVE_COMPACT_KEEP_FIRST = draft.compactKeepFirst.trim() || null\n }\n if (draft.compactSummaryChars !== current.compactSummaryChars) {\n updates.IMHUB_NATIVE_COMPACT_SUMMARY_CHARS = draft.compactSummaryChars.trim() || null\n }\n // v1.2.127 — 流式 + 迭代\n if (draft.streamPartial !== current.streamPartial) {\n updates.IMHUB_NATIVE_STREAM_PARTIAL = draft.streamPartial ? null : 'off'\n }\n if (draft.maxIter !== current.maxIter) {\n updates.IMHUB_NATIVE_AGENT_MAX_ITER = draft.maxIter.trim() || null\n }\n if (Object.keys(updates).length === 0) return\n try {\n await updateEnv.mutateAsync({ updates })\n toast.success(t('nativeAgent.savedToast'))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n function onDiscard(): void {\n setDraft(current)\n }\n\n return (\n <div className={embedded ? 'flex flex-col gap-6' : 'mx-auto flex max-w-4xl flex-col gap-6'}>\n {!embedded && (\n <>\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('nativeAgent.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void envQuery.refetch()}\n disabled={envQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {envQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('nativeAgent.refresh')}</span>\n </Button>\n </header>\n <SubtitleWithLlmLink />\n </>\n )}\n\n {envQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <NativeAgentCard draft={draft} setField={setField} />\n <RuntimeCapsCard draft={draft} setField={setField} />\n <A2ACard draft={draft} setField={setField} />\n <CriticCard draft={draft} setField={setField} />\n <CompactCard draft={draft} setField={setField} />\n <StreamCard draft={draft} setField={setField} />\n <EvaluatorCard draft={draft} setField={setField} />\n <HeartbeatCard draft={draft} setField={setField} />\n </>\n )}\n\n {isDirty && (\n <div className={embedded\n ? 'flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'\n : 'sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'}\n >\n <Badge variant=\"info\">{t('nativeAgent.unsaved')}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={onDiscard}\n disabled={updateEnv.isPending}\n >\n <X className=\"h-4 w-4\" /> {t('nativeAgent.discard')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateEnv.isPending}\n >\n {updateEnv.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Save className=\"h-4 w-4\" />}\n {t('nativeAgent.save')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\ninterface CardProps {\n draft: Draft\n setField: <K extends keyof Draft>(k: K, v: Draft[K]) => void\n}\n\nfunction NativeAgentCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Cpu className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.agentCard')}</h2>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.roleOverride')}\n hint={t('nativeAgent.roleHint')}\n >\n <Input\n value={draft.role}\n onChange={(e) => setField('role', e.target.value)}\n placeholder=\"native-chat\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.approvalMode')}\n hint={t('nativeAgent.approvalHint')}\n >\n <Select\n value={draft.mode}\n onValueChange={(v) => setField('mode', v as ApprovalMode)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"read-only\">{t('nativeAgent.modeReadOnly')}</SelectItem>\n <SelectItem value=\"allow-list\">{t('nativeAgent.modeAllowList')}</SelectItem>\n <SelectItem value=\"allow-all\">{t('nativeAgent.modeAllowAll')}</SelectItem>\n <SelectItem value=\"deny-all\">{t('nativeAgent.modeDenyAll')}</SelectItem>\n </SelectContent>\n </Select>\n </Field>\n <Field\n label={t('nativeAgent.autoAllow')}\n hint={t('nativeAgent.autoAllowHint')}\n >\n <Input\n value={draft.autoAllow}\n onChange={(e) => setField('autoAllow', e.target.value)}\n placeholder=\"native_,mcp_filesystem_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.denyList')}\n hint={t('nativeAgent.denyListHint')}\n >\n <Input\n value={draft.denyList}\n onChange={(e) => setField('denyList', e.target.value)}\n placeholder=\"mcp_shell_,mcp_dangerous_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction EvaluatorCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Bell className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.evaluatorCard')}</h2>\n {draft.evalEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.evalDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field label={t('nativeAgent.enableGate')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.evalEnabled}\n onChange={(e) => setField('evalEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.filterViaLlm')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.evalSources')}\n hint={t('nativeAgent.evalSourcesHint')}\n >\n <Input\n value={draft.evalSources}\n onChange={(e) => setField('evalSources', e.target.value)}\n placeholder=\"push,heartbeat\"\n className=\"font-mono text-xs\"\n disabled={!draft.evalEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction HeartbeatCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <HeartPulse className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.heartbeatCard')}</h2>\n {draft.hbEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.hbDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n <Field label={t('nativeAgent.enableScheduler')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.hbEnabled}\n onChange={(e) => setField('hbEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.startScanLoop')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.tickInterval')}\n hint={t('nativeAgent.tickHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbTickMs}\n onChange={(e) => setField('hbTickMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.defaultInterval')}\n hint={t('nativeAgent.defaultIntervalHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbDefaultMin}\n onChange={(e) => setField('hbDefaultMin', e.target.value)}\n placeholder=\"15\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction RuntimeCapsCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Gauge className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.runtimeCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.runtimeDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.toolResultCap')}\n hint={t('nativeAgent.toolResultCapHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolResultCap}\n onChange={(e) => setField('toolResultCap', e.target.value)}\n placeholder=\"64000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.toolTimeoutMs')}\n hint={t('nativeAgent.toolTimeoutHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolTimeoutMs}\n onChange={(e) => setField('toolTimeoutMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.blankRetryMax')}\n hint={t('nativeAgent.blankRetryHint')}\n >\n <Input\n type=\"number\"\n value={draft.blankRetryMax}\n onChange={(e) => setField('blankRetryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.lengthRecoveryMax')}\n hint={t('nativeAgent.lengthRecoveryHint')}\n >\n <Input\n type=\"number\"\n value={draft.lengthRecoveryMax}\n onChange={(e) => setField('lengthRecoveryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction A2ACard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Network className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.a2aCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.a2aDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.a2aMaxDepth')}\n hint={t('nativeAgent.a2aMaxDepthHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aMaxDepth}\n onChange={(e) => setField('a2aMaxDepth', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.a2aTimeoutMs')}\n hint={t('nativeAgent.a2aTimeoutMsHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aTimeoutMs}\n onChange={(e) => setField('a2aTimeoutMs', e.target.value)}\n placeholder=\"1800000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.callAgentInProcess')}\n hint={t('nativeAgent.callAgentInProcessHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.callAgentInProcess}\n onChange={(e) => setField('callAgentInProcess', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.callAgentInProcess ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.callAgentMaxPerTurn')}\n hint={t('nativeAgent.callAgentMaxPerTurnHint')}\n >\n <Input\n type=\"number\"\n value={draft.callAgentMaxPerTurn}\n onChange={(e) => setField('callAgentMaxPerTurn', e.target.value)}\n placeholder=\"2\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CriticCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <ShieldAlert className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.criticCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.criticDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.semanticStuckLoop')}\n hint={t('nativeAgent.semanticStuckLoopHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.semanticStuckLoop}\n onChange={(e) => setField('semanticStuckLoop', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.semanticStuckLoop ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticEnabled')}\n hint={t('nativeAgent.criticEnabledHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.criticEnabled}\n onChange={(e) => setField('criticEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.criticEnabled ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticRole')}\n hint={t('nativeAgent.criticRoleHint')}\n >\n <Input\n value={draft.criticRole}\n onChange={(e) => setField('criticRole', e.target.value)}\n placeholder=\"(use main backend)\"\n className=\"font-mono text-xs\"\n disabled={!draft.criticEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.planModeDefault')}\n hint={t('nativeAgent.planModeDefaultHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planModeDefault}\n onChange={(e) => setField('planModeDefault', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planModeDefault ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentAuto')}\n hint={t('nativeAgent.planIntentAutoHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planIntentAuto}\n onChange={(e) => setField('planIntentAuto', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planIntentAuto ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentPhrases')}\n hint={t('nativeAgent.planIntentPhrasesHint')}\n >\n <Input\n value={draft.planIntentPhrases}\n onChange={(e) => setField('planIntentPhrases', e.target.value)}\n placeholder=\"先想想,plan only,don't act yet\"\n className=\"font-mono text-xs\"\n disabled={!draft.planIntentAuto}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CompactCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <FileStack className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.compactCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.compactDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.compactTriggerChars')}\n hint={t('nativeAgent.compactTriggerCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactTriggerChars}\n onChange={(e) => setField('compactTriggerChars', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepTurns')}\n hint={t('nativeAgent.compactKeepTurnsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepTurns}\n onChange={(e) => setField('compactKeepTurns', e.target.value)}\n placeholder=\"6\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepFirst')}\n hint={t('nativeAgent.compactKeepFirstHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepFirst}\n onChange={(e) => setField('compactKeepFirst', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactSummaryChars')}\n hint={t('nativeAgent.compactSummaryCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactSummaryChars}\n onChange={(e) => setField('compactSummaryChars', e.target.value)}\n placeholder=\"1500\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction StreamCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Waves className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.streamCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.streamDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.streamPartial')}\n hint={t('nativeAgent.streamPartialHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.streamPartial}\n onChange={(e) => setField('streamPartial', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.streamPartial ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.maxIter')}\n hint={t('nativeAgent.maxIterHint')}\n >\n <Input\n type=\"number\"\n value={draft.maxIter}\n onChange={(e) => setField('maxIter', e.target.value)}\n placeholder=\"50\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\ninterface FieldProps {\n label: string\n hint?: string\n children: React.ReactNode\n}\nfunction Field({ label, hint, children }: FieldProps): JSX.Element {\n return (\n <div className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{label}</Label>\n {children}\n {hint && <p className=\"text-[11px] text-text-dim\">{hint}</p>}\n </div>\n )\n}\n","/**\n * /settings/llm — Agim Agent model APIs + runtime settings.\n *\n * Front-end for the `/api/llm/*` REST surface that landed in Stage 4.\n * Operators add an OpenAI-compatible or Anthropic API, paste an API\n * key, optionally bind roles (cheap / evaluator / native-chat), and\n * tune built-in Agim Agent runtime behavior without hand-editing\n * ~/.agim/config.json.\n *\n * Intentionally minimal styling — focused on doing the job; matches\n * the existing settings pages' shadcn look without bespoke chrome.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { CheckCircle2, Loader2, Plus, RefreshCcw, Trash2, Zap } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useLlmList, useLlmAddBackend, useLlmRemoveBackend, useLlmPutRoles, useLlmPing,\n} from '@/hooks/use-llm-admin'\nimport { NativeAgentSettingsPanel } from '@/routes/settings/native-agent'\n\nconst KNOWN_ROLES = ['cheap', 'evaluator', 'native-chat'] as const\nconst UNBIND_SENTINEL = '__unbind__'\n\ninterface ProviderPreset {\n provider: 'openai-compat' | 'anthropic'\n baseUrl: string\n modelHint: string\n}\n\nconst PRESET_KEYS = ['deepseek', 'moonshot', 'zhipu', 'openai', 'anthropic', 'custom'] as const\n\nconst PRESETS: ProviderPreset[] = [\n { provider: 'openai-compat',\n baseUrl: 'https://api.deepseek.com/v1', modelHint: 'deepseek-chat' },\n { provider: 'openai-compat',\n baseUrl: 'https://api.moonshot.cn/v1', modelHint: 'moonshot-v1-8k' },\n { provider: 'openai-compat',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4', modelHint: 'glm-4-air' },\n { provider: 'openai-compat',\n baseUrl: 'https://api.openai.com/v1', modelHint: 'gpt-4o-mini' },\n { provider: 'anthropic',\n // No trailing /v1: the Anthropic provider appends `/v1/messages` itself.\n baseUrl: 'https://api.anthropic.com', modelHint: 'claude-3-5-sonnet-20241022' },\n { provider: 'openai-compat',\n baseUrl: '', modelHint: '' },\n]\n\nexport default function SettingsLlmRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useLlmList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('llm.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('llm.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('llm.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <BackendsCard data={listQuery.data} />\n <AddBackendCard />\n <RolesCard data={listQuery.data} />\n <section id=\"agim-agent\" className=\"rounded-md border border-border bg-surface px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.agimAgentRuntimeTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.agimAgentRuntimeHint')}</p>\n </section>\n <NativeAgentSettingsPanel embedded />\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Backends list ─────────────── */\n\nfunction BackendsCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeBackend = useLlmRemoveBackend()\n const ping = useLlmPing()\n const [pingResults, setPingResults] = useState<Record<string, string>>({})\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('llm.removeConfirm', { name }))) return\n try {\n const r = await removeBackend.mutateAsync(name)\n toast.success(t('llm.removedToast', { count: r.removedRoles }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onPing(name: string): Promise<void> {\n setPingResults((m) => ({ ...m, [name]: t('llm.pinging') }))\n try {\n const r = await ping.mutateAsync(name)\n const msg = r.ok\n ? `✓ ${r.durationMs}ms · tokens ${r.tokensIn}→${r.tokensOut}`\n : `✗ ${r.error}`\n setPingResults((m) => ({ ...m, [name]: msg }))\n } catch (err) {\n setPingResults((m) => ({ ...m, [name]: `✗ ${((err as Error)?.message ?? String(err))}` }))\n }\n }\n\n const rows = data?.backends ?? []\n if (rows.length === 0) {\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('llm.backendsEmpty')}\n </section>\n )\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.backendsTitle', { count: rows.length })}</h2>\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('llm.col.name')}</TableHead>\n <TableHead>{t('llm.col.provider')}</TableHead>\n <TableHead>{t('llm.col.model')}</TableHead>\n <TableHead>{t('llm.col.baseUrl')}</TableHead>\n <TableHead>{t('llm.col.apiKey')}</TableHead>\n <TableHead>{t('llm.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((b) => {\n const keyBadge = b.secret.source === 'none'\n ? <Badge variant=\"outline\">{t('llm.secretMissing')}</Badge>\n : <Badge variant=\"success\">{b.secret.source}</Badge>\n return (\n <TableRow key={b.name}>\n <TableCell className=\"font-mono text-xs\">{b.name}</TableCell>\n <TableCell>{b.provider}</TableCell>\n <TableCell className=\"font-mono text-xs\">{b.model}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{b.baseUrl ?? '—'}</TableCell>\n <TableCell>{keyBadge}</TableCell>\n <TableCell className=\"flex flex-col gap-1 sm:flex-row sm:items-center\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onPing(b.name)}\n disabled={ping.isPending || b.secret.source === 'none'}\n title={b.secret.source === 'none' ? t('llm.setKeyFirst') : t('llm.pingHint')}\n >\n <Zap className=\"h-4 w-4\" />\n <span>{t('llm.ping')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(b.name)}\n disabled={removeBackend.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('llm.remove')}</span>\n </Button>\n {pingResults[b.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{pingResults[b.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\n/* ─────────────── Role bindings ─────────────── */\n\nfunction RolesCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const putRoles = useLlmPutRoles()\n const backendNames = (data?.backends ?? []).map((b) => b.name)\n const current = data?.roles ?? {}\n\n async function onChangeRole(role: string, value: string): Promise<void> {\n const next: Record<string, string | null> = {\n [role]: value === UNBIND_SENTINEL ? null : value,\n }\n try {\n await putRoles.mutateAsync(next)\n toast.success(t('llm.roleUpdated', { role }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.rolesTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.rolesOptionalHint')}</p>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n {KNOWN_ROLES.map((role) => (\n <div key={role} className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{role}</Label>\n <Select\n value={current[role] ?? UNBIND_SENTINEL}\n onValueChange={(v) => void onChangeRole(role, v)}\n disabled={backendNames.length === 0 || putRoles.isPending}\n >\n <SelectTrigger className=\"font-mono text-xs\">\n <SelectValue placeholder={t('llm.unset')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={UNBIND_SENTINEL}>{t('llm.unbound')}</SelectItem>\n {backendNames.map((n) => (\n <SelectItem key={n} value={n}>{n}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-[11px] text-text-dim\">\n {t(`llm.roleHint.${role}`)}\n </p>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\n/* ─────────────── Add backend form ─────────────── */\n\nfunction AddBackendCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addBackend = useLlmAddBackend()\n const [presetIdx, setPresetIdx] = useState(0)\n const [name, setName] = useState('')\n const [baseUrl, setBaseUrl] = useState(PRESETS[0]?.baseUrl ?? '')\n const [model, setModel] = useState(PRESETS[0]?.modelHint ?? '')\n const [apiKey, setApiKey] = useState('')\n const [formError, setFormError] = useState<string | null>(null)\n\n function fail(message: string): void {\n setFormError(message)\n toast.error(message)\n }\n\n function onPickPreset(idx: number): void {\n setPresetIdx(idx)\n const p = PRESETS[idx]\n if (!p) return\n setBaseUrl(p.baseUrl)\n setModel(p.modelHint)\n }\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n const p = PRESETS[presetIdx]\n if (!p) { fail(t('llm.invalidPreset')); return }\n if (!name.trim()) { fail(t('llm.nameRequired')); return }\n if (!baseUrl.trim()) { fail(t('llm.baseUrlRequired')); return }\n if (!model.trim()) { fail(t('llm.modelRequired')); return }\n if (!apiKey.trim()) { fail(t('llm.apiKeyRequired')); return }\n try {\n await addBackend.mutateAsync({\n name: name.trim(),\n provider: p.provider,\n baseUrl: baseUrl.trim(),\n model: model.trim(),\n apiKey: apiKey.trim(),\n })\n setFormError(null)\n toast.success(t('llm.addedWithKey', { name: name.trim() }))\n setName(''); setApiKey('')\n } catch (err) {\n const message = ((err as Error)?.message ?? String(err))\n fail(message)\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.addTitle')}</h2>\n </header>\n <form onSubmit={(e) => void onSubmit(e)} className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.preset')}</Label>\n <Select value={String(presetIdx)} onValueChange={(v) => onPickPreset(Number(v))}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {PRESETS.map((_p, i) => (\n <SelectItem key={PRESET_KEYS[i]} value={String(i)}>\n {t(`llm.presets.${PRESET_KEYS[i]}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.name')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('llm.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('llm.baseUrl')}</Label>\n <Input\n value={baseUrl} onChange={(e) => setBaseUrl(e.target.value)}\n placeholder={t('llm.baseUrlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.model')}</Label>\n <Input\n value={model} onChange={(e) => setModel(e.target.value)}\n placeholder={t('llm.modelPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.apiKey')}</Label>\n <Input\n type=\"password\"\n value={apiKey} onChange={(e) => setApiKey(e.target.value)}\n placeholder={t('llm.apiKeyPlaceholder')}\n className=\"font-mono text-xs\"\n autoComplete=\"off\"\n />\n </div>\n <div className=\"sm:col-span-2 flex\">\n <div className=\"flex w-full flex-col gap-2 sm:items-end\">\n {formError && (\n <p className=\"text-xs text-danger\">{formError}</p>\n )}\n <Button\n type=\"submit\"\n disabled={addBackend.isPending}\n className=\"ml-auto\"\n >\n {addBackend.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('llm.addBackend')}\n </Button>\n </div>\n </div>\n </form>\n </section>\n )\n}\n\n/* helper — toast tag passthrough */\nfunction _unused(): typeof CheckCircle2 { return CheckCircle2 }\nvoid _unused\n"],"names":["Cpu","createLucideIcon","FileStack","Gauge","Waves","Zap","draftFromEnv","env","isTruthy","isFalsy","v","SubtitleWithLlmLink","useTranslation","subtitle","link","idx","jsx","jsxs","NativeAgentSettingsPanel","embedded","t","envQuery","useEnv","updateEnv","useUpdateEnv","envData","current","useMemo","draft","setDraft","useState","syncedHash","setSyncedHash","useEffect","hash","isDirty","setField","k","d","onSave","updates","toast","err","onDiscard","Fragment","Button","Loader2","RefreshCcw","NativeAgentCard","RuntimeCapsCard","A2ACard","CriticCard","CompactCard","StreamCard","EvaluatorCard","HeartbeatCard","Badge","X","Save","Field","Input","e","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Bell","HeartPulse","Network","ShieldAlert","label","hint","children","Label","KNOWN_ROLES","UNBIND_SENTINEL","PRESET_KEYS","PRESETS","SettingsLlmRoute","listQuery","useLlmList","BackendsCard","AddBackendCard","RolesCard","data","removeBackend","useLlmRemoveBackend","ping","useLlmPing","pingResults","setPingResults","onRemove","name","r","onPing","m","msg","rows","Table","TableHeader","TableRow","TableHead","TableBody","b","keyBadge","TableCell","Trash2","putRoles","useLlmPutRoles","backendNames","onChangeRole","role","value","next","n","addBackend","useLlmAddBackend","presetIdx","setPresetIdx","setName","baseUrl","setBaseUrl","model","setModel","apiKey","setApiKey","formError","setFormError","fail","message","onPickPreset","p","onSubmit","_p","i","Plus"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{o as e}from"./index-
|
|
1
|
+
import{o as e}from"./index-DvWldAJY.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/const o=e("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);export{o as L};
|
|
7
|
-
//# sourceMappingURL=loader-circle-
|
|
7
|
+
//# sourceMappingURL=loader-circle-CZQXsfz7.js.map
|
package/dist/web/public/assets/{loader-circle-DsLQMvHE.js.map → loader-circle-CZQXsfz7.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-circle-
|
|
1
|
+
{"version":3,"file":"loader-circle-CZQXsfz7.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"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 LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{o as c}from"./index-
|
|
1
|
+
import{o as c}from"./index-DvWldAJY.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/const r=c("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);export{r as M};
|
|
7
|
-
//# sourceMappingURL=map-pin-
|
|
7
|
+
//# sourceMappingURL=map-pin-CYj0xBbt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-pin-
|
|
1
|
+
{"version":3,"file":"map-pin-CYj0xBbt.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"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 MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{o as A,u as L,af as M,j as e,B as k,ag as q,ah as z,l as C,ai as B,L as x,I as v,S as F,g as I,h as O,i as $,k as R,m as o}from"./index-
|
|
1
|
+
import{o as A,u as L,af as M,j as e,B as k,ag as q,ah as z,l as C,ai as B,L as x,I as v,S as F,g as I,h as O,i as $,k as R,m as o}from"./index-DvWldAJY.js";import{r as l}from"./react-DlP5eolq.js";import{T as E,a as D,b as H,c as b,d as J,e as N}from"./table-B695Fh_p.js";import{L as P}from"./loader-circle-CZQXsfz7.js";import{R as V}from"./refresh-ccw-CW2loqyz.js";import{A as U}from"./activity-ZxWknBf9.js";import{T as Q}from"./trash-2-DH4UNSUm.js";import{P as W}from"./plus-D__n9IVW.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/const G=A("ServerCog",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5",key:"tn8das"}],["path",{d:"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5",key:"1g2pve"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m15.7 13.4-.9-.3",key:"1jwmzr"}],["path",{d:"m9.2 10.9-.9-.3",key:"qapnim"}],["path",{d:"m10.6 15.7.3-.9",key:"quwk0k"}],["path",{d:"m13.6 15.7-.4-1",key:"cb9xp7"}],["path",{d:"m10.8 9.3-.4-1",key:"1uaiz5"}],["path",{d:"m8.3 13.6 1-.4",key:"s6srou"}],["path",{d:"m14.7 10.8 1-.4",key:"4d31cq"}],["path",{d:"m13.4 8.3-.3.9",key:"1bm987"}]]);function ce(){const{t}=L(["settings","common"]),s=M();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx(G,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:t("mcp.title")}),e.jsxs(k,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(V,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("mcp.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("mcp.subtitle")}),s.isLoading?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(K,{data:s.data}),e.jsx(Y,{})]})]})}function K({data:t}){const{t:s}=L(["settings","common"]),m=q(),p=z(),[i,u]=l.useState({});async function j(a){if(confirm(s("mcp.removeConfirm",{name:a})))try{await m.mutateAsync(a),o.success(s("mcp.removedToast",{name:a}))}catch(r){o.error(r?.message??String(r))}}async function y(a){u(r=>({...r,[a]:s("mcp.probing")}));try{const r=await p.mutateAsync(a),c=r.connected?`✓ ${r.toolCount===1?s("mcp.runtimeConnectedOne",{count:r.toolCount}):s("mcp.runtimeConnected",{count:r.toolCount})}`:`✗ ${r.lastError??s("mcp.runtimeDisconnected")}`;u(h=>({...h,[a]:c}))}catch(r){u(c=>({...c,[a]:`✗ ${r?.message??String(r)}`}))}}const d=t?.servers??[],S=t?.runtime?.servers??[];return d.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:s("mcp.serversEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("mcp.serversTitle",{count:d.length})}),t?.runtime&&e.jsx(C,{variant:"info",children:s("mcp.totalTools",{count:t.runtime.totalTools})})]}),e.jsxs(E,{children:[e.jsx(D,{children:e.jsxs(H,{children:[e.jsx(b,{children:s("mcp.col.name")}),e.jsx(b,{children:s("mcp.col.transport")}),e.jsx(b,{children:s("mcp.col.target")}),e.jsx(b,{children:s("mcp.col.runtime")}),e.jsx(b,{children:s("mcp.col.actions")})]})}),e.jsx(J,{children:d.map(a=>{const r=S.find(n=>n.name===a.name),c=X(a,s),h=a.command?`${a.command} ${(a.args??[]).join(" ")}`.trim():a.url??"—",w=r?r.connected?e.jsx(C,{variant:"success",children:r.toolCount===1?s("mcp.runtimeConnectedOne",{count:r.toolCount}):s("mcp.runtimeConnected",{count:r.toolCount})}):e.jsx(C,{variant:"danger",children:s("mcp.runtimeDisconnected")}):e.jsx(C,{variant:"outline",children:s("mcp.runtimeUnknown")});return e.jsxs(H,{children:[e.jsx(N,{className:"font-mono text-xs",children:a.name}),e.jsx(N,{children:c}),e.jsx(N,{className:"break-all font-mono text-[11px] text-text-dim",children:h}),e.jsx(N,{children:w}),e.jsxs(N,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void y(a.name),disabled:p.isPending,children:[e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{children:s("mcp.health")})]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void j(a.name),disabled:m.isPending,className:"text-danger hover:text-danger",children:[e.jsx(Q,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("mcp.remove")})]}),i[a.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:i[a.name]})]})]},a.name)})})]})]})}function X(t,s){return t.command?s("mcp.transportStdio"):t.url?t.url.endsWith("/sse")?s("mcp.transportSse"):s("mcp.transportHttp"):"—"}function Y(){const{t}=L(["settings","common"]),s=B(),[m,p]=l.useState(""),[i,u]=l.useState("stdio"),[j,y]=l.useState(""),[d,S]=l.useState(""),[a,r]=l.useState(""),[c,h]=l.useState("");async function w(n){if(n.preventDefault(),!m.trim()){o.error(t("mcp.nameRequired"));return}let T;if(c.trim())try{T=JSON.parse(c)}catch{o.error(t("mcp.headersInvalid"));return}const g={name:m.trim()};if(i==="stdio"){if(!j.trim()){o.error(t("mcp.commandRequired"));return}g.command=j.trim();const f=d.split(/\s+/).filter(Boolean);f.length>0&&(g.args=f)}else{if(!a.trim()){o.error(t("mcp.urlRequired"));return}g.url=a.trim(),T&&(g.headers=T)}try{await s.mutateAsync(g),o.success(t("mcp.addedToast",{name:m.trim()})),p(""),y(""),S(""),r(""),h("")}catch(f){o.error(f?.message??String(f))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("mcp.addTitle")})}),e.jsxs("form",{onSubmit:n=>void w(n),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.nameLabel")}),e.jsx(v,{value:m,onChange:n=>p(n.target.value),placeholder:t("mcp.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.transportLabel")}),e.jsxs(F,{value:i,onValueChange:n=>u(n),children:[e.jsx(I,{children:e.jsx(O,{})}),e.jsxs($,{children:[e.jsx(R,{value:"stdio",children:t("mcp.transportStdioOption")}),e.jsx(R,{value:"http",children:t("mcp.transportHttpOption")})]})]})]}),i==="stdio"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.commandLabel")}),e.jsx(v,{value:j,onChange:n=>y(n.target.value),placeholder:t("mcp.commandPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.argsLabel")}),e.jsx(v,{value:d,onChange:n=>S(n.target.value),placeholder:"-y @modelcontextprotocol/server-filesystem /data",className:"font-mono text-xs"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.urlLabel")}),e.jsx(v,{value:a,onChange:n=>r(n.target.value),placeholder:t("mcp.urlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.headersLabel")}),e.jsx(v,{value:c,onChange:n=>h(n.target.value),placeholder:t("mcp.headersPlaceholder"),className:"font-mono text-xs"})]})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs(k,{type:"submit",disabled:s.isPending,className:"ml-auto",children:[s.isPending?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),t("mcp.addServer")]})})]})]})}export{ce as default};
|
|
7
|
-
//# sourceMappingURL=mcp-
|
|
7
|
+
//# sourceMappingURL=mcp-DP4Vj1Nh.js.map
|