agim-cli 1.2.154 → 1.2.156
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 +40 -0
- package/dist/core/llm/imhub-dispatcher.d.ts +6 -0
- package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/imhub-dispatcher.js +12 -2
- package/dist/core/llm/imhub-dispatcher.js.map +1 -1
- package/dist/core/llm/registry.d.ts +21 -0
- package/dist/core/llm/registry.d.ts.map +1 -1
- package/dist/core/llm/registry.js +25 -0
- package/dist/core/llm/registry.js.map +1 -1
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +15 -2
- package/dist/core/registry.js.map +1 -1
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +21 -1
- package/dist/core/router.js.map +1 -1
- package/dist/plugins/agents/native/index.d.ts +17 -0
- package/dist/plugins/agents/native/index.d.ts.map +1 -1
- package/dist/plugins/agents/native/index.js +6 -1
- package/dist/plugins/agents/native/index.js.map +1 -1
- package/dist/plugins/agents/pi-native/approval.d.ts +4 -0
- package/dist/plugins/agents/pi-native/approval.d.ts.map +1 -0
- package/dist/plugins/agents/pi-native/approval.js +25 -0
- package/dist/plugins/agents/pi-native/approval.js.map +1 -0
- package/dist/plugins/agents/pi-native/factory.d.ts +5 -0
- package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -0
- package/dist/plugins/agents/pi-native/factory.js +103 -0
- package/dist/plugins/agents/pi-native/factory.js.map +1 -0
- package/dist/plugins/agents/pi-native/index.d.ts +74 -0
- package/dist/plugins/agents/pi-native/index.d.ts.map +1 -0
- package/dist/plugins/agents/pi-native/index.js +219 -0
- package/dist/plugins/agents/pi-native/index.js.map +1 -0
- package/dist/plugins/agents/pi-native/provider-resolver.d.ts +7 -0
- package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -0
- package/dist/plugins/agents/pi-native/provider-resolver.js +51 -0
- package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -0
- package/dist/plugins/agents/pi-native/tool-bridge.d.ts +17 -0
- package/dist/plugins/agents/pi-native/tool-bridge.d.ts.map +1 -0
- package/dist/plugins/agents/pi-native/tool-bridge.js +37 -0
- package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -0
- package/dist/plugins/agents/pi-native/tools.d.ts +12 -0
- package/dist/plugins/agents/pi-native/tools.d.ts.map +1 -0
- package/dist/plugins/agents/pi-native/tools.js +52 -0
- package/dist/plugins/agents/pi-native/tools.js.map +1 -0
- package/dist/web/public/assets/{a2a-CIxNaIdE.js → a2a-CK_McNBZ.js} +2 -2
- package/dist/web/public/assets/{a2a-CIxNaIdE.js.map → a2a-CK_McNBZ.js.map} +1 -1
- package/dist/web/public/assets/{activity-CrnWHC2j.js → activity-SXgxjjhd.js} +2 -2
- package/dist/web/public/assets/{activity-CrnWHC2j.js.map → activity-SXgxjjhd.js.map} +1 -1
- package/dist/web/public/assets/{admins-5BTRCU9u.js → admins-aofsuukT.js} +2 -2
- package/dist/web/public/assets/{admins-5BTRCU9u.js.map → admins-aofsuukT.js.map} +1 -1
- package/dist/web/public/assets/{agents-B-s9gngh.js → agents-BhuZPnjf.js} +2 -2
- package/dist/web/public/assets/{agents-B-s9gngh.js.map → agents-BhuZPnjf.js.map} +1 -1
- package/dist/web/public/assets/{approvals-BSX2lsqu.js → approvals-CUsF6htp.js} +2 -2
- package/dist/web/public/assets/{approvals-BSX2lsqu.js.map → approvals-CUsF6htp.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-D3lWOftw.js → arrow-down-Dhsj-A0i.js} +2 -2
- package/dist/web/public/assets/{arrow-down-D3lWOftw.js.map → arrow-down-Dhsj-A0i.js.map} +1 -1
- package/dist/web/public/assets/{arrow-up-BGsin7FN.js → arrow-up-Byeo8HHt.js} +2 -2
- package/dist/web/public/assets/{arrow-up-BGsin7FN.js.map → arrow-up-Byeo8HHt.js.map} +1 -1
- package/dist/web/public/assets/{asks-DfLaW3gA.js → asks-BkwfCOfj.js} +2 -2
- package/dist/web/public/assets/{asks-DfLaW3gA.js.map → asks-BkwfCOfj.js.map} +1 -1
- package/dist/web/public/assets/{audit-BWlwMCTk.js → audit-DshxCHuP.js} +2 -2
- package/dist/web/public/assets/{audit-BWlwMCTk.js.map → audit-DshxCHuP.js.map} +1 -1
- package/dist/web/public/assets/{bell-Bf-FDztO.js → bell-CgQQygG1.js} +2 -2
- package/dist/web/public/assets/{bell-Bf-FDztO.js.map → bell-CgQQygG1.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-6dDxfEi7.js → bgjobs-qYRbEcQY.js} +2 -2
- package/dist/web/public/assets/{bgjobs-6dDxfEi7.js.map → bgjobs-qYRbEcQY.js.map} +1 -1
- package/dist/web/public/assets/{brain-Dl0NIztX.js → brain-V9r2NcZc.js} +2 -2
- package/dist/web/public/assets/{brain-Dl0NIztX.js.map → brain-V9r2NcZc.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-Bl6rZAmJ.js → briefcase-CC-yM9eZ.js} +2 -2
- package/dist/web/public/assets/{briefcase-Bl6rZAmJ.js.map → briefcase-CC-yM9eZ.js.map} +1 -1
- package/dist/web/public/assets/{chat-Cu8-EeJt.js → chat-CY4JriM5.js} +2 -2
- package/dist/web/public/assets/{chat-Cu8-EeJt.js.map → chat-CY4JriM5.js.map} +1 -1
- package/dist/web/public/assets/{chevron-left-BtG3MZQX.js → chevron-left-CTwCYqyt.js} +2 -2
- package/dist/web/public/assets/{chevron-left-BtG3MZQX.js.map → chevron-left-CTwCYqyt.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-FytmF5Sd.js → chevron-right-CDiFYKGo.js} +2 -2
- package/dist/web/public/assets/{chevron-right-FytmF5Sd.js.map → chevron-right-CDiFYKGo.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-DggvG9Xs.js → circle-check-CWttT2Af.js} +2 -2
- package/dist/web/public/assets/{circle-check-DggvG9Xs.js.map → circle-check-CWttT2Af.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-J5lVPTDz.js → circle-check-big-Cf2odn4o.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-J5lVPTDz.js.map → circle-check-big-Cf2odn4o.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-pYYyY1z2.js → circle-x-CMJqo4Pi.js} +2 -2
- package/dist/web/public/assets/{circle-x-pYYyY1z2.js.map → circle-x-CMJqo4Pi.js.map} +1 -1
- package/dist/web/public/assets/{clock-CQy6p5uP.js → clock-DUKggKlF.js} +2 -2
- package/dist/web/public/assets/{clock-CQy6p5uP.js.map → clock-DUKggKlF.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-B3jno5Pb.js → confirm-dialog-CMWuyC3w.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-B3jno5Pb.js.map → confirm-dialog-CMWuyC3w.js.map} +1 -1
- package/dist/web/public/assets/{copy-BK_JexVU.js → copy-D8mIKuYJ.js} +2 -2
- package/dist/web/public/assets/{copy-BK_JexVU.js.map → copy-D8mIKuYJ.js.map} +1 -1
- package/dist/web/public/assets/{data-table-C3oIPQ_B.js → data-table-CHGndGOY.js} +2 -2
- package/dist/web/public/assets/{data-table-C3oIPQ_B.js.map → data-table-CHGndGOY.js.map} +1 -1
- package/dist/web/public/assets/{dialog-nb4ANHd4.js → dialog-xeyu8dCf.js} +2 -2
- package/dist/web/public/assets/{dialog-nb4ANHd4.js.map → dialog-xeyu8dCf.js.map} +1 -1
- package/dist/web/public/assets/{download-DtvF6Ngb.js → download-CgEI28s6.js} +2 -2
- package/dist/web/public/assets/{download-DtvF6Ngb.js.map → download-CgEI28s6.js.map} +1 -1
- package/dist/web/public/assets/{email-6PldVxPe.js → email-BLZQOZnx.js} +2 -2
- package/dist/web/public/assets/{email-6PldVxPe.js.map → email-BLZQOZnx.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-esNZG4Xa.js → empty-state-D8kx-FwO.js} +2 -2
- package/dist/web/public/assets/{empty-state-esNZG4Xa.js.map → empty-state-D8kx-FwO.js.map} +1 -1
- package/dist/web/public/assets/{external-link-Bzl-4lM6.js → external-link-BM6n9mwt.js} +2 -2
- package/dist/web/public/assets/{external-link-Bzl-4lM6.js.map → external-link-BM6n9mwt.js.map} +1 -1
- package/dist/web/public/assets/{eye-Cpc4c8vR.js → eye-Dk27zHD5.js} +2 -2
- package/dist/web/public/assets/{eye-Cpc4c8vR.js.map → eye-Dk27zHD5.js.map} +1 -1
- package/dist/web/public/assets/{facts-CAc-sdKE.js → facts-CoWF4O82.js} +2 -2
- package/dist/web/public/assets/{facts-CAc-sdKE.js.map → facts-CoWF4O82.js.map} +1 -1
- package/dist/web/public/assets/{goals-iarR52LZ.js → goals-CuiFswaR.js} +2 -2
- package/dist/web/public/assets/{goals-iarR52LZ.js.map → goals-CuiFswaR.js.map} +1 -1
- package/dist/web/public/assets/{health-DPiNRwJP.js → health-C3lSUr_r.js} +2 -2
- package/dist/web/public/assets/{health-DPiNRwJP.js.map → health-C3lSUr_r.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-DTcvh4ER.js → heart-pulse-D34iW_OF.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-DTcvh4ER.js.map → heart-pulse-D34iW_OF.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-B8tcKFzJ.js → heartbeat-Z5gPGZhm.js} +2 -2
- package/dist/web/public/assets/{heartbeat-B8tcKFzJ.js.map → heartbeat-Z5gPGZhm.js.map} +1 -1
- package/dist/web/public/assets/{hot-CqLT7AGh.js → hot-CZJeO9Mj.js} +2 -2
- package/dist/web/public/assets/{hot-CqLT7AGh.js.map → hot-CZJeO9Mj.js.map} +1 -1
- package/dist/web/public/assets/{index-BjUyDXLb.js → index-D1ulN_24.js} +30 -30
- package/dist/web/public/assets/index-D1ulN_24.js.map +1 -0
- package/dist/web/public/assets/{injection-U1ms-Jjs.js → injection-BTDjIbkn.js} +2 -2
- package/dist/web/public/assets/{injection-U1ms-Jjs.js.map → injection-BTDjIbkn.js.map} +1 -1
- package/dist/web/public/assets/{installed-8FN6LLKG.js → installed-B5IGYO0m.js} +2 -2
- package/dist/web/public/assets/{installed-8FN6LLKG.js.map → installed-B5IGYO0m.js.map} +1 -1
- package/dist/web/public/assets/{jobs-B-MU_dkD.js → jobs-9YLeiSVG.js} +2 -2
- package/dist/web/public/assets/{jobs-B-MU_dkD.js.map → jobs-9YLeiSVG.js.map} +1 -1
- package/dist/web/public/assets/{layout-CnddsqFT.js → layout-5cLpIeb4.js} +2 -2
- package/dist/web/public/assets/{layout-CnddsqFT.js.map → layout-5cLpIeb4.js.map} +1 -1
- package/dist/web/public/assets/{layout-BVI4tkRG.js → layout-BdCXtDqk.js} +2 -2
- package/dist/web/public/assets/{layout-BVI4tkRG.js.map → layout-BdCXtDqk.js.map} +1 -1
- package/dist/web/public/assets/{layout-DfE74Z47.js → layout-CgeijAPB.js} +2 -2
- package/dist/web/public/assets/{layout-DfE74Z47.js.map → layout-CgeijAPB.js.map} +1 -1
- package/dist/web/public/assets/{layout-DMOpWAPw.js → layout-DLtODZx_.js} +2 -2
- package/dist/web/public/assets/{layout-DMOpWAPw.js.map → layout-DLtODZx_.js.map} +1 -1
- package/dist/web/public/assets/{layout-BgmJrSOb.js → layout-DviZj3TJ.js} +2 -2
- package/dist/web/public/assets/{layout-BgmJrSOb.js.map → layout-DviZj3TJ.js.map} +1 -1
- package/dist/web/public/assets/{llm-5HpT83y2.js → llm-BXhp_nmW.js} +2 -2
- package/dist/web/public/assets/{llm-5HpT83y2.js.map → llm-BXhp_nmW.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-MnTMknNl.js → loader-circle-Bgi0H_iI.js} +2 -2
- package/dist/web/public/assets/{loader-circle-MnTMknNl.js.map → loader-circle-Bgi0H_iI.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-BA0GTiIe.js → map-pin-o5p1iOoH.js} +2 -2
- package/dist/web/public/assets/{map-pin-BA0GTiIe.js.map → map-pin-o5p1iOoH.js.map} +1 -1
- package/dist/web/public/assets/{mcp-C71xI5JH.js → mcp-kSwFcRcU.js} +2 -2
- package/dist/web/public/assets/{mcp-C71xI5JH.js.map → mcp-kSwFcRcU.js.map} +1 -1
- package/dist/web/public/assets/{memos-BAuv2jwD.js → memos-uAcJzXoQ.js} +2 -2
- package/dist/web/public/assets/{memos-BAuv2jwD.js.map → memos-uAcJzXoQ.js.map} +1 -1
- package/dist/web/public/assets/{messengers-CmW1ts2s.js → messengers-CkfyROty.js} +2 -2
- package/dist/web/public/assets/{messengers-CmW1ts2s.js.map → messengers-CkfyROty.js.map} +1 -1
- package/dist/web/public/assets/{mobile-DpxLpRIf.js → mobile-ClKdRpd9.js} +2 -2
- package/dist/web/public/assets/{mobile-DpxLpRIf.js.map → mobile-ClKdRpd9.js.map} +1 -1
- package/dist/web/public/assets/{native-agent-CNUBixLm.js → native-agent-yfdrcTaK.js} +2 -2
- package/dist/web/public/assets/{native-agent-CNUBixLm.js.map → native-agent-yfdrcTaK.js.map} +1 -1
- package/dist/web/public/assets/{network-DVRgX5Mm.js → network-BlQWIsIc.js} +2 -2
- package/dist/web/public/assets/{network-DVRgX5Mm.js.map → network-BlQWIsIc.js.map} +1 -1
- package/dist/web/public/assets/{outbox-C8Gc0aa0.js → outbox-CYwJu6AR.js} +2 -2
- package/dist/web/public/assets/{outbox-C8Gc0aa0.js.map → outbox-CYwJu6AR.js.map} +1 -1
- package/dist/web/public/assets/{pagination-BWgXaluu.js → pagination-C6qu72mB.js} +2 -2
- package/dist/web/public/assets/{pagination-BWgXaluu.js.map → pagination-C6qu72mB.js.map} +1 -1
- package/dist/web/public/assets/{persona--zQXx4oA.js → persona-DnuFOp64.js} +2 -2
- package/dist/web/public/assets/{persona--zQXx4oA.js.map → persona-DnuFOp64.js.map} +1 -1
- package/dist/web/public/assets/{plans-mluEj2nt.js → plans-DUg3JDwQ.js} +2 -2
- package/dist/web/public/assets/{plans-mluEj2nt.js.map → plans-DUg3JDwQ.js.map} +1 -1
- package/dist/web/public/assets/{play-BLIwYTvQ.js → play-BGXpdCxa.js} +2 -2
- package/dist/web/public/assets/{play-BLIwYTvQ.js.map → play-BGXpdCxa.js.map} +1 -1
- package/dist/web/public/assets/{plus-BOfhZkjh.js → plus-2MZ7TkP3.js} +2 -2
- package/dist/web/public/assets/{plus-BOfhZkjh.js.map → plus-2MZ7TkP3.js.map} +1 -1
- package/dist/web/public/assets/{policy-C8CPYuH5.js → policy-C4xe2rWm.js} +2 -2
- package/dist/web/public/assets/{policy-C8CPYuH5.js.map → policy-C4xe2rWm.js.map} +1 -1
- package/dist/web/public/assets/{qr-code-CfdRXZZD.js → qr-code-BVHNR5Zs.js} +2 -2
- package/dist/web/public/assets/{qr-code-CfdRXZZD.js.map → qr-code-BVHNR5Zs.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw--XT-lrCo.js → refresh-ccw-MHrCmmSv.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw--XT-lrCo.js.map → refresh-ccw-MHrCmmSv.js.map} +1 -1
- package/dist/web/public/assets/{reminders-DJkMBSTZ.js → reminders-CmV_JNt5.js} +2 -2
- package/dist/web/public/assets/{reminders-DJkMBSTZ.js.map → reminders-CmV_JNt5.js.map} +1 -1
- package/dist/web/public/assets/{save-9sLkRauh.js → save-DhFewuZL.js} +2 -2
- package/dist/web/public/assets/{save-9sLkRauh.js.map → save-DhFewuZL.js.map} +1 -1
- package/dist/web/public/assets/{schedules-BEqyQYLb.js → schedules-Cp63TJGf.js} +2 -2
- package/dist/web/public/assets/{schedules-BEqyQYLb.js.map → schedules-Cp63TJGf.js.map} +1 -1
- package/dist/web/public/assets/search-wUAqWxXK.js +17 -0
- package/dist/web/public/assets/search-wUAqWxXK.js.map +1 -0
- package/dist/web/public/assets/{search-aWQWrzh3.js → search-wZEXSmcX.js} +2 -2
- package/dist/web/public/assets/{search-aWQWrzh3.js.map → search-wZEXSmcX.js.map} +1 -1
- package/dist/web/public/assets/{security-B7KXMgM3.js → security-BoMdDyCY.js} +2 -2
- package/dist/web/public/assets/{security-B7KXMgM3.js.map → security-BoMdDyCY.js.map} +1 -1
- package/dist/web/public/assets/{service-1ZeT0cRY.js → service-C_KqtWwn.js} +2 -2
- package/dist/web/public/assets/{service-1ZeT0cRY.js.map → service-C_KqtWwn.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-BJKgUDEG.js → shield-alert-CplKlUGS.js} +2 -2
- package/dist/web/public/assets/{shield-alert-BJKgUDEG.js.map → shield-alert-CplKlUGS.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-DJgvgFQk.js → status-badge-q2WooCma.js} +2 -2
- package/dist/web/public/assets/{status-badge-DJgvgFQk.js.map → status-badge-q2WooCma.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-Cq0R4U6Z.js → subtasks-CBi4c6FD.js} +2 -2
- package/dist/web/public/assets/{subtasks-Cq0R4U6Z.js.map → subtasks-CBi4c6FD.js.map} +1 -1
- package/dist/web/public/assets/{table-CVYTRwUs.js → table-Bmwe7n4n.js} +2 -2
- package/dist/web/public/assets/{table-CVYTRwUs.js.map → table-Bmwe7n4n.js.map} +1 -1
- package/dist/web/public/assets/{topn--vv790Oy.js → topn-CMRS4ApA.js} +2 -2
- package/dist/web/public/assets/{topn--vv790Oy.js.map → topn-CMRS4ApA.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-CeN2btBl.js → trash-2-CT_B0mSH.js} +2 -2
- package/dist/web/public/assets/{trash-2-CeN2btBl.js.map → trash-2-CT_B0mSH.js.map} +1 -1
- package/dist/web/public/assets/{use-agim-skills-D5JvyrxB.js → use-agim-skills-C0HdvMQj.js} +2 -2
- package/dist/web/public/assets/{use-agim-skills-D5JvyrxB.js.map → use-agim-skills-C0HdvMQj.js.map} +1 -1
- package/dist/web/public/assets/{use-background-tasks-C6zGANI5.js → use-background-tasks-Co9CtmcD.js} +2 -2
- package/dist/web/public/assets/{use-background-tasks-C6zGANI5.js.map → use-background-tasks-Co9CtmcD.js.map} +1 -1
- package/dist/web/public/assets/{use-llm-admin-CdqRAs0I.js → use-llm-admin-Bd0XAQpx.js} +2 -2
- package/dist/web/public/assets/{use-llm-admin-CdqRAs0I.js.map → use-llm-admin-Bd0XAQpx.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-Bg-C6FxV.js → use-memory-BHYuPOc9.js} +2 -2
- package/dist/web/public/assets/{use-memory-Bg-C6FxV.js.map → use-memory-BHYuPOc9.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-CiyMLYeG.js → use-observability-CHv6H0zQ.js} +2 -2
- package/dist/web/public/assets/{use-observability-CiyMLYeG.js.map → use-observability-CHv6H0zQ.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-S6mSC9nP.js → use-settings-Bx0ZTOsd.js} +2 -2
- package/dist/web/public/assets/{use-settings-S6mSC9nP.js.map → use-settings-Bx0ZTOsd.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-DRkCOO8P.js → use-workspace-zFEfqUCo.js} +2 -2
- package/dist/web/public/assets/{use-workspace-DRkCOO8P.js.map → use-workspace-zFEfqUCo.js.map} +1 -1
- package/dist/web/public/assets/{useQuery-CvEVNuvH.js → useQuery-Bt7Ty7IO.js} +2 -2
- package/dist/web/public/assets/{useQuery-CvEVNuvH.js.map → useQuery-Bt7Ty7IO.js.map} +1 -1
- package/dist/web/public/assets/{vector-BlXq3jJE.js → vector-B9v7zTvA.js} +2 -2
- package/dist/web/public/assets/{vector-BlXq3jJE.js.map → vector-B9v7zTvA.js.map} +1 -1
- package/dist/web/public/assets/{viewer-Daxh0dV4.js → viewer-CeD55ZLu.js} +2 -2
- package/dist/web/public/assets/{viewer-Daxh0dV4.js.map → viewer-CeD55ZLu.js.map} +1 -1
- package/dist/web/public/assets/{workspace-BO51vrkT.js → workspace-Ci21xBqp.js} +2 -2
- package/dist/web/public/assets/{workspace-BO51vrkT.js.map → workspace-Ci21xBqp.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-Chonjr-v.js → workspaces-C8mT-jmj.js} +2 -2
- package/dist/web/public/assets/{workspaces-Chonjr-v.js.map → workspaces-C8mT-jmj.js.map} +1 -1
- package/dist/web/public/assets/{x-Dv1gbRhw.js → x-DXACg96C.js} +2 -2
- package/dist/web/public/assets/{x-Dv1gbRhw.js.map → x-DXACg96C.js.map} +1 -1
- package/dist/web/public/index.html +1 -1
- package/dist/web/server.js +12 -0
- package/dist/web/server.js.map +1 -1
- package/package.json +3 -1
- package/dist/web/public/assets/index-BjUyDXLb.js.map +0 -1
- package/dist/web/public/assets/search-D4CzBwIp.js +0 -17
- package/dist/web/public/assets/search-D4CzBwIp.js.map +0 -1
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{n as T,u as E,j as e,B as g,k as j,l as v,L as D,I}from"./index-BjUyDXLb.js";import{r as w}from"./react-DlP5eolq.js";import{u as L,s as _,a as z,t as F}from"./use-settings-S6mSC9nP.js";import{L as K}from"./loader-circle-MnTMknNl.js";import{R as U}from"./refresh-ccw--XT-lrCo.js";import{X as M}from"./x-Dv1gbRhw.js";import{S as V}from"./save-9sLkRauh.js";import{A as q}from"./arrow-up-BGsin7FN.js";import{A as J}from"./arrow-down-D3lWOftw.js";import{C as W}from"./circle-check-DggvG9Xs.js";import{C as G}from"./circle-x-pYYyY1z2.js";import"./useQuery-CvEVNuvH.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Q=T("FlaskConical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const X=T("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);/**
|
|
12
|
-
* @license lucide-react v0.469.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const Y=T("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);function Z(r,a){const o=(r??"").split(",").map(i=>i.trim()).filter(Boolean),h=new Set(a.map(i=>i.name)),m=new Set,x=[];for(const i of o)!h.has(i)||m.has(i)||(x.push({name:i,enabled:!0}),m.add(i));for(const i of a)m.has(i.name)||x.push({name:i.name,enabled:!1});return x}function B(r){return r.filter(a=>a.enabled).map(a=>a.name).join(",")}function ue(){const{t:r}=E(["settings","common"]),a=L({reveal:!1}),o=_(),h=z(),m=F(),x=a.data?.env??{},i=o.data?.providers??[],y=o.data?.chain??[],d=w.useMemo(()=>({chain:Z(x.IMHUB_WEB_SEARCH_PROVIDERS,i),keys:{},keysTouched:{}}),[x.IMHUB_WEB_SEARCH_PROVIDERS,i]),[l,u]=w.useState(d),[b,C]=w.useState("");w.useEffect(()=>{const s=JSON.stringify(d);s!==b&&(u(d),C(s))},[d,b]);const k=JSON.stringify(l.chain)!==JSON.stringify(d.chain)||Object.keys(l.keysTouched).length>0;function N(s,t){u(c=>{const n=[...c.chain],f=s+t;return f<0||f>=n.length?c:([n[s],n[f]]=[n[f],n[s]],{...c,chain:n})})}function S(s,t){u(c=>{const n=[...c.chain];return n[s]={...n[s],enabled:t},{...c,chain:n}})}function p(s,t){u(c=>({...c,keys:{...c.keys,[s]:t},keysTouched:{...c.keysTouched,[s]:!0}}))}function P(s){u(t=>({...t,keys:{...t.keys,[s]:""},keysTouched:{...t.keysTouched,[s]:!0}}))}async function A(){const s={},t=B(l.chain),c=B(d.chain);t!==c&&(s.IMHUB_WEB_SEARCH_PROVIDERS=t||null);for(const[n,f]of Object.entries(l.keysTouched)){if(!f)continue;const R=l.keys[n]??"";s[n]=R.trim()===""?null:R}if(Object.keys(s).length!==0)try{await h.mutateAsync({updates:s}),o.refetch(),v.success(r("search.savedToast")),u(n=>({...n,keys:{},keysTouched:{}}))}catch(n){v.error(n?.message??String(n))}}function H(){u(d)}async function O(s){try{const t=await m.mutateAsync({provider:s,query:"agim ping"});t.ok?v.success(r("search.testOk",{provider:s,hits:t.hits,ms:t.latencyMs})):v.error(r("search.testFail",{provider:s,error:t.error??"unknown error"}))}catch(t){v.error(t?.message??String(t))}}return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:r("search.title")}),e.jsxs(g,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>{a.refetch(),o.refetch()},disabled:a.isFetching||o.isFetching,"aria-label":r("actions.refresh",{ns:"common"}),children:[a.isFetching||o.isFetching?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:r("search.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:r("search.subtitle")}),e.jsx($,{live:y}),a.isLoading||o.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsx("section",{className:"flex flex-col gap-2",children:l.chain.map((s,t)=>{const c=i.find(n=>n.name===s.name);return e.jsx(ee,{info:c,entry:s,idx:t,count:l.chain.length,keyValue:c?.envKey?l.keys[c.envKey]:void 0,keyTouched:c?.envKey?!!l.keysTouched[c.envKey]:!1,onMove:n=>N(t,n),onToggle:n=>S(t,n),onSetKey:n=>c?.envKey&&p(c.envKey,n),onClearKey:()=>c?.envKey&&P(c.envKey),onTest:()=>O(s.name),testing:m.isPending},s.name)})}),k&&e.jsxs("div",{className:"sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow",children:[e.jsx(j,{variant:"info",children:r("search.unsaved")}),e.jsxs(g,{variant:"ghost",size:"sm",className:"ml-auto",onClick:H,disabled:h.isPending,children:[e.jsx(M,{className:"h-4 w-4"})," ",r("search.discard")]}),e.jsxs(g,{size:"sm",onClick:()=>void A(),disabled:h.isPending,children:[h.isPending?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(V,{className:"h-4 w-4"}),r("search.save")]})]})]})}function $({live:r}){const{t:a}=E("settings");return e.jsxs("section",{className:"rounded-md border border-border bg-surface px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(X,{className:"h-4 w-4 text-text-dim"}),e.jsx("span",{className:"text-text-dim",children:a("search.chainLabel")}),r.length===0?e.jsx(j,{variant:"outline",children:a("search.chainEmpty")}):e.jsx("span",{className:"font-mono text-xs",children:r.join(" → ")})]}),e.jsx("p",{className:"mt-1 text-[11px] text-text-dim",children:a("search.chainHint")})]})}function ee(r){const{t:a}=E("settings"),{info:o,entry:h,idx:m,count:x,keyValue:i,keyTouched:y,onMove:d,onToggle:l,onSetKey:u,onClearKey:b,onTest:C,testing:k}=r,N=!!o?.envKey,S=!!o?.available||y&&!!i;return e.jsxs("div",{className:"rounded-md border border-border bg-surface p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("button",{type:"button",className:"h-5 w-5 rounded text-text-dim hover:bg-surface-hover disabled:opacity-30",onClick:()=>d(-1),disabled:m===0,"aria-label":a("search.moveUp"),children:e.jsx(q,{className:"h-4 w-4"})}),e.jsx("button",{type:"button",className:"h-5 w-5 rounded text-text-dim hover:bg-surface-hover disabled:opacity-30",onClick:()=>d(1),disabled:m===x-1,"aria-label":a("search.moveDown"),children:e.jsx(J,{className:"h-4 w-4"})})]}),e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:h.enabled,onChange:p=>l(p.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{className:"font-mono text-sm",children:h.name})]}),N?S?e.jsxs(j,{variant:"success",children:[e.jsx(W,{className:"mr-1 h-3 w-3"})," ",a("search.configured")]}):e.jsxs(j,{variant:"warning",children:[e.jsx(G,{className:"mr-1 h-3 w-3"})," ",a("search.missingKey")]}):e.jsx(j,{variant:"outline",children:a("search.noKey")}),e.jsx("div",{className:"ml-auto flex items-center gap-1",children:e.jsxs(g,{size:"sm",variant:"ghost",onClick:C,disabled:k||!h.enabled,"aria-label":a("search.testBtn"),children:[k?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(Q,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:a("search.testBtn")})]})})]}),N&&e.jsxs("div",{className:"mt-3 flex flex-col gap-1",children:[e.jsxs(D,{className:"text-xs font-medium",children:[e.jsx(Y,{className:"mr-1 inline h-3 w-3"}),o?.envKey]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(I,{type:"password",value:i??"",onChange:p=>u(p.target.value),placeholder:o?.available&&!y?a("search.placeholderConfigured"):a("search.placeholderEnter"),className:"font-mono text-xs"}),o?.available&&!y&&e.jsx(g,{size:"sm",variant:"ghost",onClick:b,"aria-label":a("search.clearKey"),children:e.jsx(M,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-[11px] text-text-dim",children:a("search.keyHint",{envKey:o?.envKey})})]})]})}export{ue as default};
|
|
17
|
-
//# sourceMappingURL=search-D4CzBwIp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-D4CzBwIp.js","sources":["../../node_modules/lucide-react/dist/esm/icons/flask-conical.js","../../node_modules/lucide-react/dist/esm/icons/globe.js","../../node_modules/lucide-react/dist/esm/icons/key.js","../../src/routes/settings/search.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 FlaskConical = createLucideIcon(\"FlaskConical\", [\n [\n \"path\",\n {\n d: \"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2\",\n key: \"18mbvz\"\n }\n ],\n [\"path\", { d: \"M6.453 15h11.094\", key: \"3shlmq\" }],\n [\"path\", { d: \"M8.5 2h7\", key: \"csnxdl\" }]\n]);\n\nexport { FlaskConical as default };\n//# sourceMappingURL=flask-conical.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 Globe = createLucideIcon(\"Globe\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n]);\n\nexport { Globe as default };\n//# sourceMappingURL=globe.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 Key = createLucideIcon(\"Key\", [\n [\"path\", { d: \"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\", key: \"g0fldk\" }],\n [\"path\", { d: \"m21 2-9.6 9.6\", key: \"1j0ho8\" }],\n [\"circle\", { cx: \"7.5\", cy: \"15.5\", r: \"5.5\", key: \"yqb3hr\" }]\n]);\n\nexport { Key as default };\n//# sourceMappingURL=key.js.map\n","/**\n * /settings/search — web_search provider config (v1.2.126).\n *\n * One row per registered provider (Tavily / Brave / Serper / Exa /\n * DuckDuckGo / Metaso): API-key input (masked-by-default), enable\n * toggle (= \"is this name in the chain?\"), reorder via up / down,\n * one-shot test button. The chain preview at the top shows what\n * IMHUB_WEB_SEARCH_PROVIDERS resolves to right now.\n *\n * Persistence: API keys go via PUT /api/env (which masks GET +\n * refuses echoed masks on PUT); the chain order is a single CSV\n * env key — same endpoint. Save is one round-trip per dirty key.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n ArrowDown, ArrowUp, CheckCircle2, FlaskConical, Globe, Key,\n Loader2, RefreshCcw, Save, X, XCircle,\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 useEnv,\n useSearchProviders,\n useTestSearchProvider,\n useUpdateEnv,\n} from '@/hooks/use-settings'\nimport type { SearchProviderInfo } from '@/types/api'\n\ninterface ChainEntry {\n name: string\n enabled: boolean\n}\n\ninterface Draft {\n /** Provider chain — every known provider, with `enabled`\n * reflecting \"is name in the CSV\". Order is the row order. */\n chain: ChainEntry[]\n /** Each provider's API-key input. Keyed by envKey (e.g.\n * TAVILY_API_KEY). Holds either '' (clear) or the new plaintext\n * the operator typed. We never load values back from the server. */\n keys: Record<string, string>\n /** Tracks which key fields the operator actually touched — so\n * Save only sends the diff and untouched masked keys are left\n * alone. */\n keysTouched: Record<string, boolean>\n}\n\nfunction envChainOrder(envValue: string | undefined, providers: SearchProviderInfo[]): ChainEntry[] {\n // Parse the CSV chain; preserve operator order; tail-append any\n // provider not in the CSV as disabled so they remain renderable.\n const raw = (envValue ?? '').split(',').map((s) => s.trim()).filter(Boolean)\n const known = new Set(providers.map((p) => p.name))\n const seen = new Set<string>()\n const out: ChainEntry[] = []\n for (const name of raw) {\n if (!known.has(name) || seen.has(name)) continue\n out.push({ name, enabled: true })\n seen.add(name)\n }\n for (const p of providers) {\n if (seen.has(p.name)) continue\n out.push({ name: p.name, enabled: false })\n }\n return out\n}\n\nfunction chainToCsv(chain: ChainEntry[]): string {\n return chain.filter((c) => c.enabled).map((c) => c.name).join(',')\n}\n\nexport default function SettingsSearchRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const envQuery = useEnv({ reveal: false })\n const providersQuery = useSearchProviders()\n const updateEnv = useUpdateEnv()\n const testProvider = useTestSearchProvider()\n\n const envData = envQuery.data?.env ?? {}\n const providers = providersQuery.data?.providers ?? []\n const live = providersQuery.data?.chain ?? []\n\n const initial = useMemo<Draft>(\n () => ({\n chain: envChainOrder(envData.IMHUB_WEB_SEARCH_PROVIDERS, providers),\n keys: {},\n keysTouched: {},\n }),\n [envData.IMHUB_WEB_SEARCH_PROVIDERS, providers],\n )\n\n const [draft, setDraft] = useState<Draft>(initial)\n const [syncedHash, setSyncedHash] = useState('')\n\n useEffect(() => {\n const hash = JSON.stringify(initial)\n if (hash !== syncedHash) {\n setDraft(initial)\n setSyncedHash(hash)\n }\n }, [initial, syncedHash])\n\n const isDirty =\n JSON.stringify(draft.chain) !== JSON.stringify(initial.chain) ||\n Object.keys(draft.keysTouched).length > 0\n\n function moveRow(idx: number, delta: -1 | 1): void {\n setDraft((d) => {\n const next = [...d.chain]\n const swap = idx + delta\n if (swap < 0 || swap >= next.length) return d\n ;[next[idx], next[swap]] = [next[swap], next[idx]]\n return { ...d, chain: next }\n })\n }\n\n function toggleRow(idx: number, enabled: boolean): void {\n setDraft((d) => {\n const next = [...d.chain]\n next[idx] = { ...next[idx], enabled }\n return { ...d, chain: next }\n })\n }\n\n function setKey(envKey: string, value: string): void {\n setDraft((d) => ({\n ...d,\n keys: { ...d.keys, [envKey]: value },\n keysTouched: { ...d.keysTouched, [envKey]: true },\n }))\n }\n\n function clearKey(envKey: string): void {\n setDraft((d) => ({\n ...d,\n keys: { ...d.keys, [envKey]: '' },\n keysTouched: { ...d.keysTouched, [envKey]: true },\n }))\n }\n\n async function onSave(): Promise<void> {\n const updates: Record<string, string | null> = {}\n const nextCsv = chainToCsv(draft.chain)\n const initialCsv = chainToCsv(initial.chain)\n if (nextCsv !== initialCsv) {\n updates.IMHUB_WEB_SEARCH_PROVIDERS = nextCsv || null\n }\n for (const [envKey, touched] of Object.entries(draft.keysTouched)) {\n if (!touched) continue\n const v = draft.keys[envKey] ?? ''\n updates[envKey] = v.trim() === '' ? null : v\n }\n if (Object.keys(updates).length === 0) return\n try {\n await updateEnv.mutateAsync({ updates })\n // Refetch both — env keys changed availability, chain order changed.\n void providersQuery.refetch()\n toast.success(t('search.savedToast'))\n setDraft((d) => ({ ...d, keys: {}, keysTouched: {} }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n function onDiscard(): void {\n setDraft(initial)\n }\n\n async function onTest(provider: string): Promise<void> {\n try {\n const result = await testProvider.mutateAsync({\n provider,\n // Short, harmless probe — the dispatcher only needs to\n // verify the upstream auth + transport.\n query: 'agim ping',\n })\n if (result.ok) {\n toast.success(\n t('search.testOk', { provider, hits: result.hits, ms: result.latencyMs }),\n )\n } else {\n toast.error(\n t('search.testFail', { provider, error: result.error ?? 'unknown error' }),\n )\n }\n } catch (err) {\n toast.error((err as Error)?.message ?? String(err))\n }\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('search.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => {\n void envQuery.refetch()\n void providersQuery.refetch()\n }}\n disabled={envQuery.isFetching || providersQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {envQuery.isFetching || providersQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('search.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('search.subtitle')}</p>\n\n <ChainPreview live={live} />\n\n {envQuery.isLoading || providersQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <section className=\"flex flex-col gap-2\">\n {draft.chain.map((entry, idx) => {\n const info = providers.find((p) => p.name === entry.name)\n return (\n <ProviderRow\n key={entry.name}\n info={info}\n entry={entry}\n idx={idx}\n count={draft.chain.length}\n keyValue={info?.envKey ? draft.keys[info.envKey] : undefined}\n keyTouched={info?.envKey ? !!draft.keysTouched[info.envKey] : false}\n onMove={(d) => moveRow(idx, d)}\n onToggle={(v) => toggleRow(idx, v)}\n onSetKey={(v) => info?.envKey && setKey(info.envKey, v)}\n onClearKey={() => info?.envKey && clearKey(info.envKey)}\n onTest={() => onTest(entry.name)}\n testing={testProvider.isPending}\n />\n )\n })}\n </section>\n )}\n\n {isDirty && (\n <div className=\"sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow\">\n <Badge variant=\"info\">{t('search.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('search.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('search.save')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nfunction ChainPreview({ live }: { live: string[] }): JSX.Element {\n const { t } = useTranslation('settings')\n return (\n <section className=\"rounded-md border border-border bg-surface px-4 py-3\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Globe className=\"h-4 w-4 text-text-dim\" />\n <span className=\"text-text-dim\">{t('search.chainLabel')}</span>\n {live.length === 0 ? (\n <Badge variant=\"outline\">{t('search.chainEmpty')}</Badge>\n ) : (\n <span className=\"font-mono text-xs\">{live.join(' → ')}</span>\n )}\n </div>\n <p className=\"mt-1 text-[11px] text-text-dim\">{t('search.chainHint')}</p>\n </section>\n )\n}\n\ninterface ProviderRowProps {\n info: SearchProviderInfo | undefined\n entry: ChainEntry\n idx: number\n count: number\n keyValue: string | undefined\n keyTouched: boolean\n onMove: (delta: -1 | 1) => void\n onToggle: (v: boolean) => void\n onSetKey: (v: string) => void\n onClearKey: () => void\n onTest: () => void\n testing: boolean\n}\n\nfunction ProviderRow(props: ProviderRowProps): JSX.Element {\n const { t } = useTranslation('settings')\n const { info, entry, idx, count, keyValue, keyTouched, onMove, onToggle,\n onSetKey, onClearKey, onTest, testing } = props\n const needsKey = !!info?.envKey\n const available = !!info?.available || (keyTouched && !!keyValue)\n return (\n <div className=\"rounded-md border border-border bg-surface p-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n className=\"h-5 w-5 rounded text-text-dim hover:bg-surface-hover disabled:opacity-30\"\n onClick={() => onMove(-1)}\n disabled={idx === 0}\n aria-label={t('search.moveUp')}\n >\n <ArrowUp className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n className=\"h-5 w-5 rounded text-text-dim hover:bg-surface-hover disabled:opacity-30\"\n onClick={() => onMove(1)}\n disabled={idx === count - 1}\n aria-label={t('search.moveDown')}\n >\n <ArrowDown className=\"h-4 w-4\" />\n </button>\n </div>\n\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={entry.enabled}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span className=\"font-mono text-sm\">{entry.name}</span>\n </label>\n\n {!needsKey ? (\n <Badge variant=\"outline\">{t('search.noKey')}</Badge>\n ) : available ? (\n <Badge variant=\"success\">\n <CheckCircle2 className=\"mr-1 h-3 w-3\" /> {t('search.configured')}\n </Badge>\n ) : (\n <Badge variant=\"warning\">\n <XCircle className=\"mr-1 h-3 w-3\" /> {t('search.missingKey')}\n </Badge>\n )}\n\n <div className=\"ml-auto flex items-center gap-1\">\n <Button\n size=\"sm\" variant=\"ghost\"\n onClick={onTest}\n disabled={testing || !entry.enabled}\n aria-label={t('search.testBtn')}\n >\n {testing\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <FlaskConical className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('search.testBtn')}</span>\n </Button>\n </div>\n </div>\n\n {needsKey && (\n <div className=\"mt-3 flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">\n <Key className=\"mr-1 inline h-3 w-3\" />\n {info?.envKey}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"password\"\n value={keyValue ?? ''}\n onChange={(e) => onSetKey(e.target.value)}\n placeholder={\n info?.available && !keyTouched\n ? t('search.placeholderConfigured')\n : t('search.placeholderEnter')\n }\n className=\"font-mono text-xs\"\n />\n {info?.available && !keyTouched && (\n <Button\n size=\"sm\" variant=\"ghost\"\n onClick={onClearKey}\n aria-label={t('search.clearKey')}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n <p className=\"text-[11px] text-text-dim\">\n {t('search.keyHint', { envKey: info?.envKey })}\n </p>\n </div>\n )}\n </div>\n )\n}\n"],"names":["FlaskConical","createLucideIcon","Globe","Key","envChainOrder","envValue","providers","raw","s","known","p","seen","out","name","chainToCsv","chain","c","SettingsSearchRoute","t","useTranslation","envQuery","useEnv","providersQuery","useSearchProviders","updateEnv","useUpdateEnv","testProvider","useTestSearchProvider","envData","live","initial","useMemo","draft","setDraft","useState","syncedHash","setSyncedHash","useEffect","hash","isDirty","moveRow","idx","delta","d","next","swap","toggleRow","enabled","setKey","envKey","value","clearKey","onSave","updates","nextCsv","initialCsv","touched","v","toast","err","onDiscard","onTest","provider","result","jsxs","jsx","Button","Loader2","RefreshCcw","ChainPreview","entry","info","ProviderRow","Badge","X","Save","props","count","keyValue","keyTouched","onMove","onToggle","onSetKey","onClearKey","testing","needsKey","available","ArrowUp","ArrowDown","e","CheckCircle2","XCircle","Label","Input"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|