@ccjr1120/memory-one 0.1.5 → 0.1.6
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/package.json +1 -1
- package/public/assets/{highlighted-body-KPVGNVTW-CkO7YzEE.js → highlighted-body-KPVGNVTW-DMf8eUNQ.js} +1 -1
- package/public/assets/{index-MS5JA52f.css → index-C2R_a7hV.css} +1 -1
- package/public/assets/{index-CaRRawNp.js → index-Desg7wZu.js} +2 -2
- package/public/index.html +2 -2
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r,S as d,E as p,j as E,c as f}from"./index-
|
|
1
|
+
import{r,S as d,E as p,j as E,c as f}from"./index-Desg7wZu.js";var j=({code:i,language:e,maxHeight:o,raw:a,className:u,startLine:m,lineNumbers:n,...h})=>{let{shikiTheme:l}=r.useContext(d),t=p(),[c,s]=r.useState(a);return r.useEffect(()=>{if(!t){s(a);return}let g=t.highlight({code:i,language:e,themes:l},x=>{s(x)});g&&s(g)},[i,e,l,t,a]),E.jsx(f,{className:u,language:e,lineNumbers:n,maxHeight:o,result:c,startLine:m,...h})};export{j as HighlightedCodeBlockBody};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--bg:oklch(99% .002 240);--bg-sub:oklch(97.5% .003 250);--surface:oklch(100% 0 0);--fg:oklch(18% .012 250);--fg-soft:oklch(32% .012 250);--muted:oklch(54% .012 250);--border:oklch(91.5% .005 250);--border-soft:oklch(95% .004 250);--accent:oklch(55% .18 255);--accent-soft:oklch(96% .025 255);--success:oklch(50% .15 152);--shadow:0 14px 30px oklch(20% .012 250/.07);--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}:root[data-theme=dark]{--bg:oklch(15% .012 250);--bg-sub:oklch(19% .014 250);--surface:oklch(20% .014 250);--fg:oklch(94% .005 240);--fg-soft:oklch(82% .008 250);--muted:oklch(63% .01 250);--border:oklch(30% .014 250);--border-soft:oklch(25% .014 250);--accent:oklch(71% .16 255);--accent-soft:oklch(26% .04 255);--success:oklch(73% .13 152);--shadow:0 14px 30px oklch(0% 0 0/.2)}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Inter,system-ui,sans-serif}button,input,textarea,select{font:inherit}button{color:inherit}.app-shell{min-height:100vh;display:grid;grid-template-columns:244px minmax(0,1fr) 300px}.sidebar{border-right:1px solid var(--border);background:var(--bg-sub);padding:22px 14px 16px;display:flex;flex-direction:column;min-height:100vh;z-index:10}.brand{display:flex;align-items:center;gap:10px;padding:0 9px 28px}.brand-mark{display:grid;place-items:center;width:29px;height:29px;border-radius:8px;background:var(--fg);color:var(--bg)}.brand strong{display:block;font-size:14px}.brand span{display:block;color:var(--muted);font-size:11px;margin-top:2px}.mobile-close{display:none!important;margin-left:auto}.sidebar-section{margin-bottom:27px}.eyebrow,.stat-label{display:block;color:var(--muted);font:500 10px/1.4 var(--mono);letter-spacing:.11em}.sidebar-section>.eyebrow{padding:0 10px 8px}.nav-item{width:100%;display:flex;align-items:center;gap:10px;border:0;background:transparent;padding:9px 10px;border-radius:6px;color:var(--muted);cursor:pointer;text-align:left;font-size:13px;transition:.15s ease}.nav-item:hover{background:var(--surface);color:var(--fg)}.nav-item.active{background:var(--surface);color:var(--fg);box-shadow:0 1px 0 var(--border)}.nav-item b{margin-left:auto;color:var(--muted);font:500 11px var(--mono)}.sidebar-footer{margin-top:auto}.storage-status{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11px;padding:11px 10px 15px;border-top:1px solid var(--border)}.status-dot,.live-dot{width:6px;height:6px;display:inline-block;border-radius:50%;background:var(--success)}.storage-status .mono{margin-left:auto;font:10px var(--mono)}.main-content{min-width:0}.topbar{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 34px;border-bottom:1px solid var(--border-soft)}.breadcrumbs{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px}.breadcrumbs strong{color:var(--fg-soft);font-weight:500}.top-actions{display:flex;align-items:center;gap:9px}.icon-button{display:inline-grid;place-items:center;border:1px solid transparent;background:transparent;width:34px;height:34px;border-radius:6px;cursor:pointer;color:var(--muted)}.icon-button:hover{border-color:var(--border);color:var(--fg);background:var(--surface)}.avatar{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font:600 12px var(--mono)}.menu-button{display:none}.content-wrap{max-width:1080px;padding:42px 40px 70px;margin:0 auto}.page-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:30px}.heading-kicker{display:flex;gap:8px;align-items:center;color:var(--accent);font:500 10px var(--mono);letter-spacing:.1em;margin-bottom:10px}.page-heading h1{margin:0;font-size:clamp(28px,3vw,40px);line-height:1.08;letter-spacing:-.035em;font-weight:600}.page-heading p{color:var(--muted);max-width:56ch;line-height:1.55;margin:11px 0 0;font-size:14px}.primary-button,.ghost-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid transparent;border-radius:6px;min-height:36px;padding:8px 13px;cursor:pointer;font-size:13px;font-weight:500;transition:.15s ease;white-space:nowrap}.primary-button{background:var(--fg);color:var(--bg)}.primary-button:hover{background:var(--fg-soft);transform:translateY(-1px)}.primary-button:disabled{opacity:.45;cursor:not-allowed;transform:none}.ghost-button{border-color:var(--border);color:var(--fg-soft);background:transparent}.ghost-button:hover{background:var(--bg-sub);border-color:var(--muted)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);margin-bottom:34px}.stat-card{min-height:105px;background:var(--surface);padding:17px 18px}.stat-card>strong{display:block;margin-top:10px;font:600 26px/1 var(--mono);letter-spacing:-.04em}.stat-date{font-size:18px!important;padding-top:4px}.stat-note{display:block;color:var(--muted);font-size:11px;margin-top:8px}.stat-callout{display:flex;gap:11px;align-items:center;color:var(--accent)}.stat-callout strong{color:var(--fg);font:600 14px inherit;margin:0 0 4px}.stat-callout span{display:block;color:var(--muted);font-size:11px}.toolbar{display:flex;justify-content:space-between;gap:16px;margin-bottom:17px}.search-box{height:40px;flex:1;max-width:520px;display:flex;align-items:center;gap:9px;padding:0 11px;border:1px solid var(--border);background:var(--surface);border-radius:6px;color:var(--muted)}.search-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.search-box input{border:0;outline:0;background:transparent;min-width:0;flex:1;color:var(--fg);font-size:13px}.search-box kbd{display:inline-flex;gap:3px;align-items:center;border:1px solid var(--border);border-radius:4px;padding:2px 5px;color:var(--muted);font:10px var(--mono)}.toolbar-actions{display:flex;gap:8px}.select-wrap{display:flex;align-items:center;gap:7px;border:1px solid var(--border);background:var(--surface);border-radius:6px;padding:0 10px;color:var(--muted)}.select-wrap select{appearance:none;border:0;outline:0;color:var(--fg-soft);background:transparent;height:38px;font-size:12px;cursor:pointer}.select-wrap.project-select{gap:2px}.list-header{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:12px;padding:0 2px 9px}.mono{font-family:var(--mono);font-size:10px}.memory-list{display:grid;gap:8px}.memory-card{width:100%;border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:16px 17px 14px;text-align:left;cursor:pointer;transition:.15s ease}.memory-card:hover,.memory-card.selected{border-color:var(--accent);box-shadow:var(--shadow);transform:translateY(-1px)}.card-top,.card-bottom{display:flex;justify-content:space-between;align-items:center;gap:12px}.kind-badge{display:inline-flex;align-items:center;border:1px solid var(--border);background:var(--bg-sub);border-radius:999px;padding:4px 8px;color:var(--muted);font:500 10px var(--mono)}.kind-preference{color:var(--accent);border-color:color-mix(in oklch,var(--accent) 25%,var(--border));background:var(--accent-soft)}.card-date{color:var(--muted);font:10px var(--mono)}.memory-card p{color:var(--fg-soft);font-size:14px;line-height:1.55;margin:13px 0 16px}.card-bottom{color:var(--muted);font-size:11px}.card-bottom>span:first-child{display:flex;align-items:center;gap:5px}.confidence{display:flex;align-items:center;gap:6px;font:10px var(--mono)}.confidence>span{display:inline-block;height:3px;width:36px;background:var(--accent);opacity:.7;border-radius:3px}.empty-state{border:1px dashed var(--border);min-height:230px;display:grid;place-items:center;align-content:center;gap:8px;color:var(--muted)}.empty-state strong{color:var(--fg-soft);font-size:14px}.empty-state span{font-size:12px}.detail-panel{border-left:1px solid var(--border);background:var(--bg-sub);padding:23px 21px;min-height:100vh}.detail-header{display:flex;align-items:center;justify-content:space-between}.detail-body{padding-top:35px}.detail-kind{margin-bottom:16px}.detail-body h2{color:var(--fg);font-size:19px;line-height:1.35;letter-spacing:-.02em;font-weight:600;margin:0 0 27px}.detail-meta{display:grid;gap:13px;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:18px 0}.detail-meta div,.signal-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.detail-meta span,.signal-row>span{color:var(--muted);font-size:11px}.detail-meta strong{font:10px var(--mono);color:var(--fg-soft);font-weight:500;text-align:right}.detail-section{padding:24px 0 0}.scope-value{display:flex;align-items:center;gap:7px;margin-top:11px;color:var(--fg-soft);font:11px var(--mono)}.scope-value span{color:var(--border)}.signal-row{margin-top:13px}.signal-track{height:4px;flex:1;background:var(--border);border-radius:4px;overflow:hidden}.signal-track span{display:block;height:100%;background:var(--accent)}.signal-row b{color:var(--muted);font:10px var(--mono);width:31px;text-align:right}.detail-action{width:100%;justify-content:space-between;margin-top:31px}.detail-empty{min-height:70vh;display:grid;place-items:center;align-content:center;gap:8px;color:var(--muted);text-align:center}.detail-empty strong{color:var(--fg-soft);font-size:13px}.detail-empty span{font-size:11px}.detail-icon{display:grid;place-items:center;color:var(--accent);width:42px;height:42px;border:1px solid var(--border);background:var(--surface);border-radius:50%;margin-bottom:4px}.modal-backdrop{position:fixed;inset:0;background:#0204066b;display:grid;place-items:center;padding:18px;z-index:30}.composer{width:min(100%,560px);background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 24px 70px #02040633;padding:24px}.composer-header{display:flex;align-items:start;justify-content:space-between;margin-bottom:23px}.composer h2{margin:6px 0 0;font-size:22px;letter-spacing:-.03em}.composer label{display:block;color:var(--fg-soft);font-size:12px;margin-bottom:16px}.composer input,.composer textarea,.composer select{width:100%;border:1px solid var(--border);background:var(--bg-sub);color:var(--fg);border-radius:6px;margin-top:7px;padding:10px 11px;outline:0;font-size:13px}.composer textarea{resize:vertical;line-height:1.55}.composer-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.composer-footer{border-top:1px solid var(--border);padding-top:17px;display:flex;justify-content:space-between;align-items:center;gap:12px}.composer-footer>span{display:flex;align-items:center;gap:6px;color:var(--success);font:10px var(--mono)}.composer-footer>div{display:flex;gap:8px}.sidebar-backdrop{display:none}@media(max-width:1120px){.app-shell{grid-template-columns:220px minmax(0,1fr)}.detail-panel{display:none}.content-wrap{padding-inline:30px}}@media(max-width:760px){.app-shell{display:block}.sidebar{position:fixed;inset:0 auto 0 0;width:260px;transform:translate(-100%);transition:transform .2s ease;box-shadow:var(--shadow)}.sidebar.sidebar-open{transform:translate(0)}.mobile-close{display:inline-grid!important}.sidebar-backdrop{display:block;position:fixed;inset:0;background:#02040647;border:0;z-index:9}.topbar{padding:0 18px}.menu-button{display:inline-grid}.breadcrumbs{margin-right:auto;margin-left:10px}.content-wrap{padding:30px 18px 50px}.page-heading{align-items:start;flex-direction:column;gap:18px}.page-heading .primary-button{width:100%}.stat-grid{grid-template-columns:repeat(2,1fr);margin-bottom:24px}.stat-card{min-height:94px}.stat-callout{grid-column:span 2;min-height:72px}.toolbar{display:block}.search-box{max-width:none;margin-bottom:9px}.toolbar-actions{display:grid;grid-template-columns:1fr 1fr}.select-wrap{justify-content:center}.select-wrap select{width:100%}.list-header{margin-top:19px}.confidence{display:none}.composer{padding:20px}.composer-footer{align-items:stretch;flex-direction:column}.composer-footer>div{justify-content:flex-end}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important;scroll-behavior:auto!important}}.memory-group{display:grid;gap:8px}.memory-group+.memory-group{margin-top:23px}.memory-group-header{display:flex;align-items:center;justify-content:space-between;padding:0 3px 3px;color:var(--fg-soft);font-size:12px;font-weight:600}.memory-group-header .mono{color:var(--muted);font-weight:500}.language-button{width:47px;gap:5px;font:10px var(--mono)}.mcp-page{padding:4px 0 20px}.mcp-hero{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:30px}.mcp-hero h1{margin:0;font-size:clamp(28px,3vw,40px);line-height:1.08;letter-spacing:-.035em;font-weight:600}.mcp-hero p{color:var(--muted);max-width:64ch;line-height:1.6;margin:11px 0 0;font-size:14px}.mcp-status{display:flex;align-items:center;gap:8px;white-space:nowrap;border:1px solid var(--border);background:var(--surface);padding:10px 12px;border-radius:7px;color:var(--success);font-size:12px}.mcp-status .mono{margin-left:5px;color:var(--muted)}.mcp-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(260px,.8fr);gap:12px;margin-bottom:30px}.mcp-panel,.mcp-tools,.mcp-usage{border:1px solid var(--border);background:var(--surface)}.mcp-panel{padding:19px}.mcp-panel-header,.mcp-tools-heading{display:flex;align-items:start;justify-content:space-between;gap:14px}.mcp-panel h2,.mcp-tools h2,.mcp-usage h2{margin:6px 0 0;font-size:17px;letter-spacing:-.02em}.mcp-panel pre{overflow:auto;margin:17px 0 14px;padding:15px;border:1px solid var(--border);background:var(--bg-sub);border-radius:7px;color:var(--fg-soft);font:12px/1.65 var(--mono)}.mcp-note{display:flex;align-items:flex-start;gap:7px;color:var(--muted);font-size:11px;line-height:1.5}.mcp-note svg{flex:none;color:var(--accent);margin-top:1px}.endpoint-value{overflow-wrap:anywhere;margin:23px 0 24px;padding:14px 12px;border-left:2px solid var(--accent);background:var(--accent-soft);color:var(--accent);font:12px/1.5 var(--mono)}.mcp-usage{margin-bottom:12px;padding:19px}.mcp-usage>.mcp-tools-heading>svg{color:var(--accent)}.mcp-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);margin-top:16px}.mcp-metrics .stat-card{min-height:92px}.mcp-metrics .stat-card>strong{font-size:21px}.mcp-tools{padding:19px}.mcp-tools-heading{align-items:center;margin-bottom:14px}.tool-count{border:1px solid var(--border);border-radius:999px;padding:5px 8px;color:var(--muted);font:10px var(--mono)}.tool-list{border-top:1px solid var(--border)}.tool-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:11px;padding:13px 3px;border-bottom:1px solid var(--border-soft)}.tool-row:last-child{border-bottom:0}.tool-icon{display:grid;place-items:center;width:27px;height:27px;border:1px solid var(--border);border-radius:6px;color:var(--accent);background:var(--accent-soft)}.tool-row strong{display:block;color:var(--fg-soft);font:600 12px var(--mono)}.tool-row span{display:block;color:var(--muted);font-size:12px;margin-top:4px;line-height:1.45}.tool-meta{display:grid;justify-items:end;gap:5px;color:var(--muted)}.tool-meta code{font:10px var(--mono)}.integration-status{flex:none;border:1px solid var(--border);border-radius:999px;padding:4px 8px;color:var(--muted);background:var(--bg-sub);font:10px var(--mono)}.status-configured{color:var(--success)}.status-update_available{color:var(--accent);border-color:color-mix(in oklch,var(--accent) 28%,var(--border));background:var(--accent-soft)}.integration-message{margin-top:7px;color:var(--success);font-size:11px;line-height:1.45}.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:760px){.mcp-hero{align-items:start;flex-direction:column;gap:18px}.mcp-status{width:100%;justify-content:space-between}.mcp-grid{grid-template-columns:1fr}.mcp-panel,.mcp-tools,.mcp-usage{padding:16px}.mcp-metrics{grid-template-columns:repeat(2,1fr)}.tool-row{grid-template-columns:28px minmax(0,1fr)}.tool-meta{display:none}}.sidebar{position:sticky;top:0;align-self:start;height:100vh;min-height:0;overflow-y:auto}.nav-item>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-date{flex:none;white-space:nowrap}.card-bottom>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-bottom>span:first-child svg,.confidence>span{flex:none}.confidence{flex:none;white-space:nowrap}.tool-meta{white-space:nowrap}.confidence{max-width:100%}.confidence>span{display:inline;flex:none;width:auto;height:auto;background:transparent;opacity:1;border-radius:0}.confidence>.confidence-meter{display:block;width:36px;height:4px;overflow:hidden;background:var(--border);border-radius:4px}.confidence-meter>i{display:block;height:100%;background:var(--accent);border-radius:inherit}.ui-select-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;height:38px;min-width:120px;padding:0 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--fg-soft);font-size:12px;line-height:1;cursor:pointer;outline:0}.ui-select-trigger:hover{border-color:var(--muted)}.ui-select-trigger:focus-visible,.ui-select-trigger[data-state=open]{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.ui-select-chevron{display:flex;flex:none;color:var(--muted)}.select-wrap .ui-select-trigger{height:38px;min-width:78px;padding:0;border:0;background:transparent}.select-wrap .ui-select-trigger:focus-visible,.select-wrap .ui-select-trigger[data-state=open]{box-shadow:none}.project-select .ui-select-trigger{min-width:132px}.composer .ui-select-trigger{width:100%;margin-top:7px;background:var(--bg-sub);font-size:13px}.ui-select-content{z-index:50;min-width:var(--radix-select-trigger-width);max-height:var(--radix-select-content-available-height);overflow:hidden;border:1px solid var(--border);border-radius:6px;background:var(--surface);box-shadow:var(--shadow);color:var(--fg)}.ui-select-viewport{padding:4px}.ui-select-item{position:relative;display:flex;align-items:center;height:32px;padding:0 30px 0 9px;border-radius:4px;color:var(--fg-soft);font-size:12px;cursor:default;outline:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.ui-select-item[data-highlighted]{background:var(--accent-soft);color:var(--accent)}.ui-select-check{position:absolute;right:8px;display:grid;place-items:center;color:var(--accent)}.select-wrap{min-width:0}.toolbar-actions>.select-wrap{flex:0 0 120px;width:120px}.toolbar-actions>.project-select{flex-basis:180px;width:180px}.project-select .ui-select-trigger{min-width:0;width:100%;max-width:100%}.ui-select-trigger>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-select-content{width:var(--radix-select-trigger-width);min-width:var(--radix-select-trigger-width);max-width:var(--radix-select-trigger-width)}.ui-select-item>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-select-scroll{display:flex;align-items:center;justify-content:center;height:26px;background:var(--surface);color:var(--muted);cursor:default}.recall-count{color:var(--accent);font:10px var(--mono);white-space:nowrap;flex:none}.agent-launcher{color:var(--accent)}.agent-launcher.active,.agent-launcher:hover{background:var(--accent-soft);border-color:color-mix(in oklch,var(--accent) 28%,var(--border));color:var(--accent)}.agent-backdrop{position:fixed;inset:0;z-index:40;background:#02040638;display:flex;justify-content:flex-end}.agent-panel{width:min(100%,460px);height:100%;display:flex;flex-direction:column;background:var(--surface);border-left:1px solid var(--border);box-shadow:-18px 0 50px #02040624;animation:agent-slide-in .2s ease-out}.agent-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 20px;border-bottom:1px solid var(--border)}.agent-title{display:flex;align-items:center;gap:10px}.agent-title strong{display:block;font-size:14px}.agent-title span:last-child{display:block;margin-top:3px;color:var(--muted);font-size:11px}.agent-avatar{display:grid!important;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--accent-soft);color:var(--accent)}.agent-messages{flex:1;overflow:auto;padding:22px 18px 14px;display:flex;flex-direction:column;gap:16px;background:var(--bg)}.agent-message{display:flex;flex-direction:column;max-width:88%;gap:7px}.agent-message.user{align-self:flex-end;align-items:flex-end}.agent-message.assistant{align-self:flex-start}.agent-message-bubble{padding:11px 13px;border:1px solid var(--border);border-radius:12px 12px 12px 4px;background:var(--surface);color:var(--fg-soft);font-size:13px;line-height:1.65;white-space:normal}.agent-message.user .agent-message-bubble{border-color:var(--fg);border-radius:12px 12px 4px;background:var(--fg);color:var(--bg)}.agent-tool-calls{display:flex;flex-wrap:wrap;gap:5px}.agent-tool-calls span{display:inline-flex;align-items:center;gap:4px;padding:4px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font:10px var(--mono)}.agent-composer{display:flex;align-items:flex-end;gap:8px;padding:12px 14px 16px;border-top:1px solid var(--border);background:var(--surface)}.agent-composer textarea{min-height:40px;max-height:120px;flex:1;resize:none;border:1px solid var(--border);border-radius:9px;padding:10px 11px;outline:0;background:var(--bg-sub);color:var(--fg);font-size:13px;line-height:1.45}.agent-composer textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.agent-send{display:grid;place-items:center;width:40px;height:40px;border:0;border-radius:9px;background:var(--fg);color:var(--bg);cursor:pointer}.agent-send:disabled{opacity:.35;cursor:not-allowed}.agent-suggestions{display:flex;gap:7px;overflow:auto;padding:9px 14px 11px;border-top:1px solid var(--border-soft);background:var(--surface)}.agent-suggestions button{border:1px solid var(--border);border-radius:999px;padding:6px 9px;background:var(--bg-sub);color:var(--muted);font-size:11px;white-space:nowrap;cursor:pointer}.agent-suggestions button:hover{border-color:var(--accent);color:var(--accent)}.agent-suggestions button:disabled{opacity:.5;cursor:not-allowed}.agent-thinking{display:flex;gap:4px;padding:14px 16px}.agent-thinking span{width:5px;height:5px;border-radius:50%;background:var(--muted);animation:agent-bounce 1s infinite ease-in-out}.agent-thinking span:nth-child(2){animation-delay:.12s}.agent-thinking span:nth-child(3){animation-delay:.24s}.agent-error{margin:0;color:#bd3f3f;font-size:12px}@keyframes agent-slide-in{0%{transform:translate(20px);opacity:.5}to{transform:translate(0);opacity:1}}@keyframes agent-bounce{0%,80%,to{transform:translateY(0);opacity:.45}40%{transform:translateY(-3px);opacity:1}}@media(max-width:760px){.sidebar{position:fixed}.agent-panel{width:100%;border-left:0}.agent-header{padding-inline:16px}.agent-messages{padding-inline:14px}}.agent-float{position:fixed;right:24px;bottom:24px;z-index:40;pointer-events:none}.agent-float-position{pointer-events:none}.agent-float-button{pointer-events:auto;display:grid;place-items:center;width:52px;height:52px;border:1px solid color-mix(in oklch,var(--accent) 35%,var(--border));border-radius:50%;background:var(--accent);color:#fff;box-shadow:0 10px 28px #0c172338;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}.agent-float-button:hover{transform:translateY(-2px);box-shadow:0 14px 34px #0c17234d}.agent-float .agent-panel{pointer-events:auto;width:min(1200px,calc(100vw - 48px));height:min(680px,calc(100vh - 48px));border:1px solid var(--border);border-radius:12px;box-shadow:0 18px 55px #02040633;animation:agent-float-in .2s ease-out}.agent-float .agent-messages{min-height:0}.agent-float .agent-header{border-radius:12px 12px 0 0}.agent-config-page{max-width:760px}.config-panel{border:1px solid var(--border);background:var(--surface);padding:20px;margin-bottom:12px}.config-panel-heading{display:flex;justify-content:space-between;align-items:start;gap:12px;padding-bottom:16px;border-bottom:1px solid var(--border);color:var(--accent)}.config-panel-heading h2{margin:6px 0 0;color:var(--fg);font-size:17px}.config-field{display:block;margin-top:18px;color:var(--fg-soft);font-size:12px}.config-field span{display:block}.config-field small{color:var(--muted);font-size:10px;margin-left:5px}.config-field input{display:block;width:100%;margin-top:7px;padding:10px 11px;border:1px solid var(--border);border-radius:6px;background:var(--bg-sub);color:var(--fg);outline:0;font-size:13px}.config-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.config-toggle{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-top:18px;color:var(--fg-soft);font-size:13px}.config-toggle span{display:grid;gap:4px}.config-toggle small{color:var(--muted);font-size:11px;line-height:1.5}.config-toggle input{appearance:none;position:relative;flex:none;width:38px;height:22px;border:1px solid var(--border);border-radius:999px;background:var(--bg-sub);cursor:pointer}.config-toggle input:after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--muted);transition:transform .15s ease,background .15s ease}.config-toggle input:checked{border-color:var(--accent);background:var(--accent-soft)}.config-toggle input:checked:after{transform:translate(16px);background:var(--accent)}.config-info{display:flex;align-items:flex-start;gap:7px;margin-top:20px;padding-top:15px;border-top:1px solid var(--border-soft);color:var(--muted);font-size:11px;line-height:1.5}.config-info svg{flex:none;color:var(--accent)}@keyframes agent-float-in{0%{opacity:.5;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}@media(max-width:760px){.agent-float{right:16px;bottom:16px}.agent-float .agent-panel{width:calc(100vw - 32px);height:min(70vh,640px)}.agent-float-button{width:48px;height:48px}.config-panel{padding:16px}}.agent-message-bubble :where(p){margin:0 0 8px}.agent-message-bubble :where(p:last-child){margin-bottom:0}.agent-message-bubble :where(h1,h2,h3){margin:14px 0 7px;color:var(--fg);font-size:15px}.agent-message-bubble :where(ul,ol){margin:7px 0;padding-left:20px}.agent-message-bubble :where(li){margin:3px 0}.agent-message-bubble :where(pre){max-width:100%;overflow:auto;margin:9px 0;padding:10px;border:1px solid var(--border);border-radius:6px;background:var(--bg-sub);font:11px/1.5 var(--mono)}.agent-message-bubble :where(code){font:11px var(--mono)}.agent-message-bubble :where(:not(pre)>code){padding:2px 4px;border-radius:4px;background:var(--bg-sub)}.agent-message-bubble :where(strong){color:var(--fg)}.agent-plain-text{white-space:pre-wrap}.config-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.config-field select{display:block;width:100%;height:38px;margin-top:7px;padding:0 10px;border:1px solid var(--border);border-radius:6px;background:var(--bg-sub);color:var(--fg);outline:0;font-size:13px}.config-field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}@media(max-width:760px){.config-grid{grid-template-columns:1fr}}.agent-config-fields{grid-template-columns:1fr}.agent-float-button:disabled{opacity:.6;cursor:wait}.agent-config-form{display:flex;flex:1;min-height:0;flex-direction:column}.agent-config-scroll{flex:1;min-height:0;overflow:auto;padding:14px 16px}.agent-config-section{padding:4px 0 18px}.agent-config-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 14px}.agent-config-fields .config-field:nth-child(-n+2){grid-column:1/-1}.agent-config-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:11px 16px;border-top:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:10px}.agent-config-actions .primary-button{flex:none}.model-field{display:flex;align-items:center;gap:8px;margin-top:7px}.model-field input,.model-field select{flex:1;min-width:0;margin-top:0}.model-field .ghost-button{min-height:38px}.model-message{display:block;margin-top:6px;color:var(--muted);font-size:10px}.select-wrap .ui-select-trigger{width:100%;min-width:0}.config-field>.ui-select-trigger{width:100%;margin-top:7px;background:var(--bg-sub);font-size:13px}.model-field>.ui-select-trigger{flex:1;width:auto;min-width:0;margin-top:0;background:var(--bg-sub);font-size:13px}@media(max-width:760px){.toolbar-actions>.select-wrap,.toolbar-actions>.project-select{width:auto;flex:initial;min-width:0}.toolbar-actions>.select-wrap .ui-select-trigger{width:100%}}.agent-tabs{display:flex;gap:4px;padding:8px 16px 0;border-bottom:1px solid var(--border);background:var(--surface)}.agent-tabs button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:7px 11px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);font-size:12px;cursor:pointer}.agent-tabs button:hover:not(:disabled){color:var(--fg)}.agent-tabs button.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.agent-tabs button:disabled{opacity:.4;cursor:not-allowed}.agent-thinking{display:flex;align-items:center;gap:6px;padding:4px 2px;color:var(--muted);font-size:11px}.agent-thinking svg{color:var(--accent);animation:agent-spin 1s linear infinite}.agent-thinking i{width:4px;height:4px;border-radius:50%;background:var(--muted);animation:agent-bounce 1s infinite ease-in-out}.agent-thinking i:nth-of-type(2){animation-delay:.12s}.agent-thinking i:nth-of-type(3){animation-delay:.24s}@keyframes agent-spin{to{transform:rotate(360deg)}}.agent-thinking .agent-thinking-label{width:auto;height:auto;border-radius:0;background:none;animation:none}.mcp-keys{border:1px solid var(--border);background:var(--surface);padding:19px;margin-bottom:12px}.mcp-key-note{margin:12px 0 0;color:var(--muted);font-size:11px;line-height:1.5}.mcp-key-create{margin-top:2px}.mcp-key-tools{margin-top:18px}.key-tools-label{display:block;color:var(--fg-soft);font-size:12px}.key-tools-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:9px}.key-tools-grid label{display:flex;align-items:center;gap:7px;color:var(--muted);font:11px var(--mono)}.key-tools-grid input{accent-color:var(--accent)}.mcp-key-create>.primary-button{margin-top:17px}.mcp-key-secret{display:grid;gap:9px;margin-top:17px;padding:13px;border:1px solid color-mix(in oklch,var(--accent) 30%,var(--border));background:var(--accent-soft);color:var(--accent);font-size:11px}.mcp-key-secret code{overflow-wrap:anywhere;font:12px var(--mono);color:var(--fg)}.mcp-key-secret>div{display:flex;align-items:center;gap:7px}.mcp-key-secret .icon-button{width:28px;height:28px;border-color:color-mix(in oklch,var(--accent) 25%,var(--border))}.mcp-key-list{display:grid;gap:8px;margin-top:18px}.mcp-key-row{display:flex;align-items:center;gap:10px;padding:11px 3px;border-top:1px solid var(--border-soft);color:var(--accent)}.mcp-key-row>div{display:grid;gap:3px;min-width:0;flex:1}.mcp-key-row strong{color:var(--fg-soft);font-size:12px}.mcp-key-row code{color:var(--fg);font:10px var(--mono)}.mcp-key-row span{color:var(--muted);font-size:10px}.mcp-key-row.revoked{opacity:.55}.mcp-key-row .ghost-button{min-height:30px;padding:5px 9px;font-size:11px}.mcp-key-empty{margin:0;color:var(--muted);font-size:11px}@media(max-width:760px){.key-tools-grid{grid-template-columns:1fr}.mcp-keys{padding:16px}}.mcp-key-row>.mcp-key-actions{display:flex;flex:none;align-items:center;gap:5px}.mcp-key-actions .icon-button{width:30px;height:30px}.mcp-key-name-input{width:min(100%,280px);border:1px solid var(--accent);border-radius:5px;padding:4px 6px;background:var(--bg-sub);color:var(--fg);font-size:12px;outline:0}.settings-page{max-width:760px}.settings-panel{margin-bottom:12px}.settings-row,.settings-storage{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:18px}.settings-row span{display:grid;gap:4px}.settings-row strong{font-size:13px;font-weight:500}.settings-row small,.settings-storage span:last-child{color:var(--muted);font-size:11px}.settings-storage{justify-content:flex-start;color:var(--fg-soft);font-size:12px}.settings-storage .status-dot{flex:none}@media(max-width:1120px){.detail-panel.detail-open{display:block;position:fixed;inset:auto 0 0;z-index:25;min-height:0;max-height:82vh;overflow:auto;border-left:0;border-top:1px solid var(--border);padding:18px 24px 28px;box-shadow:0 -18px 45px #02040629}.detail-panel.detail-open .detail-body{padding-top:24px}}@media(max-width:760px){.stat-callout{grid-column:2;grid-row:2;min-height:94px}.detail-panel.detail-open{display:block;position:fixed;inset:auto 0 0;z-index:25;min-height:0;max-height:82vh;overflow:auto;border-left:0;border-top:1px solid var(--border);padding:18px 18px 28px;box-shadow:0 -18px 45px #02040629}.detail-panel.detail-open .detail-body{padding-top:24px}.detail-panel.detail-open .detail-empty{display:none}}.timeline-list{display:block}.timeline-stream{position:relative;padding:4px 0 12px}.timeline-day+.timeline-day{margin-top:30px}.timeline-day-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:0 2px 12px 82px;color:var(--fg-soft)}.timeline-day-heading time{font-size:13px;font-weight:600}.timeline-day-heading .mono{color:var(--muted);font-weight:500}.timeline-day-items{position:relative}.timeline-day-items:before{content:"";position:absolute;top:16px;bottom:16px;left:34px;width:1px;background:var(--border)}.timeline-event{position:relative;display:grid;grid-template-columns:68px minmax(0,1fr);width:100%;border:0;background:transparent;padding:0;text-align:left;cursor:pointer}.timeline-event+.timeline-event{margin-top:8px}.timeline-event-rail{position:relative;display:flex;justify-content:center;padding-top:20px;z-index:1}.timeline-dot{width:9px;height:9px;border:2px solid var(--surface);border-radius:50%;background:var(--muted);box-shadow:0 0 0 1px var(--border)}.timeline-event-body{display:block;min-width:0;border:1px solid transparent;border-radius:8px;padding:13px 15px 12px;transition:.15s ease}.timeline-event:hover .timeline-event-body,.timeline-event.selected .timeline-event-body{border-color:var(--accent);background:var(--surface);box-shadow:var(--shadow);transform:translateY(-1px)}.timeline-event:hover .timeline-dot,.timeline-event.selected .timeline-dot{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.timeline-event-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:9px}.timeline-event-meta time{color:var(--muted);font:500 10px var(--mono)}.timeline-event-body strong{display:block;color:var(--fg-soft);font-size:14px;line-height:1.55;font-weight:500}.timeline-event-context{display:flex;align-items:center;gap:7px;margin-top:10px;color:var(--muted);font:10px var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeline-event-context span{color:var(--border)}@media(max-width:760px){.timeline-day-heading{padding-left:60px}.timeline-day-items:before{left:25px}.timeline-event{grid-template-columns:50px minmax(0,1fr)}.timeline-event-body{padding:12px 12px 11px}.timeline-event-body strong{font-size:13px}.timeline-event-rail{padding-top:19px}.timeline-dot{width:8px;height:8px}.timeline-event-context{margin-top:8px}}.timeline-event-body strong{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.app-shell.app-shell-wide{grid-template-columns:244px minmax(0,1fr)}.version-notice{position:fixed;top:14px;left:50%;z-index:70;display:flex;align-items:center;gap:7px;padding:8px 13px;border:1px solid color-mix(in oklch,var(--accent) 30%,var(--border));border-radius:999px;background:var(--surface);color:var(--accent);box-shadow:var(--shadow);font-size:12px;transform:translate(-50%);animation:version-notice-in .18s ease-out}@keyframes version-notice-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.mcp-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;margin-bottom:18px;border:1px solid var(--border);background:var(--border)}.mcp-tabs button{display:flex;align-items:center;justify-content:center;gap:7px;min-height:42px;padding:9px 12px;border:0;background:var(--surface);color:var(--muted);font-size:12px;cursor:pointer;transition:.15s ease}.mcp-tabs button:hover{color:var(--fg);background:var(--bg-sub)}.mcp-tabs button.active{background:var(--accent-soft);color:var(--accent);font-weight:600;box-shadow:inset 0 -2px 0 var(--accent)}.mcp-grid>.mcp-keys{grid-column:1/-1}.mcp-navigation{display:flex;align-items:stretch;gap:8px;margin-bottom:18px}.mcp-navigation .mcp-tabs{flex:1;margin-bottom:0}.copy-feedback{position:fixed;top:78px;left:50%;z-index:60;display:flex;align-items:center;gap:7px;padding:8px 12px;border:1px solid color-mix(in oklch,var(--success) 28%,var(--border));border-radius:6px;background:var(--surface);color:var(--success);box-shadow:var(--shadow);font-size:12px;transform:translate(-50%);animation:copy-feedback-in .16s ease-out}.copy-feedback.error{border-color:#d26a6a;color:#bd3f3f}@keyframes copy-feedback-in{0%{opacity:0;transform:translate(-50%,-5px)}}.mcp-navigation .mcp-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}.mcp-key-row.revoked strong,.mcp-key-row.revoked code{text-decoration:line-through}@media(max-width:760px){.mcp-navigation{gap:6px}.mcp-tabs{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:14px}.mcp-tabs button{min-height:40px;padding-inline:8px}}@media(min-width:1121px){.app-shell{height:100vh;min-height:0}.sidebar{height:100vh;min-height:0;overflow:auto}.main-content{min-height:0;overflow:auto}.detail-panel{height:100vh;min-height:0;overflow:hidden;display:flex;flex-direction:column}.detail-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overflow-wrap:anywhere;padding-bottom:24px}}@media(max-width:1120px){.detail-panel.detail-open{display:flex;flex-direction:column;overflow:hidden}.detail-panel.detail-open .detail-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overflow-wrap:anywhere}}@media(max-width:760px){.app-shell{height:auto;min-height:100vh}.main-content{min-height:0;overflow:visible}}.mcp-endpoint{grid-column:1/-1;order:1;padding-block:16px}.key-create-modal{width:min(100%,520px);background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:0 24px 70px #02040633;padding:22px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.mcp-endpoint .endpoint-value{margin:13px 0 11px;padding:10px 12px}.endpoint-compact-meta{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:11px;border-top:1px solid var(--border-soft);color:var(--muted);font-size:11px}.endpoint-compact-meta>span{display:flex;align-items:center;gap:7px}.endpoint-compact-meta .status-dot{width:5px;height:5px}.tool-chip-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}.tool-chip{display:inline-flex;align-items:center;padding:4px 7px;border:1px solid var(--border);border-radius:4px;background:var(--bg-sub);color:var(--muted);font:10px var(--mono)}.key-tool-list{margin-top:7px}.switch-label{display:inline-flex;align-items:center;gap:8px;color:var(--fg-soft);font:11px var(--mono)}.switch-label input{position:absolute;opacity:0}.switch-label i{position:relative;width:34px;height:20px;border:1px solid var(--border);border-radius:999px;background:var(--bg-sub);cursor:pointer}.switch-label i:after{content:"";position:absolute;top:3px;left:3px;width:12px;height:12px;border-radius:50%;background:var(--muted);transition:.15s ease}.switch-label input:checked+i{border-color:var(--accent);background:var(--accent-soft)}.switch-label input:checked+i:after{transform:translate(14px);background:var(--accent)}.mcp-grid{grid-template-columns:minmax(260px,1.2fr) minmax(0,1.45fr)}.mcp-page{background:transparent}.mcp-loading .mcp-keys{display:none}.codex-mcp-panel{grid-column:1/-1;order:3;padding-block:10px}.codex-compact-list{margin-top:0}.codex-compact-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;padding:13px 0;border-bottom:1px solid var(--border-soft)}.codex-compact-row:last-child{padding-bottom:0;border-bottom:0}.codex-compact-copy{min-width:0}.codex-compact-title{display:flex;align-items:center;gap:9px}.codex-compact-title>strong{font-size:13px}.codex-compact-copy>p{margin:6px 0 0;color:var(--muted);font-size:11px;line-height:1.45}.codex-compact-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px}.codex-compact-actions select{min-width:210px;min-height:36px}.codex-compact-row .primary-button{min-height:36px}.mcp-grid>.mcp-keys{order:4}@media(max-width:760px){.endpoint-compact-meta{align-items:flex-start}.codex-compact-row{grid-template-columns:1fr;gap:10px}.codex-compact-actions{justify-content:stretch}.codex-compact-actions select{min-width:0;flex:1}.codex-compact-row>.primary-button,.codex-compact-actions .primary-button{width:100%}}@keyframes sd-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sd-blurIn{0%{opacity:0;filter:blur(4px)}to{opacity:1;filter:blur(0)}}@keyframes sd-slideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}[data-sd-animate]{animation:var(--sd-animation, sd-fadeIn) var(--sd-duration, .15s) var(--sd-easing, ease) var(--sd-delay, 0ms) both}@keyframes sd-markerIn{0%{color:transparent}}[data-sd-animate-marker]::marker{animation:sd-markerIn var(--sd-marker-duration, .15s) var(--sd-marker-easing, ease) var(--sd-marker-delay, 0ms) both}
|
|
1
|
+
:root{--bg:oklch(99% .002 240);--bg-sub:oklch(97.5% .003 250);--surface:oklch(100% 0 0);--fg:oklch(18% .012 250);--fg-soft:oklch(32% .012 250);--muted:oklch(54% .012 250);--border:oklch(91.5% .005 250);--border-soft:oklch(95% .004 250);--accent:oklch(55% .18 255);--accent-soft:oklch(96% .025 255);--success:oklch(50% .15 152);--shadow:0 14px 30px oklch(20% .012 250/.07);--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}:root[data-theme=dark]{--bg:oklch(15% .012 250);--bg-sub:oklch(19% .014 250);--surface:oklch(20% .014 250);--fg:oklch(94% .005 240);--fg-soft:oklch(82% .008 250);--muted:oklch(63% .01 250);--border:oklch(30% .014 250);--border-soft:oklch(25% .014 250);--accent:oklch(71% .16 255);--accent-soft:oklch(26% .04 255);--success:oklch(73% .13 152);--shadow:0 14px 30px oklch(0% 0 0/.2)}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Inter,system-ui,sans-serif}button,input,textarea,select{font:inherit}button{color:inherit}.app-shell{min-height:100vh;display:grid;grid-template-columns:244px minmax(0,1fr) 300px}.sidebar{border-right:1px solid var(--border);background:var(--bg-sub);padding:22px 14px 16px;display:flex;flex-direction:column;min-height:100vh;z-index:10}.brand{display:flex;align-items:center;gap:10px;padding:0 9px 28px}.brand-mark{display:grid;place-items:center;width:29px;height:29px;border-radius:8px;background:var(--fg);color:var(--bg)}.brand strong{display:block;font-size:14px}.brand span{display:block;color:var(--muted);font-size:11px;margin-top:2px}.mobile-close{display:none!important;margin-left:auto}.sidebar-section{margin-bottom:27px}.eyebrow,.stat-label{display:block;color:var(--muted);font:500 10px/1.4 var(--mono);letter-spacing:.11em}.sidebar-section>.eyebrow{padding:0 10px 8px}.nav-item{width:100%;display:flex;align-items:center;gap:10px;border:0;background:transparent;padding:9px 10px;border-radius:6px;color:var(--muted);cursor:pointer;text-align:left;font-size:13px;transition:.15s ease}.nav-item:hover{background:var(--surface);color:var(--fg)}.nav-item.active{background:var(--surface);color:var(--fg);box-shadow:0 1px 0 var(--border)}.nav-item b{margin-left:auto;color:var(--muted);font:500 11px var(--mono)}.sidebar-footer{margin-top:auto}.storage-status{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11px;padding:11px 10px 15px;border-top:1px solid var(--border)}.status-dot,.live-dot{width:6px;height:6px;display:inline-block;border-radius:50%;background:var(--success)}.storage-status .mono{margin-left:auto;font:10px var(--mono)}.main-content{min-width:0}.topbar{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 34px;border-bottom:1px solid var(--border-soft)}.breadcrumbs{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px}.breadcrumbs strong{color:var(--fg-soft);font-weight:500}.top-actions{display:flex;align-items:center;gap:9px}.icon-button{display:inline-grid;place-items:center;border:1px solid transparent;background:transparent;width:34px;height:34px;border-radius:6px;cursor:pointer;color:var(--muted)}.icon-button:hover{border-color:var(--border);color:var(--fg);background:var(--surface)}.avatar{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font:600 12px var(--mono)}.menu-button{display:none}.content-wrap{max-width:1080px;padding:42px 40px 70px;margin:0 auto}.page-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:30px}.heading-kicker{display:flex;gap:8px;align-items:center;color:var(--accent);font:500 10px var(--mono);letter-spacing:.1em;margin-bottom:10px}.page-heading h1{margin:0;font-size:clamp(28px,3vw,40px);line-height:1.08;letter-spacing:-.035em;font-weight:600}.page-heading p{color:var(--muted);max-width:56ch;line-height:1.55;margin:11px 0 0;font-size:14px}.primary-button,.ghost-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid transparent;border-radius:6px;min-height:36px;padding:8px 13px;cursor:pointer;font-size:13px;font-weight:500;transition:.15s ease;white-space:nowrap}.primary-button{background:var(--fg);color:var(--bg)}.primary-button:hover{background:var(--fg-soft);transform:translateY(-1px)}.primary-button:disabled{opacity:.45;cursor:not-allowed;transform:none}.ghost-button{border-color:var(--border);color:var(--fg-soft);background:transparent}.ghost-button:hover{background:var(--bg-sub);border-color:var(--muted)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);margin-bottom:34px}.stat-card{min-height:105px;background:var(--surface);padding:17px 18px}.stat-card>strong{display:block;margin-top:10px;font:600 26px/1 var(--mono);letter-spacing:-.04em}.stat-date{font-size:18px!important;padding-top:4px}.stat-note{display:block;color:var(--muted);font-size:11px;margin-top:8px}.stat-callout{display:flex;gap:11px;align-items:center;color:var(--accent)}.stat-callout strong{color:var(--fg);font:600 14px inherit;margin:0 0 4px}.stat-callout span{display:block;color:var(--muted);font-size:11px}.toolbar{display:flex;justify-content:space-between;gap:16px;margin-bottom:17px}.search-box{height:40px;flex:1;max-width:520px;display:flex;align-items:center;gap:9px;padding:0 11px;border:1px solid var(--border);background:var(--surface);border-radius:6px;color:var(--muted)}.search-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.search-box input{border:0;outline:0;background:transparent;min-width:0;flex:1;color:var(--fg);font-size:13px}.search-box kbd{display:inline-flex;gap:3px;align-items:center;border:1px solid var(--border);border-radius:4px;padding:2px 5px;color:var(--muted);font:10px var(--mono)}.toolbar-actions{display:flex;gap:8px}.select-wrap{display:flex;align-items:center;gap:7px;border:1px solid var(--border);background:var(--surface);border-radius:6px;padding:0 10px;color:var(--muted)}.select-wrap select{appearance:none;border:0;outline:0;color:var(--fg-soft);background:transparent;height:38px;font-size:12px;cursor:pointer}.select-wrap.project-select{gap:2px}.list-header{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:12px;padding:0 2px 9px}.mono{font-family:var(--mono);font-size:10px}.memory-list{display:grid;gap:8px}.memory-card{width:100%;border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:16px 17px 14px;text-align:left;cursor:pointer;transition:.15s ease}.memory-card:hover,.memory-card.selected{border-color:var(--accent);box-shadow:var(--shadow);transform:translateY(-1px)}.card-top,.card-bottom{display:flex;justify-content:space-between;align-items:center;gap:12px}.kind-badge{display:inline-flex;align-items:center;border:1px solid var(--border);background:var(--bg-sub);border-radius:999px;padding:4px 8px;color:var(--muted);font:500 10px var(--mono)}.kind-preference{color:var(--accent);border-color:color-mix(in oklch,var(--accent) 25%,var(--border));background:var(--accent-soft)}.card-date{color:var(--muted);font:10px var(--mono)}.memory-card p{color:var(--fg-soft);font-size:14px;line-height:1.55;margin:13px 0 16px}.card-bottom{color:var(--muted);font-size:11px}.card-bottom>span:first-child{display:flex;align-items:center;gap:5px}.confidence{display:flex;align-items:center;gap:6px;font:10px var(--mono)}.confidence>span{display:inline-block;height:3px;width:36px;background:var(--accent);opacity:.7;border-radius:3px}.empty-state{border:1px dashed var(--border);min-height:230px;display:grid;place-items:center;align-content:center;gap:8px;color:var(--muted)}.empty-state strong{color:var(--fg-soft);font-size:14px}.empty-state span{font-size:12px}.detail-panel{border-left:1px solid var(--border);background:var(--bg-sub);padding:23px 21px;min-height:100vh}.detail-header{display:flex;align-items:center;justify-content:space-between}.detail-body{padding-top:35px}.detail-kind{margin-bottom:16px}.detail-body h2{color:var(--fg);font-size:19px;line-height:1.35;letter-spacing:-.02em;font-weight:600;margin:0 0 27px}.detail-meta{display:grid;gap:13px;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:18px 0}.detail-meta div,.signal-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.detail-meta span,.signal-row>span{color:var(--muted);font-size:11px}.detail-meta strong{font:10px var(--mono);color:var(--fg-soft);font-weight:500;text-align:right}.detail-section{padding:24px 0 0}.scope-value{display:flex;align-items:center;gap:7px;margin-top:11px;color:var(--fg-soft);font:11px var(--mono)}.scope-value span{color:var(--border)}.signal-row{margin-top:13px}.signal-track{height:4px;flex:1;background:var(--border);border-radius:4px;overflow:hidden}.signal-track span{display:block;height:100%;background:var(--accent)}.signal-row b{color:var(--muted);font:10px var(--mono);width:31px;text-align:right}.detail-action{width:100%;justify-content:space-between;margin-top:31px}.detail-empty{min-height:70vh;display:grid;place-items:center;align-content:center;gap:8px;color:var(--muted);text-align:center}.detail-empty strong{color:var(--fg-soft);font-size:13px}.detail-empty span{font-size:11px}.detail-icon{display:grid;place-items:center;color:var(--accent);width:42px;height:42px;border:1px solid var(--border);background:var(--surface);border-radius:50%;margin-bottom:4px}.modal-backdrop{position:fixed;inset:0;background:#0204066b;display:grid;place-items:center;padding:18px;z-index:30}.composer{width:min(100%,560px);background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 24px 70px #02040633;padding:24px}.composer-header{display:flex;align-items:start;justify-content:space-between;margin-bottom:23px}.composer h2{margin:6px 0 0;font-size:22px;letter-spacing:-.03em}.composer label{display:block;color:var(--fg-soft);font-size:12px;margin-bottom:16px}.composer input,.composer textarea,.composer select{width:100%;border:1px solid var(--border);background:var(--bg-sub);color:var(--fg);border-radius:6px;margin-top:7px;padding:10px 11px;outline:0;font-size:13px}.composer textarea{resize:vertical;line-height:1.55}.composer-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.composer-footer{border-top:1px solid var(--border);padding-top:17px;display:flex;justify-content:space-between;align-items:center;gap:12px}.composer-footer>span{display:flex;align-items:center;gap:6px;color:var(--success);font:10px var(--mono)}.composer-footer>div{display:flex;gap:8px}.sidebar-backdrop{display:none}@media(max-width:1120px){.app-shell{grid-template-columns:220px minmax(0,1fr)}.detail-panel{display:none}.content-wrap{padding-inline:30px}}@media(max-width:760px){.app-shell{display:block}.sidebar{position:fixed;inset:0 auto 0 0;width:260px;transform:translate(-100%);transition:transform .2s ease;box-shadow:var(--shadow)}.sidebar.sidebar-open{transform:translate(0)}.mobile-close{display:inline-grid!important}.sidebar-backdrop{display:block;position:fixed;inset:0;background:#02040647;border:0;z-index:9}.topbar{padding:0 18px}.menu-button{display:inline-grid}.breadcrumbs{margin-right:auto;margin-left:10px}.content-wrap{padding:30px 18px 50px}.page-heading{align-items:start;flex-direction:column;gap:18px}.page-heading .primary-button{width:100%}.stat-grid{grid-template-columns:repeat(2,1fr);margin-bottom:24px}.stat-card{min-height:94px}.stat-callout{grid-column:span 2;min-height:72px}.toolbar{display:block}.search-box{max-width:none;margin-bottom:9px}.toolbar-actions{display:grid;grid-template-columns:1fr 1fr}.select-wrap{justify-content:center}.select-wrap select{width:100%}.list-header{margin-top:19px}.confidence{display:none}.composer{padding:20px}.composer-footer{align-items:stretch;flex-direction:column}.composer-footer>div{justify-content:flex-end}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important;scroll-behavior:auto!important}}.memory-group{display:grid;gap:8px}.memory-group+.memory-group{margin-top:23px}.memory-group-header{display:flex;align-items:center;justify-content:space-between;padding:0 3px 3px;color:var(--fg-soft);font-size:12px;font-weight:600}.memory-group-header .mono{color:var(--muted);font-weight:500}.language-button{width:47px;gap:5px;font:10px var(--mono)}.mcp-page{padding:4px 0 20px}.mcp-hero{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:30px}.mcp-hero h1{margin:0;font-size:clamp(28px,3vw,40px);line-height:1.08;letter-spacing:-.035em;font-weight:600}.mcp-hero p{color:var(--muted);max-width:64ch;line-height:1.6;margin:11px 0 0;font-size:14px}.mcp-status{display:flex;align-items:center;gap:8px;white-space:nowrap;border:1px solid var(--border);background:var(--surface);padding:10px 12px;border-radius:7px;color:var(--success);font-size:12px}.mcp-status .mono{margin-left:5px;color:var(--muted)}.mcp-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(260px,.8fr);gap:12px;margin-bottom:30px}.mcp-panel,.mcp-tools,.mcp-usage{border:1px solid var(--border);background:var(--surface)}.mcp-panel{padding:19px}.mcp-panel-header,.mcp-tools-heading{display:flex;align-items:start;justify-content:space-between;gap:14px}.mcp-panel h2,.mcp-tools h2,.mcp-usage h2{margin:6px 0 0;font-size:17px;letter-spacing:-.02em}.mcp-panel pre{overflow:auto;margin:17px 0 14px;padding:15px;border:1px solid var(--border);background:var(--bg-sub);border-radius:7px;color:var(--fg-soft);font:12px/1.65 var(--mono)}.mcp-note{display:flex;align-items:flex-start;gap:7px;color:var(--muted);font-size:11px;line-height:1.5}.mcp-note svg{flex:none;color:var(--accent);margin-top:1px}.endpoint-value{overflow-wrap:anywhere;margin:23px 0 24px;padding:14px 12px;border-left:2px solid var(--accent);background:var(--accent-soft);color:var(--accent);font:12px/1.5 var(--mono)}.mcp-usage{margin-bottom:12px;padding:19px}.mcp-usage>.mcp-tools-heading>svg{color:var(--accent)}.mcp-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);margin-top:16px}.mcp-metrics .stat-card{min-height:92px}.mcp-metrics .stat-card>strong{font-size:21px}.mcp-tools{padding:19px}.mcp-tools-heading{align-items:center;margin-bottom:14px}.tool-count{border:1px solid var(--border);border-radius:999px;padding:5px 8px;color:var(--muted);font:10px var(--mono)}.tool-list{border-top:1px solid var(--border)}.tool-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:11px;padding:13px 3px;border-bottom:1px solid var(--border-soft)}.tool-row:last-child{border-bottom:0}.tool-icon{display:grid;place-items:center;width:27px;height:27px;border:1px solid var(--border);border-radius:6px;color:var(--accent);background:var(--accent-soft)}.tool-row strong{display:block;color:var(--fg-soft);font:600 12px var(--mono)}.tool-row span{display:block;color:var(--muted);font-size:12px;margin-top:4px;line-height:1.45}.tool-meta{display:grid;justify-items:end;gap:5px;color:var(--muted)}.tool-meta code{font:10px var(--mono)}.integration-status{flex:none;border:1px solid var(--border);border-radius:999px;padding:4px 8px;color:var(--muted);background:var(--bg-sub);font:10px var(--mono)}.status-configured{color:var(--success)}.status-update_available{color:var(--accent);border-color:color-mix(in oklch,var(--accent) 28%,var(--border));background:var(--accent-soft)}.integration-message{margin-top:7px;color:var(--success);font-size:11px;line-height:1.45}.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:760px){.mcp-hero{align-items:start;flex-direction:column;gap:18px}.mcp-status{width:100%;justify-content:space-between}.mcp-grid{grid-template-columns:1fr}.mcp-panel,.mcp-tools,.mcp-usage{padding:16px}.mcp-metrics{grid-template-columns:repeat(2,1fr)}.tool-row{grid-template-columns:28px minmax(0,1fr)}.tool-meta{display:none}}.sidebar{position:sticky;top:0;align-self:start;height:100vh;min-height:0;overflow-y:auto}.nav-item>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-date{flex:none;white-space:nowrap}.card-bottom>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-bottom>span:first-child svg,.confidence>span{flex:none}.confidence{flex:none;white-space:nowrap}.tool-meta{white-space:nowrap}.confidence{max-width:100%}.confidence>span{display:inline;flex:none;width:auto;height:auto;background:transparent;opacity:1;border-radius:0}.confidence>.confidence-meter{display:block;width:36px;height:4px;overflow:hidden;background:var(--border);border-radius:4px}.confidence-meter>i{display:block;height:100%;background:var(--accent);border-radius:inherit}.ui-select-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;height:38px;min-width:120px;padding:0 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--fg-soft);font-size:12px;line-height:1;cursor:pointer;outline:0}.ui-select-trigger:hover{border-color:var(--muted)}.ui-select-trigger:focus-visible,.ui-select-trigger[data-state=open]{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.ui-select-chevron{display:flex;flex:none;color:var(--muted)}.select-wrap .ui-select-trigger{height:38px;min-width:78px;padding:0;border:0;background:transparent}.select-wrap .ui-select-trigger:focus-visible,.select-wrap .ui-select-trigger[data-state=open]{box-shadow:none}.project-select .ui-select-trigger{min-width:132px}.composer .ui-select-trigger{width:100%;margin-top:7px;background:var(--bg-sub);font-size:13px}.ui-select-content{z-index:50;min-width:var(--radix-select-trigger-width);max-height:var(--radix-select-content-available-height);overflow:hidden;border:1px solid var(--border);border-radius:6px;background:var(--surface);box-shadow:var(--shadow);color:var(--fg)}.ui-select-viewport{padding:4px}.ui-select-item{position:relative;display:flex;align-items:center;height:32px;padding:0 30px 0 9px;border-radius:4px;color:var(--fg-soft);font-size:12px;cursor:default;outline:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.ui-select-item[data-highlighted]{background:var(--accent-soft);color:var(--accent)}.ui-select-check{position:absolute;right:8px;display:grid;place-items:center;color:var(--accent)}.select-wrap{min-width:0}.toolbar-actions>.select-wrap{flex:0 0 120px;width:120px}.toolbar-actions>.project-select{flex-basis:180px;width:180px}.project-select .ui-select-trigger{min-width:0;width:100%;max-width:100%}.ui-select-trigger>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-select-content{width:var(--radix-select-trigger-width);min-width:var(--radix-select-trigger-width);max-width:var(--radix-select-trigger-width)}.ui-select-item>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-select-scroll{display:flex;align-items:center;justify-content:center;height:26px;background:var(--surface);color:var(--muted);cursor:default}.recall-count{color:var(--accent);font:10px var(--mono);white-space:nowrap;flex:none}.agent-launcher{color:var(--accent)}.agent-launcher.active,.agent-launcher:hover{background:var(--accent-soft);border-color:color-mix(in oklch,var(--accent) 28%,var(--border));color:var(--accent)}.agent-backdrop{position:fixed;inset:0;z-index:40;background:#02040638;display:flex;justify-content:flex-end}.agent-panel{width:min(100%,460px);height:100%;display:flex;flex-direction:column;background:var(--surface);border-left:1px solid var(--border);box-shadow:-18px 0 50px #02040624;animation:agent-slide-in .2s ease-out}.agent-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 20px;border-bottom:1px solid var(--border)}.agent-title{display:flex;align-items:center;gap:10px}.agent-title strong{display:block;font-size:14px}.agent-title span:last-child{display:block;margin-top:3px;color:var(--muted);font-size:11px}.agent-avatar{display:grid!important;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--accent-soft);color:var(--accent)}.agent-messages{flex:1;overflow:auto;padding:22px 18px 14px;display:flex;flex-direction:column;gap:16px;background:var(--bg)}.agent-message{display:flex;flex-direction:column;max-width:88%;gap:7px}.agent-message.user{align-self:flex-end;align-items:flex-end}.agent-message.assistant{align-self:flex-start}.agent-message-bubble{padding:11px 13px;border:1px solid var(--border);border-radius:12px 12px 12px 4px;background:var(--surface);color:var(--fg-soft);font-size:13px;line-height:1.65;white-space:normal}.agent-message.user .agent-message-bubble{border-color:var(--fg);border-radius:12px 12px 4px;background:var(--fg);color:var(--bg)}.agent-tool-calls{display:flex;flex-wrap:wrap;gap:5px}.agent-tool-calls span{display:inline-flex;align-items:center;gap:4px;padding:4px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font:10px var(--mono)}.agent-composer{display:flex;align-items:flex-end;gap:8px;padding:12px 14px 16px;border-top:1px solid var(--border);background:var(--surface)}.agent-composer textarea{min-height:40px;max-height:120px;flex:1;resize:none;border:1px solid var(--border);border-radius:9px;padding:10px 11px;outline:0;background:var(--bg-sub);color:var(--fg);font-size:13px;line-height:1.45}.agent-composer textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.agent-send{display:grid;place-items:center;width:40px;height:40px;border:0;border-radius:9px;background:var(--fg);color:var(--bg);cursor:pointer}.agent-send:disabled{opacity:.35;cursor:not-allowed}.agent-suggestions{display:flex;gap:7px;overflow:auto;padding:9px 14px 11px;border-top:1px solid var(--border-soft);background:var(--surface)}.agent-suggestions button{border:1px solid var(--border);border-radius:999px;padding:6px 9px;background:var(--bg-sub);color:var(--muted);font-size:11px;white-space:nowrap;cursor:pointer}.agent-suggestions button:hover{border-color:var(--accent);color:var(--accent)}.agent-suggestions button:disabled{opacity:.5;cursor:not-allowed}.agent-thinking{display:flex;gap:4px;padding:14px 16px}.agent-thinking span{width:5px;height:5px;border-radius:50%;background:var(--muted);animation:agent-bounce 1s infinite ease-in-out}.agent-thinking span:nth-child(2){animation-delay:.12s}.agent-thinking span:nth-child(3){animation-delay:.24s}.agent-error{margin:0;color:#bd3f3f;font-size:12px}@keyframes agent-slide-in{0%{transform:translate(20px);opacity:.5}to{transform:translate(0);opacity:1}}@keyframes agent-bounce{0%,80%,to{transform:translateY(0);opacity:.45}40%{transform:translateY(-3px);opacity:1}}@media(max-width:760px){.sidebar{position:fixed}.agent-panel{width:100%;border-left:0}.agent-header{padding-inline:16px}.agent-messages{padding-inline:14px}}.agent-float{position:fixed;right:24px;bottom:24px;z-index:40;pointer-events:none}.agent-float-position{pointer-events:none}.agent-float-button{pointer-events:auto;display:grid;place-items:center;width:52px;height:52px;border:1px solid color-mix(in oklch,var(--accent) 35%,var(--border));border-radius:50%;background:var(--accent);color:#fff;box-shadow:0 10px 28px #0c172338;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}.agent-float-button:hover{transform:translateY(-2px);box-shadow:0 14px 34px #0c17234d}.agent-float .agent-panel{pointer-events:auto;width:min(1200px,calc(100vw - 48px));height:min(680px,calc(100vh - 48px));border:1px solid var(--border);border-radius:12px;box-shadow:0 18px 55px #02040633;animation:agent-float-in .2s ease-out}.agent-float .agent-messages{min-height:0}.agent-float .agent-header{border-radius:12px 12px 0 0}.agent-config-page{max-width:760px}.config-panel{border:1px solid var(--border);background:var(--surface);padding:20px;margin-bottom:12px}.config-panel-heading{display:flex;justify-content:space-between;align-items:start;gap:12px;padding-bottom:16px;border-bottom:1px solid var(--border);color:var(--accent)}.config-panel-heading h2{margin:6px 0 0;color:var(--fg);font-size:17px}.config-field{display:block;margin-top:18px;color:var(--fg-soft);font-size:12px}.config-field span{display:block}.config-field small{color:var(--muted);font-size:10px;margin-left:5px}.config-field input{display:block;width:100%;margin-top:7px;padding:10px 11px;border:1px solid var(--border);border-radius:6px;background:var(--bg-sub);color:var(--fg);outline:0;font-size:13px}.config-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.config-toggle{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-top:18px;color:var(--fg-soft);font-size:13px}.config-toggle span{display:grid;gap:4px}.config-toggle small{color:var(--muted);font-size:11px;line-height:1.5}.config-toggle input{appearance:none;position:relative;flex:none;width:38px;height:22px;border:1px solid var(--border);border-radius:999px;background:var(--bg-sub);cursor:pointer}.config-toggle input:after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--muted);transition:transform .15s ease,background .15s ease}.config-toggle input:checked{border-color:var(--accent);background:var(--accent-soft)}.config-toggle input:checked:after{transform:translate(16px);background:var(--accent)}.config-info{display:flex;align-items:flex-start;gap:7px;margin-top:20px;padding-top:15px;border-top:1px solid var(--border-soft);color:var(--muted);font-size:11px;line-height:1.5}.config-info svg{flex:none;color:var(--accent)}@keyframes agent-float-in{0%{opacity:.5;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}@media(max-width:760px){.agent-float{right:16px;bottom:16px}.agent-float .agent-panel{width:calc(100vw - 32px);height:min(70vh,640px)}.agent-float-button{width:48px;height:48px}.config-panel{padding:16px}}.agent-message-bubble :where(p){margin:0 0 8px}.agent-message-bubble :where(p:last-child){margin-bottom:0}.agent-message-bubble :where(h1,h2,h3){margin:14px 0 7px;color:var(--fg);font-size:15px}.agent-message-bubble :where(ul,ol){margin:7px 0;padding-left:20px}.agent-message-bubble :where(li){margin:3px 0}.agent-message-bubble :where(pre){max-width:100%;overflow:auto;margin:9px 0;padding:10px;border:1px solid var(--border);border-radius:6px;background:var(--bg-sub);font:11px/1.5 var(--mono)}.agent-message-bubble :where(code){font:11px var(--mono)}.agent-message-bubble :where(:not(pre)>code){padding:2px 4px;border-radius:4px;background:var(--bg-sub)}.agent-message-bubble :where(strong){color:var(--fg)}.agent-plain-text{white-space:pre-wrap}.config-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.config-field select{display:block;width:100%;height:38px;margin-top:7px;padding:0 10px;border:1px solid var(--border);border-radius:6px;background:var(--bg-sub);color:var(--fg);outline:0;font-size:13px}.config-field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}@media(max-width:760px){.config-grid{grid-template-columns:1fr}}.agent-config-fields{grid-template-columns:1fr}.agent-float-button:disabled{opacity:.6;cursor:wait}.agent-config-form{display:flex;flex:1;min-height:0;flex-direction:column}.agent-config-scroll{flex:1;min-height:0;overflow:auto;padding:14px 16px}.agent-config-section{padding:4px 0 18px}.agent-config-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 14px}.agent-config-fields .config-field:nth-child(-n+2){grid-column:1/-1}.agent-config-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:11px 16px;border-top:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:10px}.agent-config-actions .primary-button{flex:none}.model-field{display:flex;align-items:center;gap:8px;margin-top:7px}.model-field input,.model-field select{flex:1;min-width:0;margin-top:0}.model-field .ghost-button{min-height:38px}.model-message{display:block;margin-top:6px;color:var(--muted);font-size:10px}.select-wrap .ui-select-trigger{width:100%;min-width:0}.config-field>.ui-select-trigger{width:100%;margin-top:7px;background:var(--bg-sub);font-size:13px}.model-field>.ui-select-trigger{flex:1;width:auto;min-width:0;margin-top:0;background:var(--bg-sub);font-size:13px}@media(max-width:760px){.toolbar-actions>.select-wrap,.toolbar-actions>.project-select{width:auto;flex:initial;min-width:0}.toolbar-actions>.select-wrap .ui-select-trigger{width:100%}}.agent-tabs{display:flex;gap:4px;padding:8px 16px 0;border-bottom:1px solid var(--border);background:var(--surface)}.agent-tabs button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:7px 11px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);font-size:12px;cursor:pointer}.agent-tabs button:hover:not(:disabled){color:var(--fg)}.agent-tabs button.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.agent-tabs button:disabled{opacity:.4;cursor:not-allowed}.agent-thinking{display:flex;align-items:center;gap:6px;padding:4px 2px;color:var(--muted);font-size:11px}.agent-thinking svg{color:var(--accent);animation:agent-spin 1s linear infinite}.agent-thinking i{width:4px;height:4px;border-radius:50%;background:var(--muted);animation:agent-bounce 1s infinite ease-in-out}.agent-thinking i:nth-of-type(2){animation-delay:.12s}.agent-thinking i:nth-of-type(3){animation-delay:.24s}@keyframes agent-spin{to{transform:rotate(360deg)}}.agent-thinking .agent-thinking-label{width:auto;height:auto;border-radius:0;background:none;animation:none}.mcp-keys{border:1px solid var(--border);background:var(--surface);padding:19px;margin-bottom:12px}.mcp-key-note{margin:12px 0 0;color:var(--muted);font-size:11px;line-height:1.5}.mcp-key-create{margin-top:2px}.mcp-key-tools{margin-top:18px}.key-tools-label{display:block;color:var(--fg-soft);font-size:12px}.key-tools-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:9px}.key-tools-grid label{display:flex;align-items:center;gap:7px;color:var(--muted);font:11px var(--mono)}.key-tools-grid input{accent-color:var(--accent)}.mcp-key-create>.primary-button{margin-top:17px}.mcp-key-secret{display:grid;gap:9px;margin-top:17px;padding:13px;border:1px solid color-mix(in oklch,var(--accent) 30%,var(--border));background:var(--accent-soft);color:var(--accent);font-size:11px}.mcp-key-secret code{overflow-wrap:anywhere;font:12px var(--mono);color:var(--fg)}.mcp-key-secret>div{display:flex;align-items:center;gap:7px}.mcp-key-secret .icon-button{width:28px;height:28px;border-color:color-mix(in oklch,var(--accent) 25%,var(--border))}.mcp-key-list{display:grid;gap:8px;margin-top:18px}.mcp-key-row{display:flex;align-items:center;gap:10px;padding:11px 3px;border-top:1px solid var(--border-soft);color:var(--accent)}.mcp-key-row>div{display:grid;gap:3px;min-width:0;flex:1}.mcp-key-row strong{color:var(--fg-soft);font-size:12px}.mcp-key-row code{color:var(--fg);font:10px var(--mono)}.mcp-key-row span{color:var(--muted);font-size:10px}.mcp-key-row.revoked{opacity:.55}.mcp-key-row .ghost-button{min-height:30px;padding:5px 9px;font-size:11px}.mcp-key-empty{margin:0;color:var(--muted);font-size:11px}@media(max-width:760px){.key-tools-grid{grid-template-columns:1fr}.mcp-keys{padding:16px}}.mcp-key-row>.mcp-key-actions{display:flex;flex:none;align-items:center;gap:5px}.mcp-key-actions .icon-button{width:30px;height:30px}.mcp-key-name-input{width:min(100%,280px);border:1px solid var(--accent);border-radius:5px;padding:4px 6px;background:var(--bg-sub);color:var(--fg);font-size:12px;outline:0}.settings-page{max-width:760px}.settings-panel{margin-bottom:12px}.settings-row,.settings-storage{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:18px}.settings-row span{display:grid;gap:4px}.settings-row strong{font-size:13px;font-weight:500}.settings-row small,.settings-storage span:last-child{color:var(--muted);font-size:11px}.settings-storage{justify-content:flex-start;color:var(--fg-soft);font-size:12px}.settings-storage .status-dot{flex:none}@media(max-width:1120px){.detail-panel.detail-open{display:block;position:fixed;inset:auto 0 0;z-index:25;min-height:0;max-height:82vh;overflow:auto;border-left:0;border-top:1px solid var(--border);padding:18px 24px 28px;box-shadow:0 -18px 45px #02040629}.detail-panel.detail-open .detail-body{padding-top:24px}}@media(max-width:760px){.stat-callout{grid-column:2;grid-row:2;min-height:94px}.detail-panel.detail-open{display:block;position:fixed;inset:auto 0 0;z-index:25;min-height:0;max-height:82vh;overflow:auto;border-left:0;border-top:1px solid var(--border);padding:18px 18px 28px;box-shadow:0 -18px 45px #02040629}.detail-panel.detail-open .detail-body{padding-top:24px}.detail-panel.detail-open .detail-empty{display:none}}.timeline-list{display:block}.timeline-stream{position:relative;padding:4px 0 12px}.timeline-day+.timeline-day{margin-top:30px}.timeline-day-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:0 2px 12px 82px;color:var(--fg-soft)}.timeline-day-heading time{font-size:13px;font-weight:600}.timeline-day-heading .mono{color:var(--muted);font-weight:500}.timeline-day-items{position:relative}.timeline-day-items:before{content:"";position:absolute;top:16px;bottom:16px;left:34px;width:1px;background:var(--border)}.timeline-event{position:relative;display:grid;grid-template-columns:68px minmax(0,1fr);width:100%;border:0;background:transparent;padding:0;text-align:left;cursor:pointer}.timeline-event+.timeline-event{margin-top:8px}.timeline-event-rail{position:relative;display:flex;justify-content:center;padding-top:20px;z-index:1}.timeline-dot{width:9px;height:9px;border:2px solid var(--surface);border-radius:50%;background:var(--muted);box-shadow:0 0 0 1px var(--border)}.timeline-event-body{display:block;min-width:0;border:1px solid transparent;border-radius:8px;padding:13px 15px 12px;transition:.15s ease}.timeline-event:hover .timeline-event-body,.timeline-event.selected .timeline-event-body{border-color:var(--accent);background:var(--surface);box-shadow:var(--shadow);transform:translateY(-1px)}.timeline-event:hover .timeline-dot,.timeline-event.selected .timeline-dot{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.timeline-event-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:9px}.timeline-event-meta time{color:var(--muted);font:500 10px var(--mono)}.timeline-event-body strong{display:block;color:var(--fg-soft);font-size:14px;line-height:1.55;font-weight:500}.timeline-event-context{display:flex;align-items:center;gap:7px;margin-top:10px;color:var(--muted);font:10px var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeline-event-context span{color:var(--border)}@media(max-width:760px){.timeline-day-heading{padding-left:60px}.timeline-day-items:before{left:25px}.timeline-event{grid-template-columns:50px minmax(0,1fr)}.timeline-event-body{padding:12px 12px 11px}.timeline-event-body strong{font-size:13px}.timeline-event-rail{padding-top:19px}.timeline-dot{width:8px;height:8px}.timeline-event-context{margin-top:8px}}.timeline-event-body strong{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.app-shell.app-shell-wide{grid-template-columns:244px minmax(0,1fr)}.version-notice{position:fixed;top:14px;left:50%;z-index:70;display:flex;align-items:center;gap:7px;padding:8px 13px;border:1px solid color-mix(in oklch,var(--accent) 30%,var(--border));border-radius:999px;background:var(--surface);color:var(--accent);box-shadow:var(--shadow);font-size:12px;transform:translate(-50%);animation:version-notice-in .18s ease-out}@keyframes version-notice-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.mcp-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;margin-bottom:18px;border:1px solid var(--border);background:var(--border)}.mcp-tabs button{display:flex;align-items:center;justify-content:center;gap:7px;min-height:42px;padding:9px 12px;border:0;background:var(--surface);color:var(--muted);font-size:12px;cursor:pointer;transition:.15s ease}.mcp-tabs button:hover{color:var(--fg);background:var(--bg-sub)}.mcp-tabs button.active{background:var(--accent-soft);color:var(--accent);font-weight:600;box-shadow:inset 0 -2px 0 var(--accent)}.mcp-grid>.mcp-keys{grid-column:1/-1}.mcp-navigation{display:flex;align-items:stretch;gap:8px;margin-bottom:18px}.mcp-navigation .mcp-tabs{flex:1;margin-bottom:0}.copy-feedback{position:fixed;top:78px;left:50%;z-index:60;display:flex;align-items:center;gap:7px;padding:8px 12px;border:1px solid color-mix(in oklch,var(--success) 28%,var(--border));border-radius:6px;background:var(--surface);color:var(--success);box-shadow:var(--shadow);font-size:12px;transform:translate(-50%);animation:copy-feedback-in .16s ease-out}.copy-feedback.error{border-color:#d26a6a;color:#bd3f3f}@keyframes copy-feedback-in{0%{opacity:0;transform:translate(-50%,-5px)}}.mcp-navigation .mcp-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}.mcp-key-row.revoked strong,.mcp-key-row.revoked code{text-decoration:line-through}@media(max-width:760px){.mcp-navigation{gap:6px}.mcp-tabs{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:14px}.mcp-tabs button{min-height:40px;padding-inline:8px}}@media(min-width:1121px){.app-shell{height:100vh;min-height:0}.sidebar{height:100vh;min-height:0;overflow:auto}.main-content{min-height:0;overflow:auto}.detail-panel{height:100vh;min-height:0;overflow:hidden;display:flex;flex-direction:column}.detail-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overflow-wrap:anywhere;padding-bottom:24px}}@media(max-width:1120px){.detail-panel.detail-open{display:flex;flex-direction:column;overflow:hidden}.detail-panel.detail-open .detail-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overflow-wrap:anywhere}}@media(max-width:760px){.app-shell{height:auto;min-height:100vh}.main-content{min-height:0;overflow:visible}}.mcp-endpoint{grid-column:1/-1;order:1;padding-block:16px}.key-create-modal{width:min(100%,520px);background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:0 24px 70px #02040633;padding:22px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.mcp-endpoint .endpoint-value{margin:13px 0 11px;padding:10px 12px}.endpoint-compact-meta{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:11px;border-top:1px solid var(--border-soft);color:var(--muted);font-size:11px}.endpoint-compact-meta>span{display:flex;align-items:center;gap:7px}.endpoint-compact-meta .status-dot{width:5px;height:5px}.tool-chip-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}.tool-chip{display:inline-flex;align-items:center;padding:4px 7px;border:1px solid var(--border);border-radius:4px;background:var(--bg-sub);color:var(--muted);font:10px var(--mono)}.key-tool-list{margin-top:7px}.switch-label{display:inline-flex;align-items:center;gap:8px;color:var(--fg-soft);font:11px var(--mono)}.switch-label input{position:absolute;opacity:0}.switch-label i{position:relative;width:34px;height:20px;border:1px solid var(--border);border-radius:999px;background:var(--bg-sub);cursor:pointer}.switch-label i:after{content:"";position:absolute;top:3px;left:3px;width:12px;height:12px;border-radius:50%;background:var(--muted);transition:.15s ease}.switch-label input:checked+i{border-color:var(--accent);background:var(--accent-soft)}.switch-label input:checked+i:after{transform:translate(14px);background:var(--accent)}.mcp-grid{grid-template-columns:minmax(260px,1.2fr) minmax(0,1.45fr)}.mcp-page{background:transparent}.mcp-loading .mcp-keys{display:none}.codex-mcp-panel{grid-column:1/-1;order:3;padding-block:10px}.codex-compact-heading{margin-bottom:4px}.codex-compact-list{margin-top:0}.codex-compact-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;padding:13px 0;border-bottom:1px solid var(--border-soft)}.codex-compact-row:last-child{padding-bottom:0;border-bottom:0}.codex-compact-copy{min-width:0}.codex-compact-title{display:flex;align-items:center;gap:9px}.codex-compact-title>strong{font-size:13px}.codex-compact-copy>p{margin:6px 0 0;color:var(--muted);font-size:11px;line-height:1.45}.codex-compact-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px}.codex-compact-actions select{min-width:210px;min-height:36px}.codex-compact-row .primary-button{min-height:36px}.mcp-grid>.mcp-keys{order:4}@media(max-width:760px){.endpoint-compact-meta{align-items:flex-start}.codex-compact-row{grid-template-columns:1fr;gap:10px}.codex-compact-actions{justify-content:stretch}.codex-compact-actions select{min-width:0;flex:1}.codex-compact-row>.primary-button,.codex-compact-actions .primary-button{width:100%}}@keyframes sd-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sd-blurIn{0%{opacity:0;filter:blur(4px)}to{opacity:1;filter:blur(0)}}@keyframes sd-slideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}[data-sd-animate]{animation:var(--sd-animation, sd-fadeIn) var(--sd-duration, .15s) var(--sd-easing, ease) var(--sd-delay, 0ms) both}@keyframes sd-markerIn{0%{color:transparent}}[data-sd-animate-marker]::marker{animation:sd-markerIn var(--sd-marker-duration, .15s) var(--sd-marker-easing, ease) var(--sd-marker-delay, 0ms) both}
|
|
@@ -155,7 +155,7 @@ ${e}</tr>
|
|
|
155
155
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${vr(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let i=this.parser.parseInline(n),s=D2(e);if(s===null)return i;e=s;let l='<a href="'+e+'"';return t&&(l+=' title="'+vr(t)+'"'),l+=">"+i+"</a>",l}image({href:e,title:t,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let s=D2(e);if(s===null)return vr(n);e=s;let l=`<img src="${e}" alt="${vr(n)}"`;return t&&(l+=` title="${vr(t)}"`),l+=">",l}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:vr(e.text)}},Bg=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},cr=class x0{options;renderer;textRenderer;constructor(t){this.options=t||is,this.options.renderer=this.options.renderer||new Uf,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Bg}static parse(t,n){return new x0(n).parse(t)}static parseInline(t,n){return new x0(n).parseInline(t)}parse(t){this.renderer.parser=this;let n="";for(let i=0;i<t.length;i++){let s=t[i];if(this.options.extensions?.renderers?.[s.type]){let o=s,c=this.options.extensions.renderers[o.type].call({parser:this},o);if(c!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(o.type)){n+=c||"";continue}}let l=s;switch(l.type){case"space":{n+=this.renderer.space(l);break}case"hr":{n+=this.renderer.hr(l);break}case"heading":{n+=this.renderer.heading(l);break}case"code":{n+=this.renderer.code(l);break}case"table":{n+=this.renderer.table(l);break}case"blockquote":{n+=this.renderer.blockquote(l);break}case"list":{n+=this.renderer.list(l);break}case"checkbox":{n+=this.renderer.checkbox(l);break}case"html":{n+=this.renderer.html(l);break}case"def":{n+=this.renderer.def(l);break}case"paragraph":{n+=this.renderer.paragraph(l);break}case"text":{n+=this.renderer.text(l);break}default:{let o='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}parseInline(t,n=this.renderer){this.renderer.parser=this;let i="";for(let s=0;s<t.length;s++){let l=t[s];if(this.options.extensions?.renderers?.[l.type]){let c=this.options.extensions.renderers[l.type].call({parser:this},l);if(c!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(l.type)){i+=c||"";continue}}let o=l;switch(o.type){case"escape":{i+=n.text(o);break}case"html":{i+=n.html(o);break}case"link":{i+=n.link(o);break}case"image":{i+=n.image(o);break}case"checkbox":{i+=n.checkbox(o);break}case"strong":{i+=n.strong(o);break}case"em":{i+=n.em(o);break}case"codespan":{i+=n.codespan(o);break}case"br":{i+=n.br(o);break}case"del":{i+=n.del(o);break}case"text":{i+=n.text(o);break}default:{let c='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(c),"";throw new Error(c)}}}return i}},Ru=class{options;block;constructor(e){this.options=e||is}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?rr.lex:rr.lexInline}provideParser(e=this.block){return e?cr.parse:cr.parseInline}},Oz=class{defaults=Ng();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=cr;Renderer=Uf;TextRenderer=Bg;Lexer=rr;Tokenizer=Hf;Hooks=Ru;constructor(...t){this.use(...t)}walkTokens(t,n){let i=[];for(let s of t)switch(i=i.concat(n.call(this,s)),s.type){case"table":{let l=s;for(let o of l.header)i=i.concat(this.walkTokens(o.tokens,n));for(let o of l.rows)for(let c of o)i=i.concat(this.walkTokens(c.tokens,n));break}case"list":{let l=s;i=i.concat(this.walkTokens(l.items,n));break}default:{let l=s;this.defaults.extensions?.childTokens?.[l.type]?this.defaults.extensions.childTokens[l.type].forEach(o=>{let c=l[o].flat(1/0);i=i.concat(this.walkTokens(c,n))}):l.tokens&&(i=i.concat(this.walkTokens(l.tokens,n)))}}return i}use(...t){let n=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(i=>{let s={...i};if(s.async=this.defaults.async||s.async||!1,i.extensions&&(i.extensions.forEach(l=>{if(!l.name)throw new Error("extension name required");if("renderer"in l){let o=n.renderers[l.name];o?n.renderers[l.name]=function(...c){let d=l.renderer.apply(this,c);return d===!1&&(d=o.apply(this,c)),d}:n.renderers[l.name]=l.renderer}if("tokenizer"in l){if(!l.level||l.level!=="block"&&l.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=n[l.level];o?o.unshift(l.tokenizer):n[l.level]=[l.tokenizer],l.start&&(l.level==="block"?n.startBlock?n.startBlock.push(l.start):n.startBlock=[l.start]:l.level==="inline"&&(n.startInline?n.startInline.push(l.start):n.startInline=[l.start]))}"childTokens"in l&&l.childTokens&&(n.childTokens[l.name]=l.childTokens)}),s.extensions=n),i.renderer){let l=this.defaults.renderer||new Uf(this.defaults);for(let o in i.renderer){if(!(o in l))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let c=o,d=i.renderer[c],h=l[c];l[c]=(...m)=>{let p=d.apply(l,m);return p===!1&&(p=h.apply(l,m)),p||""}}s.renderer=l}if(i.tokenizer){let l=this.defaults.tokenizer||new Hf(this.defaults);for(let o in i.tokenizer){if(!(o in l))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let c=o,d=i.tokenizer[c],h=l[c];l[c]=(...m)=>{let p=d.apply(l,m);return p===!1&&(p=h.apply(l,m)),p}}s.tokenizer=l}if(i.hooks){let l=this.defaults.hooks||new Ru;for(let o in i.hooks){if(!(o in l))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let c=o,d=i.hooks[c],h=l[c];Ru.passThroughHooks.has(o)?l[c]=m=>{if(this.defaults.async&&Ru.passThroughHooksRespectAsync.has(o))return(async()=>{let E=await d.call(l,m);return h.call(l,E)})();let p=d.call(l,m);return h.call(l,p)}:l[c]=(...m)=>{if(this.defaults.async)return(async()=>{let E=await d.apply(l,m);return E===!1&&(E=await h.apply(l,m)),E})();let p=d.apply(l,m);return p===!1&&(p=h.apply(l,m)),p}}s.hooks=l}if(i.walkTokens){let l=this.defaults.walkTokens,o=i.walkTokens;s.walkTokens=function(c){let d=[];return d.push(o.call(this,c)),l&&(d=d.concat(l.call(this,c))),d}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,n){return rr.lex(t,n??this.defaults)}parser(t,n){return cr.parse(t,n??this.defaults)}parseMarkdown(t){return(n,i)=>{let s={...i},l={...this.defaults,...s},o=this.onError(!!l.silent,!!l.async);if(this.defaults.async===!0&&s.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(l.hooks&&(l.hooks.options=l,l.hooks.block=t),l.async)return(async()=>{let c=l.hooks?await l.hooks.preprocess(n):n,d=await(l.hooks?await l.hooks.provideLexer(t):t?rr.lex:rr.lexInline)(c,l),h=l.hooks?await l.hooks.processAllTokens(d):d;l.walkTokens&&await Promise.all(this.walkTokens(h,l.walkTokens));let m=await(l.hooks?await l.hooks.provideParser(t):t?cr.parse:cr.parseInline)(h,l);return l.hooks?await l.hooks.postprocess(m):m})().catch(o);try{l.hooks&&(n=l.hooks.preprocess(n));let c=(l.hooks?l.hooks.provideLexer(t):t?rr.lex:rr.lexInline)(n,l);l.hooks&&(c=l.hooks.processAllTokens(c)),l.walkTokens&&this.walkTokens(c,l.walkTokens);let d=(l.hooks?l.hooks.provideParser(t):t?cr.parse:cr.parseInline)(c,l);return l.hooks&&(d=l.hooks.postprocess(d)),d}catch(c){return o(c)}}}onError(t,n){return i=>{if(i.message+=`
|
|
156
156
|
Please report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+vr(i.message+"",!0)+"</pre>";return n?Promise.resolve(s):s}if(n)return Promise.reject(i);throw i}}},Ka=new Oz;function mt(e,t){return Ka.parse(e,t)}mt.options=mt.setOptions=function(e){return Ka.setOptions(e),mt.defaults=Ka.defaults,CC(mt.defaults),mt};mt.getDefaults=Ng;mt.defaults=is;mt.use=function(...e){return Ka.use(...e),mt.defaults=Ka.defaults,CC(mt.defaults),mt};mt.walkTokens=function(e,t){return Ka.walkTokens(e,t)};mt.parseInline=Ka.parseInline;mt.Parser=cr;mt.parser=cr.parse;mt.Renderer=Uf;mt.TextRenderer=Bg;mt.Lexer=rr;mt.lexer=rr.lex;mt.Tokenizer=Hf;mt.Hooks=Ru;mt.parse=mt;mt.options;mt.setOptions;mt.use;mt.walkTokens;mt.parseInline;cr.parse;rr.lex;var Lz=300,Dz="300px",Iz=500;function Mz(e={}){let{immediate:t=!1,debounceDelay:n=Lz,rootMargin:i=Dz,idleTimeout:s=Iz}=e,[l,o]=C.useState(!1),c=C.useRef(null),d=C.useRef(null),h=C.useRef(null),m=C.useMemo(()=>y=>{let v=Date.now();return window.setTimeout(()=>{y({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-v))})},1)},[]),p=C.useMemo(()=>typeof window<"u"&&window.requestIdleCallback?(y,v)=>window.requestIdleCallback(y,v):m,[m]),E=C.useMemo(()=>typeof window<"u"&&window.cancelIdleCallback?y=>window.cancelIdleCallback(y):y=>{clearTimeout(y)},[]);return C.useEffect(()=>{if(t){o(!0);return}let y=c.current;if(!y)return;d.current&&(clearTimeout(d.current),d.current=null),h.current&&(E(h.current),h.current=null);let v=()=>{d.current&&(clearTimeout(d.current),d.current=null),h.current&&(E(h.current),h.current=null)},S=w=>{h.current=p(D=>{D.timeRemaining()>0||D.didTimeout?(o(!0),w.disconnect()):h.current=p(()=>{o(!0),w.disconnect()},{timeout:s/2})},{timeout:s})},A=w=>{v(),d.current=window.setTimeout(()=>{var D,z;let L=w.takeRecords();(L.length===0||(z=(D=L.at(-1))==null?void 0:D.isIntersecting)!=null&&z)&&S(w)},n)},k=(w,D)=>{w.isIntersecting?A(D):v()},N=new IntersectionObserver(w=>{for(let D of w)k(D,N)},{rootMargin:i,threshold:0});return N.observe(y),()=>{d.current&&clearTimeout(d.current),h.current&&E(h.current),N.disconnect()}},[t,n,i,s,E,p]),{shouldRender:l,containerRef:c}}var Pz=320,Bz=4,MC=()=>typeof performance>"u"?Date.now():performance.now();function P2(e){var t,n;let i=(t=e?.now)!=null?t:MC,s=(n=e?.maxBacklogMs)!=null?n:Pz,l=0,o=0;return{now:i,beginPass(c){o=Math.min(Math.max(l,c),c+s)},mark(){return o},rewind(c){o=c},take(c,d,h){if(c<=0)return{baseDelay:0,step:Math.max(0,d)};let m=Math.max(0,d),p=m===0?0:Math.min(m,Bz),E=Math.max(o,h),y=h+s,v=E+Math.max(0,c-1)*m,S=m;if(v>y&&c>1)if(E<y){let k=y-E;S=Math.max(p,k/(c-1))}else S=p;let A=Math.max(0,Math.round(E-h));return o=E+c*S,{baseDelay:A,step:S}},commitPass(){l=o}}}var PC=/\s/,jg=/^\s+$/,jz=new Set(["pre","svg","math","annotation"]),Hz=new Set(["img","hr"]),mo=e=>typeof e=="object"&&e!==null&&"type"in e&&e.type==="element",Hg=e=>e.some(t=>mo(t)&&jz.has(t.tagName)),Uz=e=>{for(let t=e.length-1;t>=0;t--){let n=e[t];if(mo(n)&&n.tagName==="li")return n}},zz=(e,t,n,i)=>{e.properties!=null||(e.properties={}),e.properties["data-sd-animate-marker"]=!0;let s=typeof e.properties.style=="string"?`${e.properties.style};`:"";e.properties.style=`${s}--sd-marker-duration:${t}ms;--sd-marker-delay:${Math.round(n)}ms;--sd-marker-easing:${i}`},Fz=new Set(["ul","ol","li"]),BC=e=>{for(let t of e.children)if(mo(t)){if(t.tagName==="input")return t;if(Fz.has(t.tagName))continue;let n=BC(t);if(n)return n}},jC=(e,t,n,i)=>{e.properties!=null||(e.properties={}),e.properties["data-sd-animate"]=!0;let s=typeof e.properties.style=="string"?`${e.properties.style};`:"";e.properties.style=`${s}--sd-animation:sd-${t.animation};--sd-duration:${n}ms;--sd-easing:${t.easing};--sd-delay:${Math.round(i)}ms`},qz=(e,t,n,i)=>{let s=BC(e);s&&jC(s,t,n,i)},Vz=(e,t,n,i,s,l)=>{if(Hg(t))return;let o=i.prevContentLength,c=s.count;s.count+=1;let d=o>0&&c<o,h=d?0:l.baseDelay+s.newIndex++*l.step;jC(e,n,d?0:n.duration,h)},Yz=e=>{var t;for(let n=e.length-1;n>=0;n-=1){let i=e[n];if(mo(i)){if((t=i.properties)!=null&&t["data-sd-animated"])break;i.properties={...i.properties,"data-sd-animated":!0}}}},HC=e=>{let t=[],n="",i=!1;for(let s of e){let l=PC.test(s);if(l!==i&&n){if(l){n+=s,i=!0;continue}t.push(n),n=""}n+=s,i=l}return n&&t.push(n),t},UC=e=>{let t=[],n="";for(let i of e)PC.test(i)?t.length>0&&!jg.test(t.at(-1))?t[t.length-1]+=i:n+=i:(n&&(t.push(n),n=""),t.push(i));return n&&(t.length>0?t[t.length-1]+=n:t.push(n)),t},$z=(e,t,n,i,s,l)=>{let o=`--sd-animation:sd-${t};--sd-duration:${s?0:n}ms;--sd-easing:${i}`;return l&&(o+=`;--sd-delay:${Math.round(l)}ms`),{type:"element",tagName:"span",properties:{"data-sd-animate":!0,style:o},children:[{type:"text",value:e}]}},B2=(e,t)=>!(e>0&&t<e),T0=e=>mo(e)&&Hz.has(e.tagName),Gz=(e,t,n)=>{let i=0,s=0;return id(e,l=>l.type==="text"||T0(l),(l,o)=>{if(Hg(o))return Pa;if(T0(l)){B2(n,s)&&(i+=1),s+=1;return}let c=l.value;if(!c.trim()){s+=c.length;return}let d=t.sep==="char"?UC(c):HC(c);for(let h of d){let m=s;s+=h.length,!jg.test(h)&&B2(n,m)&&(i+=1)}}),i},Kz=(e,t,n,i,s,l)=>{var o;let c=t.at(-1);if(!(c&&"children"in c))return;if(Hg(t))return Pa;let d=c,h=d.children.indexOf(e);if(h===-1)return;let m=e.value;if(!m.trim()){s.count+=m.length;return}let p=n.sep==="char"?UC(m):HC(m),E=i.prevContentLength,y=!1,v=Uz(t),S=!!(v&&!((o=v.properties)!=null&&o["data-sd-animate-marker"])),A=!1,k=p.map(N=>{let w=s.count;if(s.count+=N.length,jg.test(N))return{type:"text",value:N};let D=E>0&&w<E,z=D?0:l.baseDelay+s.newIndex++*l.step;if(y=!0,v&&S&&!A){let L=D?0:n.duration;zz(v,L,z,n.easing),qz(v,n,L,z),A=!0}return $z(N,n.animation,n.duration,n.easing,D,z)});return y&&Yz(t),d.children.splice(h,1,...k),h+k.length},Xz=0;function zC(e){var t,n,i,s,l;let o={animation:(t=e?.animation)!=null?t:"fadeIn",duration:(n=e?.duration)!=null?n:150,easing:(i=e?.easing)!=null?i:"ease",sep:(s=e?.sep)!=null?s:"word",stagger:(l=e?.stagger)!=null?l:40,timeline:e?.timeline},c={committedCharCount:0,prevContentLength:0,lastRenderCharCount:0,pendingMark:null},d=Xz++,h=()=>m=>{var p;let E={count:0,newIndex:0};c.prevContentLength=c.committedCharCount;let y=o.timeline,v=(p=y?.now())!=null?p:MC();y&&(c.pendingMark===null?c.pendingMark=y.mark():y.rewind(c.pendingMark));let S=y?y.take(Gz(m,o,c.prevContentLength),o.stagger,v):{baseDelay:0,step:o.stagger};id(m,A=>A.type==="text"||T0(A),(A,k)=>{if(A.type==="text")return Kz(A,k,o,c,E,S);Vz(A,k,o,c,E,S)}),c.lastRenderCharCount=E.count,c.prevContentLength=0};return Object.defineProperty(h,"name",{value:`rehypeAnimate$${d}`}),{name:"animate",type:"animate",rehypePlugin:h,setPrevContentLength(m){c.committedCharCount=m,c.prevContentLength=m},getLastRenderCharCount(){return c.lastRenderCharCount},commit(){c.committedCharCount=c.lastRenderCharCount,c.pendingMark=null}}}zC();var FC=C.createContext(!1),Qz=()=>C.useContext(FC),bd=(...e)=>mC(J3(e)),Wz=(e,t)=>{if(!e||!t)return t;let n=`${e}:`;return t.split(/\s+/).filter(Boolean).map(i=>i.startsWith(n)?i:`${e}:${i}`).join(" ")},Zz=e=>e?(...t)=>Wz(e,mC(J3(t))):bd,ll=(e,t,n)=>{let i=typeof t=="string"&&n.startsWith("text/csv")?"\uFEFF":"",s=typeof t=="string"?new Blob([i+t],{type:n}):t,l=URL.createObjectURL(s),o=document.createElement("a");o.href=l,o.download=e,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(l)},v0=C.createContext(bd),qe=()=>C.useContext(v0),Jz=8,qC=e=>{if(!(e===void 0||e===0||e===Number.POSITIVE_INFINITY)){if(typeof e=="number")return Number.isFinite(e)&&e>0?`${e}px`:void 0;if(!(e==="0"||e==="none"||e==="Infinity"))return e}},VC=(e,t,n)=>{let i=C.useRef(null),s=C.useRef(!0),l=C.useRef(!1);return C.useEffect(()=>{let o=i.current;if(!(o&&t))return;let c=()=>{let d=o.scrollHeight-o.scrollTop-o.clientHeight<Jz;s.current=d};return o.addEventListener("scroll",c,{passive:!0}),()=>o.removeEventListener("scroll",c)},[t]),C.useEffect(()=>{e&&!l.current&&(s.current=!0),e||(s.current=!0),l.current=e},[e]),C.useEffect(()=>{let o=i.current;o&&t&&e&&s.current&&o.scrollTo({top:o.scrollHeight,behavior:"instant"})},[e,t,n]),i},eF=bd("block"),tF=bd("block","before:content-[counter(line)]","before:inline-block","before:[counter-increment:line]","before:w-6","before:mr-4","before:text-[13px]","before:text-right","before:text-muted-foreground/50","before:font-mono","before:select-none"),nF=e=>{let t={};for(let n of e.split(";")){let i=n.indexOf(":");if(i>0){let s=n.slice(0,i).trim(),l=n.slice(i+1).trim();s&&l&&(t[s]=l)}}return t},rF=C.memo(({children:e,result:t,language:n,className:i,maxHeight:s,startLine:l,lineNumbers:o=!0,...c})=>{let d=qe(),{isAnimating:h}=C.useContext(rn),m=qC(s),p=VC(h,!!m,t),E=C.useMemo(()=>d(tF),[d]),y=C.useMemo(()=>d(eF),[d]),v=C.useMemo(()=>{let S={};return t.bg&&(S["--sdm-bg"]=t.bg),t.fg&&(S["--sdm-fg"]=t.fg),t.rootStyle&&Object.assign(S,nF(t.rootStyle)),S},[t.bg,t.fg,t.rootStyle]);return T.jsx("div",{className:d(i,m?"overflow-y-auto":null,"overflow-x-auto rounded-md border border-border bg-background p-4 text-sm"),"data-language":n,"data-streamdown":"code-block-body",ref:p,style:m?{maxHeight:m}:void 0,...c,children:T.jsx("pre",{className:d(i,"bg-[var(--sdm-bg,inherit)]","dark:bg-[var(--shiki-dark-bg,var(--sdm-bg,inherit))]"),style:v,children:T.jsx("code",{className:o?d("[counter-increment:line_0] [counter-reset:line]"):void 0,style:o&&l&&l>1?{counterReset:`line ${l-1}`}:void 0,children:t.tokens.map((S,A)=>T.jsx("span",{className:o?E:y,children:S.length===0||S.length===1&&S[0].content===""?`
|
|
157
157
|
`:S.map((k,N)=>{let w={},D=!!k.bgColor;if(k.color&&(w["--sdm-c"]=k.color),k.bgColor&&(w["--sdm-tbg"]=k.bgColor),k.htmlStyle)for(let[z,L]of Object.entries(k.htmlStyle))z==="color"?w["--sdm-c"]=L:z==="background-color"?(w["--sdm-tbg"]=L,D=!0):w[z]=L;return T.jsx("span",{className:d("text-[var(--sdm-c,inherit)]","dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]",D&&"bg-[var(--sdm-tbg)]",D&&"dark:bg-[var(--shiki-dark-bg,var(--sdm-tbg))]"),style:w,...k.htmlAttrs,children:k.content},N)})},A))})})})}),iF=({className:e,language:t,style:n,isIncomplete:i,...s})=>{let l=qe();return T.jsx("div",{className:l("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2",e),"data-incomplete":i||void 0,"data-language":t,"data-streamdown":"code-block",style:{contentVisibility:"auto",containIntrinsicSize:"auto 200px",...n},...s})},YC=C.createContext({code:""}),$C=()=>C.useContext(YC),aF=({language:e})=>{let t=qe();return T.jsx("div",{className:t("flex h-8 items-center text-muted-foreground text-xs"),"data-language":e,"data-streamdown":"code-block-header",children:T.jsx("span",{className:t("ml-1 font-mono lowercase"),children:e})})},sF=e=>{let t=e.length;for(;t>0&&e[t-1]===`
|
|
158
|
-
`;)t--;return e.slice(0,t)},lF=C.lazy(()=>a_(()=>import("./highlighted-body-KPVGNVTW-
|
|
158
|
+
`;)t--;return e.slice(0,t)},lF=C.lazy(()=>a_(()=>import("./highlighted-body-KPVGNVTW-DMf8eUNQ.js"),[]).then(e=>({default:e.HighlightedCodeBlockBody}))),uF=({code:e,language:t,className:n,children:i,isIncomplete:s=!1,startLine:l,lineNumbers:o,...c})=>{let d=qe(),{codeBlockMaxHeight:h}=C.useContext(rn),m=C.useMemo(()=>sF(e),[e]),p=C.useMemo(()=>({bg:"transparent",fg:"inherit",tokens:m.split(`
|
|
159
159
|
`).map(E=>[{content:E,color:"inherit",bgColor:"transparent",htmlStyle:{},offset:0}])}),[m]);return T.jsx(YC.Provider,{value:{code:e},children:T.jsxs(iF,{dir:"ltr",isIncomplete:s,language:t,children:[T.jsx(aF,{language:t}),i?T.jsx("div",{className:d("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"),children:T.jsx("div",{className:d("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"),"data-streamdown":"code-block-actions",children:i})}):null,T.jsx(C.Suspense,{fallback:T.jsx(rF,{className:n,language:t,lineNumbers:o,maxHeight:h,result:p,startLine:l,...c}),children:T.jsx(lF,{className:n,code:m,language:t,lineNumbers:o,maxHeight:h,raw:p,startLine:l,...c})})]})})},oF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M15.5607 3.99999L15.0303 4.53032L6.23744 13.3232C5.55403 14.0066 4.44599 14.0066 3.76257 13.3232L4.2929 12.7929L3.76257 13.3232L0.969676 10.5303L0.439346 9.99999L1.50001 8.93933L2.03034 9.46966L4.82323 12.2626C4.92086 12.3602 5.07915 12.3602 5.17678 12.2626L13.9697 3.46966L14.5 2.93933L15.5607 3.99999Z",fill:"currentColor",fillRule:"evenodd"})}),cF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z",fill:"currentColor",fillRule:"evenodd"})}),fF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M8.75 1V1.75V8.68934L10.7197 6.71967L11.25 6.18934L12.3107 7.25L11.7803 7.78033L8.70711 10.8536C8.31658 11.2441 7.68342 11.2441 7.29289 10.8536L4.21967 7.78033L3.68934 7.25L4.75 6.18934L5.28033 6.71967L7.25 8.68934V1.75V1H8.75ZM13.5 9.25V13.5H2.5V9.25V8.5H1V9.25V14C1 14.5523 1.44771 15 2 15H14C14.5523 15 15 14.5523 15 14V9.25V8.5H13.5V9.25Z",fill:"currentColor",fillRule:"evenodd"})}),dF=e=>T.jsxs("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:[T.jsx("path",{d:"M8 0V4",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M8 16V12",opacity:"0.5",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M3.29773 1.52783L5.64887 4.7639",opacity:"0.9",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M12.7023 1.52783L10.3511 4.7639",opacity:"0.1",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M12.7023 14.472L10.3511 11.236",opacity:"0.4",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M3.29773 14.472L5.64887 11.236",opacity:"0.6",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M15.6085 5.52783L11.8043 6.7639",opacity:"0.2",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M0.391602 10.472L4.19583 9.23598",opacity:"0.7",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M15.6085 10.4722L11.8043 9.2361",opacity:"0.3",stroke:"currentColor",strokeWidth:"1.5"}),T.jsx("path",{d:"M0.391602 5.52783L4.19583 6.7639",opacity:"0.8",stroke:"currentColor",strokeWidth:"1.5"})]}),hF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M1 5.25V6H2.5V5.25V2.5H5.25H6V1H5.25H2C1.44772 1 1 1.44772 1 2V5.25ZM5.25 14.9994H6V13.4994H5.25H2.5V10.7494V9.99939H1V10.7494V13.9994C1 14.5517 1.44772 14.9994 2 14.9994H5.25ZM15 10V10.75V14C15 14.5523 14.5523 15 14 15H10.75H10V13.5H10.75H13.5V10.75V10H15ZM10.75 1H10V2.5H10.75H13.5V5.25V6H15V5.25V2C15 1.44772 14.5523 1 14 1H10.75Z",fill:"currentColor",fillRule:"evenodd"})}),mF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M13.5 8C13.5 4.96643 11.0257 2.5 7.96452 2.5C5.42843 2.5 3.29365 4.19393 2.63724 6.5H5.25H6V8H5.25H0.75C0.335787 8 0 7.66421 0 7.25V2.75V2H1.5V2.75V5.23347C2.57851 2.74164 5.06835 1 7.96452 1C11.8461 1 15 4.13001 15 8C15 11.87 11.8461 15 7.96452 15C5.62368 15 3.54872 13.8617 2.27046 12.1122L1.828 11.5066L3.03915 10.6217L3.48161 11.2273C4.48831 12.6051 6.12055 13.5 7.96452 13.5C11.0257 13.5 13.5 11.0336 13.5 8Z",fill:"currentColor",fillRule:"evenodd"})}),pF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z",fill:"currentColor",fillRule:"evenodd"})}),gF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M13.5 10.25V13.25C13.5 13.3881 13.3881 13.5 13.25 13.5H2.75C2.61193 13.5 2.5 13.3881 2.5 13.25L2.5 2.75C2.5 2.61193 2.61193 2.5 2.75 2.5H5.75H6.5V1H5.75H2.75C1.7835 1 1 1.7835 1 2.75V13.25C1 14.2165 1.7835 15 2.75 15H13.25C14.2165 15 15 14.2165 15 13.25V10.25V9.5H13.5V10.25ZM9 1H9.75H14.2495C14.6637 1 14.9995 1.33579 14.9995 1.75V6.25V7H13.4995V6.25V3.56066L8.53033 8.52978L8 9.06011L6.93934 7.99945L7.46967 7.46912L12.4388 2.5H9.75H9V1Z",fill:"currentColor",fillRule:"evenodd"})}),bF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M1.5 6.5C1.5 3.73858 3.73858 1.5 6.5 1.5C9.26142 1.5 11.5 3.73858 11.5 6.5C11.5 9.26142 9.26142 11.5 6.5 11.5C3.73858 11.5 1.5 9.26142 1.5 6.5ZM6.5 0C2.91015 0 0 2.91015 0 6.5C0 10.0899 2.91015 13 6.5 13C8.02469 13 9.42677 12.475 10.5353 11.596L13.9697 15.0303L14.5 15.5607L15.5607 14.5L15.0303 13.9697L11.596 10.5353C12.475 9.42677 13 8.02469 13 6.5C13 2.91015 10.0899 0 6.5 0ZM4.125 5.875H4.75H5.875V4.75V4.125H7.125V4.75V5.875H8.25H8.875V7.125H8.25H7.125V8.25V8.875H5.875V8.25V7.125H4.75H4.125V5.875Z",fill:"currentColor",fillRule:"evenodd"})}),yF=e=>T.jsx("svg",{"aria-hidden":"true",color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:T.jsx("path",{clipRule:"evenodd",d:"M1.5 6.5C1.5 3.73858 3.73858 1.5 6.5 1.5C9.26142 1.5 11.5 3.73858 11.5 6.5C11.5 9.26142 9.26142 11.5 6.5 11.5C3.73858 11.5 1.5 9.26142 1.5 6.5ZM6.5 0C2.91015 0 0 2.91015 0 6.5C0 10.0899 2.91015 13 6.5 13C8.02469 13 9.42677 12.475 10.5353 11.596L13.9697 15.0303L14.5 15.5607L15.5607 14.5L15.0303 13.9697L11.596 10.5353C12.475 9.42677 13 8.02469 13 6.5C13 2.91015 10.0899 0 6.5 0ZM4.125 5.875H4.75H8.25H8.875V7.125H8.25H4.75H4.125V5.875Z",fill:"currentColor",fillRule:"evenodd"})}),Ou={CheckIcon:oF,CopyIcon:cF,DownloadIcon:fF,ExternalLinkIcon:gF,Loader2Icon:dF,Maximize2Icon:hF,RotateCcwIcon:mF,XIcon:pF,ZoomInIcon:bF,ZoomOutIcon:yF},GC=C.createContext(Ou),EF=(e,t)=>{if(e===t)return!0;if(!(e&&t))return e===t;let n=Object.keys(e),i=Object.keys(t);return n.length!==i.length?!1:n.every(s=>e[s]===t[s])},j2=({icons:e,children:t})=>{let n=C.useRef(e),i=C.useRef(e?{...Ou,...e}:Ou);EF(n.current,e)||(n.current=e,i.current=e?{...Ou,...e}:Ou);let s=i.current;return T.jsx(GC.Provider,{value:s,children:t})},gr=()=>C.useContext(GC),KC={copyCode:"Copy Code",downloadFile:"Download file",downloadDiagram:"Download diagram",downloadDiagramAsSvg:"Download diagram as SVG",downloadDiagramAsPng:"Download diagram as PNG",downloadDiagramAsMmd:"Download diagram as MMD",viewFullscreen:"View fullscreen",exitFullscreen:"Exit fullscreen",mermaidFormatSvg:"SVG",mermaidFormatPng:"PNG",mermaidFormatMmd:"MMD",zoomIn:"Zoom in",zoomOut:"Zoom out",resetView:"Reset zoom and pan",copyTable:"Copy table",copyTableAsMarkdown:"Copy table as Markdown",copyTableAsCsv:"Copy table as CSV",copyTableAsTsv:"Copy table as TSV",downloadTable:"Download table",downloadTableAsCsv:"Download table as CSV",downloadTableAsMarkdown:"Download table as Markdown",tableFormatMarkdown:"Markdown",tableFormatCsv:"CSV",tableFormatTsv:"TSV",imageNotAvailable:"Image not available",downloadImage:"Download image",openExternalLink:"Open external link?",externalLinkWarning:"You're about to visit an external website.",close:"Close",copyLink:"Copy link",copied:"Copied",openLink:"Open link"},S0=C.createContext(KC),Ir=()=>C.useContext(S0),_0=({onCopy:e,onError:t,timeout:n=2e3,children:i,className:s,code:l,...o})=>{let c=qe(),[d,h]=C.useState(!1),m=C.useRef(0),{code:p}=$C(),{isAnimating:E}=C.useContext(rn),y=Ir(),v=l??p,S=async()=>{var N;if(typeof window>"u"||!((N=navigator?.clipboard)!=null&&N.writeText)){t?.(new Error("Clipboard API not available"));return}try{d||(await navigator.clipboard.writeText(v),h(!0),e?.(),m.current=window.setTimeout(()=>h(!1),n))}catch(w){t?.(w)}};C.useEffect(()=>()=>{window.clearTimeout(m.current)},[]);let A=gr(),k=d?A.CheckIcon:A.CopyIcon;return T.jsxs(T.Fragment,{children:[T.jsx("button",{"aria-label":y.copyCode,className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),"data-streamdown":"code-block-copy-button",disabled:E,onClick:S,title:y.copyCode,type:"button",...o,children:i??T.jsx(k,{"aria-hidden":"true",size:14})}),d&&T.jsx("output",{"aria-live":"polite",className:"sr-only",children:y.copied})]})},Ug=(e,t,n)=>{if(typeof e=="boolean")return n;let i=e[t];if(typeof i!="object")return n;let s=i.download;return typeof s!="object"?n:s.filename||n},H2={"1c":"1c","1c-query":"1cq",abap:"abap","actionscript-3":"as",ada:"ada",adoc:"adoc","angular-html":"html","angular-ts":"ts",apache:"conf",apex:"cls",apl:"apl",applescript:"applescript",ara:"ara",asciidoc:"adoc",asm:"asm",astro:"astro",awk:"awk",ballerina:"bal",bash:"sh",bat:"bat",batch:"bat",be:"be",beancount:"beancount",berry:"berry",bibtex:"bib",bicep:"bicep",blade:"blade.php",bsl:"bsl",c:"c","c#":"cs","c++":"cpp",cadence:"cdc",cairo:"cairo",cdc:"cdc",clarity:"clar",clj:"clj",clojure:"clj","closure-templates":"soy",cmake:"cmake",cmd:"cmd",cobol:"cob",codeowners:"CODEOWNERS",codeql:"ql",coffee:"coffee",coffeescript:"coffee","common-lisp":"lisp",console:"sh",coq:"v",cpp:"cpp",cql:"cql",crystal:"cr",cs:"cs",csharp:"cs",css:"css",csv:"csv",cue:"cue",cypher:"cql",d:"d",dart:"dart",dax:"dax",desktop:"desktop",diff:"diff",docker:"dockerfile",dockerfile:"dockerfile",dotenv:"env","dream-maker":"dm",edge:"edge",elisp:"el",elixir:"ex",elm:"elm","emacs-lisp":"el",erb:"erb",erl:"erl",erlang:"erl",f:"f","f#":"fs",f03:"f03",f08:"f08",f18:"f18",f77:"f77",f90:"f90",f95:"f95",fennel:"fnl",fish:"fish",fluent:"ftl",for:"for","fortran-fixed-form":"f","fortran-free-form":"f90",fs:"fs",fsharp:"fs",fsl:"fsl",ftl:"ftl",gdresource:"tres",gdscript:"gd",gdshader:"gdshader",genie:"gs",gherkin:"feature","git-commit":"gitcommit","git-rebase":"gitrebase",gjs:"js",gleam:"gleam","glimmer-js":"js","glimmer-ts":"ts",glsl:"glsl",gnuplot:"plt",go:"go",gql:"gql",graphql:"graphql",groovy:"groovy",gts:"gts",hack:"hack",haml:"haml",handlebars:"hbs",haskell:"hs",haxe:"hx",hbs:"hbs",hcl:"hcl",hjson:"hjson",hlsl:"hlsl",hs:"hs",html:"html","html-derivative":"html",http:"http",hxml:"hxml",hy:"hy",imba:"imba",ini:"ini",jade:"jade",java:"java",javascript:"js",jinja:"jinja",jison:"jison",jl:"jl",js:"js",json:"json",json5:"json5",jsonc:"jsonc",jsonl:"jsonl",jsonnet:"jsonnet",jssm:"jssm",jsx:"jsx",julia:"jl",kotlin:"kt",kql:"kql",kt:"kt",kts:"kts",kusto:"kql",latex:"tex",lean:"lean",lean4:"lean",less:"less",liquid:"liquid",lisp:"lisp",lit:"lit",llvm:"ll",log:"log",logo:"logo",lua:"lua",luau:"luau",make:"mak",makefile:"mak",markdown:"md",marko:"marko",matlab:"m",md:"md",mdc:"mdc",mdx:"mdx",mediawiki:"wiki",mermaid:"mmd",mips:"s",mipsasm:"s",mmd:"mmd",mojo:"mojo",move:"move",nar:"nar",narrat:"narrat",nextflow:"nf",nf:"nf",nginx:"conf",nim:"nim",nix:"nix",nu:"nu",nushell:"nu",objc:"m","objective-c":"m","objective-cpp":"mm",ocaml:"ml",pascal:"pas",perl:"pl",perl6:"p6",php:"php",plsql:"pls",po:"po",polar:"polar",postcss:"pcss",pot:"pot",potx:"potx",powerquery:"pq",powershell:"ps1",prisma:"prisma",prolog:"pl",properties:"properties",proto:"proto",protobuf:"proto",ps:"ps",ps1:"ps1",pug:"pug",puppet:"pp",purescript:"purs",py:"py",python:"py",ql:"ql",qml:"qml",qmldir:"qmldir",qss:"qss",r:"r",racket:"rkt",raku:"raku",razor:"cshtml",rb:"rb",reg:"reg",regex:"regex",regexp:"regexp",rel:"rel",riscv:"s",rs:"rs",rst:"rst",ruby:"rb",rust:"rs",sas:"sas",sass:"sass",scala:"scala",scheme:"scm",scss:"scss",sdbl:"sdbl",sh:"sh",shader:"shader",shaderlab:"shader",shell:"sh",shellscript:"sh",shellsession:"sh",smalltalk:"st",solidity:"sol",soy:"soy",sparql:"rq",spl:"spl",splunk:"spl",sql:"sql","ssh-config":"config",stata:"do",styl:"styl",stylus:"styl",svelte:"svelte",swift:"swift","system-verilog":"sv",systemd:"service",talon:"talon",talonscript:"talon",tasl:"tasl",tcl:"tcl",templ:"templ",terraform:"tf",tex:"tex",tf:"tf",tfvars:"tfvars",toml:"toml",ts:"ts","ts-tags":"ts",tsp:"tsp",tsv:"tsv",tsx:"tsx",turtle:"ttl",twig:"twig",typ:"typ",typescript:"ts",typespec:"tsp",typst:"typ",v:"v",vala:"vala",vb:"vb",verilog:"v",vhdl:"vhdl",vim:"vim",viml:"vim",vimscript:"vim",vue:"vue","vue-html":"html","vue-vine":"vine",vy:"vy",vyper:"vy",wasm:"wasm",wenyan:"wy",wgsl:"wgsl",wiki:"wiki",wikitext:"wiki",wit:"wit",wl:"wl",wolfram:"wl",xml:"xml",xsl:"xsl",yaml:"yaml",yml:"yml",zenscript:"zs",zig:"zig",zsh:"zsh",文言:"wy"},xF=({onDownload:e,onError:t,language:n,children:i,className:s,code:l,...o})=>{let c=qe(),{code:d}=$C(),{isAnimating:h,controls:m}=C.useContext(rn),p=Ir(),E=gr(),y=l??d,v=n&&n in H2?H2[n]:"txt",S=`${Ug(m,"code","file")}.${v}`,A="text/plain",k=()=>{try{ll(S,y,A),e?.()}catch(N){t?.(N)}};return T.jsx("button",{"aria-label":p.downloadFile,className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),"data-streamdown":"code-block-download-button",disabled:h,onClick:k,title:p.downloadFile,type:"button",...o,children:i??T.jsx(E.DownloadIcon,{size:14})})},U2=()=>{let{Loader2Icon:e}=gr(),t=qe();return T.jsxs("div",{className:t("w-full divide-y divide-border overflow-hidden rounded-xl border border-border"),children:[T.jsx("div",{className:t("h-[46px] w-full bg-muted/80")}),T.jsx("div",{className:t("flex w-full items-center justify-center p-4"),children:T.jsx(e,{className:t("size-4 animate-spin")})})]})},TF=/\.[^/.]+$/,vF=({node:e,className:t,src:n,alt:i,onLoad:s,onError:l,showControls:o=!0,showDownloadControl:c=!0,...d})=>{let{DownloadIcon:h}=gr(),m=qe(),p=C.useRef(null),[E,y]=C.useState(!1),[v,S]=C.useState(!1),A=Ir(),k=d.width!=null||d.height!=null,N=(E||k)&&!v&&o&&c,w=v&&!k;C.useEffect(()=>{let P=p.current;if(P!=null&&P.complete){let H=P.naturalWidth>0;y(H),S(!H)}},[]);let D=C.useCallback(P=>{y(!0),S(!1),s?.(P)},[s]),z=C.useCallback(P=>{y(!1),S(!0),l?.(P)},[l]),L=async()=>{if(n)try{let P=await(await fetch(n)).blob(),H=new URL(n,window.location.origin).pathname.split("/").pop()||"",K=H.split(".").pop(),j=H.includes(".")&&K!==void 0&&K.length<=4,$="";if(j)$=H;else{let Z=P.type,le="png";Z.includes("jpeg")||Z.includes("jpg")?le="jpg":Z.includes("png")?le="png":Z.includes("svg")?le="svg":Z.includes("gif")?le="gif":Z.includes("webp")&&(le="webp"),$=`${(i||H||"image").replace(TF,"")}.${le}`}ll($,P,P.type)}catch{window.open(n,"_blank")}};return n?T.jsxs("div",{className:m("group relative my-4 inline-block"),"data-streamdown":"image-wrapper",children:[T.jsx("img",{alt:i,className:m("max-w-full rounded-lg",w&&"hidden",t),"data-streamdown":"image",onError:z,onLoad:D,ref:p,src:n,...d}),w&&T.jsx("span",{className:m("text-muted-foreground text-xs italic"),"data-streamdown":"image-fallback",children:A.imageNotAvailable}),o&&T.jsx("div",{className:m("pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"),"data-streamdown":"image-overlay"}),N&&T.jsx("button",{className:m("absolute right-2 bottom-2 flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-background","opacity-0 group-hover:opacity-100"),onClick:L,title:A.downloadImage,type:"button",children:T.jsx(h,{size:14})})]}):null},Fu=0,zg=()=>{Fu+=1,Fu===1&&(document.body.style.overflow="hidden")},Fg=()=>{Fu=Math.max(0,Fu-1),Fu===0&&(document.body.style.overflow="")},SF=({url:e,isOpen:t,onClose:n,onConfirm:i})=>{let{CheckIcon:s,CopyIcon:l,ExternalLinkIcon:o,XIcon:c}=gr(),d=qe(),[h,m]=C.useState(!1),p=Ir(),E=C.useCallback(async()=>{try{await navigator.clipboard.writeText(e),m(!0),setTimeout(()=>m(!1),2e3)}catch{}},[e]),y=C.useCallback(()=>{i(),n()},[i,n]);if(C.useEffect(()=>{if(t){zg();let S=A=>{A.key==="Escape"&&n()};return document.addEventListener("keydown",S),()=>{document.removeEventListener("keydown",S),Fg()}}},[t,n]),!t||typeof document>"u")return null;let v=T.jsx("div",{className:d("fixed inset-0 z-50 flex items-center justify-center bg-background/50 backdrop-blur-sm"),"data-streamdown":"link-safety-modal",onClick:n,onKeyDown:S=>{S.key==="Escape"&&n()},role:"button",tabIndex:0,children:T.jsxs("div",{className:d("relative mx-4 flex w-full max-w-md flex-col gap-4 rounded-xl border bg-background p-6 shadow-lg"),onClick:S=>S.stopPropagation(),onKeyDown:S=>S.stopPropagation(),role:"presentation",children:[T.jsx("button",{className:d("absolute top-4 right-4 rounded-md p-1 text-muted-foreground transition-all hover:bg-muted hover:text-foreground"),onClick:n,title:p.close,type:"button",children:T.jsx(c,{size:16})}),T.jsxs("div",{className:d("flex flex-col gap-2"),children:[T.jsxs("div",{className:d("flex items-center gap-2 font-semibold text-lg"),children:[T.jsx(o,{size:20}),T.jsx("span",{children:p.openExternalLink})]}),T.jsx("p",{className:d("text-muted-foreground text-sm"),children:p.externalLinkWarning})]}),T.jsx("div",{className:d("break-all rounded-md bg-muted p-3 font-mono text-sm",e.length>100&&"max-h-32 overflow-y-auto"),children:e}),T.jsxs("div",{className:d("flex gap-2"),children:[T.jsx("button",{className:d("flex flex-1 items-center justify-center gap-2 rounded-md border bg-background px-4 py-2 font-medium text-sm transition-all hover:bg-muted"),onClick:E,type:"button",children:h?T.jsxs(T.Fragment,{children:[T.jsx(s,{size:14}),T.jsx("span",{children:p.copied})]}):T.jsxs(T.Fragment,{children:[T.jsx(l,{size:14}),T.jsx("span",{children:p.copyLink})]})}),T.jsxs("button",{className:d("flex flex-1 items-center justify-center gap-2 rounded-md bg-primary px-4 py-2 font-medium text-primary-foreground text-sm transition-all hover:bg-primary/90"),onClick:y,type:"button",children:[T.jsx(o,{size:14}),T.jsx("span",{children:p.openLink})]})]})]})});return ra.createPortal(v,document.body)},C0=C.createContext(null),qg=()=>C.useContext(C0),Wq=()=>{var e;let t=qg();return(e=t?.code)!=null?e:null},Vg=()=>{var e;let t=qg();return(e=t?.mermaid)!=null?e:null},_F=e=>{var t;let n=qg();return n!=null&&n.renderers&&e&&(t=n.renderers.find(i=>Array.isArray(i.language)?i.language.includes(e):i.language===e))!=null?t:null},CF=e=>{if(typeof DOMParser>"u"||typeof XMLSerializer>"u")return e;let t=new DOMParser().parseFromString(e,"text/html").querySelector("svg");return t?new XMLSerializer().serializeToString(t):e},AF=(e,t)=>{var n;let i=(n=void 0)!=null?n:5;return new Promise((s,l)=>{let o="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(e))),c=new Image;c.crossOrigin="anonymous",c.onload=()=>{let d=document.createElement("canvas"),h=c.width*i,m=c.height*i;d.width=h,d.height=m;let p=d.getContext("2d");if(!p){l(new Error("Failed to create 2D canvas context for PNG export"));return}p.drawImage(c,0,0,h,m),d.toBlob(E=>{if(!E){l(new Error("Failed to create PNG blob"));return}s(E)},"image/png")},c.onerror=()=>l(new Error("Failed to load SVG image")),c.src=o})},XC=({chart:e,children:t,className:n,onDownload:i,config:s,onError:l})=>{let o=qe(),[c,d]=C.useState(!1),h=C.useRef(null),{isAnimating:m,controls:p}=C.useContext(rn),E=gr(),y=Vg(),v=Ir(),S=Ug(p,"mermaid","diagram"),A=async k=>{try{if(k==="mmd"){let P=`${S}.mmd`;ll(P,e,"text/plain"),d(!1),i?.(k);return}if(!y){l?.(new Error("Mermaid plugin not available"));return}let N=y.getMermaid(s),w=e.split("").reduce((P,H)=>(P<<5)-P+H.charCodeAt(0)|0,0),D=`mermaid-${Math.abs(w)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:z}=await N.render(D,e);if(!z){l?.(new Error("SVG not found. Please wait for the diagram to render."));return}let L=CF(z);if(k==="svg"){let P=`${S}.svg`;ll(P,L,"image/svg+xml"),d(!1),i?.(k);return}if(k==="png"){let P=await AF(L);ll(`${S}.png`,P,"image/png"),i?.(k),d(!1);return}}catch(N){l?.(N)}};return C.useEffect(()=>{let k=N=>{let w=N.composedPath();h.current&&!w.includes(h.current)&&d(!1)};return document.addEventListener("mousedown",k),()=>{document.removeEventListener("mousedown",k)}},[]),T.jsxs("div",{className:o("relative"),ref:h,children:[T.jsx("button",{"aria-label":v.downloadDiagram,className:o("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",n),disabled:m,onClick:()=>d(!c),title:v.downloadDiagram,type:"button",children:t??T.jsx(E.DownloadIcon,{"aria-hidden":"true",size:14})}),c?T.jsxs("div",{className:o("absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg"),children:[T.jsx("button",{"aria-label":v.downloadDiagramAsSvg,className:o("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>A("svg"),title:v.downloadDiagramAsSvg,type:"button",children:v.mermaidFormatSvg}),T.jsx("button",{"aria-label":v.downloadDiagramAsPng,className:o("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>A("png"),title:v.downloadDiagramAsPng,type:"button",children:v.mermaidFormatPng}),T.jsx("button",{"aria-label":v.downloadDiagramAsMmd,className:o("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>A("mmd"),title:v.downloadDiagramAsMmd,type:"button",children:v.mermaidFormatMmd})]}):null]})},kF=({chart:e,config:t,onFullscreen:n,onExit:i,className:s,...l})=>{let{Maximize2Icon:o,XIcon:c}=gr(),d=qe(),[h,m]=C.useState(!1),{isAnimating:p,controls:E}=C.useContext(rn),y=Ir(),v=(()=>{if(typeof E=="boolean")return E;let N=E.mermaid;return N===!1?!1:N===!0||N===void 0?!0:N.panZoom!==!1})(),S=(()=>{if(typeof E=="boolean")return E;let N=E.mermaid;return N===!1?!1:N===!0||N===void 0?!0:N.download!==!1})(),A=(()=>{if(typeof E=="boolean")return E;let N=E.mermaid;return N===!1?!1:N===!0||N===void 0?!0:N.copy!==!1})(),k=()=>{m(!h)};return C.useEffect(()=>{if(h){zg();let N=w=>{w.key==="Escape"&&m(!1)};return document.addEventListener("keydown",N),()=>{document.removeEventListener("keydown",N),Fg()}}},[h]),C.useEffect(()=>{h?n?.():i&&i()},[h,n,i]),T.jsxs(T.Fragment,{children:[T.jsx("button",{className:d("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:p,onClick:k,title:y.viewFullscreen,type:"button",...l,"aria-label":y.viewFullscreen,children:T.jsx(o,{"aria-hidden":"true",size:14})}),h?ra.createPortal(T.jsxs("div",{"aria-label":y.viewFullscreen,"aria-modal":"true",className:d("fixed inset-0 z-50 flex items-center justify-center bg-background/95 backdrop-blur-sm"),"data-streamdown":"mermaid-fullscreen",onClick:k,onKeyDown:N=>{N.key==="Escape"&&k()},role:"dialog",children:[T.jsxs("div",{className:d("absolute top-4 right-4 z-10 flex items-center gap-1"),onClick:N=>N.stopPropagation(),onKeyDown:N=>N.stopPropagation(),role:"presentation",children:[S?T.jsx(XC,{chart:e,config:t}):null,A?T.jsx(_0,{code:e}):null,T.jsx("button",{"aria-label":y.exitFullscreen,className:d("rounded-md p-2 text-muted-foreground transition-all hover:bg-muted hover:text-foreground"),onClick:k,title:y.exitFullscreen,type:"button",children:T.jsx(c,{"aria-hidden":"true",size:20})})]}),T.jsx("div",{className:d("flex size-full items-center justify-center p-4"),onClick:N=>N.stopPropagation(),onKeyDown:N=>N.stopPropagation(),role:"presentation",children:T.jsx(IA,{chart:e,className:d("size-full [&_svg]:h-auto [&_svg]:w-auto"),config:t,fullscreen:!0,showControls:v})})]}),document.body):null]})};function A0(e){var t;if(e.nodeType===Node.TEXT_NODE)return(t=e.textContent)!=null?t:"";if(e.nodeType!==Node.ELEMENT_NODE)return"";let n=e;return n.tagName==="BR"?`
|
|
160
160
|
`:Array.from(n.childNodes).map(A0).join("")}var QC=e=>{let t=[],n=[],i=e.querySelectorAll("thead th");for(let l of i)t.push(A0(l).trim());let s=e.querySelectorAll("tbody tr");for(let l of s){let o=[],c=l.querySelectorAll("td");for(let d of c)o.push(A0(d).trim());n.push(o)}return{headers:t,rows:n}},WC=e=>{var t;if(typeof e!="object")return",";let n=e.table;return typeof n!="object"?",":(t=n.csvSeparator)!=null?t:","},ZC=(e,t=",")=>{let n;t==="auto"?Intl.NumberFormat().format(1.1).includes(",")?n=";":n=",":n=t;let{headers:i,rows:s}=e,l=h=>{let m=!1;for(let p of h)if(p===n||p==='"'||p===`
|
|
161
161
|
`||p==="\r"){m=!0;break}return m?`"${h.replace(/"/g,'""')}"`:h},o=i.length>0?s.length+1:s.length,c=new Array(o),d=0;i.length>0&&(c[d]=i.map(l).join(n),d+=1);for(let h of s)c[d]=h.map(l).join(n),d+=1;return c.join(`
|
|
@@ -187,4 +187,4 @@ ${E}`,s=e.length;break}if(!h.startsWith(`
|
|
|
187
187
|
<!---->
|
|
188
188
|
`);i+=`${o}
|
|
189
189
|
|
|
190
|
-
${p}`,s=e.length;break}return s===0?e:i+e.slice(s)},pq=(e,t)=>{if(!t.length)return e;let n=e;for(let i of t){let s=new RegExp(`(<${i}(?=[\\s>/])[^>]*>)([\\s\\S]*?)(</${i}\\s*>)`,"gi");n=n.replace(s,(l,o,c,d)=>hq(o,c,d)),n=mq(n,i)}return n},gq=/([\\`*_~[\]|])/g,bq=e=>e.replace(gq,"\\$1"),yq=(e,t)=>{if(!t.length)return e;let n=e;for(let i of t){let s=new RegExp(`(<${i}(?=[\\s>/])[^>]*>)([\\s\\S]*?)(</${i}\\s*>)`,"gi");n=n.replace(s,(l,o,c,d)=>{let h=bq(c).replace(/\n\n/g," ");return o+h+d})}return n},Eq=new Set(["blockquote","dd","dt","figcaption","h1","h2","h3","h4","h5","h6","li","p","td","th"]),wA=new Set(["code","kbd","pre","samp","var"]);function NA(e){return e.children.map(t=>t.type==="text"?t.value:t.type==="element"&&!wA.has(t.tagName)?NA(t):"").join("")}function xq(){return e=>{dr(e,"element",t=>{if(wA.has(t.tagName)){t.properties!=null||(t.properties={}),t.properties.dir="ltr";return}Eq.has(t.tagName)&&(t.properties!=null||(t.properties={}),typeof t.properties.dir!="string"&&(t.properties.dir=AA(NA(t))))})}}var RA=e=>e.type==="text"?e.value:"children"in e&&Array.isArray(e.children)?e.children.map(RA).join(""):"",Tq=e=>t=>{if(!e||e.length===0)return;let n=new Set(e.map(i=>i.toLowerCase()));dr(t,"element",i=>{if(n.has(i.tagName.toLowerCase())){let s=RA(i);i.children=s?[{type:"text",value:s}]:[]}})},vq=()=>e=>{dr(e,"code",t=>{var n,i;t.meta&&(t.data=(n=t.data)!=null?n:{},t.data.hProperties={...(i=t.data.hProperties)!=null?i:{},metastring:t.meta})})},Sq=/^[ \t]*<[\w!/?-]/,_q=/(^|\n)[ \t]{4,}(?=<[\w!/?-])/g,Cq=e=>typeof e!="string"||e.length===0||!Sq.test(e)?e:e.replace(_q,"$1"),Q2,W2,Z2,J2,bf={...Da,clobberPrefix:"",protocols:{...Da.protocols,href:[...(W2=(Q2=Da.protocols)==null?void 0:Q2.href)!=null?W2:[],"tel","streamdown"]},attributes:{...Da.attributes,code:[...(J2=(Z2=Da.attributes)==null?void 0:Z2.code)!=null?J2:[],"metastring"]}},w0={raw:o0,sanitize:[u3,bf],harden:[aL,{allowedImagePrefixes:["*"],allowedLinkPrefixes:["*"],allowedProtocols:["*"],defaultOrigin:void 0,allowDataImages:!0}]},Aq={gfm:[C7,{}],codeMeta:vq},ev=Object.values(w0),kq=Object.values(Aq),wq={block:" ▋",circle:" ●"},OA=["github-light","github-dark"],LA={enabled:!0},Nq={codeBlockMaxHeight:400,shikiTheme:OA,controls:!0,isAnimating:!1,lineNumbers:!0,mode:"streaming",mermaid:void 0,linkSafety:LA,tableMaxHeight:300},rn=C.createContext(Nq),DA=C.memo(({content:e,shouldParseIncompleteMarkdown:t,shouldNormalizeHtmlIndentation:n,index:i,isIncomplete:s,dir:l,animatePlugin:o,...c})=>{C.useLayoutEffect(()=>{o?.commit()});let d=typeof e=="string"&&n?Cq(e):e,h=T.jsx(kA,{...c,children:d});return T.jsx(FC.Provider,{value:s,children:l?T.jsx("div",{dir:l,style:{display:"contents"},children:h}):h})},(e,t)=>{if(e.content!==t.content||e.shouldNormalizeHtmlIndentation!==t.shouldNormalizeHtmlIndentation||e.index!==t.index||e.isIncomplete!==t.isIncomplete||e.dir!==t.dir)return!1;if(e.components!==t.components){let n=Object.keys(e.components||{}),i=Object.keys(t.components||{});if(n.length!==i.length||n.some(s=>{var l,o;return((l=e.components)==null?void 0:l[s])!==((o=t.components)==null?void 0:o[s])}))return!1}return!(e.rehypePlugins!==t.rehypePlugins||e.remarkPlugins!==t.remarkPlugins||!!e.animatePlugin!=!!t.animatePlugin)});DA.displayName="Block";var Rq=C.memo(({children:e,mode:t="streaming",dir:n,parseIncompleteMarkdown:i=!0,normalizeHtmlIndentation:s=!1,components:l,rehypePlugins:o=ev,remarkPlugins:c=kq,className:d,shikiTheme:h,mermaid:m,codeBlockMaxHeight:p=400,controls:E=!0,isAnimating:y=!1,tableMaxHeight:v=300,animated:S,BlockComponent:A=DA,parseMarkdownIntoBlocksFn:k=cq,caret:N,plugins:w,remend:D,linkSafety:z=LA,lineNumbers:L=!0,allowedTags:P,literalTagContent:H,translations:K,icons:j,prefix:$,onAnimationStart:Z,onAnimationEnd:le,...ue})=>{let re=C.useId(),V=C.useMemo(()=>Zz($),[$]),Q=C.useRef(null),ae=C.useRef(Z),Ee=C.useRef(le);ae.current=Z,Ee.current=le,C.useEffect(()=>{var ke,Ue,At;if(t==="static")return;let Je=Q.current;if(Q.current=y,Je===null){y&&((ke=ae.current)==null||ke.call(ae));return}y&&!Je?(Ue=ae.current)==null||Ue.call(ae):!y&&Je&&((At=Ee.current)==null||At.call(Ee))},[y,t]);let R=C.useMemo(()=>P?Object.keys(P):[],[P]),U=C.useMemo(()=>{if(typeof e!="string")return"";let ke=t==="streaming"&&i?FB(e,D):e;return H&&H.length>0&&(ke=yq(ke,H)),R.length>0&&(ke=pq(ke,R)),ke},[e,t,i,D,R,H]),X=C.useMemo(()=>k(U),[U,k]),I=C.useMemo(()=>n==="auto"?X.map(AA):void 0,[X,n]),ge=C.useMemo(()=>X.map((ke,Ue)=>`${re}-${Ue}`),[X.length,re]),ye=C.useMemo(()=>S===!0?"true":S?JSON.stringify(S):"",[S]),he=C.useRef(null),Ae=C.useRef([]),Te=C.useRef([]),xe=C.useRef(null),je=C.useRef("");if(ye){if(je.current!==ye){je.current=ye;let ke=ye!=="true"?S.maxBacklogMs:void 0;he.current=P2({maxBacklogMs:ke}),Ae.current=[],Te.current=[]}else he.current||(he.current=P2());y&&he.current&&he.current.beginPass(he.current.now())}else he.current=null,Ae.current=[],Te.current=[],je.current="";C.useLayoutEffect(()=>{var ke;y&&((ke=he.current)==null||ke.commitPass())});let Ne=C.useMemo(()=>{var ke,Ue;return{codeBlockMaxHeight:p,shikiTheme:(Ue=h??((ke=w?.code)==null?void 0:ke.getThemes()))!=null?Ue:OA,controls:E,isAnimating:y,lineNumbers:L,mode:t,mermaid:m,linkSafety:z,tableMaxHeight:v}},[p,h,E,y,L,t,m,z,w?.code,v]),Me=C.useMemo(()=>K?JSON.stringify(K):"",[K]),Ve=C.useMemo(()=>({...KC,...K}),[Me]),rt=C.useMemo(()=>{let{inlineCode:ke,...Ue}=l??{},At={...zF,...Ue};if(ke){let Je=At.code;At.code=Qe=>"data-block"in Qe?Je?C.createElement(Je,Qe):null:C.createElement(ke,Qe)}return At},[l]),ut=C.useMemo(()=>{let ke=[];return w!=null&&w.cjk&&(ke=[...ke,...w.cjk.remarkPluginsBefore]),ke=[...ke,...c],w!=null&&w.cjk&&(ke=[...ke,...w.cjk.remarkPluginsAfter]),w!=null&&w.math&&(ke=[...ke,w.math.remarkPlugin]),ke},[c,w?.math,w?.cjk]),Et=C.useMemo(()=>{var ke;let Ue=o;if(P&&Object.keys(P).length>0&&o===ev){let At={...bf,tagNames:[...(ke=bf.tagNames)!=null?ke:[],...Object.keys(P)],attributes:{...bf.attributes,...P}};Ue=[w0.raw,[u3,At],w0.harden]}return H&&H.length>0&&(Ue=[...Ue,[Tq,H]]),w!=null&&w.math&&(Ue=[...Ue,w.math.rehypePlugin]),n==="auto"&&t==="static"&&(Ue=[...Ue,xq]),Ue},[o,w?.math,P,H,n,t]),Vt=C.useMemo(()=>{if(!y||X.length===0)return!1;let ke=X.at(-1);return F2(ke)||$F(ke)},[y,X]),Ut=C.useMemo(()=>N&&y&&!Vt?{"--streamdown-caret":`"${wq[N]}"`}:void 0,[N,y,Vt]),En=ke=>{let Ue=null;if(he.current&&y){if(!Ae.current[ke]){let Je=ye&&ye!=="true"?S:{},{maxBacklogMs:Qe,...cn}=Je;Ae.current[ke]=zC({...cn,timeline:he.current})}Ue=Ae.current[ke]}xe.current!==Et&&(Te.current=[],xe.current=Et),Ue&&!Te.current[ke]&&(Te.current[ke]=[...Et,Ue.rehypePlugin]);let At=Ue&&Te.current[ke]?Te.current[ke]:Et;return{blockAnimatePlugin:Ue,blockRehypePlugins:At}};return t==="static"?T.jsx(S0.Provider,{value:Ve,children:T.jsx(C0.Provider,{value:w??null,children:T.jsx(rn.Provider,{value:Ne,children:T.jsx(j2,{icons:j,children:T.jsx(v0.Provider,{value:V,children:T.jsx("div",{className:V("space-y-4 whitespace-normal [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",d),dir:n==="auto"?void 0:n,children:T.jsx(kA,{components:rt,rehypePlugins:Et,remarkPlugins:ut,...ue,children:U})})})})})})}):T.jsx(S0.Provider,{value:Ve,children:T.jsx(C0.Provider,{value:w??null,children:T.jsx(rn.Provider,{value:Ne,children:T.jsx(j2,{icons:j,children:T.jsx(v0.Provider,{value:V,children:T.jsxs("div",{className:V("space-y-4 whitespace-normal [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",N&&!Vt?"[&>*:last-child]:after:inline [&>*:last-child]:after:align-baseline [&>*:last-child]:after:content-[var(--streamdown-caret)]":null,d),style:Ut,children:[X.length===0&&N&&y&&T.jsx("span",{}),X.map((ke,Ue)=>{var At;let Je=Ue===X.length-1,Qe=y&&Je&&F2(ke),{blockAnimatePlugin:cn,blockRehypePlugins:Y}=En(Ue);return T.jsx(A,{animatePlugin:cn,components:rt,content:ke,dir:(At=I?.[Ue])!=null?At:n!=="auto"?n:void 0,index:Ue,isIncomplete:Qe,rehypePlugins:Y,remarkPlugins:ut,shouldNormalizeHtmlIndentation:s,shouldParseIncompleteMarkdown:i,...ue},ge[Ue])})]})})})})})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme&&e.isAnimating===t.isAnimating&&e.animated===t.animated&&e.mode===t.mode&&e.plugins===t.plugins&&e.className===t.className&&e.linkSafety===t.linkSafety&&e.lineNumbers===t.lineNumbers&&e.codeBlockMaxHeight===t.codeBlockMaxHeight&&e.tableMaxHeight===t.tableMaxHeight&&e.normalizeHtmlIndentation===t.normalizeHtmlIndentation&&e.literalTagContent===t.literalTagContent&&JSON.stringify(e.translations)===JSON.stringify(t.translations)&&e.prefix===t.prefix&&e.dir===t.dir);Rq.displayName="Streamdown";var Oq=({children:e,className:t,minZoom:n=.5,maxZoom:i=3,zoomStep:s=.1,showControls:l=!0,initialZoom:o=1,fullscreen:c=!1})=>{let{RotateCcwIcon:d,ZoomInIcon:h,ZoomOutIcon:m}=gr(),p=qe(),E=Ir(),y=C.useRef(null),v=C.useRef(null),[S,A]=C.useState(o),[k,N]=C.useState({x:0,y:0}),[w,D]=C.useState(!1),[z,L]=C.useState({x:0,y:0}),[P,H]=C.useState({x:0,y:0}),K=C.useCallback(Q=>{A(ae=>Math.max(n,Math.min(i,ae+Q)))},[n,i]),j=C.useCallback(()=>{K(s)},[K,s]),$=C.useCallback(()=>{K(-s)},[K,s]),Z=C.useCallback(()=>{A(o),N({x:0,y:0})},[o]),le=C.useCallback(Q=>{Q.preventDefault();let ae=Q.deltaY>0?-s:s;K(ae)},[K,s]),ue=C.useCallback(Q=>{if(Q.button!==0||Q.isPrimary===!1)return;D(!0),L({x:Q.clientX,y:Q.clientY}),H(k);let ae=Q.currentTarget;ae instanceof HTMLElement&&ae.setPointerCapture(Q.pointerId)},[k]),re=C.useCallback(Q=>{if(!w)return;Q.preventDefault();let ae=Q.clientX-z.x,Ee=Q.clientY-z.y;N({x:P.x+ae,y:P.y+Ee})},[w,z,P]),V=C.useCallback(Q=>{D(!1);let ae=Q.currentTarget;ae instanceof HTMLElement&&ae.releasePointerCapture(Q.pointerId)},[]);return C.useEffect(()=>{let Q=y.current;if(Q)return Q.addEventListener("wheel",le,{passive:!1}),()=>{Q.removeEventListener("wheel",le)}},[le]),C.useEffect(()=>{let Q=v.current;if(Q&&w)return document.body.style.userSelect="none",Q.addEventListener("pointermove",re,{passive:!1}),Q.addEventListener("pointerup",V),Q.addEventListener("pointercancel",V),()=>{document.body.style.userSelect="",Q.removeEventListener("pointermove",re),Q.removeEventListener("pointerup",V),Q.removeEventListener("pointercancel",V)}},[w,re,V]),T.jsxs("div",{className:p("relative flex flex-col",c?"h-full w-full":"min-h-28 w-full",t),ref:y,style:{cursor:w?"grabbing":"grab"},children:[l?T.jsxs("div",{className:p("absolute z-10 flex flex-col gap-1 rounded-md border border-border bg-background/80 p-1 supports-[backdrop-filter]:bg-background/70 supports-[backdrop-filter]:backdrop-blur-sm",c?"bottom-4 left-4":"bottom-2 left-2"),children:[T.jsx("button",{"aria-label":E.zoomIn,className:p("flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"),disabled:S>=i,onClick:j,title:E.zoomIn,type:"button",children:T.jsx(h,{"aria-hidden":"true",size:16})}),T.jsx("button",{"aria-label":E.zoomOut,className:p("flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"),disabled:S<=n,onClick:$,title:E.zoomOut,type:"button",children:T.jsx(m,{"aria-hidden":"true",size:16})}),T.jsx("button",{"aria-label":E.resetView,className:p("flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"),onClick:Z,title:E.resetView,type:"button",children:T.jsx(d,{"aria-hidden":"true",size:16})})]}):null,T.jsx("div",{className:p("flex-1 origin-center transition-transform duration-150 ease-out",c?"flex h-full w-full items-center justify-center":"flex w-full items-center justify-center"),onPointerDown:ue,ref:v,role:"application",style:{transform:`translate(${k.x}px, ${k.y}px) scale(${S})`,transformOrigin:"center center",touchAction:"none",willChange:"transform"},children:e})]})},IA=({chart:e,className:t,config:n,fullscreen:i=!1,showControls:s=!0})=>{let l=qe(),[o,c]=C.useState(null),[d,h]=C.useState(!1),[m,p]=C.useState(""),[E,y]=C.useState(""),[v,S]=C.useState(0),{mermaid:A}=C.useContext(rn),k=Vg(),N=A?.errorComponent,{shouldRender:w,containerRef:D}=Mz({immediate:i});if(C.useEffect(()=>{if(w){if(!k){c("Mermaid plugin not available. Please add the mermaid plugin to enable diagram rendering.");return}(async()=>{try{c(null),h(!0);let L=k.getMermaid(n),P=e.split("").reduce((j,$)=>(j<<5)-j+$.charCodeAt(0)|0,0),H=`mermaid-${Math.abs(P)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:K}=await L.render(H,e);p(K),y(K)}catch(L){if(!(E||m)){let P=L instanceof Error?L.message:"Failed to render Mermaid chart";c(P)}}finally{h(!1)}})()}},[e,n,v,w,k]),!(w||m||E))return T.jsx("div",{className:l("my-4 min-h-[200px]",t),ref:D});if(d&&!m&&!E)return T.jsx("div",{className:l("my-4 flex justify-center p-4",t),ref:D,children:T.jsxs("div",{className:l("flex items-center space-x-2 text-muted-foreground"),children:[T.jsx("div",{className:l("h-4 w-4 animate-spin rounded-full border-current border-b-2")}),T.jsx("span",{className:l("text-sm"),children:"Loading diagram..."})]})});if(o&&!m&&!E){let L=()=>S(P=>P+1);return N?T.jsx("div",{ref:D,children:T.jsx(N,{chart:e,error:o,retry:L})}):T.jsxs("div",{className:l("rounded-md bg-red-50 p-4",t),ref:D,children:[T.jsxs("p",{className:l("font-mono text-red-700 text-sm"),children:["Mermaid Error: ",o]}),T.jsxs("details",{className:l("mt-2"),children:[T.jsx("summary",{className:l("cursor-pointer text-red-600 text-xs"),children:"Show Code"}),T.jsx("pre",{className:l("mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs"),children:e})]})]})}let z=m||E;return T.jsx("div",{className:l("size-full",t),"data-streamdown":"mermaid",ref:D,children:T.jsx(Oq,{className:l(i?"size-full overflow-hidden":"overflow-hidden",t),fullscreen:i,maxZoom:3,minZoom:.5,showControls:s,zoomStep:.1,children:T.jsx("div",{"aria-label":"Mermaid chart",className:l("flex justify-center",i?"size-full items-center":null),dangerouslySetInnerHTML:{__html:z},role:"img"})})})};const MA=["all","fact","preference","episode","procedure","message"],po={all:"全部",fact:"事实",preference:"偏好",episode:"事件",procedure:"方法",message:"对话"},Lq={all:{title:"全部记忆",description:"一个安静、可检索的空间,保存 Agent 需要记住的事实、偏好和经验。"},timeline:{title:"时间线",description:"按发生和写入时间回看你的记忆。"},archive:{title:"归档",description:"被归档的记忆会集中显示在这里。"},preferences:{title:"偏好与习惯",description:"集中查看 Agent 需要遵循的个人偏好和习惯。"},projects:{title:"Scope 分类",description:"按 scope 分类查看记忆,项目目录名只是其中一种常用值。"},tags:{title:"标签",description:"标签视图将在记忆拥有标签后显示内容。"},settings:{title:"设置",description:"本地存储和界面设置。"},mcp:{title:"MCP 服务",description:"把 Memory One 连接到你的 Agent,查看端点配置和可用工具。"}},PA={all:"/",timeline:"/timeline",archive:"/archive",preferences:"/preferences",projects:"/scopes",tags:"/tags",settings:"/settings",mcp:"/mcp-service"},Dq=Object.fromEntries(Object.entries(PA).map(([e,t])=>[t,e]));function qi(){return null}const ti=U6({component:Pq}),Iq=ti.addChildren([Ui({getParentRoute:()=>ti,path:"/",component:qi}),Ui({getParentRoute:()=>ti,path:"/timeline",component:qi}),Ui({getParentRoute:()=>ti,path:"/archive",component:qi}),Ui({getParentRoute:()=>ti,path:"/preferences",component:qi}),Ui({getParentRoute:()=>ti,path:"/scopes",component:qi}),Ui({getParentRoute:()=>ti,path:"/tags",component:qi}),Ui({getParentRoute:()=>ti,path:"/settings",component:qi}),Ui({getParentRoute:()=>ti,path:"/mcp-service",component:qi})]),Mq=X6({routeTree:Iq}),go={zh:{brandSubtitle:"个人记忆库",workspace:"工作区",collections:"集合",connect:"连接",navAll:"全部记忆",navTimeline:"时间线",navArchive:"归档",navPreferences:"偏好与习惯",navScopes:"Scope 分类",navTags:"标签",navMcp:"MCP 服务",navSettings:"设置",localStorage:"本地存储",memories:"MEMORIES",scopes:"SCOPES",scopesNote:"分类数量",lastSync:"LAST SYNC",justNow:"刚刚",localDatabase:"本地数据库",localOnly:"完全本地",localOnlyDesc:"你的记忆只留在这台设备",newMemory:"新建记忆",search:"搜索记忆...",allScopes:"所有 Scope",reading:"读取中...",countSuffix:"条记忆",sortRecent:"按最近更新排序",sortTimeline:"按发生时间排序",sortGrouped:"按 Scope 分组",globalMemory:"全局记忆",emptyMatch:"这里还没有匹配的记忆",emptyHelp:"试试换一个关键词,或创建一条新的记忆。",loadFailed:"记忆读取失败",retry:"重试",noArchive:"暂无归档记忆",noTags:"暂无标签",settingsManaged:"设置已由本地配置管理",detailEyebrow:"记忆详情",close:"关闭",detailEmpty:"选择一条记忆",detailEmptyDesc:"查看完整内容、来源和元数据",confidence:"置信度",created:"创建时间",updated:"最后更新",source:"来源",agentWritten:"Agent 写入",scope:"Scope",signals:"信号",importance:"重要性",recallCount:"召回次数",times:"次",original:"查看原始记录",switchLanguage:"Switch to English",newMemoryEyebrow:"新建记忆",composerTitle:"保存一条记忆",content:"记忆内容",contentPlaceholder:"例如:用户偏好使用简洁的工具界面。",type:"类型",scopeOptional:"可选,例如:/path/to/project",sourcePlaceholder:"例如:Claude Code / 手动添加",writeLocal:"写入本地 SQLite",cancel:"取消",save:"保存记忆",languageCode:"EN",mcpKicker:"Agent 集成",mcpTitle:"连接你的 Agent",mcpDescription:"Memory One 通过 Streamable HTTP 提供记忆工具。创建一个按工具授权的 Key 后,把带 Authorization Header 的配置加入 MCP 客户端。",mcpOnline:"HTTP 在线",mcpEndpoint:"服务地址",mcpCopyEndpoint:"复制服务地址",transport:"传输方式",auth:"认证",noAuth:"必须使用 Bearer Key",category:"记忆分类",categoryValue:"全局 / 可选 scope",toolsLabel:"可用工具",toolsTitle:"Agent 可以使用的工具",toolsCount:"个工具",http:"HTTP",localMemory:"本地记忆 / 01",serverEndpoint:"服务端点"}},Ju=(e,t)=>e?new Intl.DateTimeFormat(t==="zh"?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(e)):t==="zh"?"未标记时间":"No date";function Pq(){const e=J6({select:R=>R.location.pathname}),t=H0(),n=Dq[e]??"all",[i,s]=C.useState([]),[l,o]=C.useState(null),[c,d]=C.useState(""),[h,m]=C.useState("all"),[p,E]=C.useState("all"),y="zh",[v,S]=C.useState(()=>localStorage.getItem("memory-one-theme")==="dark"),[A,k]=C.useState(!1),[N,w]=C.useState(!1),[D,z]=C.useState(!0),[L,P]=C.useState(!1),[H,K]=C.useState(null),j=async(R=c)=>{z(!0),P(!1);try{const U=R.trim()?`/api/search?query=${encodeURIComponent(R)}`:"/api/memories?limit=100",X=await fetch(U);if(!X.ok)throw new Error("memory_load_failed");s(await X.json())}catch{P(!0)}finally{z(!1)}},$=go[y],Z=po;C.useEffect(()=>{o(null),w(!1),d(""),m(n==="preferences"?"preference":"all"),E("all"),j("")},[n]),C.useEffect(()=>{document.documentElement.dataset.theme=v?"dark":"light",localStorage.setItem("memory-one-theme",v?"dark":"light")},[v]),C.useEffect(()=>{document.documentElement.lang="zh-CN"},[]),C.useEffect(()=>{let R=!0,U;return fetch("/api/version").then(X=>X.ok?X.json():null).then(X=>{!R||!X?.updateAvailable||!X.current||!X.latest||(K({current:X.current,latest:X.latest}),U=window.setTimeout(()=>K(null),3e3))}).catch(()=>{}),()=>{R=!1,U&&window.clearTimeout(U)}},[]),C.useEffect(()=>{const R=U=>{(U.metaKey||U.ctrlKey)&&U.key.toLowerCase()==="k"&&(U.preventDefault(),document.querySelector("#memory-search")?.focus())};return window.addEventListener("keydown",R),()=>window.removeEventListener("keydown",R)},[]);const le=C.useMemo(()=>["all",...new Set(i.map(R=>R.project).filter(Boolean))],[i]),ue=i.filter(R=>n==="archive"||n==="tags"||n==="settings"||n==="mcp"||n==="preferences"&&R.kind!=="preference"||n==="projects"&&!R.project?!1:(h==="all"||R.kind===h)&&(p==="all"||R.project===p)),re=C.useMemo(()=>{const R=new Map;for(const U of ue){const X=U.project??"__global__";R.set(X,[...R.get(X)??[],U])}return[...R.entries()]},[ue]),V={total:i.length,projects:new Set(i.map(R=>R.project).filter(Boolean)).size,preferences:i.filter(R=>R.kind==="preference").length},Q=Lq[n],ae=R=>{t({to:PA[R]})},Ee=async R=>{const X=await(await fetch("/api/memories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({...R,project:R.project||null,source:R.source||null})})).json();s(I=>[X,...I]),o(X),k(!1)};return T.jsxs("div",{className:`app-shell ${n==="mcp"?"app-shell-wide":""}`,children:[H&&T.jsxs("div",{className:"version-notice",role:"status",children:[T.jsx(Dx,{size:14}),T.jsxs("span",{children:["发现新版本 ",H.latest,",当前版本 ",H.current]})]}),T.jsxs("aside",{className:`sidebar ${N?"sidebar-open":""}`,children:[T.jsxs("div",{className:"brand",children:[T.jsx("div",{className:"brand-mark",children:T.jsx(aR,{size:17})}),T.jsxs("div",{children:[T.jsx("strong",{children:"Memory One"}),T.jsx("span",{children:$.brandSubtitle})]}),T.jsx("button",{className:"icon-button mobile-close",onClick:()=>w(!1),title:$.close,children:T.jsx(Cf,{size:17})})]}),T.jsxs(wp,{title:$.workspace,children:[T.jsx(Vi,{icon:T.jsx(iR,{size:17}),label:$.navAll,count:V.total,active:n==="all",onClick:()=>ae("all")}),T.jsx(Vi,{icon:T.jsx(uR,{size:17}),label:$.navTimeline,active:n==="timeline",onClick:()=>ae("timeline")}),T.jsx(Vi,{icon:T.jsx(rR,{size:17}),label:$.navArchive,active:n==="archive",onClick:()=>ae("archive")})]}),T.jsxs(wp,{title:$.collections,children:[T.jsx(Vi,{icon:T.jsx(Dx,{size:17}),label:$.navPreferences,count:V.preferences,active:n==="preferences",onClick:()=>ae("preferences")}),T.jsx(Vi,{icon:T.jsx(Fv,{size:17}),label:$.navScopes,count:V.projects,active:n==="projects",onClick:()=>ae("projects")}),T.jsx(Vi,{icon:T.jsx(Yv,{size:17}),label:$.navTags,active:n==="tags",onClick:()=>ae("tags")})]}),T.jsx(wp,{title:$.connect,children:T.jsx(Vi,{icon:T.jsx(of,{size:17}),label:$.navMcp,active:n==="mcp",onClick:()=>ae("mcp")})}),T.jsxs("div",{className:"sidebar-footer",children:[T.jsxs("div",{className:"storage-status",children:[T.jsx("span",{className:"status-dot"}),$.localStorage,T.jsx("span",{className:"mono",children:"SQLite"})]}),T.jsx(Vi,{icon:T.jsx(gR,{size:17}),label:$.navSettings,active:n==="settings",onClick:()=>ae("settings")})]})]}),N&&T.jsx("button",{className:"sidebar-backdrop",onClick:()=>w(!1),"aria-label":$.close}),T.jsxs("main",{className:"main-content",children:[T.jsxs("header",{className:"topbar",children:[T.jsx("button",{className:"icon-button menu-button",onClick:()=>w(!0),title:"打开菜单","aria-label":"打开菜单",children:T.jsx(dR,{size:19})}),T.jsxs("div",{className:"breadcrumbs",children:[T.jsx("span",{children:$.workspace}),T.jsx(Bp,{size:14}),T.jsx("strong",{children:Q.title})]}),T.jsxs("div",{className:"top-actions",children:[T.jsx("button",{className:"icon-button",onClick:()=>S(R=>!R),title:v?"切换浅色模式":"切换深色模式",children:v?T.jsx(Vv,{size:17}):T.jsx(qv,{size:17})}),T.jsx("div",{className:"avatar",children:"C"})]})]}),T.jsx("div",{className:"content-wrap",children:n==="mcp"?T.jsx(Uq,{language:y}):n==="settings"?T.jsx(Fq,{dark:v,onToggleTheme:()=>S(R=>!R)}):T.jsxs(T.Fragment,{children:[T.jsxs("section",{className:"page-heading",children:[T.jsxs("div",{children:[T.jsxs("div",{className:"heading-kicker",children:[T.jsx("span",{className:"live-dot"}),$.localMemory]}),T.jsx("h1",{children:Q.title}),T.jsx("p",{children:Q.description})]}),T.jsxs("button",{className:"primary-button",onClick:()=>k(!0),children:[T.jsx(mR,{size:17}),$.newMemory]})]}),n!=="timeline"&&T.jsxs("section",{className:"stat-grid",children:[T.jsx(ja,{label:$.memories,value:V.total.toString().padStart(2,"0"),note:"已保存"}),T.jsx(ja,{label:$.scopes,value:V.projects.toString().padStart(2,"0"),note:$.scopesNote}),T.jsx(ja,{label:$.lastSync,value:$.justNow,note:$.localDatabase,date:!0}),T.jsxs("div",{className:"stat-card stat-callout",children:[T.jsx(U0,{size:19}),T.jsxs("div",{children:[T.jsx("strong",{children:$.localOnly}),T.jsx("span",{children:$.localOnlyDesc})]})]})]}),T.jsxs("section",{className:"toolbar",children:[T.jsxs("div",{className:"search-box",children:[T.jsx(pR,{size:17}),T.jsx("input",{id:"memory-search",value:c,onChange:R=>d(R.target.value),onKeyDown:R=>{R.key==="Enter"&&j()},placeholder:$.search}),T.jsxs("kbd",{children:[T.jsx(oR,{size:11}),"K"]})]}),T.jsxs("div",{className:"toolbar-actions",children:[T.jsxs("div",{className:"select-wrap",children:[T.jsx(fR,{size:15}),T.jsx(e0,{value:h,onValueChange:m,options:MA.map(R=>({value:R,label:Z[R]})),ariaLabel:$.type})]}),T.jsx("div",{className:"select-wrap project-select",children:T.jsx(e0,{value:p,onValueChange:E,options:le.map(R=>({value:R,label:R==="all"?$.allScopes:R})),ariaLabel:$.scope})})]})]}),T.jsxs("div",{className:"list-header",children:[T.jsx("span",{children:D?$.reading:`${ue.length}${$.countSuffix}`}),T.jsx("span",{className:"mono",children:n==="timeline"?$.sortTimeline:n==="all"&&p==="all"?$.sortGrouped:$.sortRecent})]}),T.jsxs("section",{className:n==="timeline"?"timeline-list":"memory-list",children:[L&&!D&&T.jsxs("div",{className:"empty-state",children:[T.jsx(Lx,{size:28}),T.jsx("strong",{children:$.loadFailed}),T.jsx("button",{className:"ghost-button",onClick:()=>{j()},children:$.retry})]}),!L&&!D&&ue.length===0&&T.jsxs("div",{className:"empty-state",children:[T.jsx(Lx,{size:28}),T.jsx("strong",{children:n==="archive"?$.noArchive:n==="tags"?$.noTags:n==="settings"?$.settingsManaged:$.emptyMatch}),T.jsx("span",{children:n==="archive"||n==="tags"||n==="settings"?Q.description:$.emptyHelp})]}),!L&&n==="timeline"&&T.jsx(Hq,{items:ue,selectedId:l?.id,onSelect:o,language:y}),!L&&n!=="timeline"&&(n==="all"&&p==="all"?re.map(([R,U])=>T.jsxs("div",{className:"memory-group",children:[T.jsxs("div",{className:"memory-group-header",children:[T.jsx("span",{children:R==="__global__"?$.globalMemory:R}),T.jsx("span",{className:"mono",children:U.length.toString().padStart(2,"0")})]}),U.map(X=>T.jsx(tv,{item:X,selected:l?.id===X.id,onClick:()=>o(X),language:y},X.id))]},R)):ue.map(R=>T.jsx(tv,{item:R,selected:l?.id===R.id,onClick:()=>o(R),language:y},R.id)))]})]})})]}),n!=="mcp"&&T.jsxs("aside",{className:`detail-panel ${l?"detail-open":""}`,children:[T.jsxs("div",{className:"detail-header",children:[T.jsx("span",{className:"eyebrow",children:$.detailEyebrow}),l&&T.jsx("button",{className:"icon-button",onClick:()=>o(null),title:$.close,children:T.jsx(Cf,{size:17})})]}),l?T.jsx(zq,{item:l,language:y}):T.jsxs("div",{className:"detail-empty",children:[T.jsx("div",{className:"detail-icon",children:T.jsx(zv,{size:20})}),T.jsx("strong",{children:$.detailEmpty}),T.jsx("span",{children:$.detailEmptyDesc})]})]}),A&&T.jsx(qq,{onClose:()=>k(!1),onCreate:Ee,language:y}),T.jsx(jv,{})]})}function wp({title:e,children:t}){return T.jsxs("div",{className:"sidebar-section",children:[T.jsx("span",{className:"eyebrow",children:e}),t]})}function Vi({icon:e,label:t,count:n,active:i,onClick:s}){return T.jsxs("button",{className:`nav-item ${i?"active":""}`,onClick:s,"aria-current":i?"page":void 0,children:[e,T.jsx("span",{children:t}),n!==void 0&&T.jsx("b",{children:n})]})}const Xs=[["memory_store","Store durable memory with optional scope.","保存一条持久记忆,可选 scope 分类。"],["memory_search","Search memories with SQLite FTS5 and an optional scope filter.","使用 SQLite FTS5 搜索记忆,可按 scope 筛选。"],["memory_get_context","Retrieve relevant experience before every task.","在每项任务开始前检索相关经验。"],["memory_get","Get one memory by ID.","按 ID 获取单条记忆。"],["memory_list","List memories with an optional scope filter.","列出记忆,可按 scope 筛选。"],["memory_update","Update a memory or its metadata.","更新记忆内容或元数据。"],["memory_delete","Soft-delete a memory.","软删除一条记忆。"],["memory_feedback","Record whether a memory was useful.","记录记忆是否有帮助的相关性信号。"]];function Bq(e,t){if(!e)return t==="zh"?"未标记日期":"Undated";const n=new Date(e);return Number.isNaN(n.getTime())?t==="zh"?"未标记日期":"Undated":new Intl.DateTimeFormat(t==="zh"?"zh-CN":"en-US",{year:"numeric",month:"long",day:"numeric",weekday:"short"}).format(n)}function jq(e,t){if(!e)return t==="zh"?"未标记时间":"No time";const n=new Date(e);return Number.isNaN(n.getTime())?t==="zh"?"未标记时间":"No time":new Intl.DateTimeFormat(t==="zh"?"zh-CN":"en-US",{hour:"2-digit",minute:"2-digit"}).format(n)}function Hq({items:e,selectedId:t,onSelect:n,language:i}){const s=C.useMemo(()=>{const l=[...e].sort((c,d)=>{const h=new Date(c.occurred_at??c.created_at).getTime();return new Date(d.occurred_at??d.created_at).getTime()-h}),o=new Map;for(const c of l){const d=c.occurred_at??c.created_at,h=d?new Date(d):null,m=h&&!Number.isNaN(h.getTime())?h.toISOString().slice(0,10):"undated";o.set(m,[...o.get(m)??[],c])}return[...o.entries()]},[e]);return T.jsx("div",{className:"timeline-stream",children:s.map(([l,o])=>T.jsxs("section",{className:"timeline-day",children:[T.jsxs("header",{className:"timeline-day-heading",children:[T.jsx("time",{children:Bq(l==="undated"?null:l,i)}),T.jsxs("span",{className:"mono",children:[o.length.toString().padStart(2,"0")," 条"]})]}),T.jsx("div",{className:"timeline-day-items",children:o.map(c=>{const d=c.occurred_at??c.created_at;return T.jsxs("button",{className:`timeline-event ${t===c.id?"selected":""}`,onClick:()=>n(c),children:[T.jsx("span",{className:"timeline-event-rail","aria-hidden":"true",children:T.jsx("span",{className:"timeline-dot"})}),T.jsxs("span",{className:"timeline-event-body",children:[T.jsxs("span",{className:"timeline-event-meta",children:[T.jsx("span",{className:`kind-badge kind-${c.kind}`,children:po[c.kind]??c.kind}),T.jsx("time",{children:jq(d,i)})]}),T.jsx("strong",{children:c.content}),T.jsxs("span",{className:"timeline-event-context",children:[c.project??c.scope,T.jsx("span",{"aria-hidden":"true",children:"·"}),c.source??"Agent 写入"]})]})]},c.id)})})]},l))})}function Uq({language:e}){const t=go[e],[n,i]=C.useState(null),[s,l]=C.useState(null),[o,c]=C.useState(null),[d,h]=C.useState(null),[m,p]=C.useState(!1),[E,y]=C.useState(""),[v,S]=C.useState(null),[A,k]=C.useState(""),[N,w]=C.useState(!1),[D,z]=C.useState(""),[L,P]=C.useState([]),[H,K]=C.useState(""),[j,$]=C.useState(Xs.map(([Y])=>Y)),[Z,le]=C.useState(null),[ue,re]=C.useState(!1),[V,Q]=C.useState(""),[ae,Ee]=C.useState(!1),[R,U]=C.useState(null),[X,I]=C.useState(null),[ge,ye]=C.useState(""),[he,Ae]=C.useState("connection"),Te=typeof window<"u"&&window.location.hostname?window.location.hostname:"127.0.0.1",xe=typeof window<"u"?window.location.port:"",Ne=`http://${Te}:${xe==="5173"||!xe?"8765":xe}/mcp/`,Me=new Map(o?.tools.map(Y=>[Y.tool_name,Y.calls])??[]),Ve=o?.total_calls?Math.round(o.successful_calls/o.total_calls*100):0;C.useEffect(()=>{fetch("/api/mcp/config").then(Y=>Y.json()).then(Y=>U(Y.use_bearer_key!==!1)),fetch("/api/mcp/stats").then(Y=>Y.json()).then(c),fetch("/api/integrations/codex").then(Y=>Y.json()).then(h),fetch(`/api/integrations/codex/mcp?endpoint=${encodeURIComponent(Ne)}`).then(Y=>Y.json()).then(S),fetch("/api/mcp/keys").then(Y=>Y.json()).then(P)},[]),C.useEffect(()=>{const Y=L.filter(de=>de.secret);v?.configured_key_id?k(v.configured_key_id):Y.some(de=>de.id===A)||k(Y[0]?.id??"")},[v,A,L]);const rt=async Y=>{U(Y),await fetch("/api/mcp/config",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({use_bearer_key:Y})});const de=await fetch(`/api/integrations/codex/mcp?endpoint=${encodeURIComponent(Ne)}`);S(await de.json())},ut=async(Y,de)=>{try{if(!navigator.clipboard)throw new Error("clipboard_unavailable");await navigator.clipboard.writeText(Y),i(de),l("已复制到剪贴板"),window.setTimeout(()=>i(null),1500),window.setTimeout(()=>l(null),2200)}catch{l("复制失败,请手动复制"),window.setTimeout(()=>l(null),2600)}},Et=async()=>{p(!0),y("");try{const Y=await fetch("/api/integrations/codex/install",{method:"POST"});if(!Y.ok)throw new Error("install_failed");h(await Y.json()),y("全局指令已写入。重新启动 Codex 或开启新会话后生效。")}catch{y("写入失败,请检查 Codex 配置目录的访问权限。")}finally{p(!1)}},Vt=async()=>{w(!0),z("");try{const Y=await fetch("/api/integrations/codex/mcp/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({endpoint:Ne,...R===!0?{key_id:A}:{}})});if(!Y.ok)throw new Error("install_failed");S(await Y.json()),z("Codex MCP 配置已写入。重新启动 Codex 或开启新会话后生效。")}catch{z(R===!0?"配置失败,请检查 Codex 配置目录和 MCP Key。":"配置失败,请检查 Codex 配置目录。")}finally{w(!1)}},Ut=async()=>{re(!0),Q("");try{const Y=await fetch("/api/mcp/keys",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:H.trim()||"未命名 Key",allowed_tools:j})});if(!Y.ok)throw new Error("create_key_failed");const de=await Y.json();P(we=>[de.key_record,...we]),le(de.key),K("")}catch{Q("Key 创建失败,请稍后重试。")}finally{re(!1)}},En=async Y=>{const de=L.find(De=>De.id===Y);!de||!window.confirm(`确定删除 Key“${de.name}”吗?删除后将立即失效,且无法恢复。`)||!(await fetch(`/api/mcp/keys/${Y}`,{method:"DELETE"})).ok||P(De=>De.filter(We=>We.id!==Y))},ke=async Y=>{const de=await fetch(`/api/mcp/keys/${Y}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({name:ge})});if(!de.ok)return;const we=await de.json();P(De=>De.map(We=>We.id===Y?we:We)),I(null)},Ue=Z?JSON.stringify({mcpServers:{"memory-one":{type:"http",url:Ne,headers:{Authorization:`Bearer ${Z}`}}}},null,2):"",At=d?.status==="configured"?"已配置":d?.status==="update_available"?"可更新":"未配置",Je=d?.status==="update_available"?"更新全局指令":"启用全局记忆",Qe=v?.status==="configured"&&(R!==!0||v.configured_key_id===A),cn=v?.status==="configured"?"已配置":v?.status==="update_available"?"需更新":"未配置";return T.jsxs("div",{className:`mcp-page ${R===null?"mcp-loading":""}`,children:[s?T.jsxs("div",{className:`copy-feedback ${s.startsWith("复制失败")?"error":""}`,role:"status",children:[s.startsWith("复制失败")?T.jsx(lR,{size:14}):T.jsx(el,{size:14}),s]}):null,T.jsx("div",{className:"mcp-navigation",children:T.jsxs("nav",{className:"mcp-tabs",role:"tablist","aria-label":"MCP 页面",children:[T.jsxs("button",{className:he==="connection"?"active":"",role:"tab","aria-selected":he==="connection",onClick:()=>Ae("connection"),children:[T.jsx(of,{size:15}),"连接配置"]}),T.jsxs("button",{className:he==="usage"?"active":"",role:"tab","aria-selected":he==="usage",onClick:()=>Ae("usage"),children:[T.jsx(Ox,{size:15}),"调用统计"]})]})}),he==="connection"&&T.jsxs("div",{className:"mcp-grid",role:"tabpanel",children:[T.jsxs("section",{className:"mcp-panel mcp-endpoint",children:[T.jsxs("div",{className:"mcp-panel-header",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:t.serverEndpoint}),T.jsx("h2",{children:t.mcpEndpoint})]}),T.jsx("button",{className:"icon-button",onClick:()=>ut(Ne,"endpoint"),title:t.mcpCopyEndpoint,children:n==="endpoint"?T.jsx(el,{size:16}):T.jsx($m,{size:16})})]}),T.jsx("div",{className:"endpoint-value",children:Ne}),T.jsxs("div",{className:"endpoint-compact-meta",children:[T.jsxs("span",{children:[T.jsx("i",{className:"status-dot"}),"Streamable HTTP"]}),T.jsxs("label",{className:"switch-label",children:[T.jsx("span",{children:"Bearer Key"}),T.jsx("input",{type:"checkbox",checked:R===!0,disabled:R===null,onChange:Y=>rt(Y.target.checked)}),T.jsx("i",{})]})]})]}),T.jsx("section",{className:"mcp-panel codex-mcp-panel",children:T.jsxs("div",{className:"codex-compact-list",children:[T.jsxs("section",{className:"codex-compact-row",children:[T.jsxs("div",{className:"codex-compact-copy",children:[T.jsxs("div",{className:"codex-compact-title",children:[T.jsx("strong",{children:"MCP 连接"}),T.jsx("span",{className:`integration-status status-${v?.status??"loading"}`,children:v?cn:"检测中"})]}),T.jsx("p",{children:R===!0?"选择 Key 后自动写入连接配置。":R===!1?"自动写入连接配置。":"正在读取认证状态。"}),D?T.jsx("div",{className:"integration-message",role:"status",children:D}):null]}),T.jsxs("div",{className:"codex-compact-actions",children:[R===!0?T.jsxs("select",{"aria-label":"MCP Key",value:A,onChange:Y=>k(Y.target.value),disabled:!L.some(Y=>Y.secret),children:[L.filter(Y=>Y.secret).map(Y=>T.jsxs("option",{value:Y.id,children:[Y.name," · ",Y.prefix,"••••"]},Y.id)),L.some(Y=>Y.secret)?null:T.jsx("option",{value:"",children:"请先创建 MCP Key"})]}):null,T.jsxs("button",{className:"primary-button",disabled:R===null||!v||R===!0&&!A||N||Qe,onClick:()=>{Vt()},children:[N?T.jsx(Gm,{className:"spin",size:16}):T.jsx(of,{size:16}),Qe?"已配置":v?.status==="not_configured"?"配置":"更新"]})]})]}),T.jsxs("section",{className:"codex-compact-row",children:[T.jsxs("div",{className:"codex-compact-copy",children:[T.jsxs("div",{className:"codex-compact-title",children:[T.jsx("strong",{children:"任务前置记忆"}),T.jsx("span",{className:`integration-status status-${d?.status??"loading"}`,children:d?At:"读取中"})]}),T.jsx("p",{children:"让 Codex 在每项任务开始前读取相关经验。"}),E?T.jsx("div",{className:"integration-message",role:"status",children:E}):null]}),T.jsxs("button",{className:"primary-button",disabled:!d||m||d.status==="configured",onClick:Et,children:[m?T.jsx(Gm,{className:"spin",size:16}):T.jsx(cR,{size:16}),d?.status==="configured"?"已启用":Je]})]})]})}),R===!0&&T.jsxs("section",{className:"mcp-keys",role:"region","aria-label":"Key 管理",children:[T.jsxs("div",{className:"mcp-tools-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"访问控制"}),T.jsx("h2",{children:"MCP Key 管理"})]}),T.jsx(jc,{size:18})]}),T.jsx("p",{className:"mcp-key-note",children:"为平台 Agent、Codex 或其他 MCP 客户端创建独立 Key,并按最小权限限制它可以调用的工具。"}),T.jsx("div",{className:"mcp-key-create",children:T.jsxs("button",{className:"primary-button",onClick:()=>Ee(!0),children:[T.jsx(jc,{size:15}),"创建 Key"]})}),Z?T.jsxs("div",{className:"mcp-key-secret",children:[T.jsx("strong",{children:"Key 已创建,可随时在下方再次复制"}),T.jsx("code",{children:Z}),T.jsxs("div",{children:[T.jsx("button",{className:"icon-button",onClick:()=>ut(Ue,"key-config"),title:"复制带 Key 的 MCP 配置",children:n==="key-config"?T.jsx(el,{size:16}):T.jsx($m,{size:16})}),T.jsx("span",{children:n==="key-config"?"已复制配置":"复制带 Authorization Header 的配置"})]})]}):null,T.jsx("div",{className:"mcp-key-list",children:L.length?L.map(Y=>T.jsxs("div",{className:"mcp-key-row",children:[T.jsx(jc,{size:15}),T.jsxs("div",{children:[X===Y.id?T.jsx("input",{className:"mcp-key-name-input",autoFocus:!0,value:ge,onChange:de=>ye(de.target.value),onKeyDown:de=>{de.key==="Enter"&&ke(Y.id),de.key==="Escape"&&I(null)},onBlur:()=>{ke(Y.id)}}):T.jsx("strong",{children:Y.name}),T.jsxs("code",{children:[Y.prefix,"••••••••"]}),T.jsxs("span",{children:[Y.allowed_tools.length?`可用工具 ${Y.allowed_tools.length}/${Xs.length}`:"可调用全部工具",Y.last_used_at?` · 最近使用 ${Ju(Y.last_used_at,e)}`:" · 尚未使用"]}),T.jsx("div",{className:"tool-chip-list key-tool-list",children:(Y.allowed_tools.length?Y.allowed_tools:Xs.map(([de])=>de)).map(de=>T.jsx("span",{className:"tool-chip",children:de},de))})]}),T.jsxs("div",{className:"mcp-key-actions",children:[Y.secret?T.jsx("button",{className:"icon-button",onClick:()=>ut(Y.secret,`key-${Y.id}`),title:"复制 Key",children:n===`key-${Y.id}`?T.jsx(el,{size:14}):T.jsx($m,{size:14})}):null,T.jsx("button",{className:"icon-button",onClick:()=>{I(Y.id),ye(Y.name)},title:"修改名称",children:T.jsx(hR,{size:14})}),T.jsx("button",{className:"ghost-button",onClick:()=>{En(Y.id)},children:"删除"})]})]},Y.id)):T.jsx("p",{className:"mcp-key-empty",children:"还没有创建 Key。"})})]})]}),ae&&T.jsx("div",{className:"modal-backdrop",role:"presentation",onMouseDown:Y=>{Y.target===Y.currentTarget&&Ee(!1)},children:T.jsxs("section",{className:"key-create-modal",role:"dialog","aria-modal":"true","aria-label":"创建 MCP Key",children:[T.jsxs("div",{className:"composer-header",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"访问控制"}),T.jsx("h2",{children:"创建 MCP Key"})]}),T.jsx("button",{className:"icon-button",onClick:()=>Ee(!1),title:"关闭",children:T.jsx(Cf,{size:18})})]}),T.jsxs("label",{className:"config-field",children:[T.jsx("span",{children:"Key 名称"}),T.jsx("input",{autoFocus:!0,value:H,onChange:Y=>K(Y.target.value),placeholder:"例如:平台 Agent"})]}),T.jsxs("div",{className:"mcp-key-tools",children:[T.jsx("span",{className:"key-tools-label",children:"允许调用的工具"}),T.jsx("div",{className:"key-tools-grid",children:Xs.map(([Y])=>T.jsxs("label",{children:[T.jsx("input",{type:"checkbox",checked:j.includes(Y),onChange:de=>$(we=>de.target.checked?[...we,Y]:we.filter(De=>De!==Y))}),Y]},Y))})]}),T.jsxs("div",{className:"modal-actions",children:[T.jsx("button",{className:"ghost-button",onClick:()=>Ee(!1),children:"取消"}),T.jsxs("button",{className:"primary-button",onClick:()=>{Ut(),Ee(!1)},disabled:ue||j.length===0,children:[ue?T.jsx(Gm,{className:"spin",size:15}):T.jsx(jc,{size:15}),"创建 Key"]})]}),V?T.jsx("p",{className:"integration-message",role:"alert",children:V}):null]})}),he==="usage"&&T.jsxs(T.Fragment,{children:[T.jsxs("section",{className:"mcp-usage",role:"tabpanel",children:[T.jsxs("div",{className:"mcp-tools-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"调用统计"}),T.jsx("h2",{children:"工具使用情况"})]}),T.jsx(Ox,{size:18})]}),T.jsxs("div",{className:"mcp-metrics",children:[T.jsx(ja,{label:"TOTAL CALLS",value:o?String(o.total_calls):"--",note:"累计调用"}),T.jsx(ja,{label:"SUCCESS RATE",value:o?.total_calls?`${Ve}%`:"--",note:o?`${o.failed_calls} 次失败`:"读取中"}),T.jsx(ja,{label:"AVG LATENCY",value:o?.total_calls?`${o.average_duration_ms} ms`:"--",note:"平均处理耗时"}),T.jsx(ja,{label:"LAST CALL",value:o?.last_called_at?Ju(o.last_called_at,e):"暂无",note:"最近一次调用",date:!0})]})]}),T.jsxs("section",{className:"mcp-tools",children:[T.jsxs("div",{className:"mcp-tools-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:t.toolsLabel}),T.jsx("h2",{children:t.toolsTitle})]}),T.jsxs("span",{className:"tool-count",children:[Xs.length," ",t.toolsCount]})]}),T.jsx("div",{className:"tool-list",children:Xs.map(([Y,de,we])=>T.jsxs("article",{className:"tool-row",children:[T.jsx("div",{className:"tool-icon",children:T.jsx(of,{size:15})}),T.jsxs("div",{children:[T.jsx("strong",{children:Y}),T.jsx("span",{children:e==="zh"?we:de})]}),T.jsxs("div",{className:"tool-meta",children:[T.jsxs("code",{children:[Me.get(Y)??0," 次"]}),T.jsx("code",{children:t.http})]})]},Y))})]})]})]})}function ja({label:e,value:t,note:n,date:i}){return T.jsxs("div",{className:"stat-card",children:[T.jsx("span",{className:"stat-label",children:e}),T.jsx("strong",{className:i?"stat-date":"",children:t}),T.jsx("span",{className:"stat-note",children:n})]})}function tv({item:e,selected:t,onClick:n,language:i}){const s=go[i],l=po,o=Math.round(e.confidence*100);return T.jsxs("button",{className:`memory-card ${t?"selected":""}`,onClick:n,children:[T.jsxs("div",{className:"card-top",children:[T.jsx("span",{className:`kind-badge kind-${e.kind}`,children:l[e.kind]??e.kind}),T.jsx("span",{className:"card-date",children:Ju(e.occurred_at??e.created_at,i)})]}),T.jsx("p",{children:e.content}),T.jsxs("div",{className:"card-bottom",children:[T.jsx("span",{children:e.project?T.jsxs(T.Fragment,{children:[T.jsx(Fv,{size:13}),e.project]}):T.jsxs(T.Fragment,{children:[T.jsx(Yv,{size:13}),e.scope]})}),T.jsxs("span",{className:"recall-count",children:[e.recall_count??0," 次召回"]}),T.jsxs("span",{className:"confidence",children:[T.jsx("span",{className:"confidence-meter",children:T.jsx("i",{style:{width:`${o}%`}})}),T.jsx("span",{children:s.confidence}),T.jsxs("span",{children:[o,"%"]})]})]})]})}function zq({item:e,language:t}){const n=go[t],i=po;return T.jsxs("div",{className:"detail-body",children:[T.jsx("div",{className:`detail-kind kind-badge kind-${e.kind}`,children:i[e.kind]??e.kind}),T.jsx("h2",{children:e.content}),T.jsxs("div",{className:"detail-meta",children:[T.jsxs("div",{children:[T.jsx("span",{children:n.created}),T.jsx("strong",{children:Ju(e.created_at,t)})]}),T.jsxs("div",{children:[T.jsx("span",{children:n.updated}),T.jsx("strong",{children:Ju(e.updated_at,t)})]}),T.jsxs("div",{children:[T.jsx("span",{children:n.source}),T.jsx("strong",{children:e.source??n.agentWritten})]}),T.jsxs("div",{children:[T.jsx("span",{children:n.recallCount}),T.jsxs("strong",{children:[e.recall_count??0," ",n.times]})]})]}),T.jsxs("div",{className:"detail-section",children:[T.jsx("span",{className:"eyebrow",children:n.scope}),T.jsxs("div",{className:"scope-value",children:[T.jsx(U0,{size:15}),e.scope,e.project&&T.jsxs(T.Fragment,{children:[T.jsx("span",{children:"/"}),e.project]})]})]}),T.jsxs("div",{className:"detail-section",children:[T.jsx("span",{className:"eyebrow",children:n.signals}),T.jsx(nv,{label:n.importance,value:e.importance,language:t}),T.jsx(nv,{label:n.confidence,value:e.confidence,language:t})]})]})}function nv({label:e,value:t,language:n}){return T.jsxs("div",{className:"signal-row",children:[T.jsx("span",{children:e}),T.jsx("div",{className:"signal-track",children:T.jsx("span",{style:{width:`${Math.round(t*100)}%`}})}),T.jsxs("b",{children:[Math.round(t*100),"%"]})]})}function Fq({dark:e,onToggleTheme:t}){return T.jsxs("div",{className:"settings-page",children:[T.jsx("section",{className:"page-heading",children:T.jsxs("div",{children:[T.jsxs("div",{className:"heading-kicker",children:[T.jsx("span",{className:"live-dot"}),"本地工作区"]}),T.jsx("h1",{children:"设置"}),T.jsx("p",{children:"调整界面显示,并查看当前数据存储位置。"})]})}),T.jsxs("section",{className:"config-panel settings-panel",children:[T.jsxs("div",{className:"config-panel-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"APPEARANCE"}),T.jsx("h2",{children:"界面显示"})]}),e?T.jsx(qv,{size:19}):T.jsx(Vv,{size:19})]}),T.jsxs("div",{className:"settings-row",children:[T.jsxs("span",{children:[T.jsx("strong",{children:"深色模式"}),T.jsx("small",{children:"在浅色和深色界面之间切换。"})]}),T.jsx("button",{className:"ghost-button",onClick:t,children:e?"切换浅色":"切换深色"})]})]}),T.jsxs("section",{className:"config-panel settings-panel",children:[T.jsxs("div",{className:"config-panel-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"STORAGE"}),T.jsx("h2",{children:"本地存储"})]}),T.jsx(U0,{size:19})]}),T.jsxs("div",{className:"settings-storage",children:[T.jsx("span",{className:"status-dot"}),T.jsx("strong",{children:"SQLite"}),T.jsx("span",{children:"记忆仅保存在当前设备。"})]})]})]})}function qq({onClose:e,onCreate:t,language:n}){const i=go[n],s=po,[l,o]=C.useState(""),[c,d]=C.useState("fact"),[h,m]=C.useState(""),[p,E]=C.useState("");return C.useEffect(()=>{const y=v=>{v.key==="Escape"&&e()};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[e]),T.jsx("div",{className:"modal-backdrop",onMouseDown:y=>{y.target===y.currentTarget&&e()},children:T.jsxs("div",{className:"composer",role:"dialog","aria-modal":"true","aria-labelledby":"composer-title",children:[T.jsxs("div",{className:"composer-header",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:i.newMemoryEyebrow}),T.jsx("h2",{id:"composer-title",children:i.composerTitle})]}),T.jsx("button",{className:"icon-button",onClick:e,title:i.close,children:T.jsx(Cf,{size:18})})]}),T.jsxs("label",{children:[i.content,T.jsx("textarea",{autoFocus:!0,value:l,onChange:y=>o(y.target.value),placeholder:i.contentPlaceholder,rows:5})]}),T.jsxs("div",{className:"composer-grid",children:[T.jsxs("label",{children:[i.type,T.jsx(e0,{value:c,onValueChange:d,options:MA.slice(1).map(y=>({value:y,label:s[y]})),ariaLabel:i.type,className:"composer-select"})]}),T.jsxs("label",{children:[i.scope,T.jsx("input",{value:h,onChange:y=>m(y.target.value),placeholder:i.scopeOptional})]})]}),T.jsxs("label",{children:[i.source,T.jsx("input",{value:p,onChange:y=>E(y.target.value),placeholder:i.sourcePlaceholder})]}),T.jsxs("div",{className:"composer-footer",children:[T.jsxs("span",{children:[T.jsx(el,{size:14}),i.writeLocal]}),T.jsxs("div",{children:[T.jsx("button",{className:"ghost-button",onClick:e,children:i.cancel}),T.jsxs("button",{className:"primary-button",disabled:!l.trim(),onClick:()=>t({content:l,kind:c,project:h,source:p}),children:[i.save," ",T.jsx(zv,{size:15})]})]})]})]})})}sN.createRoot(document.getElementById("root")).render(T.jsx(ml.StrictMode,{children:T.jsx(Z6,{router:Mq})}));const Vq=Object.freeze(Object.defineProperty({__proto__:null,Mermaid:IA},Symbol.toStringTag,{value:"Module"}));export{Wq as E,rn as S,rF as c,T as j,C as r};
|
|
190
|
+
${p}`,s=e.length;break}return s===0?e:i+e.slice(s)},pq=(e,t)=>{if(!t.length)return e;let n=e;for(let i of t){let s=new RegExp(`(<${i}(?=[\\s>/])[^>]*>)([\\s\\S]*?)(</${i}\\s*>)`,"gi");n=n.replace(s,(l,o,c,d)=>hq(o,c,d)),n=mq(n,i)}return n},gq=/([\\`*_~[\]|])/g,bq=e=>e.replace(gq,"\\$1"),yq=(e,t)=>{if(!t.length)return e;let n=e;for(let i of t){let s=new RegExp(`(<${i}(?=[\\s>/])[^>]*>)([\\s\\S]*?)(</${i}\\s*>)`,"gi");n=n.replace(s,(l,o,c,d)=>{let h=bq(c).replace(/\n\n/g," ");return o+h+d})}return n},Eq=new Set(["blockquote","dd","dt","figcaption","h1","h2","h3","h4","h5","h6","li","p","td","th"]),wA=new Set(["code","kbd","pre","samp","var"]);function NA(e){return e.children.map(t=>t.type==="text"?t.value:t.type==="element"&&!wA.has(t.tagName)?NA(t):"").join("")}function xq(){return e=>{dr(e,"element",t=>{if(wA.has(t.tagName)){t.properties!=null||(t.properties={}),t.properties.dir="ltr";return}Eq.has(t.tagName)&&(t.properties!=null||(t.properties={}),typeof t.properties.dir!="string"&&(t.properties.dir=AA(NA(t))))})}}var RA=e=>e.type==="text"?e.value:"children"in e&&Array.isArray(e.children)?e.children.map(RA).join(""):"",Tq=e=>t=>{if(!e||e.length===0)return;let n=new Set(e.map(i=>i.toLowerCase()));dr(t,"element",i=>{if(n.has(i.tagName.toLowerCase())){let s=RA(i);i.children=s?[{type:"text",value:s}]:[]}})},vq=()=>e=>{dr(e,"code",t=>{var n,i;t.meta&&(t.data=(n=t.data)!=null?n:{},t.data.hProperties={...(i=t.data.hProperties)!=null?i:{},metastring:t.meta})})},Sq=/^[ \t]*<[\w!/?-]/,_q=/(^|\n)[ \t]{4,}(?=<[\w!/?-])/g,Cq=e=>typeof e!="string"||e.length===0||!Sq.test(e)?e:e.replace(_q,"$1"),Q2,W2,Z2,J2,bf={...Da,clobberPrefix:"",protocols:{...Da.protocols,href:[...(W2=(Q2=Da.protocols)==null?void 0:Q2.href)!=null?W2:[],"tel","streamdown"]},attributes:{...Da.attributes,code:[...(J2=(Z2=Da.attributes)==null?void 0:Z2.code)!=null?J2:[],"metastring"]}},w0={raw:o0,sanitize:[u3,bf],harden:[aL,{allowedImagePrefixes:["*"],allowedLinkPrefixes:["*"],allowedProtocols:["*"],defaultOrigin:void 0,allowDataImages:!0}]},Aq={gfm:[C7,{}],codeMeta:vq},ev=Object.values(w0),kq=Object.values(Aq),wq={block:" ▋",circle:" ●"},OA=["github-light","github-dark"],LA={enabled:!0},Nq={codeBlockMaxHeight:400,shikiTheme:OA,controls:!0,isAnimating:!1,lineNumbers:!0,mode:"streaming",mermaid:void 0,linkSafety:LA,tableMaxHeight:300},rn=C.createContext(Nq),DA=C.memo(({content:e,shouldParseIncompleteMarkdown:t,shouldNormalizeHtmlIndentation:n,index:i,isIncomplete:s,dir:l,animatePlugin:o,...c})=>{C.useLayoutEffect(()=>{o?.commit()});let d=typeof e=="string"&&n?Cq(e):e,h=T.jsx(kA,{...c,children:d});return T.jsx(FC.Provider,{value:s,children:l?T.jsx("div",{dir:l,style:{display:"contents"},children:h}):h})},(e,t)=>{if(e.content!==t.content||e.shouldNormalizeHtmlIndentation!==t.shouldNormalizeHtmlIndentation||e.index!==t.index||e.isIncomplete!==t.isIncomplete||e.dir!==t.dir)return!1;if(e.components!==t.components){let n=Object.keys(e.components||{}),i=Object.keys(t.components||{});if(n.length!==i.length||n.some(s=>{var l,o;return((l=e.components)==null?void 0:l[s])!==((o=t.components)==null?void 0:o[s])}))return!1}return!(e.rehypePlugins!==t.rehypePlugins||e.remarkPlugins!==t.remarkPlugins||!!e.animatePlugin!=!!t.animatePlugin)});DA.displayName="Block";var Rq=C.memo(({children:e,mode:t="streaming",dir:n,parseIncompleteMarkdown:i=!0,normalizeHtmlIndentation:s=!1,components:l,rehypePlugins:o=ev,remarkPlugins:c=kq,className:d,shikiTheme:h,mermaid:m,codeBlockMaxHeight:p=400,controls:E=!0,isAnimating:y=!1,tableMaxHeight:v=300,animated:S,BlockComponent:A=DA,parseMarkdownIntoBlocksFn:k=cq,caret:N,plugins:w,remend:D,linkSafety:z=LA,lineNumbers:L=!0,allowedTags:P,literalTagContent:H,translations:K,icons:j,prefix:$,onAnimationStart:Z,onAnimationEnd:le,...ue})=>{let re=C.useId(),V=C.useMemo(()=>Zz($),[$]),Q=C.useRef(null),ae=C.useRef(Z),Ee=C.useRef(le);ae.current=Z,Ee.current=le,C.useEffect(()=>{var ke,Ue,At;if(t==="static")return;let Je=Q.current;if(Q.current=y,Je===null){y&&((ke=ae.current)==null||ke.call(ae));return}y&&!Je?(Ue=ae.current)==null||Ue.call(ae):!y&&Je&&((At=Ee.current)==null||At.call(Ee))},[y,t]);let R=C.useMemo(()=>P?Object.keys(P):[],[P]),U=C.useMemo(()=>{if(typeof e!="string")return"";let ke=t==="streaming"&&i?FB(e,D):e;return H&&H.length>0&&(ke=yq(ke,H)),R.length>0&&(ke=pq(ke,R)),ke},[e,t,i,D,R,H]),X=C.useMemo(()=>k(U),[U,k]),I=C.useMemo(()=>n==="auto"?X.map(AA):void 0,[X,n]),ge=C.useMemo(()=>X.map((ke,Ue)=>`${re}-${Ue}`),[X.length,re]),ye=C.useMemo(()=>S===!0?"true":S?JSON.stringify(S):"",[S]),he=C.useRef(null),Ae=C.useRef([]),Te=C.useRef([]),xe=C.useRef(null),je=C.useRef("");if(ye){if(je.current!==ye){je.current=ye;let ke=ye!=="true"?S.maxBacklogMs:void 0;he.current=P2({maxBacklogMs:ke}),Ae.current=[],Te.current=[]}else he.current||(he.current=P2());y&&he.current&&he.current.beginPass(he.current.now())}else he.current=null,Ae.current=[],Te.current=[],je.current="";C.useLayoutEffect(()=>{var ke;y&&((ke=he.current)==null||ke.commitPass())});let Ne=C.useMemo(()=>{var ke,Ue;return{codeBlockMaxHeight:p,shikiTheme:(Ue=h??((ke=w?.code)==null?void 0:ke.getThemes()))!=null?Ue:OA,controls:E,isAnimating:y,lineNumbers:L,mode:t,mermaid:m,linkSafety:z,tableMaxHeight:v}},[p,h,E,y,L,t,m,z,w?.code,v]),Me=C.useMemo(()=>K?JSON.stringify(K):"",[K]),Ve=C.useMemo(()=>({...KC,...K}),[Me]),rt=C.useMemo(()=>{let{inlineCode:ke,...Ue}=l??{},At={...zF,...Ue};if(ke){let Je=At.code;At.code=Qe=>"data-block"in Qe?Je?C.createElement(Je,Qe):null:C.createElement(ke,Qe)}return At},[l]),ut=C.useMemo(()=>{let ke=[];return w!=null&&w.cjk&&(ke=[...ke,...w.cjk.remarkPluginsBefore]),ke=[...ke,...c],w!=null&&w.cjk&&(ke=[...ke,...w.cjk.remarkPluginsAfter]),w!=null&&w.math&&(ke=[...ke,w.math.remarkPlugin]),ke},[c,w?.math,w?.cjk]),Et=C.useMemo(()=>{var ke;let Ue=o;if(P&&Object.keys(P).length>0&&o===ev){let At={...bf,tagNames:[...(ke=bf.tagNames)!=null?ke:[],...Object.keys(P)],attributes:{...bf.attributes,...P}};Ue=[w0.raw,[u3,At],w0.harden]}return H&&H.length>0&&(Ue=[...Ue,[Tq,H]]),w!=null&&w.math&&(Ue=[...Ue,w.math.rehypePlugin]),n==="auto"&&t==="static"&&(Ue=[...Ue,xq]),Ue},[o,w?.math,P,H,n,t]),Vt=C.useMemo(()=>{if(!y||X.length===0)return!1;let ke=X.at(-1);return F2(ke)||$F(ke)},[y,X]),Ut=C.useMemo(()=>N&&y&&!Vt?{"--streamdown-caret":`"${wq[N]}"`}:void 0,[N,y,Vt]),En=ke=>{let Ue=null;if(he.current&&y){if(!Ae.current[ke]){let Je=ye&&ye!=="true"?S:{},{maxBacklogMs:Qe,...cn}=Je;Ae.current[ke]=zC({...cn,timeline:he.current})}Ue=Ae.current[ke]}xe.current!==Et&&(Te.current=[],xe.current=Et),Ue&&!Te.current[ke]&&(Te.current[ke]=[...Et,Ue.rehypePlugin]);let At=Ue&&Te.current[ke]?Te.current[ke]:Et;return{blockAnimatePlugin:Ue,blockRehypePlugins:At}};return t==="static"?T.jsx(S0.Provider,{value:Ve,children:T.jsx(C0.Provider,{value:w??null,children:T.jsx(rn.Provider,{value:Ne,children:T.jsx(j2,{icons:j,children:T.jsx(v0.Provider,{value:V,children:T.jsx("div",{className:V("space-y-4 whitespace-normal [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",d),dir:n==="auto"?void 0:n,children:T.jsx(kA,{components:rt,rehypePlugins:Et,remarkPlugins:ut,...ue,children:U})})})})})})}):T.jsx(S0.Provider,{value:Ve,children:T.jsx(C0.Provider,{value:w??null,children:T.jsx(rn.Provider,{value:Ne,children:T.jsx(j2,{icons:j,children:T.jsx(v0.Provider,{value:V,children:T.jsxs("div",{className:V("space-y-4 whitespace-normal [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",N&&!Vt?"[&>*:last-child]:after:inline [&>*:last-child]:after:align-baseline [&>*:last-child]:after:content-[var(--streamdown-caret)]":null,d),style:Ut,children:[X.length===0&&N&&y&&T.jsx("span",{}),X.map((ke,Ue)=>{var At;let Je=Ue===X.length-1,Qe=y&&Je&&F2(ke),{blockAnimatePlugin:cn,blockRehypePlugins:Y}=En(Ue);return T.jsx(A,{animatePlugin:cn,components:rt,content:ke,dir:(At=I?.[Ue])!=null?At:n!=="auto"?n:void 0,index:Ue,isIncomplete:Qe,rehypePlugins:Y,remarkPlugins:ut,shouldNormalizeHtmlIndentation:s,shouldParseIncompleteMarkdown:i,...ue},ge[Ue])})]})})})})})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme&&e.isAnimating===t.isAnimating&&e.animated===t.animated&&e.mode===t.mode&&e.plugins===t.plugins&&e.className===t.className&&e.linkSafety===t.linkSafety&&e.lineNumbers===t.lineNumbers&&e.codeBlockMaxHeight===t.codeBlockMaxHeight&&e.tableMaxHeight===t.tableMaxHeight&&e.normalizeHtmlIndentation===t.normalizeHtmlIndentation&&e.literalTagContent===t.literalTagContent&&JSON.stringify(e.translations)===JSON.stringify(t.translations)&&e.prefix===t.prefix&&e.dir===t.dir);Rq.displayName="Streamdown";var Oq=({children:e,className:t,minZoom:n=.5,maxZoom:i=3,zoomStep:s=.1,showControls:l=!0,initialZoom:o=1,fullscreen:c=!1})=>{let{RotateCcwIcon:d,ZoomInIcon:h,ZoomOutIcon:m}=gr(),p=qe(),E=Ir(),y=C.useRef(null),v=C.useRef(null),[S,A]=C.useState(o),[k,N]=C.useState({x:0,y:0}),[w,D]=C.useState(!1),[z,L]=C.useState({x:0,y:0}),[P,H]=C.useState({x:0,y:0}),K=C.useCallback(Q=>{A(ae=>Math.max(n,Math.min(i,ae+Q)))},[n,i]),j=C.useCallback(()=>{K(s)},[K,s]),$=C.useCallback(()=>{K(-s)},[K,s]),Z=C.useCallback(()=>{A(o),N({x:0,y:0})},[o]),le=C.useCallback(Q=>{Q.preventDefault();let ae=Q.deltaY>0?-s:s;K(ae)},[K,s]),ue=C.useCallback(Q=>{if(Q.button!==0||Q.isPrimary===!1)return;D(!0),L({x:Q.clientX,y:Q.clientY}),H(k);let ae=Q.currentTarget;ae instanceof HTMLElement&&ae.setPointerCapture(Q.pointerId)},[k]),re=C.useCallback(Q=>{if(!w)return;Q.preventDefault();let ae=Q.clientX-z.x,Ee=Q.clientY-z.y;N({x:P.x+ae,y:P.y+Ee})},[w,z,P]),V=C.useCallback(Q=>{D(!1);let ae=Q.currentTarget;ae instanceof HTMLElement&&ae.releasePointerCapture(Q.pointerId)},[]);return C.useEffect(()=>{let Q=y.current;if(Q)return Q.addEventListener("wheel",le,{passive:!1}),()=>{Q.removeEventListener("wheel",le)}},[le]),C.useEffect(()=>{let Q=v.current;if(Q&&w)return document.body.style.userSelect="none",Q.addEventListener("pointermove",re,{passive:!1}),Q.addEventListener("pointerup",V),Q.addEventListener("pointercancel",V),()=>{document.body.style.userSelect="",Q.removeEventListener("pointermove",re),Q.removeEventListener("pointerup",V),Q.removeEventListener("pointercancel",V)}},[w,re,V]),T.jsxs("div",{className:p("relative flex flex-col",c?"h-full w-full":"min-h-28 w-full",t),ref:y,style:{cursor:w?"grabbing":"grab"},children:[l?T.jsxs("div",{className:p("absolute z-10 flex flex-col gap-1 rounded-md border border-border bg-background/80 p-1 supports-[backdrop-filter]:bg-background/70 supports-[backdrop-filter]:backdrop-blur-sm",c?"bottom-4 left-4":"bottom-2 left-2"),children:[T.jsx("button",{"aria-label":E.zoomIn,className:p("flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"),disabled:S>=i,onClick:j,title:E.zoomIn,type:"button",children:T.jsx(h,{"aria-hidden":"true",size:16})}),T.jsx("button",{"aria-label":E.zoomOut,className:p("flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"),disabled:S<=n,onClick:$,title:E.zoomOut,type:"button",children:T.jsx(m,{"aria-hidden":"true",size:16})}),T.jsx("button",{"aria-label":E.resetView,className:p("flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"),onClick:Z,title:E.resetView,type:"button",children:T.jsx(d,{"aria-hidden":"true",size:16})})]}):null,T.jsx("div",{className:p("flex-1 origin-center transition-transform duration-150 ease-out",c?"flex h-full w-full items-center justify-center":"flex w-full items-center justify-center"),onPointerDown:ue,ref:v,role:"application",style:{transform:`translate(${k.x}px, ${k.y}px) scale(${S})`,transformOrigin:"center center",touchAction:"none",willChange:"transform"},children:e})]})},IA=({chart:e,className:t,config:n,fullscreen:i=!1,showControls:s=!0})=>{let l=qe(),[o,c]=C.useState(null),[d,h]=C.useState(!1),[m,p]=C.useState(""),[E,y]=C.useState(""),[v,S]=C.useState(0),{mermaid:A}=C.useContext(rn),k=Vg(),N=A?.errorComponent,{shouldRender:w,containerRef:D}=Mz({immediate:i});if(C.useEffect(()=>{if(w){if(!k){c("Mermaid plugin not available. Please add the mermaid plugin to enable diagram rendering.");return}(async()=>{try{c(null),h(!0);let L=k.getMermaid(n),P=e.split("").reduce((j,$)=>(j<<5)-j+$.charCodeAt(0)|0,0),H=`mermaid-${Math.abs(P)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:K}=await L.render(H,e);p(K),y(K)}catch(L){if(!(E||m)){let P=L instanceof Error?L.message:"Failed to render Mermaid chart";c(P)}}finally{h(!1)}})()}},[e,n,v,w,k]),!(w||m||E))return T.jsx("div",{className:l("my-4 min-h-[200px]",t),ref:D});if(d&&!m&&!E)return T.jsx("div",{className:l("my-4 flex justify-center p-4",t),ref:D,children:T.jsxs("div",{className:l("flex items-center space-x-2 text-muted-foreground"),children:[T.jsx("div",{className:l("h-4 w-4 animate-spin rounded-full border-current border-b-2")}),T.jsx("span",{className:l("text-sm"),children:"Loading diagram..."})]})});if(o&&!m&&!E){let L=()=>S(P=>P+1);return N?T.jsx("div",{ref:D,children:T.jsx(N,{chart:e,error:o,retry:L})}):T.jsxs("div",{className:l("rounded-md bg-red-50 p-4",t),ref:D,children:[T.jsxs("p",{className:l("font-mono text-red-700 text-sm"),children:["Mermaid Error: ",o]}),T.jsxs("details",{className:l("mt-2"),children:[T.jsx("summary",{className:l("cursor-pointer text-red-600 text-xs"),children:"Show Code"}),T.jsx("pre",{className:l("mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs"),children:e})]})]})}let z=m||E;return T.jsx("div",{className:l("size-full",t),"data-streamdown":"mermaid",ref:D,children:T.jsx(Oq,{className:l(i?"size-full overflow-hidden":"overflow-hidden",t),fullscreen:i,maxZoom:3,minZoom:.5,showControls:s,zoomStep:.1,children:T.jsx("div",{"aria-label":"Mermaid chart",className:l("flex justify-center",i?"size-full items-center":null),dangerouslySetInnerHTML:{__html:z},role:"img"})})})};const MA=["all","fact","preference","episode","procedure","message"],po={all:"全部",fact:"事实",preference:"偏好",episode:"事件",procedure:"方法",message:"对话"},Lq={all:{title:"全部记忆",description:"一个安静、可检索的空间,保存 Agent 需要记住的事实、偏好和经验。"},timeline:{title:"时间线",description:"按发生和写入时间回看你的记忆。"},archive:{title:"归档",description:"被归档的记忆会集中显示在这里。"},preferences:{title:"偏好与习惯",description:"集中查看 Agent 需要遵循的个人偏好和习惯。"},projects:{title:"Scope 分类",description:"按 scope 分类查看记忆,项目目录名只是其中一种常用值。"},tags:{title:"标签",description:"标签视图将在记忆拥有标签后显示内容。"},settings:{title:"设置",description:"本地存储和界面设置。"},mcp:{title:"MCP 服务",description:"把 Memory One 连接到你的 Agent,查看端点配置和可用工具。"}},PA={all:"/",timeline:"/timeline",archive:"/archive",preferences:"/preferences",projects:"/scopes",tags:"/tags",settings:"/settings",mcp:"/mcp-service"},Dq=Object.fromEntries(Object.entries(PA).map(([e,t])=>[t,e]));function qi(){return null}const ti=U6({component:Pq}),Iq=ti.addChildren([Ui({getParentRoute:()=>ti,path:"/",component:qi}),Ui({getParentRoute:()=>ti,path:"/timeline",component:qi}),Ui({getParentRoute:()=>ti,path:"/archive",component:qi}),Ui({getParentRoute:()=>ti,path:"/preferences",component:qi}),Ui({getParentRoute:()=>ti,path:"/scopes",component:qi}),Ui({getParentRoute:()=>ti,path:"/tags",component:qi}),Ui({getParentRoute:()=>ti,path:"/settings",component:qi}),Ui({getParentRoute:()=>ti,path:"/mcp-service",component:qi})]),Mq=X6({routeTree:Iq}),go={zh:{brandSubtitle:"个人记忆库",workspace:"工作区",collections:"集合",connect:"连接",navAll:"全部记忆",navTimeline:"时间线",navArchive:"归档",navPreferences:"偏好与习惯",navScopes:"Scope 分类",navTags:"标签",navMcp:"MCP 服务",navSettings:"设置",localStorage:"本地存储",memories:"MEMORIES",scopes:"SCOPES",scopesNote:"分类数量",lastSync:"LAST SYNC",justNow:"刚刚",localDatabase:"本地数据库",localOnly:"完全本地",localOnlyDesc:"你的记忆只留在这台设备",newMemory:"新建记忆",search:"搜索记忆...",allScopes:"所有 Scope",reading:"读取中...",countSuffix:"条记忆",sortRecent:"按最近更新排序",sortTimeline:"按发生时间排序",sortGrouped:"按 Scope 分组",globalMemory:"全局记忆",emptyMatch:"这里还没有匹配的记忆",emptyHelp:"试试换一个关键词,或创建一条新的记忆。",loadFailed:"记忆读取失败",retry:"重试",noArchive:"暂无归档记忆",noTags:"暂无标签",settingsManaged:"设置已由本地配置管理",detailEyebrow:"记忆详情",close:"关闭",detailEmpty:"选择一条记忆",detailEmptyDesc:"查看完整内容、来源和元数据",confidence:"置信度",created:"创建时间",updated:"最后更新",source:"来源",agentWritten:"Agent 写入",scope:"Scope",signals:"信号",importance:"重要性",recallCount:"召回次数",times:"次",original:"查看原始记录",switchLanguage:"Switch to English",newMemoryEyebrow:"新建记忆",composerTitle:"保存一条记忆",content:"记忆内容",contentPlaceholder:"例如:用户偏好使用简洁的工具界面。",type:"类型",scopeOptional:"可选,例如:/path/to/project",sourcePlaceholder:"例如:Claude Code / 手动添加",writeLocal:"写入本地 SQLite",cancel:"取消",save:"保存记忆",languageCode:"EN",mcpKicker:"Agent 集成",mcpTitle:"连接你的 Agent",mcpDescription:"Memory One 通过 Streamable HTTP 提供记忆工具。创建一个按工具授权的 Key 后,把带 Authorization Header 的配置加入 MCP 客户端。",mcpOnline:"HTTP 在线",mcpEndpoint:"服务地址",mcpCopyEndpoint:"复制服务地址",transport:"传输方式",auth:"认证",noAuth:"必须使用 Bearer Key",category:"记忆分类",categoryValue:"全局 / 可选 scope",toolsLabel:"可用工具",toolsTitle:"Agent 可以使用的工具",toolsCount:"个工具",http:"HTTP",localMemory:"本地记忆 / 01",serverEndpoint:"服务端点"}},Ju=(e,t)=>e?new Intl.DateTimeFormat(t==="zh"?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(e)):t==="zh"?"未标记时间":"No date";function Pq(){const e=J6({select:R=>R.location.pathname}),t=H0(),n=Dq[e]??"all",[i,s]=C.useState([]),[l,o]=C.useState(null),[c,d]=C.useState(""),[h,m]=C.useState("all"),[p,E]=C.useState("all"),y="zh",[v,S]=C.useState(()=>localStorage.getItem("memory-one-theme")==="dark"),[A,k]=C.useState(!1),[N,w]=C.useState(!1),[D,z]=C.useState(!0),[L,P]=C.useState(!1),[H,K]=C.useState(null),j=async(R=c)=>{z(!0),P(!1);try{const U=R.trim()?`/api/search?query=${encodeURIComponent(R)}`:"/api/memories?limit=100",X=await fetch(U);if(!X.ok)throw new Error("memory_load_failed");s(await X.json())}catch{P(!0)}finally{z(!1)}},$=go[y],Z=po;C.useEffect(()=>{o(null),w(!1),d(""),m(n==="preferences"?"preference":"all"),E("all"),j("")},[n]),C.useEffect(()=>{document.documentElement.dataset.theme=v?"dark":"light",localStorage.setItem("memory-one-theme",v?"dark":"light")},[v]),C.useEffect(()=>{document.documentElement.lang="zh-CN"},[]),C.useEffect(()=>{let R=!0,U;return fetch("/api/version").then(X=>X.ok?X.json():null).then(X=>{!R||!X?.updateAvailable||!X.current||!X.latest||(K({current:X.current,latest:X.latest}),U=window.setTimeout(()=>K(null),3e3))}).catch(()=>{}),()=>{R=!1,U&&window.clearTimeout(U)}},[]),C.useEffect(()=>{const R=U=>{(U.metaKey||U.ctrlKey)&&U.key.toLowerCase()==="k"&&(U.preventDefault(),document.querySelector("#memory-search")?.focus())};return window.addEventListener("keydown",R),()=>window.removeEventListener("keydown",R)},[]);const le=C.useMemo(()=>["all",...new Set(i.map(R=>R.project).filter(Boolean))],[i]),ue=i.filter(R=>n==="archive"||n==="tags"||n==="settings"||n==="mcp"||n==="preferences"&&R.kind!=="preference"||n==="projects"&&!R.project?!1:(h==="all"||R.kind===h)&&(p==="all"||R.project===p)),re=C.useMemo(()=>{const R=new Map;for(const U of ue){const X=U.project??"__global__";R.set(X,[...R.get(X)??[],U])}return[...R.entries()]},[ue]),V={total:i.length,projects:new Set(i.map(R=>R.project).filter(Boolean)).size,preferences:i.filter(R=>R.kind==="preference").length},Q=Lq[n],ae=R=>{t({to:PA[R]})},Ee=async R=>{const X=await(await fetch("/api/memories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({...R,project:R.project||null,source:R.source||null})})).json();s(I=>[X,...I]),o(X),k(!1)};return T.jsxs("div",{className:`app-shell ${n==="mcp"?"app-shell-wide":""}`,children:[H&&T.jsxs("div",{className:"version-notice",role:"status",children:[T.jsx(Dx,{size:14}),T.jsxs("span",{children:["发现新版本 ",H.latest,",当前版本 ",H.current]})]}),T.jsxs("aside",{className:`sidebar ${N?"sidebar-open":""}`,children:[T.jsxs("div",{className:"brand",children:[T.jsx("div",{className:"brand-mark",children:T.jsx(aR,{size:17})}),T.jsxs("div",{children:[T.jsx("strong",{children:"Memory One"}),T.jsx("span",{children:$.brandSubtitle})]}),T.jsx("button",{className:"icon-button mobile-close",onClick:()=>w(!1),title:$.close,children:T.jsx(Cf,{size:17})})]}),T.jsxs(wp,{title:$.workspace,children:[T.jsx(Vi,{icon:T.jsx(iR,{size:17}),label:$.navAll,count:V.total,active:n==="all",onClick:()=>ae("all")}),T.jsx(Vi,{icon:T.jsx(uR,{size:17}),label:$.navTimeline,active:n==="timeline",onClick:()=>ae("timeline")}),T.jsx(Vi,{icon:T.jsx(rR,{size:17}),label:$.navArchive,active:n==="archive",onClick:()=>ae("archive")})]}),T.jsxs(wp,{title:$.collections,children:[T.jsx(Vi,{icon:T.jsx(Dx,{size:17}),label:$.navPreferences,count:V.preferences,active:n==="preferences",onClick:()=>ae("preferences")}),T.jsx(Vi,{icon:T.jsx(Fv,{size:17}),label:$.navScopes,count:V.projects,active:n==="projects",onClick:()=>ae("projects")}),T.jsx(Vi,{icon:T.jsx(Yv,{size:17}),label:$.navTags,active:n==="tags",onClick:()=>ae("tags")})]}),T.jsx(wp,{title:$.connect,children:T.jsx(Vi,{icon:T.jsx(of,{size:17}),label:$.navMcp,active:n==="mcp",onClick:()=>ae("mcp")})}),T.jsxs("div",{className:"sidebar-footer",children:[T.jsxs("div",{className:"storage-status",children:[T.jsx("span",{className:"status-dot"}),$.localStorage,T.jsx("span",{className:"mono",children:"SQLite"})]}),T.jsx(Vi,{icon:T.jsx(gR,{size:17}),label:$.navSettings,active:n==="settings",onClick:()=>ae("settings")})]})]}),N&&T.jsx("button",{className:"sidebar-backdrop",onClick:()=>w(!1),"aria-label":$.close}),T.jsxs("main",{className:"main-content",children:[T.jsxs("header",{className:"topbar",children:[T.jsx("button",{className:"icon-button menu-button",onClick:()=>w(!0),title:"打开菜单","aria-label":"打开菜单",children:T.jsx(dR,{size:19})}),T.jsxs("div",{className:"breadcrumbs",children:[T.jsx("span",{children:$.workspace}),T.jsx(Bp,{size:14}),T.jsx("strong",{children:Q.title})]}),T.jsxs("div",{className:"top-actions",children:[T.jsx("button",{className:"icon-button",onClick:()=>S(R=>!R),title:v?"切换浅色模式":"切换深色模式",children:v?T.jsx(Vv,{size:17}):T.jsx(qv,{size:17})}),T.jsx("div",{className:"avatar",children:"C"})]})]}),T.jsx("div",{className:"content-wrap",children:n==="mcp"?T.jsx(Uq,{language:y}):n==="settings"?T.jsx(Fq,{dark:v,onToggleTheme:()=>S(R=>!R)}):T.jsxs(T.Fragment,{children:[T.jsxs("section",{className:"page-heading",children:[T.jsxs("div",{children:[T.jsxs("div",{className:"heading-kicker",children:[T.jsx("span",{className:"live-dot"}),$.localMemory]}),T.jsx("h1",{children:Q.title}),T.jsx("p",{children:Q.description})]}),T.jsxs("button",{className:"primary-button",onClick:()=>k(!0),children:[T.jsx(mR,{size:17}),$.newMemory]})]}),n!=="timeline"&&T.jsxs("section",{className:"stat-grid",children:[T.jsx(ja,{label:$.memories,value:V.total.toString().padStart(2,"0"),note:"已保存"}),T.jsx(ja,{label:$.scopes,value:V.projects.toString().padStart(2,"0"),note:$.scopesNote}),T.jsx(ja,{label:$.lastSync,value:$.justNow,note:$.localDatabase,date:!0}),T.jsxs("div",{className:"stat-card stat-callout",children:[T.jsx(U0,{size:19}),T.jsxs("div",{children:[T.jsx("strong",{children:$.localOnly}),T.jsx("span",{children:$.localOnlyDesc})]})]})]}),T.jsxs("section",{className:"toolbar",children:[T.jsxs("div",{className:"search-box",children:[T.jsx(pR,{size:17}),T.jsx("input",{id:"memory-search",value:c,onChange:R=>d(R.target.value),onKeyDown:R=>{R.key==="Enter"&&j()},placeholder:$.search}),T.jsxs("kbd",{children:[T.jsx(oR,{size:11}),"K"]})]}),T.jsxs("div",{className:"toolbar-actions",children:[T.jsxs("div",{className:"select-wrap",children:[T.jsx(fR,{size:15}),T.jsx(e0,{value:h,onValueChange:m,options:MA.map(R=>({value:R,label:Z[R]})),ariaLabel:$.type})]}),T.jsx("div",{className:"select-wrap project-select",children:T.jsx(e0,{value:p,onValueChange:E,options:le.map(R=>({value:R,label:R==="all"?$.allScopes:R})),ariaLabel:$.scope})})]})]}),T.jsxs("div",{className:"list-header",children:[T.jsx("span",{children:D?$.reading:`${ue.length}${$.countSuffix}`}),T.jsx("span",{className:"mono",children:n==="timeline"?$.sortTimeline:n==="all"&&p==="all"?$.sortGrouped:$.sortRecent})]}),T.jsxs("section",{className:n==="timeline"?"timeline-list":"memory-list",children:[L&&!D&&T.jsxs("div",{className:"empty-state",children:[T.jsx(Lx,{size:28}),T.jsx("strong",{children:$.loadFailed}),T.jsx("button",{className:"ghost-button",onClick:()=>{j()},children:$.retry})]}),!L&&!D&&ue.length===0&&T.jsxs("div",{className:"empty-state",children:[T.jsx(Lx,{size:28}),T.jsx("strong",{children:n==="archive"?$.noArchive:n==="tags"?$.noTags:n==="settings"?$.settingsManaged:$.emptyMatch}),T.jsx("span",{children:n==="archive"||n==="tags"||n==="settings"?Q.description:$.emptyHelp})]}),!L&&n==="timeline"&&T.jsx(Hq,{items:ue,selectedId:l?.id,onSelect:o,language:y}),!L&&n!=="timeline"&&(n==="all"&&p==="all"?re.map(([R,U])=>T.jsxs("div",{className:"memory-group",children:[T.jsxs("div",{className:"memory-group-header",children:[T.jsx("span",{children:R==="__global__"?$.globalMemory:R}),T.jsx("span",{className:"mono",children:U.length.toString().padStart(2,"0")})]}),U.map(X=>T.jsx(tv,{item:X,selected:l?.id===X.id,onClick:()=>o(X),language:y},X.id))]},R)):ue.map(R=>T.jsx(tv,{item:R,selected:l?.id===R.id,onClick:()=>o(R),language:y},R.id)))]})]})})]}),n!=="mcp"&&T.jsxs("aside",{className:`detail-panel ${l?"detail-open":""}`,children:[T.jsxs("div",{className:"detail-header",children:[T.jsx("span",{className:"eyebrow",children:$.detailEyebrow}),l&&T.jsx("button",{className:"icon-button",onClick:()=>o(null),title:$.close,children:T.jsx(Cf,{size:17})})]}),l?T.jsx(zq,{item:l,language:y}):T.jsxs("div",{className:"detail-empty",children:[T.jsx("div",{className:"detail-icon",children:T.jsx(zv,{size:20})}),T.jsx("strong",{children:$.detailEmpty}),T.jsx("span",{children:$.detailEmptyDesc})]})]}),A&&T.jsx(qq,{onClose:()=>k(!1),onCreate:Ee,language:y}),T.jsx(jv,{})]})}function wp({title:e,children:t}){return T.jsxs("div",{className:"sidebar-section",children:[T.jsx("span",{className:"eyebrow",children:e}),t]})}function Vi({icon:e,label:t,count:n,active:i,onClick:s}){return T.jsxs("button",{className:`nav-item ${i?"active":""}`,onClick:s,"aria-current":i?"page":void 0,children:[e,T.jsx("span",{children:t}),n!==void 0&&T.jsx("b",{children:n})]})}const Xs=[["memory_store","Store durable memory with optional scope.","保存一条持久记忆,可选 scope 分类。"],["memory_search","Search memories with SQLite FTS5 and an optional scope filter.","使用 SQLite FTS5 搜索记忆,可按 scope 筛选。"],["memory_get_context","Retrieve relevant experience before every task.","在每项任务开始前检索相关经验。"],["memory_get","Get one memory by ID.","按 ID 获取单条记忆。"],["memory_list","List memories with an optional scope filter.","列出记忆,可按 scope 筛选。"],["memory_update","Update a memory or its metadata.","更新记忆内容或元数据。"],["memory_delete","Soft-delete a memory.","软删除一条记忆。"],["memory_feedback","Record whether a memory was useful.","记录记忆是否有帮助的相关性信号。"]];function Bq(e,t){if(!e)return t==="zh"?"未标记日期":"Undated";const n=new Date(e);return Number.isNaN(n.getTime())?t==="zh"?"未标记日期":"Undated":new Intl.DateTimeFormat(t==="zh"?"zh-CN":"en-US",{year:"numeric",month:"long",day:"numeric",weekday:"short"}).format(n)}function jq(e,t){if(!e)return t==="zh"?"未标记时间":"No time";const n=new Date(e);return Number.isNaN(n.getTime())?t==="zh"?"未标记时间":"No time":new Intl.DateTimeFormat(t==="zh"?"zh-CN":"en-US",{hour:"2-digit",minute:"2-digit"}).format(n)}function Hq({items:e,selectedId:t,onSelect:n,language:i}){const s=C.useMemo(()=>{const l=[...e].sort((c,d)=>{const h=new Date(c.occurred_at??c.created_at).getTime();return new Date(d.occurred_at??d.created_at).getTime()-h}),o=new Map;for(const c of l){const d=c.occurred_at??c.created_at,h=d?new Date(d):null,m=h&&!Number.isNaN(h.getTime())?h.toISOString().slice(0,10):"undated";o.set(m,[...o.get(m)??[],c])}return[...o.entries()]},[e]);return T.jsx("div",{className:"timeline-stream",children:s.map(([l,o])=>T.jsxs("section",{className:"timeline-day",children:[T.jsxs("header",{className:"timeline-day-heading",children:[T.jsx("time",{children:Bq(l==="undated"?null:l,i)}),T.jsxs("span",{className:"mono",children:[o.length.toString().padStart(2,"0")," 条"]})]}),T.jsx("div",{className:"timeline-day-items",children:o.map(c=>{const d=c.occurred_at??c.created_at;return T.jsxs("button",{className:`timeline-event ${t===c.id?"selected":""}`,onClick:()=>n(c),children:[T.jsx("span",{className:"timeline-event-rail","aria-hidden":"true",children:T.jsx("span",{className:"timeline-dot"})}),T.jsxs("span",{className:"timeline-event-body",children:[T.jsxs("span",{className:"timeline-event-meta",children:[T.jsx("span",{className:`kind-badge kind-${c.kind}`,children:po[c.kind]??c.kind}),T.jsx("time",{children:jq(d,i)})]}),T.jsx("strong",{children:c.content}),T.jsxs("span",{className:"timeline-event-context",children:[c.project??c.scope,T.jsx("span",{"aria-hidden":"true",children:"·"}),c.source??"Agent 写入"]})]})]},c.id)})})]},l))})}function Uq({language:e}){const t=go[e],[n,i]=C.useState(null),[s,l]=C.useState(null),[o,c]=C.useState(null),[d,h]=C.useState(null),[m,p]=C.useState(!1),[E,y]=C.useState(""),[v,S]=C.useState(null),[A,k]=C.useState(""),[N,w]=C.useState(!1),[D,z]=C.useState(""),[L,P]=C.useState([]),[H,K]=C.useState(""),[j,$]=C.useState(Xs.map(([Y])=>Y)),[Z,le]=C.useState(null),[ue,re]=C.useState(!1),[V,Q]=C.useState(""),[ae,Ee]=C.useState(!1),[R,U]=C.useState(null),[X,I]=C.useState(null),[ge,ye]=C.useState(""),[he,Ae]=C.useState("connection"),Te=typeof window<"u"&&window.location.hostname?window.location.hostname:"127.0.0.1",xe=typeof window<"u"?window.location.port:"",Ne=`http://${Te}:${xe==="5173"||!xe?"8765":xe}/mcp/`,Me=new Map(o?.tools.map(Y=>[Y.tool_name,Y.calls])??[]),Ve=o?.total_calls?Math.round(o.successful_calls/o.total_calls*100):0;C.useEffect(()=>{fetch("/api/mcp/config").then(Y=>Y.json()).then(Y=>U(Y.use_bearer_key!==!1)),fetch("/api/mcp/stats").then(Y=>Y.json()).then(c),fetch("/api/integrations/codex").then(Y=>Y.json()).then(h),fetch(`/api/integrations/codex/mcp?endpoint=${encodeURIComponent(Ne)}`).then(Y=>Y.json()).then(S),fetch("/api/mcp/keys").then(Y=>Y.json()).then(P)},[]),C.useEffect(()=>{const Y=L.filter(de=>de.secret);v?.configured_key_id?k(v.configured_key_id):Y.some(de=>de.id===A)||k(Y[0]?.id??"")},[v,A,L]);const rt=async Y=>{U(Y),await fetch("/api/mcp/config",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({use_bearer_key:Y})});const de=await fetch(`/api/integrations/codex/mcp?endpoint=${encodeURIComponent(Ne)}`);S(await de.json())},ut=async(Y,de)=>{try{if(!navigator.clipboard)throw new Error("clipboard_unavailable");await navigator.clipboard.writeText(Y),i(de),l("已复制到剪贴板"),window.setTimeout(()=>i(null),1500),window.setTimeout(()=>l(null),2200)}catch{l("复制失败,请手动复制"),window.setTimeout(()=>l(null),2600)}},Et=async()=>{p(!0),y("");try{const Y=await fetch("/api/integrations/codex/install",{method:"POST"});if(!Y.ok)throw new Error("install_failed");h(await Y.json()),y("全局指令已写入。重新启动 Codex 或开启新会话后生效。")}catch{y("写入失败,请检查 Codex 配置目录的访问权限。")}finally{p(!1)}},Vt=async()=>{w(!0),z("");try{const Y=await fetch("/api/integrations/codex/mcp/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({endpoint:Ne,...R===!0?{key_id:A}:{}})});if(!Y.ok)throw new Error("install_failed");S(await Y.json()),z("Codex MCP 配置已写入。重新启动 Codex 或开启新会话后生效。")}catch{z(R===!0?"配置失败,请检查 Codex 配置目录和 MCP Key。":"配置失败,请检查 Codex 配置目录。")}finally{w(!1)}},Ut=async()=>{re(!0),Q("");try{const Y=await fetch("/api/mcp/keys",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:H.trim()||"未命名 Key",allowed_tools:j})});if(!Y.ok)throw new Error("create_key_failed");const de=await Y.json();P(we=>[de.key_record,...we]),le(de.key),K("")}catch{Q("Key 创建失败,请稍后重试。")}finally{re(!1)}},En=async Y=>{const de=L.find(De=>De.id===Y);!de||!window.confirm(`确定删除 Key“${de.name}”吗?删除后将立即失效,且无法恢复。`)||!(await fetch(`/api/mcp/keys/${Y}`,{method:"DELETE"})).ok||P(De=>De.filter(We=>We.id!==Y))},ke=async Y=>{const de=await fetch(`/api/mcp/keys/${Y}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({name:ge})});if(!de.ok)return;const we=await de.json();P(De=>De.map(We=>We.id===Y?we:We)),I(null)},Ue=Z?JSON.stringify({mcpServers:{"memory-one":{type:"http",url:Ne,headers:{Authorization:`Bearer ${Z}`}}}},null,2):"",At=d?.status==="configured"?"已配置":d?.status==="update_available"?"可更新":"未配置",Je=d?.status==="update_available"?"更新全局指令":"启用全局记忆",Qe=v?.status==="configured"&&(R!==!0||v.configured_key_id===A),cn=v?.status==="configured"?"已配置":v?.status==="update_available"?"需更新":"未配置";return T.jsxs("div",{className:`mcp-page ${R===null?"mcp-loading":""}`,children:[s?T.jsxs("div",{className:`copy-feedback ${s.startsWith("复制失败")?"error":""}`,role:"status",children:[s.startsWith("复制失败")?T.jsx(lR,{size:14}):T.jsx(el,{size:14}),s]}):null,T.jsx("div",{className:"mcp-navigation",children:T.jsxs("nav",{className:"mcp-tabs",role:"tablist","aria-label":"MCP 页面",children:[T.jsxs("button",{className:he==="connection"?"active":"",role:"tab","aria-selected":he==="connection",onClick:()=>Ae("connection"),children:[T.jsx(of,{size:15}),"连接配置"]}),T.jsxs("button",{className:he==="usage"?"active":"",role:"tab","aria-selected":he==="usage",onClick:()=>Ae("usage"),children:[T.jsx(Ox,{size:15}),"调用统计"]})]})}),he==="connection"&&T.jsxs("div",{className:"mcp-grid",role:"tabpanel",children:[T.jsxs("section",{className:"mcp-panel mcp-endpoint",children:[T.jsxs("div",{className:"mcp-panel-header",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:t.serverEndpoint}),T.jsx("h2",{children:t.mcpEndpoint})]}),T.jsx("button",{className:"icon-button",onClick:()=>ut(Ne,"endpoint"),title:t.mcpCopyEndpoint,children:n==="endpoint"?T.jsx(el,{size:16}):T.jsx($m,{size:16})})]}),T.jsx("div",{className:"endpoint-value",children:Ne}),T.jsxs("div",{className:"endpoint-compact-meta",children:[T.jsxs("span",{children:[T.jsx("i",{className:"status-dot"}),"Streamable HTTP"]}),T.jsxs("label",{className:"switch-label",children:[T.jsx("span",{children:"Bearer Key"}),T.jsx("input",{type:"checkbox",checked:R===!0,disabled:R===null,onChange:Y=>rt(Y.target.checked)}),T.jsx("i",{})]})]})]}),T.jsxs("section",{className:"mcp-panel codex-mcp-panel",children:[T.jsx("span",{className:"eyebrow codex-compact-heading",children:"Codex"}),T.jsxs("div",{className:"codex-compact-list",children:[T.jsxs("section",{className:"codex-compact-row",children:[T.jsxs("div",{className:"codex-compact-copy",children:[T.jsxs("div",{className:"codex-compact-title",children:[T.jsx("strong",{children:"MCP 连接"}),T.jsx("span",{className:`integration-status status-${v?.status??"loading"}`,children:v?cn:"检测中"})]}),T.jsx("p",{children:R===!0?"选择 Key 后自动写入连接配置。":R===!1?"自动写入连接配置。":"正在读取认证状态。"}),D?T.jsx("div",{className:"integration-message",role:"status",children:D}):null]}),T.jsxs("div",{className:"codex-compact-actions",children:[R===!0?T.jsxs("select",{"aria-label":"MCP Key",value:A,onChange:Y=>k(Y.target.value),disabled:!L.some(Y=>Y.secret),children:[L.filter(Y=>Y.secret).map(Y=>T.jsxs("option",{value:Y.id,children:[Y.name," · ",Y.prefix,"••••"]},Y.id)),L.some(Y=>Y.secret)?null:T.jsx("option",{value:"",children:"请先创建 MCP Key"})]}):null,T.jsxs("button",{className:"primary-button",disabled:R===null||!v||R===!0&&!A||N||Qe,onClick:()=>{Vt()},children:[N?T.jsx(Gm,{className:"spin",size:16}):T.jsx(of,{size:16}),Qe?"已配置":v?.status==="not_configured"?"配置":"更新"]})]})]}),T.jsxs("section",{className:"codex-compact-row",children:[T.jsxs("div",{className:"codex-compact-copy",children:[T.jsxs("div",{className:"codex-compact-title",children:[T.jsx("strong",{children:"任务前置记忆"}),T.jsx("span",{className:`integration-status status-${d?.status??"loading"}`,children:d?At:"读取中"})]}),T.jsx("p",{children:"让 Codex 在每项任务开始前读取相关经验。"}),E?T.jsx("div",{className:"integration-message",role:"status",children:E}):null]}),T.jsxs("button",{className:"primary-button",disabled:!d||m||d.status==="configured",onClick:Et,children:[m?T.jsx(Gm,{className:"spin",size:16}):T.jsx(cR,{size:16}),d?.status==="configured"?"已启用":Je]})]})]})]}),R===!0&&T.jsxs("section",{className:"mcp-keys",role:"region","aria-label":"Key 管理",children:[T.jsxs("div",{className:"mcp-tools-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"访问控制"}),T.jsx("h2",{children:"MCP Key 管理"})]}),T.jsx(jc,{size:18})]}),T.jsx("p",{className:"mcp-key-note",children:"为平台 Agent、Codex 或其他 MCP 客户端创建独立 Key,并按最小权限限制它可以调用的工具。"}),T.jsx("div",{className:"mcp-key-create",children:T.jsxs("button",{className:"primary-button",onClick:()=>Ee(!0),children:[T.jsx(jc,{size:15}),"创建 Key"]})}),Z?T.jsxs("div",{className:"mcp-key-secret",children:[T.jsx("strong",{children:"Key 已创建,可随时在下方再次复制"}),T.jsx("code",{children:Z}),T.jsxs("div",{children:[T.jsx("button",{className:"icon-button",onClick:()=>ut(Ue,"key-config"),title:"复制带 Key 的 MCP 配置",children:n==="key-config"?T.jsx(el,{size:16}):T.jsx($m,{size:16})}),T.jsx("span",{children:n==="key-config"?"已复制配置":"复制带 Authorization Header 的配置"})]})]}):null,T.jsx("div",{className:"mcp-key-list",children:L.length?L.map(Y=>T.jsxs("div",{className:"mcp-key-row",children:[T.jsx(jc,{size:15}),T.jsxs("div",{children:[X===Y.id?T.jsx("input",{className:"mcp-key-name-input",autoFocus:!0,value:ge,onChange:de=>ye(de.target.value),onKeyDown:de=>{de.key==="Enter"&&ke(Y.id),de.key==="Escape"&&I(null)},onBlur:()=>{ke(Y.id)}}):T.jsx("strong",{children:Y.name}),T.jsxs("code",{children:[Y.prefix,"••••••••"]}),T.jsxs("span",{children:[Y.allowed_tools.length?`可用工具 ${Y.allowed_tools.length}/${Xs.length}`:"可调用全部工具",Y.last_used_at?` · 最近使用 ${Ju(Y.last_used_at,e)}`:" · 尚未使用"]}),T.jsx("div",{className:"tool-chip-list key-tool-list",children:(Y.allowed_tools.length?Y.allowed_tools:Xs.map(([de])=>de)).map(de=>T.jsx("span",{className:"tool-chip",children:de},de))})]}),T.jsxs("div",{className:"mcp-key-actions",children:[Y.secret?T.jsx("button",{className:"icon-button",onClick:()=>ut(Y.secret,`key-${Y.id}`),title:"复制 Key",children:n===`key-${Y.id}`?T.jsx(el,{size:14}):T.jsx($m,{size:14})}):null,T.jsx("button",{className:"icon-button",onClick:()=>{I(Y.id),ye(Y.name)},title:"修改名称",children:T.jsx(hR,{size:14})}),T.jsx("button",{className:"ghost-button",onClick:()=>{En(Y.id)},children:"删除"})]})]},Y.id)):T.jsx("p",{className:"mcp-key-empty",children:"还没有创建 Key。"})})]})]}),ae&&T.jsx("div",{className:"modal-backdrop",role:"presentation",onMouseDown:Y=>{Y.target===Y.currentTarget&&Ee(!1)},children:T.jsxs("section",{className:"key-create-modal",role:"dialog","aria-modal":"true","aria-label":"创建 MCP Key",children:[T.jsxs("div",{className:"composer-header",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"访问控制"}),T.jsx("h2",{children:"创建 MCP Key"})]}),T.jsx("button",{className:"icon-button",onClick:()=>Ee(!1),title:"关闭",children:T.jsx(Cf,{size:18})})]}),T.jsxs("label",{className:"config-field",children:[T.jsx("span",{children:"Key 名称"}),T.jsx("input",{autoFocus:!0,value:H,onChange:Y=>K(Y.target.value),placeholder:"例如:平台 Agent"})]}),T.jsxs("div",{className:"mcp-key-tools",children:[T.jsx("span",{className:"key-tools-label",children:"允许调用的工具"}),T.jsx("div",{className:"key-tools-grid",children:Xs.map(([Y])=>T.jsxs("label",{children:[T.jsx("input",{type:"checkbox",checked:j.includes(Y),onChange:de=>$(we=>de.target.checked?[...we,Y]:we.filter(De=>De!==Y))}),Y]},Y))})]}),T.jsxs("div",{className:"modal-actions",children:[T.jsx("button",{className:"ghost-button",onClick:()=>Ee(!1),children:"取消"}),T.jsxs("button",{className:"primary-button",onClick:()=>{Ut(),Ee(!1)},disabled:ue||j.length===0,children:[ue?T.jsx(Gm,{className:"spin",size:15}):T.jsx(jc,{size:15}),"创建 Key"]})]}),V?T.jsx("p",{className:"integration-message",role:"alert",children:V}):null]})}),he==="usage"&&T.jsxs(T.Fragment,{children:[T.jsxs("section",{className:"mcp-usage",role:"tabpanel",children:[T.jsxs("div",{className:"mcp-tools-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"调用统计"}),T.jsx("h2",{children:"工具使用情况"})]}),T.jsx(Ox,{size:18})]}),T.jsxs("div",{className:"mcp-metrics",children:[T.jsx(ja,{label:"TOTAL CALLS",value:o?String(o.total_calls):"--",note:"累计调用"}),T.jsx(ja,{label:"SUCCESS RATE",value:o?.total_calls?`${Ve}%`:"--",note:o?`${o.failed_calls} 次失败`:"读取中"}),T.jsx(ja,{label:"AVG LATENCY",value:o?.total_calls?`${o.average_duration_ms} ms`:"--",note:"平均处理耗时"}),T.jsx(ja,{label:"LAST CALL",value:o?.last_called_at?Ju(o.last_called_at,e):"暂无",note:"最近一次调用",date:!0})]})]}),T.jsxs("section",{className:"mcp-tools",children:[T.jsxs("div",{className:"mcp-tools-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:t.toolsLabel}),T.jsx("h2",{children:t.toolsTitle})]}),T.jsxs("span",{className:"tool-count",children:[Xs.length," ",t.toolsCount]})]}),T.jsx("div",{className:"tool-list",children:Xs.map(([Y,de,we])=>T.jsxs("article",{className:"tool-row",children:[T.jsx("div",{className:"tool-icon",children:T.jsx(of,{size:15})}),T.jsxs("div",{children:[T.jsx("strong",{children:Y}),T.jsx("span",{children:e==="zh"?we:de})]}),T.jsxs("div",{className:"tool-meta",children:[T.jsxs("code",{children:[Me.get(Y)??0," 次"]}),T.jsx("code",{children:t.http})]})]},Y))})]})]})]})}function ja({label:e,value:t,note:n,date:i}){return T.jsxs("div",{className:"stat-card",children:[T.jsx("span",{className:"stat-label",children:e}),T.jsx("strong",{className:i?"stat-date":"",children:t}),T.jsx("span",{className:"stat-note",children:n})]})}function tv({item:e,selected:t,onClick:n,language:i}){const s=go[i],l=po,o=Math.round(e.confidence*100);return T.jsxs("button",{className:`memory-card ${t?"selected":""}`,onClick:n,children:[T.jsxs("div",{className:"card-top",children:[T.jsx("span",{className:`kind-badge kind-${e.kind}`,children:l[e.kind]??e.kind}),T.jsx("span",{className:"card-date",children:Ju(e.occurred_at??e.created_at,i)})]}),T.jsx("p",{children:e.content}),T.jsxs("div",{className:"card-bottom",children:[T.jsx("span",{children:e.project?T.jsxs(T.Fragment,{children:[T.jsx(Fv,{size:13}),e.project]}):T.jsxs(T.Fragment,{children:[T.jsx(Yv,{size:13}),e.scope]})}),T.jsxs("span",{className:"recall-count",children:[e.recall_count??0," 次召回"]}),T.jsxs("span",{className:"confidence",children:[T.jsx("span",{className:"confidence-meter",children:T.jsx("i",{style:{width:`${o}%`}})}),T.jsx("span",{children:s.confidence}),T.jsxs("span",{children:[o,"%"]})]})]})]})}function zq({item:e,language:t}){const n=go[t],i=po;return T.jsxs("div",{className:"detail-body",children:[T.jsx("div",{className:`detail-kind kind-badge kind-${e.kind}`,children:i[e.kind]??e.kind}),T.jsx("h2",{children:e.content}),T.jsxs("div",{className:"detail-meta",children:[T.jsxs("div",{children:[T.jsx("span",{children:n.created}),T.jsx("strong",{children:Ju(e.created_at,t)})]}),T.jsxs("div",{children:[T.jsx("span",{children:n.updated}),T.jsx("strong",{children:Ju(e.updated_at,t)})]}),T.jsxs("div",{children:[T.jsx("span",{children:n.source}),T.jsx("strong",{children:e.source??n.agentWritten})]}),T.jsxs("div",{children:[T.jsx("span",{children:n.recallCount}),T.jsxs("strong",{children:[e.recall_count??0," ",n.times]})]})]}),T.jsxs("div",{className:"detail-section",children:[T.jsx("span",{className:"eyebrow",children:n.scope}),T.jsxs("div",{className:"scope-value",children:[T.jsx(U0,{size:15}),e.scope,e.project&&T.jsxs(T.Fragment,{children:[T.jsx("span",{children:"/"}),e.project]})]})]}),T.jsxs("div",{className:"detail-section",children:[T.jsx("span",{className:"eyebrow",children:n.signals}),T.jsx(nv,{label:n.importance,value:e.importance,language:t}),T.jsx(nv,{label:n.confidence,value:e.confidence,language:t})]})]})}function nv({label:e,value:t,language:n}){return T.jsxs("div",{className:"signal-row",children:[T.jsx("span",{children:e}),T.jsx("div",{className:"signal-track",children:T.jsx("span",{style:{width:`${Math.round(t*100)}%`}})}),T.jsxs("b",{children:[Math.round(t*100),"%"]})]})}function Fq({dark:e,onToggleTheme:t}){return T.jsxs("div",{className:"settings-page",children:[T.jsx("section",{className:"page-heading",children:T.jsxs("div",{children:[T.jsxs("div",{className:"heading-kicker",children:[T.jsx("span",{className:"live-dot"}),"本地工作区"]}),T.jsx("h1",{children:"设置"}),T.jsx("p",{children:"调整界面显示,并查看当前数据存储位置。"})]})}),T.jsxs("section",{className:"config-panel settings-panel",children:[T.jsxs("div",{className:"config-panel-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"APPEARANCE"}),T.jsx("h2",{children:"界面显示"})]}),e?T.jsx(qv,{size:19}):T.jsx(Vv,{size:19})]}),T.jsxs("div",{className:"settings-row",children:[T.jsxs("span",{children:[T.jsx("strong",{children:"深色模式"}),T.jsx("small",{children:"在浅色和深色界面之间切换。"})]}),T.jsx("button",{className:"ghost-button",onClick:t,children:e?"切换浅色":"切换深色"})]})]}),T.jsxs("section",{className:"config-panel settings-panel",children:[T.jsxs("div",{className:"config-panel-heading",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:"STORAGE"}),T.jsx("h2",{children:"本地存储"})]}),T.jsx(U0,{size:19})]}),T.jsxs("div",{className:"settings-storage",children:[T.jsx("span",{className:"status-dot"}),T.jsx("strong",{children:"SQLite"}),T.jsx("span",{children:"记忆仅保存在当前设备。"})]})]})]})}function qq({onClose:e,onCreate:t,language:n}){const i=go[n],s=po,[l,o]=C.useState(""),[c,d]=C.useState("fact"),[h,m]=C.useState(""),[p,E]=C.useState("");return C.useEffect(()=>{const y=v=>{v.key==="Escape"&&e()};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[e]),T.jsx("div",{className:"modal-backdrop",onMouseDown:y=>{y.target===y.currentTarget&&e()},children:T.jsxs("div",{className:"composer",role:"dialog","aria-modal":"true","aria-labelledby":"composer-title",children:[T.jsxs("div",{className:"composer-header",children:[T.jsxs("div",{children:[T.jsx("span",{className:"eyebrow",children:i.newMemoryEyebrow}),T.jsx("h2",{id:"composer-title",children:i.composerTitle})]}),T.jsx("button",{className:"icon-button",onClick:e,title:i.close,children:T.jsx(Cf,{size:18})})]}),T.jsxs("label",{children:[i.content,T.jsx("textarea",{autoFocus:!0,value:l,onChange:y=>o(y.target.value),placeholder:i.contentPlaceholder,rows:5})]}),T.jsxs("div",{className:"composer-grid",children:[T.jsxs("label",{children:[i.type,T.jsx(e0,{value:c,onValueChange:d,options:MA.slice(1).map(y=>({value:y,label:s[y]})),ariaLabel:i.type,className:"composer-select"})]}),T.jsxs("label",{children:[i.scope,T.jsx("input",{value:h,onChange:y=>m(y.target.value),placeholder:i.scopeOptional})]})]}),T.jsxs("label",{children:[i.source,T.jsx("input",{value:p,onChange:y=>E(y.target.value),placeholder:i.sourcePlaceholder})]}),T.jsxs("div",{className:"composer-footer",children:[T.jsxs("span",{children:[T.jsx(el,{size:14}),i.writeLocal]}),T.jsxs("div",{children:[T.jsx("button",{className:"ghost-button",onClick:e,children:i.cancel}),T.jsxs("button",{className:"primary-button",disabled:!l.trim(),onClick:()=>t({content:l,kind:c,project:h,source:p}),children:[i.save," ",T.jsx(zv,{size:15})]})]})]})]})})}sN.createRoot(document.getElementById("root")).render(T.jsx(ml.StrictMode,{children:T.jsx(Z6,{router:Mq})}));const Vq=Object.freeze(Object.defineProperty({__proto__:null,Mermaid:IA},Symbol.toStringTag,{value:"Module"}));export{Wq as E,rn as S,rF as c,T as j,C as r};
|
package/public/index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<meta name="theme-color" content="#f7f8fa" />
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
8
|
<title>Memory One</title>
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-Desg7wZu.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-C2R_a7hV.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body><div id="root"></div></body>
|
|
13
13
|
</html>
|