@tonyclaw/agent-inspector 2.1.6 → 2.1.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.
Files changed (39) hide show
  1. package/.output/cli.js +274 -140
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-Djazxhew.js → CompareDrawer-CHkT7kun.js} +1 -1
  4. package/.output/public/assets/{ProxyViewerContainer-BC-z9RPh.js → ProxyViewerContainer-BiZ2_tMC.js} +36 -36
  5. package/.output/public/assets/{ReplayDialog-BaD4R6ac.js → ReplayDialog-C85cakjx.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-w6uGdqYp.js → RequestAnatomy-Dn_pMMoX.js} +1 -1
  7. package/.output/public/assets/{ResponseView-VPed-Yif.js → ResponseView-DzcxCUBf.js} +1 -1
  8. package/.output/public/assets/{StreamingChunkSequence-CPB8FgHI.js → StreamingChunkSequence-BamtvkgZ.js} +1 -1
  9. package/.output/public/assets/_sessionId-xBBbFH1M.js +1 -0
  10. package/.output/public/assets/index-6udjwQO1.js +1 -0
  11. package/.output/public/assets/{main-CIV3Chb5.js → main-Dc2qVWpb.js} +2 -2
  12. package/.output/server/{_sessionId-CIXQGim9.mjs → _sessionId-BnimGger.mjs} +3 -3
  13. package/.output/server/_ssr/{CompareDrawer-_uFgjkB2.mjs → CompareDrawer-CwVFykVF.mjs} +3 -3
  14. package/.output/server/_ssr/{ProxyViewerContainer-D8YjQDNj.mjs → ProxyViewerContainer-X3S2TWBJ.mjs} +236 -136
  15. package/.output/server/_ssr/{ReplayDialog-CFwKM7jc.mjs → ReplayDialog-BxC12XUj.mjs} +4 -4
  16. package/.output/server/_ssr/{RequestAnatomy-2Vr84GxT.mjs → RequestAnatomy-CWWS8Qh7.mjs} +3 -3
  17. package/.output/server/_ssr/{ResponseView-CSBWBHRJ.mjs → ResponseView-BewErHF-.mjs} +3 -3
  18. package/.output/server/_ssr/{StreamingChunkSequence-Dr4JApqs.mjs → StreamingChunkSequence-BlmCVryW.mjs} +3 -3
  19. package/.output/server/_ssr/{index-WnsY1fh_.mjs → index-5qbGuoFX.mjs} +3 -3
  20. package/.output/server/_ssr/index.mjs +2 -2
  21. package/.output/server/_ssr/{router-sy38X5AX.mjs → router-s78S54MU.mjs} +554 -124
  22. package/.output/server/{_tanstack-start-manifest_v-Dde-eACV.mjs → _tanstack-start-manifest_v-DTxpr3KE.mjs} +1 -1
  23. package/.output/server/index.mjs +61 -61
  24. package/README.md +10 -6
  25. package/package.json +1 -1
  26. package/src/cli/detect-tools.ts +2 -1
  27. package/src/cli/onboard.ts +334 -167
  28. package/src/components/groups/GroupsDialog.tsx +9 -4
  29. package/src/components/providers/SettingsDialog.tsx +67 -0
  30. package/src/components/proxy-viewer/ConversationGroup.tsx +28 -0
  31. package/src/components/proxy-viewer/ConversationHeader.tsx +34 -0
  32. package/src/components/proxy-viewer/LogEntryHeader.tsx +3 -12
  33. package/src/mcp/server.ts +18 -4
  34. package/src/proxy/sessionArchive.ts +410 -0
  35. package/src/proxy/store.ts +121 -6
  36. package/src/routes/api/logs.ts +2 -0
  37. package/src/routes/api/sessions.ts +2 -2
  38. package/.output/public/assets/_sessionId-mnr0O0Ri.js +0 -1
  39. package/.output/public/assets/index-DH1DjJOl.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
2
- import { I as InspectorGroupsListResponseSchema, C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, g as apiFormatForPath, l as GroupEvidenceExportResultSchema, m as DeleteInspectorGroupResponseSchema, r as createPendingProviderTestResults, t as ProviderTestResultsSchema, u as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, v as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, h as getSessionPath, f as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, w as resolveProviderContextWindow, j as AlertSummarySchema, k as AlertListResponseSchema, G as GroupEvidenceReadResponseSchema, q as maskApiKey, n as providerHasContextMetadata, o as findProviderModelMetadata, K as KnowledgeCandidateSchema, i as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema, x as isPlainRecord } from "./router-sy38X5AX.mjs";
2
+ import { I as InspectorGroupsListResponseSchema, C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, g as apiFormatForPath, l as GroupEvidenceExportResultSchema, m as DeleteInspectorGroupResponseSchema, r as createPendingProviderTestResults, t as ProviderTestResultsSchema, u as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, v as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, h as getSessionPath, f as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, w as resolveProviderContextWindow, j as AlertSummarySchema, k as AlertListResponseSchema, G as GroupEvidenceReadResponseSchema, q as maskApiKey, n as providerHasContextMetadata, o as findProviderModelMetadata, K as KnowledgeCandidateSchema, i as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema, x as isPlainRecord } from "./router-s78S54MU.mjs";
3
3
  import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
4
4
  import { J as JSZip } from "../_libs/jszip.mjs";
5
5
  import { c as clsx } from "../_libs/clsx.mjs";
@@ -807,6 +807,128 @@ function ConfirmDialog({
807
807
  ] })
808
808
  ] }) });
809
809
  }
810
+ const AnthropicLogoSvg = "data:image/svg+xml,%3csvg%20height='2500'%20viewBox='0%206.603%201192.672%201193.397'%20width='2500'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m233.96%20800.215%20234.684-131.678%203.947-11.436-3.947-6.363h-11.436l-39.221-2.416-134.094-3.624-116.296-4.832-112.67-6.04-28.35-6.04-26.577-35.035%202.738-17.477%2023.84-16.027%2034.147%202.98%2075.463%205.155%20113.235%207.812%2082.147%204.832%20121.692%2012.644h19.329l2.738-7.812-6.604-4.832-5.154-4.832-117.182-79.41-126.845-83.92-66.443-48.321-35.92-24.484-18.12-22.953-7.813-50.093%2032.618-35.92%2043.812%202.98%2011.195%202.98%2044.375%2034.147%2094.792%2073.37%20123.786%2091.167%2018.12%2015.06%207.249-5.154.886-3.624-8.135-13.61-67.329-121.692-71.838-123.785-31.974-51.302-8.456-30.765c-2.98-12.645-5.154-23.275-5.154-36.242l37.127-50.416%2020.537-6.604%2049.53%206.604%2020.86%2018.121%2030.765%2070.39%2049.852%20110.818%2077.315%20150.684%2022.631%2044.698%2012.08%2041.396%204.51%2012.645h7.813v-7.248l6.362-84.886%2011.759-104.215%2011.436-134.094%203.946-37.772%2018.685-45.262%2037.127-24.482%2028.994%2013.852%2023.839%2034.148-3.303%2022.067-14.174%2092.134-27.785%20144.323-18.121%2096.644h10.55l12.08-12.08%2048.887-64.913%2082.147-102.685%2036.242-40.752%2042.282-45.02%2027.14-21.423h51.303l37.772%2056.135-16.913%2057.986-52.832%2067.007-43.812%2056.779-62.82%2084.563-39.22%2067.651%203.623%205.396%209.343-.886%20141.906-30.201%2076.671-13.852%2091.49-15.705%2041.396%2019.329%204.51%2019.65-16.269%2040.189-97.852%2024.16-114.764%2022.954-170.9%2040.43-2.093%201.53%202.416%202.98%2076.993%207.248%2032.94%201.771h80.617l150.12%2011.195%2039.222%2025.933%2023.517%2031.732-3.946%2024.16-60.403%2030.766-81.503-19.33-190.228-45.26-65.235-16.27h-9.02v5.397l54.362%2053.154%2099.624%2089.96%20124.752%20115.973%206.362%2028.671-16.027%2022.63-16.912-2.415-109.611-82.47-42.282-37.127-95.758-80.618h-6.363v8.456l22.067%2032.296%20116.537%20175.167%206.04%2053.719-8.456%2017.476-30.201%2010.55-33.181-6.04-68.215-95.758-70.39-107.84-56.778-96.644-6.926%203.947-33.503%20360.886-15.705%2018.443-36.243%2013.852-30.201-22.953-16.027-37.127%2016.027-73.37%2019.329-95.758%2015.704-76.107%2014.175-94.55%208.456-31.41-.563-2.094-6.927.886-71.275%2097.852-108.402%20146.497-85.772%2091.812-20.537%208.134-35.597-18.443%203.301-32.94%2019.893-29.315%20118.712-151.007%2071.597-93.583%2046.228-54.04-.322-7.813h-2.738l-315.302%20204.725-56.135%207.248-24.16-22.63%202.98-37.128%2011.435-12.08%2094.792-65.236-.322.323z'%20fill='%23d97757'/%3e%3c/svg%3e";
811
+ const OpenAILogoSvg = "data:image/svg+xml,%3csvg%20height='2500'%20viewBox='-1%20-.1%20949.1%20959.8'%20width='2474'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m925.8%20456.3c10.4%2023.2%2017%2048%2019.7%2073.3%202.6%2025.3%201.3%2050.9-4.1%2075.8-5.3%2024.9-14.5%2048.8-27.3%2070.8-8.4%2014.7-18.3%2028.5-29.7%2041.2-11.3%2012.6-23.9%2024-37.6%2034-13.8%2010-28.5%2018.4-44.1%2025.3-15.5%206.8-31.7%2012-48.3%2015.4-7.8%2024.2-19.4%2047.1-34.4%2067.7-14.9%2020.6-33%2038.7-53.6%2053.6-20.6%2015-43.4%2026.6-67.6%2034.4-24.2%207.9-49.5%2011.8-75%2011.8-16.9.1-33.9-1.7-50.5-5.1-16.5-3.5-32.7-8.8-48.2-15.7s-30.2-15.5-43.9-25.5c-13.6-10-26.2-21.5-37.4-34.2-25%205.4-50.6%206.7-75.9%204.1-25.3-2.7-50.1-9.3-73.4-19.7-23.2-10.3-44.7-24.3-63.6-41.4s-35-37.1-47.7-59.1c-8.5-14.7-15.5-30.2-20.8-46.3s-8.8-32.7-10.6-49.6c-1.8-16.8-1.7-33.8.1-50.7%201.8-16.8%205.5-33.4%2010.8-49.5-17-18.9-31-40.4-41.4-63.6-10.3-23.3-17-48-19.6-73.3-2.7-25.3-1.3-50.9%204-75.8s14.5-48.8%2027.3-70.8c8.4-14.7%2018.3-28.6%2029.6-41.2s24-24%2037.7-34%2028.5-18.5%2044-25.3c15.6-6.9%2031.8-12%2048.4-15.4%207.8-24.3%2019.4-47.1%2034.3-67.7%2015-20.6%2033.1-38.7%2053.7-53.7%2020.6-14.9%2043.4-26.5%2067.6-34.4%2024.2-7.8%2049.5-11.8%2075-11.7%2016.9-.1%2033.9%201.6%2050.5%205.1s32.8%208.7%2048.3%2015.6c15.5%207%2030.2%2015.5%2043.9%2025.5%2013.7%2010.1%2026.3%2021.5%2037.5%2034.2%2024.9-5.3%2050.5-6.6%2075.8-4s50%209.3%2073.3%2019.6c23.2%2010.4%2044.7%2024.3%2063.6%2041.4%2018.9%2017%2035%2036.9%2047.7%2059%208.5%2014.6%2015.5%2030.1%2020.8%2046.3%205.3%2016.1%208.9%2032.7%2010.6%2049.6%201.8%2016.9%201.8%2033.9-.1%2050.8-1.8%2016.9-5.5%2033.5-10.8%2049.6%2017.1%2018.9%2031%2040.3%2041.4%2063.6zm-333.2%20426.9c21.8-9%2041.6-22.3%2058.3-39s30-36.5%2039-58.4c9-21.8%2013.7-45.2%2013.7-68.8v-223q-.1-.3-.2-.7-.1-.3-.3-.6-.2-.3-.5-.5-.3-.3-.6-.4l-80.7-46.6v269.4c0%202.7-.4%205.5-1.1%208.1-.7%202.7-1.7%205.2-3.1%207.6s-3%204.6-5%206.5a32.1%2032.1%200%200%201%20-6.5%205l-191.1%20110.3c-1.6%201-4.3%202.4-5.7%203.2%207.9%206.7%2016.5%2012.6%2025.5%2017.8%209.1%205.2%2018.5%209.6%2028.3%2013.2%209.8%203.5%2019.9%206.2%2030.1%208%2010.3%201.8%2020.7%202.7%2031.1%202.7%2023.6%200%2047-4.7%2068.8-13.8zm-455.1-151.4c11.9%2020.5%2027.6%2038.3%2046.3%2052.7%2018.8%2014.4%2040.1%2024.9%2062.9%2031s46.6%207.7%2070%204.6%2045.9-10.7%2066.4-22.5l193.2-111.5.5-.5q.2-.2.3-.6.2-.3.3-.6v-94l-233.2%20134.9c-2.4%201.4-4.9%202.4-7.5%203.2-2.7.7-5.4%201-8.2%201-2.7%200-5.4-.3-8.1-1-2.6-.8-5.2-1.8-7.6-3.2l-191.1-110.4c-1.7-1-4.2-2.5-5.6-3.4-1.8%2010.3-2.7%2020.7-2.7%2031.1s1%2020.8%202.8%2031.1c1.8%2010.2%204.6%2020.3%208.1%2030.1%203.6%209.8%208%2019.2%2013.2%2028.2zm-50.2-417c-11.8%2020.5-19.4%2043.1-22.5%2066.5s-1.5%2047.1%204.6%2070c6.1%2022.8%2016.6%2044.1%2031%2062.9%2014.4%2018.7%2032.3%2034.4%2052.7%2046.2l193.1%20111.6q.3.1.7.2h.7q.4%200%20.7-.2.3-.1.6-.3l81-46.8-233.2-134.6c-2.3-1.4-4.5-3.1-6.5-5a32.1%2032.1%200%200%201%20-5-6.5c-1.3-2.4-2.4-4.9-3.1-7.6-.7-2.6-1.1-5.3-1-8.1v-227.1c-9.8%203.6-19.3%208-28.3%2013.2-9%205.3-17.5%2011.3-25.5%2018-7.9%206.7-15.3%2014.1-22%2022.1-6.7%207.9-12.6%2016.5-17.8%2025.5zm663.3%20154.4c2.4%201.4%204.6%203%206.6%205%201.9%201.9%203.6%204.1%205%206.5%201.3%202.4%202.4%205%203.1%207.6.6%202.7%201%205.4.9%208.2v227.1c32.1-11.8%2060.1-32.5%2080.8-59.7%2020.8-27.2%2033.3-59.7%2036.2-93.7s-3.9-68.2-19.7-98.5-39.9-55.5-69.5-72.5l-193.1-111.6q-.3-.1-.7-.2h-.7q-.3.1-.7.2-.3.1-.6.3l-80.6%2046.6%20233.2%20134.7zm80.5-121h-.1v.1zm-.1-.1c5.8-33.6%201.9-68.2-11.3-99.7-13.1-31.5-35-58.6-63-78.2-28-19.5-61-30.7-95.1-32.2-34.2-1.4-68%206.9-97.6%2023.9l-193.1%20111.5q-.3.2-.5.5l-.4.6q-.1.3-.2.7-.1.3-.1.7v93.2l233.2-134.7c2.4-1.4%205-2.4%207.6-3.2%202.7-.7%205.4-1%208.1-1%202.8%200%205.5.3%208.2%201%202.6.8%205.1%201.8%207.5%203.2l191.1%20110.4c1.7%201%204.2%202.4%205.6%203.3zm-505.3-103.2c0-2.7.4-5.4%201.1-8.1.7-2.6%201.7-5.2%203.1-7.6%201.4-2.3%203-4.5%205-6.5%201.9-1.9%204.1-3.6%206.5-4.9l191.1-110.3c1.8-1.1%204.3-2.5%205.7-3.2-26.2-21.9-58.2-35.9-92.1-40.2-33.9-4.4-68.3%201-99.2%2015.5-31%2014.5-57.2%2037.6-75.5%2066.4-18.3%2028.9-28%2062.3-28%2096.5v223q.1.4.2.7.1.3.3.6.2.3.5.6.2.2.6.4l80.7%2046.6zm43.8%20294.7%20103.9%2060%20103.9-60v-119.9l-103.8-60-103.9%2060z'/%3e%3c/svg%3e";
812
+ const DeepSeekLogoSvg = "data:image/svg+xml,%3csvg%20fill='none'%20height='1320'%20viewBox='3.771%206.973%2023.993%2017.652'%20width='2500'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m27.501%208.469c-.252-.123-.36.111-.508.23-.05.04-.093.09-.135.135-.368.395-.797.652-1.358.621-.821-.045-1.521.213-2.14.842-.132-.776-.57-1.238-1.235-1.535-.349-.155-.701-.309-.944-.645-.171-.238-.217-.504-.303-.765-.054-.159-.108-.32-.29-.348-.197-.031-.274.135-.352.273-.31.567-.43%201.192-.419%201.825.028%201.421.628%202.554%201.82%203.36.136.093.17.186.128.321-.081.278-.178.547-.264.824-.054.178-.135.217-.324.14a5.448%205.448%200%200%201%20-1.719-1.169c-.848-.82-1.614-1.726-2.57-2.435-.225-.166-.449-.32-.681-.467-.976-.95.128-1.729.383-1.82.267-.096.093-.428-.77-.424s-1.653.293-2.659.677a2.782%202.782%200%200%201%20-.46.135%209.554%209.554%200%200%200%20-2.853-.1c-1.866.21-3.356%201.092-4.452%202.6-1.315%201.81-1.625%203.87-1.246%206.018.399%202.261%201.552%204.136%203.326%205.601%201.837%201.518%203.955%202.262%206.37%202.12%201.466-.085%203.1-.282%204.942-1.842.465.23.952.322%201.762.392.623.059%201.223-.031%201.687-.127.728-.154.677-.828.414-.953-2.132-.994-1.665-.59-2.09-.916%201.084-1.285%202.717-2.619%203.356-6.94.05-.343.007-.558%200-.837-.004-.168.034-.235.228-.254a4.084%204.084%200%200%200%201.529-.47c1.382-.757%201.938-1.997%202.07-3.485.02-.227-.004-.463-.243-.582zm-12.041%2013.391c-2.067-1.627-3.07-2.162-3.483-2.138-.387.021-.318.465-.233.754.089.285.205.482.368.732.113.166.19.414-.112.598-.666.414-1.823-.139-1.878-.166-1.347-.793-2.473-1.842-3.267-3.276-.765-1.38-1.21-2.861-1.284-4.441-.02-.383.093-.518.472-.586a4.692%204.692%200%200%201%201.514-.04c2.109.31%203.905%201.255%205.41%202.749.86.853%201.51%201.871%202.18%202.865.711%201.057%201.478%202.063%202.454%202.887.343.289.619.51.881.672-.792.088-2.117.107-3.022-.61zm.99-6.38a.304.304%200%201%201%20.609%200c0%20.17-.136.304-.306.304a.3.3%200%200%201%20-.303-.305zm3.077%201.581c-.197.08-.394.15-.584.159a1.246%201.246%200%200%201%20-.79-.252c-.27-.227-.463-.354-.546-.752a1.752%201.752%200%200%201%20.016-.582c.07-.324-.008-.531-.235-.72-.187-.155-.422-.196-.682-.196a.551.551%200%200%201%20-.252-.078c-.108-.055-.197-.19-.112-.356.027-.053.159-.183.19-.207.352-.201.758-.135%201.134.016.349.142.611.404.99.773.388.448.457.573.678.906.174.264.333.534.441.842.066.192-.02.35-.248.448z'%20fill='%234d6bfe'/%3e%3c/svg%3e";
813
+ const MiniMaxLogoSvg = "/assets/minimax-BPMzvuL-.jpeg";
814
+ const AlibabaLogoSvg = "/assets/alibaba-TTwafVwX.svg";
815
+ const QwenLogoSvg = "/assets/qwen-CONDcHqt.png";
816
+ const ZhipuAILogoSvg = "/assets/zhipuai-BPNAnxo-.svg";
817
+ const PROVIDER_MAP = {
818
+ "claude-": "anthropic",
819
+ "gpt-": "openai",
820
+ "o1-": "openai",
821
+ "o3-": "openai",
822
+ "deepseek-": "deepseek",
823
+ MiniMax: "minimax",
824
+ qwen: "qwen",
825
+ "glm-": "zhipuai"
826
+ };
827
+ function detectProvider(model) {
828
+ if (model === null) return "unknown";
829
+ const modelLower = model.toLowerCase();
830
+ for (const [prefix, provider] of Object.entries(PROVIDER_MAP)) {
831
+ if (modelLower.startsWith(prefix.toLowerCase())) {
832
+ return provider;
833
+ }
834
+ }
835
+ return "unknown";
836
+ }
837
+ const sizeStyle = { width: 24, height: 24, objectFit: "contain" };
838
+ const AnthropicLogo = React.memo(
839
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: AnthropicLogoSvg, alt: "Anthropic", className, style: sizeStyle })
840
+ );
841
+ const OpenAILogo = React.memo(
842
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
843
+ "img",
844
+ {
845
+ src: OpenAILogoSvg,
846
+ alt: "OpenAI",
847
+ className,
848
+ style: { ...sizeStyle, background: "white", borderRadius: "4px" }
849
+ }
850
+ )
851
+ );
852
+ const DeepSeekLogo = React.memo(
853
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: DeepSeekLogoSvg, alt: "DeepSeek", className, style: sizeStyle })
854
+ );
855
+ const MiniMaxLogo = React.memo(
856
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: MiniMaxLogoSvg, alt: "MiniMax", className, style: sizeStyle })
857
+ );
858
+ const AlibabaLogo = React.memo(
859
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: AlibabaLogoSvg, alt: "Alibaba", className, style: sizeStyle })
860
+ );
861
+ const QwenLogo = React.memo(
862
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: QwenLogoSvg, alt: "Qwen", className, style: sizeStyle })
863
+ );
864
+ const ZhipuAILogo = React.memo(
865
+ ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: ZhipuAILogoSvg, alt: "ZhipuAI", className, style: sizeStyle })
866
+ );
867
+ function ProviderLogo({
868
+ provider,
869
+ className
870
+ }) {
871
+ switch (provider) {
872
+ case "anthropic":
873
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(AnthropicLogo, { className });
874
+ case "openai":
875
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAILogo, { className });
876
+ case "deepseek":
877
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(DeepSeekLogo, { className });
878
+ case "minimax":
879
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(MiniMaxLogo, { className });
880
+ case "alibaba":
881
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(AlibabaLogo, { className });
882
+ case "qwen":
883
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(QwenLogo, { className });
884
+ case "zhipuai":
885
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ZhipuAILogo, { className });
886
+ case "unknown":
887
+ return null;
888
+ }
889
+ }
890
+ function TooltipProvider({
891
+ delayDuration = 0,
892
+ ...props
893
+ }) {
894
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
895
+ Provider,
896
+ {
897
+ "data-slot": "tooltip-provider",
898
+ delayDuration,
899
+ ...props
900
+ }
901
+ );
902
+ }
903
+ function Tooltip({ ...props }) {
904
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Root3, { "data-slot": "tooltip", ...props });
905
+ }
906
+ function TooltipTrigger({ ...props }) {
907
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Trigger$3, { "data-slot": "tooltip-trigger", ...props });
908
+ }
909
+ function TooltipContent({
910
+ className,
911
+ sideOffset = 0,
912
+ children,
913
+ ...props
914
+ }) {
915
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
916
+ Content2$1,
917
+ {
918
+ "data-slot": "tooltip-content",
919
+ sideOffset,
920
+ className: cn(
921
+ "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
922
+ className
923
+ ),
924
+ ...props,
925
+ children: [
926
+ children,
927
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Arrow2, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
928
+ ]
929
+ }
930
+ ) });
931
+ }
810
932
  function forEachCodePoint(text, visit) {
811
933
  for (const ch of Array.from(text)) {
812
934
  visit(ch);
@@ -1129,6 +1251,7 @@ function ConversationHeader({
1129
1251
  expanded,
1130
1252
  onToggle,
1131
1253
  hideApiFormat = false,
1254
+ providers,
1132
1255
  isLoading = false,
1133
1256
  userAgent,
1134
1257
  timeDisplayFormat,
@@ -1203,6 +1326,17 @@ function ConversationHeader({
1203
1326
  children: API_FORMAT_LABELS[apiFormat]
1204
1327
  }
1205
1328
  ),
1329
+ providers !== void 0 && providers.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
1330
+ "span",
1331
+ {
1332
+ className: "flex items-center gap-0.5 shrink-0",
1333
+ "aria-label": "Models used in this session",
1334
+ children: providers.map(({ provider, models }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
1335
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderLogo, { provider, className: "size-4" }) }) }),
1336
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: models.length === 1 ? models[0] : models.join(", ") })
1337
+ ] }, provider))
1338
+ }
1339
+ ) }),
1206
1340
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground text-xs shrink-0", children: [
1207
1341
  /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
1208
1342
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatTimestampRange(startTime, endTime, timeDisplayFormat) })
@@ -1704,128 +1838,6 @@ function getInteriorCrabVariantIndex(seed) {
1704
1838
  function getInteriorCrabVariant(seed) {
1705
1839
  return getCrabVariant(getInteriorCrabVariantIndex(seed));
1706
1840
  }
1707
- const AnthropicLogoSvg = "data:image/svg+xml,%3csvg%20height='2500'%20viewBox='0%206.603%201192.672%201193.397'%20width='2500'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m233.96%20800.215%20234.684-131.678%203.947-11.436-3.947-6.363h-11.436l-39.221-2.416-134.094-3.624-116.296-4.832-112.67-6.04-28.35-6.04-26.577-35.035%202.738-17.477%2023.84-16.027%2034.147%202.98%2075.463%205.155%20113.235%207.812%2082.147%204.832%20121.692%2012.644h19.329l2.738-7.812-6.604-4.832-5.154-4.832-117.182-79.41-126.845-83.92-66.443-48.321-35.92-24.484-18.12-22.953-7.813-50.093%2032.618-35.92%2043.812%202.98%2011.195%202.98%2044.375%2034.147%2094.792%2073.37%20123.786%2091.167%2018.12%2015.06%207.249-5.154.886-3.624-8.135-13.61-67.329-121.692-71.838-123.785-31.974-51.302-8.456-30.765c-2.98-12.645-5.154-23.275-5.154-36.242l37.127-50.416%2020.537-6.604%2049.53%206.604%2020.86%2018.121%2030.765%2070.39%2049.852%20110.818%2077.315%20150.684%2022.631%2044.698%2012.08%2041.396%204.51%2012.645h7.813v-7.248l6.362-84.886%2011.759-104.215%2011.436-134.094%203.946-37.772%2018.685-45.262%2037.127-24.482%2028.994%2013.852%2023.839%2034.148-3.303%2022.067-14.174%2092.134-27.785%20144.323-18.121%2096.644h10.55l12.08-12.08%2048.887-64.913%2082.147-102.685%2036.242-40.752%2042.282-45.02%2027.14-21.423h51.303l37.772%2056.135-16.913%2057.986-52.832%2067.007-43.812%2056.779-62.82%2084.563-39.22%2067.651%203.623%205.396%209.343-.886%20141.906-30.201%2076.671-13.852%2091.49-15.705%2041.396%2019.329%204.51%2019.65-16.269%2040.189-97.852%2024.16-114.764%2022.954-170.9%2040.43-2.093%201.53%202.416%202.98%2076.993%207.248%2032.94%201.771h80.617l150.12%2011.195%2039.222%2025.933%2023.517%2031.732-3.946%2024.16-60.403%2030.766-81.503-19.33-190.228-45.26-65.235-16.27h-9.02v5.397l54.362%2053.154%2099.624%2089.96%20124.752%20115.973%206.362%2028.671-16.027%2022.63-16.912-2.415-109.611-82.47-42.282-37.127-95.758-80.618h-6.363v8.456l22.067%2032.296%20116.537%20175.167%206.04%2053.719-8.456%2017.476-30.201%2010.55-33.181-6.04-68.215-95.758-70.39-107.84-56.778-96.644-6.926%203.947-33.503%20360.886-15.705%2018.443-36.243%2013.852-30.201-22.953-16.027-37.127%2016.027-73.37%2019.329-95.758%2015.704-76.107%2014.175-94.55%208.456-31.41-.563-2.094-6.927.886-71.275%2097.852-108.402%20146.497-85.772%2091.812-20.537%208.134-35.597-18.443%203.301-32.94%2019.893-29.315%20118.712-151.007%2071.597-93.583%2046.228-54.04-.322-7.813h-2.738l-315.302%20204.725-56.135%207.248-24.16-22.63%202.98-37.128%2011.435-12.08%2094.792-65.236-.322.323z'%20fill='%23d97757'/%3e%3c/svg%3e";
1708
- const OpenAILogoSvg = "data:image/svg+xml,%3csvg%20height='2500'%20viewBox='-1%20-.1%20949.1%20959.8'%20width='2474'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m925.8%20456.3c10.4%2023.2%2017%2048%2019.7%2073.3%202.6%2025.3%201.3%2050.9-4.1%2075.8-5.3%2024.9-14.5%2048.8-27.3%2070.8-8.4%2014.7-18.3%2028.5-29.7%2041.2-11.3%2012.6-23.9%2024-37.6%2034-13.8%2010-28.5%2018.4-44.1%2025.3-15.5%206.8-31.7%2012-48.3%2015.4-7.8%2024.2-19.4%2047.1-34.4%2067.7-14.9%2020.6-33%2038.7-53.6%2053.6-20.6%2015-43.4%2026.6-67.6%2034.4-24.2%207.9-49.5%2011.8-75%2011.8-16.9.1-33.9-1.7-50.5-5.1-16.5-3.5-32.7-8.8-48.2-15.7s-30.2-15.5-43.9-25.5c-13.6-10-26.2-21.5-37.4-34.2-25%205.4-50.6%206.7-75.9%204.1-25.3-2.7-50.1-9.3-73.4-19.7-23.2-10.3-44.7-24.3-63.6-41.4s-35-37.1-47.7-59.1c-8.5-14.7-15.5-30.2-20.8-46.3s-8.8-32.7-10.6-49.6c-1.8-16.8-1.7-33.8.1-50.7%201.8-16.8%205.5-33.4%2010.8-49.5-17-18.9-31-40.4-41.4-63.6-10.3-23.3-17-48-19.6-73.3-2.7-25.3-1.3-50.9%204-75.8s14.5-48.8%2027.3-70.8c8.4-14.7%2018.3-28.6%2029.6-41.2s24-24%2037.7-34%2028.5-18.5%2044-25.3c15.6-6.9%2031.8-12%2048.4-15.4%207.8-24.3%2019.4-47.1%2034.3-67.7%2015-20.6%2033.1-38.7%2053.7-53.7%2020.6-14.9%2043.4-26.5%2067.6-34.4%2024.2-7.8%2049.5-11.8%2075-11.7%2016.9-.1%2033.9%201.6%2050.5%205.1s32.8%208.7%2048.3%2015.6c15.5%207%2030.2%2015.5%2043.9%2025.5%2013.7%2010.1%2026.3%2021.5%2037.5%2034.2%2024.9-5.3%2050.5-6.6%2075.8-4s50%209.3%2073.3%2019.6c23.2%2010.4%2044.7%2024.3%2063.6%2041.4%2018.9%2017%2035%2036.9%2047.7%2059%208.5%2014.6%2015.5%2030.1%2020.8%2046.3%205.3%2016.1%208.9%2032.7%2010.6%2049.6%201.8%2016.9%201.8%2033.9-.1%2050.8-1.8%2016.9-5.5%2033.5-10.8%2049.6%2017.1%2018.9%2031%2040.3%2041.4%2063.6zm-333.2%20426.9c21.8-9%2041.6-22.3%2058.3-39s30-36.5%2039-58.4c9-21.8%2013.7-45.2%2013.7-68.8v-223q-.1-.3-.2-.7-.1-.3-.3-.6-.2-.3-.5-.5-.3-.3-.6-.4l-80.7-46.6v269.4c0%202.7-.4%205.5-1.1%208.1-.7%202.7-1.7%205.2-3.1%207.6s-3%204.6-5%206.5a32.1%2032.1%200%200%201%20-6.5%205l-191.1%20110.3c-1.6%201-4.3%202.4-5.7%203.2%207.9%206.7%2016.5%2012.6%2025.5%2017.8%209.1%205.2%2018.5%209.6%2028.3%2013.2%209.8%203.5%2019.9%206.2%2030.1%208%2010.3%201.8%2020.7%202.7%2031.1%202.7%2023.6%200%2047-4.7%2068.8-13.8zm-455.1-151.4c11.9%2020.5%2027.6%2038.3%2046.3%2052.7%2018.8%2014.4%2040.1%2024.9%2062.9%2031s46.6%207.7%2070%204.6%2045.9-10.7%2066.4-22.5l193.2-111.5.5-.5q.2-.2.3-.6.2-.3.3-.6v-94l-233.2%20134.9c-2.4%201.4-4.9%202.4-7.5%203.2-2.7.7-5.4%201-8.2%201-2.7%200-5.4-.3-8.1-1-2.6-.8-5.2-1.8-7.6-3.2l-191.1-110.4c-1.7-1-4.2-2.5-5.6-3.4-1.8%2010.3-2.7%2020.7-2.7%2031.1s1%2020.8%202.8%2031.1c1.8%2010.2%204.6%2020.3%208.1%2030.1%203.6%209.8%208%2019.2%2013.2%2028.2zm-50.2-417c-11.8%2020.5-19.4%2043.1-22.5%2066.5s-1.5%2047.1%204.6%2070c6.1%2022.8%2016.6%2044.1%2031%2062.9%2014.4%2018.7%2032.3%2034.4%2052.7%2046.2l193.1%20111.6q.3.1.7.2h.7q.4%200%20.7-.2.3-.1.6-.3l81-46.8-233.2-134.6c-2.3-1.4-4.5-3.1-6.5-5a32.1%2032.1%200%200%201%20-5-6.5c-1.3-2.4-2.4-4.9-3.1-7.6-.7-2.6-1.1-5.3-1-8.1v-227.1c-9.8%203.6-19.3%208-28.3%2013.2-9%205.3-17.5%2011.3-25.5%2018-7.9%206.7-15.3%2014.1-22%2022.1-6.7%207.9-12.6%2016.5-17.8%2025.5zm663.3%20154.4c2.4%201.4%204.6%203%206.6%205%201.9%201.9%203.6%204.1%205%206.5%201.3%202.4%202.4%205%203.1%207.6.6%202.7%201%205.4.9%208.2v227.1c32.1-11.8%2060.1-32.5%2080.8-59.7%2020.8-27.2%2033.3-59.7%2036.2-93.7s-3.9-68.2-19.7-98.5-39.9-55.5-69.5-72.5l-193.1-111.6q-.3-.1-.7-.2h-.7q-.3.1-.7.2-.3.1-.6.3l-80.6%2046.6%20233.2%20134.7zm80.5-121h-.1v.1zm-.1-.1c5.8-33.6%201.9-68.2-11.3-99.7-13.1-31.5-35-58.6-63-78.2-28-19.5-61-30.7-95.1-32.2-34.2-1.4-68%206.9-97.6%2023.9l-193.1%20111.5q-.3.2-.5.5l-.4.6q-.1.3-.2.7-.1.3-.1.7v93.2l233.2-134.7c2.4-1.4%205-2.4%207.6-3.2%202.7-.7%205.4-1%208.1-1%202.8%200%205.5.3%208.2%201%202.6.8%205.1%201.8%207.5%203.2l191.1%20110.4c1.7%201%204.2%202.4%205.6%203.3zm-505.3-103.2c0-2.7.4-5.4%201.1-8.1.7-2.6%201.7-5.2%203.1-7.6%201.4-2.3%203-4.5%205-6.5%201.9-1.9%204.1-3.6%206.5-4.9l191.1-110.3c1.8-1.1%204.3-2.5%205.7-3.2-26.2-21.9-58.2-35.9-92.1-40.2-33.9-4.4-68.3%201-99.2%2015.5-31%2014.5-57.2%2037.6-75.5%2066.4-18.3%2028.9-28%2062.3-28%2096.5v223q.1.4.2.7.1.3.3.6.2.3.5.6.2.2.6.4l80.7%2046.6zm43.8%20294.7%20103.9%2060%20103.9-60v-119.9l-103.8-60-103.9%2060z'/%3e%3c/svg%3e";
1709
- const DeepSeekLogoSvg = "data:image/svg+xml,%3csvg%20fill='none'%20height='1320'%20viewBox='3.771%206.973%2023.993%2017.652'%20width='2500'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m27.501%208.469c-.252-.123-.36.111-.508.23-.05.04-.093.09-.135.135-.368.395-.797.652-1.358.621-.821-.045-1.521.213-2.14.842-.132-.776-.57-1.238-1.235-1.535-.349-.155-.701-.309-.944-.645-.171-.238-.217-.504-.303-.765-.054-.159-.108-.32-.29-.348-.197-.031-.274.135-.352.273-.31.567-.43%201.192-.419%201.825.028%201.421.628%202.554%201.82%203.36.136.093.17.186.128.321-.081.278-.178.547-.264.824-.054.178-.135.217-.324.14a5.448%205.448%200%200%201%20-1.719-1.169c-.848-.82-1.614-1.726-2.57-2.435-.225-.166-.449-.32-.681-.467-.976-.95.128-1.729.383-1.82.267-.096.093-.428-.77-.424s-1.653.293-2.659.677a2.782%202.782%200%200%201%20-.46.135%209.554%209.554%200%200%200%20-2.853-.1c-1.866.21-3.356%201.092-4.452%202.6-1.315%201.81-1.625%203.87-1.246%206.018.399%202.261%201.552%204.136%203.326%205.601%201.837%201.518%203.955%202.262%206.37%202.12%201.466-.085%203.1-.282%204.942-1.842.465.23.952.322%201.762.392.623.059%201.223-.031%201.687-.127.728-.154.677-.828.414-.953-2.132-.994-1.665-.59-2.09-.916%201.084-1.285%202.717-2.619%203.356-6.94.05-.343.007-.558%200-.837-.004-.168.034-.235.228-.254a4.084%204.084%200%200%200%201.529-.47c1.382-.757%201.938-1.997%202.07-3.485.02-.227-.004-.463-.243-.582zm-12.041%2013.391c-2.067-1.627-3.07-2.162-3.483-2.138-.387.021-.318.465-.233.754.089.285.205.482.368.732.113.166.19.414-.112.598-.666.414-1.823-.139-1.878-.166-1.347-.793-2.473-1.842-3.267-3.276-.765-1.38-1.21-2.861-1.284-4.441-.02-.383.093-.518.472-.586a4.692%204.692%200%200%201%201.514-.04c2.109.31%203.905%201.255%205.41%202.749.86.853%201.51%201.871%202.18%202.865.711%201.057%201.478%202.063%202.454%202.887.343.289.619.51.881.672-.792.088-2.117.107-3.022-.61zm.99-6.38a.304.304%200%201%201%20.609%200c0%20.17-.136.304-.306.304a.3.3%200%200%201%20-.303-.305zm3.077%201.581c-.197.08-.394.15-.584.159a1.246%201.246%200%200%201%20-.79-.252c-.27-.227-.463-.354-.546-.752a1.752%201.752%200%200%201%20.016-.582c.07-.324-.008-.531-.235-.72-.187-.155-.422-.196-.682-.196a.551.551%200%200%201%20-.252-.078c-.108-.055-.197-.19-.112-.356.027-.053.159-.183.19-.207.352-.201.758-.135%201.134.016.349.142.611.404.99.773.388.448.457.573.678.906.174.264.333.534.441.842.066.192-.02.35-.248.448z'%20fill='%234d6bfe'/%3e%3c/svg%3e";
1710
- const MiniMaxLogoSvg = "/assets/minimax-BPMzvuL-.jpeg";
1711
- const AlibabaLogoSvg = "/assets/alibaba-TTwafVwX.svg";
1712
- const QwenLogoSvg = "/assets/qwen-CONDcHqt.png";
1713
- const ZhipuAILogoSvg = "/assets/zhipuai-BPNAnxo-.svg";
1714
- const PROVIDER_MAP = {
1715
- "claude-": "anthropic",
1716
- "gpt-": "openai",
1717
- "o1-": "openai",
1718
- "o3-": "openai",
1719
- "deepseek-": "deepseek",
1720
- MiniMax: "minimax",
1721
- qwen: "qwen",
1722
- "glm-": "zhipuai"
1723
- };
1724
- function detectProvider(model) {
1725
- if (model === null) return "unknown";
1726
- const modelLower = model.toLowerCase();
1727
- for (const [prefix, provider] of Object.entries(PROVIDER_MAP)) {
1728
- if (modelLower.startsWith(prefix.toLowerCase())) {
1729
- return provider;
1730
- }
1731
- }
1732
- return "unknown";
1733
- }
1734
- const sizeStyle = { width: 24, height: 24, objectFit: "contain" };
1735
- const AnthropicLogo = React.memo(
1736
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: AnthropicLogoSvg, alt: "Anthropic", className, style: sizeStyle })
1737
- );
1738
- const OpenAILogo = React.memo(
1739
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1740
- "img",
1741
- {
1742
- src: OpenAILogoSvg,
1743
- alt: "OpenAI",
1744
- className,
1745
- style: { ...sizeStyle, background: "white", borderRadius: "4px" }
1746
- }
1747
- )
1748
- );
1749
- const DeepSeekLogo = React.memo(
1750
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: DeepSeekLogoSvg, alt: "DeepSeek", className, style: sizeStyle })
1751
- );
1752
- const MiniMaxLogo = React.memo(
1753
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: MiniMaxLogoSvg, alt: "MiniMax", className, style: sizeStyle })
1754
- );
1755
- const AlibabaLogo = React.memo(
1756
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: AlibabaLogoSvg, alt: "Alibaba", className, style: sizeStyle })
1757
- );
1758
- const QwenLogo = React.memo(
1759
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: QwenLogoSvg, alt: "Qwen", className, style: sizeStyle })
1760
- );
1761
- const ZhipuAILogo = React.memo(
1762
- ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: ZhipuAILogoSvg, alt: "ZhipuAI", className, style: sizeStyle })
1763
- );
1764
- function ProviderLogo({
1765
- provider,
1766
- className
1767
- }) {
1768
- switch (provider) {
1769
- case "anthropic":
1770
- return /* @__PURE__ */ jsxRuntimeExports.jsx(AnthropicLogo, { className });
1771
- case "openai":
1772
- return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAILogo, { className });
1773
- case "deepseek":
1774
- return /* @__PURE__ */ jsxRuntimeExports.jsx(DeepSeekLogo, { className });
1775
- case "minimax":
1776
- return /* @__PURE__ */ jsxRuntimeExports.jsx(MiniMaxLogo, { className });
1777
- case "alibaba":
1778
- return /* @__PURE__ */ jsxRuntimeExports.jsx(AlibabaLogo, { className });
1779
- case "qwen":
1780
- return /* @__PURE__ */ jsxRuntimeExports.jsx(QwenLogo, { className });
1781
- case "zhipuai":
1782
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ZhipuAILogo, { className });
1783
- case "unknown":
1784
- return null;
1785
- }
1786
- }
1787
- function TooltipProvider({
1788
- delayDuration = 0,
1789
- ...props
1790
- }) {
1791
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
1792
- Provider,
1793
- {
1794
- "data-slot": "tooltip-provider",
1795
- delayDuration,
1796
- ...props
1797
- }
1798
- );
1799
- }
1800
- function Tooltip({ ...props }) {
1801
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Root3, { "data-slot": "tooltip", ...props });
1802
- }
1803
- function TooltipTrigger({ ...props }) {
1804
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Trigger$3, { "data-slot": "tooltip-trigger", ...props });
1805
- }
1806
- function TooltipContent({
1807
- className,
1808
- sideOffset = 0,
1809
- children,
1810
- ...props
1811
- }) {
1812
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1813
- Content2$1,
1814
- {
1815
- "data-slot": "tooltip-content",
1816
- sideOffset,
1817
- className: cn(
1818
- "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
1819
- className
1820
- ),
1821
- ...props,
1822
- children: [
1823
- children,
1824
- /* @__PURE__ */ jsxRuntimeExports.jsx(Arrow2, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
1825
- ]
1826
- }
1827
- ) });
1828
- }
1829
1841
  function getJsonExpansionPolicy(_value) {
1830
1842
  return { depth: Number.POSITIVE_INFINITY };
1831
1843
  }
@@ -1989,19 +2001,19 @@ function useCopyFeedback(text) {
1989
2001
  return { copied, copy };
1990
2002
  }
1991
2003
  const LazyCompareDrawer = reactExports.lazy(
1992
- () => import("./CompareDrawer-_uFgjkB2.mjs").then((m) => ({ default: m.CompareDrawer }))
2004
+ () => import("./CompareDrawer-CwVFykVF.mjs").then((m) => ({ default: m.CompareDrawer }))
1993
2005
  );
1994
2006
  const LazyReplayDialog = reactExports.lazy(
1995
- () => import("./ReplayDialog-CFwKM7jc.mjs").then((m) => ({ default: m.ReplayDialog }))
2007
+ () => import("./ReplayDialog-BxC12XUj.mjs").then((m) => ({ default: m.ReplayDialog }))
1996
2008
  );
1997
2009
  const LazyRequestAnatomy = reactExports.lazy(
1998
- () => import("./RequestAnatomy-2Vr84GxT.mjs").then((m) => ({ default: m.RequestAnatomy }))
2010
+ () => import("./RequestAnatomy-CWWS8Qh7.mjs").then((m) => ({ default: m.RequestAnatomy }))
1999
2011
  );
2000
2012
  const LazyResponseView = reactExports.lazy(
2001
- () => import("./ResponseView-CSBWBHRJ.mjs").then((m) => ({ default: m.ResponseView }))
2013
+ () => import("./ResponseView-BewErHF-.mjs").then((m) => ({ default: m.ResponseView }))
2002
2014
  );
2003
2015
  const LazyStreamingChunkSequence = reactExports.lazy(
2004
- () => import("./StreamingChunkSequence-Dr4JApqs.mjs").then((m) => ({
2016
+ () => import("./StreamingChunkSequence-BlmCVryW.mjs").then((m) => ({
2005
2017
  default: m.StreamingChunkSequence
2006
2018
  }))
2007
2019
  );
@@ -2476,10 +2488,6 @@ const LogEntryHeader = reactExports.memo(function({
2476
2488
  /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
2477
2489
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", title: log.timestamp, children: formatTimestamp$2(log.timestamp, timeDisplayFormat) })
2478
2490
  ] }),
2479
- log.model !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
2480
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderLogo, { provider: detectProvider(log.model), className: "size-4" }) }) }),
2481
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: log.model })
2482
- ] }),
2483
2491
  statusCategory !== "success" && /* @__PURE__ */ jsxRuntimeExports.jsxs(
2484
2492
  Badge,
2485
2493
  {
@@ -5584,6 +5592,24 @@ function computeStats(logs) {
5584
5592
  }
5585
5593
  return { totalInputTokens: totalInput, totalOutputTokens: totalOutput };
5586
5594
  }
5595
+ function collectProviders(logs) {
5596
+ const buckets = /* @__PURE__ */ new Map();
5597
+ for (const log of logs) {
5598
+ if (log.model === null) continue;
5599
+ const provider = detectProvider(log.model);
5600
+ if (provider === "unknown") continue;
5601
+ let models = buckets.get(provider);
5602
+ if (models === void 0) {
5603
+ models = /* @__PURE__ */ new Set();
5604
+ buckets.set(provider, models);
5605
+ }
5606
+ models.add(log.model);
5607
+ }
5608
+ return [...buckets.entries()].map(([provider, models]) => ({
5609
+ provider,
5610
+ models: [...models]
5611
+ }));
5612
+ }
5587
5613
  const ConversationGroup = reactExports.memo(function({
5588
5614
  group,
5589
5615
  viewMode = "simple",
@@ -5612,6 +5638,7 @@ const ConversationGroup = reactExports.memo(function({
5612
5638
  [onExpandedChange]
5613
5639
  );
5614
5640
  const stats = reactExports.useMemo(() => computeStats(group.logs), [group.logs]);
5641
+ const providers = reactExports.useMemo(() => collectProviders(group.logs), [group.logs]);
5615
5642
  const startTime = group.logs[0]?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString();
5616
5643
  const endTime = group.logs[group.logs.length - 1]?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString();
5617
5644
  const mixed = hasMixedApiFormat(group.logs);
@@ -5645,6 +5672,7 @@ const ConversationGroup = reactExports.memo(function({
5645
5672
  expanded,
5646
5673
  onToggle: () => setExpanded(!expanded),
5647
5674
  hideApiFormat: mixed,
5675
+ providers,
5648
5676
  isLoading,
5649
5677
  userAgent: group.logs[0]?.userAgent ?? null,
5650
5678
  timeDisplayFormat,
@@ -7169,10 +7197,15 @@ function MemberRow({
7169
7197
  ]
7170
7198
  }
7171
7199
  ) : /* @__PURE__ */ jsxRuntimeExports.jsxs(
7172
- "span",
7200
+ "button",
7173
7201
  {
7174
- className: "inline-flex max-w-full min-w-0 items-center gap-2 font-mono text-xs text-foreground",
7175
- title: `Evidence snapshot for ${sessionLabel}`,
7202
+ type: "button",
7203
+ className: "inline-flex max-w-full min-w-0 items-center gap-2 rounded-sm font-mono text-xs text-foreground outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
7204
+ title: `Show evidence snapshot for ${sessionLabel}`,
7205
+ "aria-label": `Show evidence snapshot for ${sessionLabel}`,
7206
+ onClick: () => {
7207
+ onToggleDetails(member.id);
7208
+ },
7176
7209
  children: [
7177
7210
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate", children: sessionLabel }),
7178
7211
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9577,7 +9610,10 @@ const LogStorageStatsSchema = object({
9577
9610
  logBytes: number(),
9578
9611
  chunkDir: string(),
9579
9612
  chunkFileCount: number(),
9580
- chunkBytes: number()
9613
+ chunkBytes: number(),
9614
+ sessionArchiveDir: string(),
9615
+ sessionArchiveFileCount: number(),
9616
+ sessionArchiveBytes: number()
9581
9617
  });
9582
9618
  function formatBytes(bytes) {
9583
9619
  if (bytes < 1024) return `${bytes} B`;
@@ -9651,6 +9687,16 @@ function StorageSettingsTab() {
9651
9687
  onCopy: handleCopy
9652
9688
  }
9653
9689
  ),
9690
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
9691
+ CopyableSetupValue,
9692
+ {
9693
+ id: "session-archive-dir",
9694
+ label: "Session archive storage path",
9695
+ value: stats.sessionArchiveDir,
9696
+ copiedId,
9697
+ onCopy: handleCopy
9698
+ }
9699
+ ),
9654
9700
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-border bg-muted/20 px-3 py-2", children: [
9655
9701
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "In-memory logs" }),
9656
9702
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
@@ -9673,6 +9719,15 @@ function StorageSettingsTab() {
9673
9719
  " files / ",
9674
9720
  formatBytes(stats.chunkBytes)
9675
9721
  ] })
9722
+ ] }),
9723
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-border bg-muted/20 px-3 py-2", children: [
9724
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Session archives" }),
9725
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
9726
+ stats.sessionArchiveFileCount.toLocaleString(),
9727
+ " files /",
9728
+ " ",
9729
+ formatBytes(stats.sessionArchiveBytes)
9730
+ ] })
9676
9731
  ] })
9677
9732
  ] }),
9678
9733
  error !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: error })
@@ -9743,6 +9798,18 @@ function OnboardingSettingsTab() {
9743
9798
  },
9744
9799
  { id: "opencode-verify", label: "OpenCode verify", value: "opencode mcp list" },
9745
9800
  { id: "opencode-proxy", label: "OpenCode proxy", value: `LLM_BASE_URL=${origin}/proxy` },
9801
+ {
9802
+ id: "mimo-config",
9803
+ label: "MiMo Code config",
9804
+ value: "agent-inspector onboard --mimo-only"
9805
+ },
9806
+ {
9807
+ id: "mimo-status",
9808
+ label: "MiMo Code status",
9809
+ value: "agent-inspector onboard --status --mimo-only"
9810
+ },
9811
+ { id: "mimo-verify", label: "MiMo Code verify", value: "mimo mcp list" },
9812
+ { id: "mimo-proxy", label: "MiMo Code proxy", value: `OPENAI_BASE_URL=${origin}/proxy` },
9746
9813
  { id: "mcp", label: "MCP URL", value: `${origin}/api/mcp` },
9747
9814
  { id: "proxy", label: "Proxy URL", value: `${origin}/proxy` },
9748
9815
  { id: "anthropic", label: "Anthropic base", value: `ANTHROPIC_BASE_URL=${origin}/proxy` },
@@ -9806,6 +9873,22 @@ function OnboardingSettingsTab() {
9806
9873
  "."
9807
9874
  ] })
9808
9875
  ] }),
9876
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2", children: [
9877
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-emerald-500" }),
9878
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
9879
+ "MiMo Code onboarding safely merges",
9880
+ " ",
9881
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 font-mono text-[11px] text-foreground", children: "mcp.agent-inspector" }),
9882
+ " ",
9883
+ "into",
9884
+ " ",
9885
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 font-mono text-[11px] text-foreground", children: "mimocode.jsonc" }),
9886
+ ", then route OpenAI-format traffic with",
9887
+ " ",
9888
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 font-mono text-[11px] text-foreground", children: "OPENAI_BASE_URL" }),
9889
+ "."
9890
+ ] })
9891
+ ] }),
9809
9892
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2", children: [
9810
9893
  /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-emerald-500" }),
9811
9894
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "If your AI tool runs in another container or host, replace localhost with an address reachable from that tool and verify the network/firewall path." })
@@ -9897,6 +9980,23 @@ function McpSettingsTab() {
9897
9980
  2
9898
9981
  )
9899
9982
  },
9983
+ {
9984
+ id: "mimo-local",
9985
+ label: "MiMo Code local MCP",
9986
+ value: JSON.stringify(
9987
+ {
9988
+ mcp: {
9989
+ "agent-inspector": {
9990
+ type: "local",
9991
+ command: ["agent-inspector-mcp", "stdio", "--url", endpoint],
9992
+ enabled: true
9993
+ }
9994
+ }
9995
+ },
9996
+ null,
9997
+ 2
9998
+ )
9999
+ },
9900
10000
  {
9901
10001
  id: "codex-toml",
9902
10002
  label: "Codex TOML",
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, D as Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-D8YjQDNj.mjs";
3
- import { ResponseView } from "./ResponseView-CSBWBHRJ.mjs";
4
- import { C as CapturedLogSchema } from "./router-sy38X5AX.mjs";
2
+ import { u as useProviders, D as Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-X3S2TWBJ.mjs";
3
+ import { ResponseView } from "./ResponseView-BewErHF-.mjs";
4
+ import { C as CapturedLogSchema } from "./router-s78S54MU.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
7
  import { a3 as RotateCcw, an as Braces, ao as Minimize2 } from "../_libs/lucide-react.mjs";
@@ -132,10 +132,10 @@ import "node:fs";
132
132
  import "node:fs/promises";
133
133
  import "node:readline";
134
134
  import "node:buffer";
135
+ import "node:crypto";
135
136
  import "node:child_process";
136
137
  import "../_libs/conf.mjs";
137
138
  import "node:util";
138
- import "node:crypto";
139
139
  import "node:assert";
140
140
  import "../_libs/dot-prop.mjs";
141
141
  import "../_libs/env-paths.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-D8YjQDNj.mjs";
3
- import "./router-sy38X5AX.mjs";
2
+ import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-X3S2TWBJ.mjs";
3
+ import "./router-s78S54MU.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { I as Info, C as ChevronDown, f as ChevronRight } from "../_libs/lucide-react.mjs";
@@ -130,10 +130,10 @@ import "node:fs";
130
130
  import "node:fs/promises";
131
131
  import "node:readline";
132
132
  import "node:buffer";
133
+ import "node:crypto";
133
134
  import "node:child_process";
134
135
  import "../_libs/conf.mjs";
135
136
  import "node:util";
136
- import "node:crypto";
137
137
  import "node:assert";
138
138
  import "../_libs/dot-prop.mjs";
139
139
  import "../_libs/env-paths.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as JsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-D8YjQDNj.mjs";
3
- import "./router-sy38X5AX.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as JsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-X3S2TWBJ.mjs";
3
+ import "./router-s78S54MU.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { Z as Zap, r as TriangleAlert, ap as CircleStop, B as Brain, C as ChevronDown, f as ChevronRight, m as Terminal } from "../_libs/lucide-react.mjs";
@@ -79,12 +79,12 @@ import "node:fs/promises";
79
79
  import "node:readline";
80
80
  import "node:buffer";
81
81
  import "node:path";
82
+ import "node:crypto";
82
83
  import "node:child_process";
83
84
  import "node:url";
84
85
  import "../_libs/conf.mjs";
85
86
  import "node:util";
86
87
  import "node:process";
87
- import "node:crypto";
88
88
  import "node:assert";
89
89
  import "../_libs/dot-prop.mjs";
90
90
  import "../_libs/env-paths.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as JsonViewer } from "./ProxyViewerContainer-D8YjQDNj.mjs";
3
- import "./router-sy38X5AX.mjs";
2
+ import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as JsonViewer } from "./ProxyViewerContainer-X3S2TWBJ.mjs";
3
+ import "./router-s78S54MU.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { C as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -130,10 +130,10 @@ import "node:fs";
130
130
  import "node:fs/promises";
131
131
  import "node:readline";
132
132
  import "node:buffer";
133
+ import "node:crypto";
133
134
  import "node:child_process";
134
135
  import "../_libs/conf.mjs";
135
136
  import "node:util";
136
- import "node:crypto";
137
137
  import "node:assert";
138
138
  import "../_libs/dot-prop.mjs";
139
139
  import "../_libs/env-paths.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-D8YjQDNj.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-X3S2TWBJ.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-sy38X5AX.mjs";
3
+ import "./router-s78S54MU.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/swr.mjs";
@@ -130,10 +130,10 @@ import "node:fs";
130
130
  import "node:fs/promises";
131
131
  import "node:readline";
132
132
  import "node:buffer";
133
+ import "node:crypto";
133
134
  import "node:child_process";
134
135
  import "../_libs/conf.mjs";
135
136
  import "node:util";
136
- import "node:crypto";
137
137
  import "node:assert";
138
138
  import "../_libs/dot-prop.mjs";
139
139
  import "../_libs/env-paths.mjs";