@mingxy/cerebro 1.18.4 → 1.18.5
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mingxy/cerebro",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.5",
|
|
4
4
|
"description": "Cerebro persistent memory plugin for OpenCode — auto-recall, auto-capture, 9 memory tools with clustering, project-scoped memory isolation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -157,7 +157,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
157
157
|
`)?e:e.replace(/(#{1,3}\s+[^#])/g,`
|
|
158
158
|
$1`).replace(/(\d+\.\s+[^\d])/g,`
|
|
159
159
|
$1`).replace(/(\s-\s)/g,`
|
|
160
|
-
- `).trim()}function l9(e){return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Mme(){let[e,n]=(0,y.useState)(``),[r,i]=(0,y.useState)(null),a=ob(e=>e.hasPassword),o=ob(e=>e.unlock),s=async()=>{if(!e.trim()){i(`请输入密码`);return}if(!a){i(`您还没设置密码,请先设置密码`);return}await o(e)||i(`密码错误`)};return(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:a?`Vault 已锁定`:`无法解锁`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:a?`此记忆已加密,请输入 Vault 密码查看`:`您尚未设置 Vault 密码,请先前往设置`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 max-w-xs mx-auto`,children:[(0,K.jsx)(hb,{type:`password`,placeholder:a?`输入密码...`:`请先设置密码...`,value:e,onChange:e=>{n(e.target.value),i(null)},onKeyDown:e=>e.key===`Enter`&&s(),className:r?`border-destructive`:``,disabled:!a}),(0,K.jsx)(J,{size:`sm`,onClick:s,disabled:!a,children:`解锁`})]}),r&&(0,K.jsx)(`p`,{className:`text-xs text-destructive`,children:r})]})}function Nme({memory:e}){let n=[{key:`l0_abstract`,label:`摘要`},{key:`l1_overview`,label:`概览`},{key:`l2_content`,label:`详情`},{key:`content`,label:`原文`}].filter(n=>{let r=e[n.key];return r!=null&&String(r).trim().length>0}),r=`omem-memory-tab-${e.id}`,[i,a]=(0,y.useState)(()=>{try{let e=sessionStorage.getItem(r);if(e&&n.some(n=>n.key===e))return e}catch{}return n.find(e=>e.key===`content`)?.key||n.find(e=>e.key===`l2_content`)?.key||n[0]?.key});if((0,y.useEffect)(()=>{(!i||!n.some(e=>e.key===i))&&a(n[0]?.key)},[n,i]),n.length===0)return(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-4 text-sm text-muted-foreground`,children:`无内容`});if(n.length===1){let r=e[n[0].key];return(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-4 prose prose-sm dark:prose-invert max-w-none break-words`,children:!r||r.trim().length===0?(0,K.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`无内容`}):(0,K.jsx)(p0,{remarkPlugins:[Y4],children:c9(r)})})}return(0,K.jsxs)(x7,{value:i,onValueChange:e=>{a(e);try{sessionStorage.setItem(r,e)}catch{}},className:`w-full`,children:[(0,K.jsx)(S7,{className:`mb-2`,children:n.map(e=>(0,K.jsxs)(C7,{value:e.key,children:[(0,K.jsx)(bm,{className:`size-3 mr-1`}),e.label]},e.key))}),n.map(n=>{let r=e[n.key],i=!r||r.trim().length===0;return(0,K.jsx)(w7,{value:n.key,children:(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-4 prose prose-sm dark:prose-invert max-w-none break-words`,children:i?(0,K.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`无内容`}):(0,K.jsx)(p0,{remarkPlugins:[Y4],children:c9(r)})})},n.key)})]})}function u9({label:e,value:n}){return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),(0,K.jsx)(`div`,{className:`text-sm font-medium`,children:n})]})}var Pme={supersedes:`#ef4444`,contextualizes:`#3b82f6`,supports:`#10b981`,contradicts:`#a855f7`,continues:`#06b6d4`,continued_by:`#06b6d4`};function Fme({memoryId:e,relations:n}){let r=(0,y.useRef)(null),i=(0,y.useRef)(null),a=et(),o=(0,y.useMemo)(()=>{let r=new Map;return n.forEach(e=>{r.has(e.target_id)||r.set(e.target_id,{id:e.target_id,name:e.target_id.slice(0,8),isCenter:!1})}),{nodes:[{id:e,name:e.slice(0,8),isCenter:!0},...Array.from(r.values())],links:n.map(n=>({source:e,target:n.target_id,color:Pme[n.relation_type]||`#6b7280`,relationType:n.relation_type,contextLabel:n.context_label}))}},[e,n]);return(0,K.jsx)(`div`,{ref:r,className:`h-[300px] w-full`,children:(0,K.jsx)(p7,{ref:i,graphData:o,onEngineStop:()=>{i.current?.zoomToFit(400,40)},nodeCanvasObject:(e,n,r)=>{let i=e.x??0,a=e.y??0;if(!isFinite(i)||!isFinite(a))return;let o=e.isCenter,s=o?14:8;if(o){let e=n.createRadialGradient(i,a,s*.5,i,a,s*2.5);e.addColorStop(0,`rgba(245,158,11,0.25)`),e.addColorStop(1,`rgba(245,158,11,0)`),n.fillStyle=e,n.beginPath(),n.arc(i,a,s*2.5,0,Math.PI*2),n.fill()}if(o){let e=n.createRadialGradient(i-s*.3,a-s*.3,0,i,a,s);e.addColorStop(0,`#fbbf24`),e.addColorStop(1,`#f97316`),n.fillStyle=e,n.strokeStyle=`#f59e0b`,n.lineWidth=2}else n.fillStyle=`#3b82f6`,n.strokeStyle=`#60a5fa`,n.lineWidth=1.5;n.beginPath(),n.arc(i,a,s,0,Math.PI*2),n.fill(),n.stroke();let c=e.name;n.font=`${Math.max(10/r,8)}px sans-serif`,n.textAlign=`center`,n.textBaseline=`bottom`,n.fillStyle=o?`#fbbf24`:`#94a3b8`,n.fillText(c,i,a-s-4/r)},nodePointerAreaPaint:(e,n,r)=>{let i=e.x??0,a=e.y??0;if(!isFinite(i)||!isFinite(a))return;let o=e.isCenter?18:14;r.fillStyle=n,r.beginPath(),r.arc(i,a,o,0,Math.PI*2),r.fill()},nodeLabel:e=>{let n=e;if(n.isCenter)return`当前记忆: ${n.name}`;let r=o.links.find(e=>(typeof e.target==`string`?e.target:e.target.id)===n.id);if(!r)return n.name;let i=[`ID: ${n.name}`];return r.relationType&&i.push(`关系: ${r.relationType}`),r.contextLabel&&i.push(r.contextLabel),i.join(` | `)},linkDirectionalArrowLength:6,linkDirectionalArrowRelPos:1,linkCurvature:.15,linkColor:e=>e.color,linkWidth:1.5,backgroundColor:`transparent`,enableNodeDrag:!1,enableZoomInteraction:!0,enablePanInteraction:!0,nodeRelSize:0,dagMode:`radialout`,dagLevelDistance:70,onNodeClick:e=>{let n=e;!n.isCenter&&n.id&&a(`/memories/${n.id}`)}})})}function Ime({memory:e}){let n={peripheral:0,working:1,core:2},r={access_via_get:`访问触发`,access_via_search:`搜索触发`,access_via_recall:`召回触发`,access_via_cross_space_search:`跨空间搜索触发`,scheduled_evaluation:`定时评估`},i=[];if(e.tier_history)try{i=JSON.parse(e.tier_history)}catch{}return i.length===0?null:(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{className:`pb-3`,children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(nm,{className:`size-4 text-muted-foreground`}),`等级变更历史`]})}),(0,K.jsx)(wb,{children:(0,K.jsx)(`div`,{className:`overflow-x-auto`,children:(0,K.jsx)(`div`,{className:`flex items-start min-w-max`,children:i.map((e,a)=>{let o=(n[e.from]??0)<(n[e.to]??0);return(0,K.jsxs)(`div`,{className:`flex flex-col items-center`,style:{minWidth:`140px`},children:[(0,K.jsxs)(`div`,{className:`text-[11px] text-muted-foreground mb-3 whitespace-nowrap text-center`,children:[new Date(e.at).toLocaleDateString(`zh-CN`,{month:`2-digit`,day:`2-digit`}),(0,K.jsx)(`span`,{className:`text-[10px] ml-1 opacity-70`,children:new Date(e.at).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})})]}),(0,K.jsxs)(`div`,{className:`flex items-center w-full`,children:[a>0&&(0,K.jsx)(`div`,{className:`flex-1 h-px bg-border`}),(0,K.jsx)(`div`,{className:`size-3 rounded-full border-2 shrink-0 z-10 ring-2 ring-background ${o?`bg-emerald-500/20 border-emerald-500`:`bg-red-500/20 border-red-500`}`}),a<i.length-1&&(0,K.jsx)(`div`,{className:`flex-1 h-px bg-border`})]}),(0,K.jsxs)(`div`,{className:`mt-3 flex flex-col items-center gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1`,children:[o?(0,K.jsx)(Up,{className:`size-3.5 text-emerald-500 shrink-0`}):(0,K.jsx)(zp,{className:`size-3.5 text-red-500 shrink-0`}),(0,K.jsx)(hJ,{variant:`outline`,className:`text-[10px] px-1.5 py-0 ${EJ(e.from)}`,children:wJ(e.from)}),(0,K.jsx)(`span`,{className:`text-muted-foreground text-[10px]`,children:`→`}),(0,K.jsx)(hJ,{variant:`outline`,className:`text-[10px] px-1.5 py-0 ${EJ(e.to)}`,children:wJ(e.to)})]}),(0,K.jsxs)(`p`,{className:`text-[10px] text-muted-foreground text-center`,children:[r[e.reason]||e.reason,` · #`,e.access_count]})]})]},e.at+e.from+e.to)})})})})]})}function Lme(){let{id:e}=it(),n=et(),r=Ze(),i=()=>{let e=r.state?.from||sessionStorage.getItem(`memories-list-from`)||`/memories`;n(e.startsWith(`/`)?e:`/${e}`)},[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!0),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(!1),[p,m]=(0,y.useState)(!1),[h,g]=(0,y.useState)(!1),[_,v]=(0,y.useState)(!1),b=ob(e=>e.isUnlocked),x=ob(e=>e.lock);if((0,y.useEffect)(()=>{if(!e)return;async function n(){try{c(!0),u(null);let n=await ib.get(`/v1/memories/${e}`,{params:{skip_access:!0}});console.log(`Memory detail raw response:`,n),o({...n,l0_abstract:n.l0_abstract??n.abstract??``,l1_overview:n.l1_overview??n.overview??``,l2_content:n.l2_content??n.detail??``})}catch(e){console.error(`Failed to fetch memory:`,e),u(`加载记忆详情失败`)}finally{c(!1)}}n()},[e]),s)return(0,K.jsxs)(`div`,{className:`space-y-6 max-w-6xl mx-auto`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(Tb,{className:`h-8 w-8`}),(0,K.jsx)(Tb,{className:`h-6 w-32`})]}),(0,K.jsx)(Tb,{className:`h-8 w-3/4`}),(0,K.jsx)(Tb,{className:`h-4 w-1/2`}),(0,K.jsxs)(`div`,{className:`space-y-3`,children:[(0,K.jsx)(Tb,{className:`h-4 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-4/5`})]})]});if(l||!a)return(0,K.jsxs)(`div`,{className:`space-y-4`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>i(),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-6 text-sm text-destructive`,children:l||`记忆不存在`})]});let S=xJ(a.tags,a.visibility),C=!S||b;return(0,K.jsxs)(`div`,{className:`space-y-6 max-w-6xl mx-auto`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>i(),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),S&&(0,K.jsxs)(hJ,{variant:`outline`,className:`border-amber-500/50 text-amber-500 bg-amber-500/10`,children:[(0,K.jsx)(Em,{className:`size-3 mr-1`}),`私密记忆`]}),(0,K.jsx)(hJ,{variant:`outline`,className:EJ(a.tier),children:wJ(a.tier)})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[C&&(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,className:`text-muted-foreground hover:text-destructive`,onClick:()=>f(!0),children:[(0,K.jsx)(Xm,{className:`size-3.5 mr-1.5`}),`删除`]}),b&&S&&(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>{x()},children:[(0,K.jsx)(Em,{className:`size-3.5 mr-1.5`}),`锁定`]})]})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:S&&!C?`🔒 私密记忆`:`记忆详情`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-4 text-sm text-muted-foreground flex-wrap`,children:[(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(qp,{className:`size-3.5`}),l9(a.created_at)]}),a.updated_at!==a.created_at&&(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(nm,{className:`size-3.5`}),l9(a.updated_at)]}),(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(om,{className:`size-3.5`}),`访问 `,a.access_count||0,` 次`]}),(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(pm,{className:`size-3.5`}),a.id.slice(0,8),`...`]})]})]}),(0,K.jsx)(m7,{}),C?(0,K.jsxs)(`div`,{className:`flex gap-6`,children:[(0,K.jsxs)(`div`,{className:`flex-1 min-w-0 space-y-6`,children:[(0,K.jsx)(Ime,{memory:a}),(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(bm,{className:`size-4 text-muted-foreground`}),`内容`,S&&(0,K.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-amber-500 ml-auto font-normal`,children:[(0,K.jsx)(Tm,{className:`size-3`}),`已解锁`]})]})}),(0,K.jsx)(wb,{children:(0,K.jsx)(Nme,{memory:a})})]}),a.tags&&a.tags.length>0&&(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(Jm,{className:`size-4 text-muted-foreground`}),`标签`]})}),(0,K.jsx)(wb,{children:(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:a.tags.map(e=>(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(e),children:[e===`私密`&&(0,K.jsx)(Em,{className:`size-2.5 mr-1`}),e]},e))})})]}),(0,K.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-4`,children:[(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(vm,{className:`size-4 text-muted-foreground`}),`基本信息`]})}),(0,K.jsxs)(wb,{className:`space-y-3`,children:[(0,K.jsx)(u9,{label:`分类`,value:a.category||`—`}),(0,K.jsx)(u9,{label:`类型`,value:a.memory_type||`—`}),(0,K.jsx)(u9,{label:`状态`,value:a.state||`—`}),(0,K.jsx)(u9,{label:`等级`,value:(0,K.jsx)(hJ,{variant:`outline`,className:EJ(a.tier),children:wJ(a.tier)})})]})]}),(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(Jp,{className:`size-4 text-muted-foreground`}),`质量指标`]})}),(0,K.jsxs)(wb,{className:`space-y-3`,children:[(0,K.jsx)(u9,{label:`重要性`,value:a.importance?.toFixed(2)??`—`}),(0,K.jsx)(u9,{label:`置信度`,value:a.confidence?.toFixed(2)??`—`}),(0,K.jsx)(u9,{label:`访问次数`,value:a.access_count??`—`})]})]}),(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(fm,{className:`size-4 text-muted-foreground`}),`来源信息`]})}),(0,K.jsxs)(wb,{className:`space-y-3`,children:[(0,K.jsx)(u9,{label:`来源`,value:a.source||`—`}),a.project_path&&(0,K.jsx)(u9,{label:`项目路径`,value:a.project_path}),(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`范围`}),h?null:(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,className:`h-5 px-1.5 text-xs text-muted-foreground hover:text-foreground`,onClick:()=>g(!0),children:[(0,K.jsx)(Pm,{className:`size-3 mr-1`}),`编辑`]})]}),h?(0,K.jsxs)(r9,{defaultValue:a.scope||`global`,onValueChange:async e=>{if(!a||!e||e===a.scope){g(!1);return}v(!0);try{await ib.post(`/v1/memories/batch-visibility`,{memory_ids:[a.id],scope:e}),o(n=>n?{...n,scope:e}:null),G.success(`范围已更新`)}catch(e){console.error(`Update scope failed:`,e),G.error(`更新失败,请重试`)}finally{v(!1),g(!1)}},disabled:_,children:[(0,K.jsx)(a9,{className:`h-8 text-sm`,children:(0,K.jsx)(i9,{})}),(0,K.jsxs)(o9,{children:[(0,K.jsx)(s9,{value:`public`,children:`public`}),(0,K.jsx)(s9,{value:`private`,children:`private`}),(0,K.jsx)(s9,{value:`global`,children:`global`})]})]}):(0,K.jsx)(`div`,{className:`text-sm font-medium`,children:a.scope||`—`})]}),(0,K.jsx)(u9,{label:`Agent ID`,value:a.agent_id||`—`}),(0,K.jsx)(u9,{label:`Session ID`,value:a.session_id||`—`})]})]})]})]}),a.relations&&a.relations.length>0&&(0,K.jsxs)(`div`,{className:`w-80 shrink-0 sticky top-6`,children:[(0,K.jsxs)(`div`,{className:`text-xs text-muted-foreground mb-2 flex items-center gap-1.5`,children:[(0,K.jsx)(Cm,{className:`size-3.5`}),`关联图谱`]}),(0,K.jsx)(Fme,{memoryId:a.id,relations:a.relations},a.id+a.relations.length)]})]}):(0,K.jsx)(Mme,{}),(0,K.jsx)(aJ,{open:d,onOpenChange:e=>{!e&&!p&&f(!1)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认删除记忆`}),(0,K.jsx)(uJ,{children:`确定要删除这条记忆吗?此操作不可撤销。`})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{disabled:p,children:`取消`}),(0,K.jsx)(dJ,{disabled:p,onClick:async()=>{m(!0);try{await ib.delete(`/v1/memories/${e}`),G.success(`记忆已删除`),n(`/memories`)}catch(e){console.error(`Delete failed:`,e),G.error(`删除失败,请重试`),f(!1)}finally{m(!1)}},className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:p?`删除中...`:`删除`})]})]})})]})}function d9({className:e,...n}){return(0,K.jsx)(`textarea`,{"data-slot":`textarea`,className:wp(`flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...n})}function Rme(e){return e.split(/[,,]/).map(e=>e.trim()).filter(e=>e.length>0)}function zme(e){return e.join(`, `)}function f9(){let{id:e}=it(),n=et(),r=!!e,[i,a]=(0,y.useState)({content:``,tags:[],source:``}),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(r),[u,d]=(0,y.useState)(!1),[f,p]=(0,y.useState)(null),[m,h]=(0,y.useState)(!1),g=ob(e=>e.isUnlocked);(0,y.useEffect)(()=>{if(!r)return;async function n(){try{l(!0);let n=await ib.get(`/v1/memories/${e}`);a({content:n.content||``,tags:n.tags||[],source:n.source||``}),s(zme(n.tags||[])),h(xJ(n.tags,n.visibility))}catch(e){console.error(`Failed to fetch memory:`,e),p(`加载记忆失败`)}finally{l(!1)}}n()},[e,r]);let _=async()=>{if(!i.content.trim()){p(`内容不能为空`);return}try{d(!0),p(null);let a={content:i.content.trim(),tags:i.tags,source:i.source.trim()||void 0};r?(await ib.put(`/v1/memories/${e}`,a),n(`/memories/${e}`)):n(`/memories/${(await ib.post(`/v1/memories`,a)).id}`)}catch(e){console.error(`Failed to save memory:`,e),p(r?`保存记忆失败`:`创建记忆失败`)}finally{d(!1)}},v=e=>{s(e),a(n=>({...n,tags:Rme(e)}))},b=e=>{if(e.key===`Enter`){e.preventDefault();let n=o.trim();n&&!i.tags.includes(n)&&(a(e=>({...e,tags:[...e.tags,n]})),s(``))}},x=e=>{a(n=>({...n,tags:n.tags.filter(n=>n!==e)}))};return c?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsx)(Tb,{className:`h-8 w-32`}),(0,K.jsxs)(`div`,{className:`space-y-4`,children:[(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-32 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-10 w-full`})]})]}):r&&m&&!g?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:`Vault 已锁定`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:`此记忆为私密记忆,请先解锁 Vault 后再进行编辑`}),(0,K.jsx)(J,{size:`sm`,onClick:()=>n(`/memories/${e}`),children:`返回详情页`})]})]}):(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsx)(`h1`,{className:`text-xl font-semibold`,children:r?`编辑记忆`:`新建记忆`})]}),f&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:f}),(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(gb,{htmlFor:`content`,children:[`内容 `,(0,K.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,K.jsx)(d9,{id:`content`,value:i.content,onChange:e=>a(n=>({...n,content:e.target.value})),placeholder:`输入记忆内容...`,rows:8,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`tags`,children:`标签`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(hb,{id:`tags`,value:o,onChange:e=>v(e.target.value),onKeyDown:b,placeholder:`输入标签,按回车或逗号分隔...`}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:i.tags.map(e=>(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(e,`cursor-pointer hover:opacity-60`),onClick:()=>x(e),title:`点击移除`,children:[e,` ×`]},e))})]})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`source`,children:`来源`}),(0,K.jsx)(hb,{id:`source`,value:i.source,onChange:e=>a(n=>({...n,source:e.target.value})),placeholder:`记忆来源(可选)...`})]}),(0,K.jsxs)(`div`,{className:`flex justify-end gap-3 pt-4`,children:[(0,K.jsx)(J,{variant:`outline`,onClick:()=>n(-1),disabled:u,children:`取消`}),(0,K.jsx)(J,{onClick:_,disabled:u,children:u?`保存中...`:r?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Bm,{className:`size-4 mr-1.5`}),`保存`]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Lm,{className:`size-4 mr-1.5`}),`创建`]})})]})]})]})}function Bme(e){return e.split(/[,,]/).map(e=>e.trim()).filter(e=>e.length>0)}function Vme(e){return e.join(`, `)}function Hme(){let{id:e}=it(),n=et(),[r,i]=(0,y.useState)({l0_abstract:``,l1_overview:``,l2_content:``,content:``,tags:[],source:``}),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(!0),[l,u]=(0,y.useState)(!1),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),h=ob(e=>e.isUnlocked);(0,y.useEffect)(()=>{if(!e)return;async function n(){try{c(!0);let n=await ib.get(`/v1/memories/${e}`);i({l0_abstract:n.l0_abstract??n.abstract??``,l1_overview:n.l1_overview??n.overview??``,l2_content:n.l2_content??n.detail??``,content:n.content||``,tags:n.tags||[],source:n.source||``}),o(Vme(n.tags||[])),m(xJ(n.tags,n.visibility))}catch(e){console.error(`Failed to fetch memory:`,e),f(`加载记忆失败`)}finally{c(!1)}}n()},[e]);let g=async()=>{if(!r.content.trim()){f(`原文内容不能为空`);return}try{u(!0),f(null);let i={content:r.content.trim(),l0_abstract:r.l0_abstract.trim()||void 0,l1_overview:r.l1_overview.trim()||void 0,l2_content:r.l2_content.trim()||void 0,tags:r.tags,source:r.source.trim()||void 0};await ib.put(`/v1/memories/${e}`,i),n(`/memories/${e}`)}catch(e){console.error(`Failed to save memory:`,e),f(`保存记忆失败`)}finally{u(!1)}},_=e=>{o(e),i(n=>({...n,tags:Bme(e)}))},v=e=>{if(e.key===`Enter`){e.preventDefault();let n=a.trim();n&&!r.tags.includes(n)&&(i(e=>({...e,tags:[...e.tags,n]})),o(``))}},b=e=>{i(n=>({...n,tags:n.tags.filter(n=>n!==e)}))};return s?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsx)(Tb,{className:`h-8 w-32`}),(0,K.jsxs)(`div`,{className:`space-y-4`,children:[(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-32 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-10 w-full`})]})]}):p&&!h?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:`Vault 已锁定`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:`此记忆为私密记忆,请先解锁 Vault 后再进行编辑`}),(0,K.jsx)(J,{size:`sm`,onClick:()=>n(`/memories/${e}`),children:`返回详情页`})]})]}):(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsx)(`h1`,{className:`text-xl font-semibold`,children:`编辑 Insight 记忆`})]}),d&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:d}),(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`l0_abstract`,children:`摘要`}),(0,K.jsx)(d9,{id:`l0_abstract`,value:r.l0_abstract,onChange:e=>i(n=>({...n,l0_abstract:e.target.value})),placeholder:`输入摘要...`,rows:3,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`l1_overview`,children:`概览`}),(0,K.jsx)(d9,{id:`l1_overview`,value:r.l1_overview,onChange:e=>i(n=>({...n,l1_overview:e.target.value})),placeholder:`输入概览...`,rows:4,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(gb,{htmlFor:`l2_content`,children:[`详情 `,(0,K.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,K.jsx)(d9,{id:`l2_content`,value:r.l2_content,onChange:e=>i(n=>({...n,l2_content:e.target.value})),placeholder:`输入详情内容...`,rows:6,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(gb,{htmlFor:`content`,children:[`原文 `,(0,K.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,K.jsx)(d9,{id:`content`,value:r.content,onChange:e=>i(n=>({...n,content:e.target.value})),placeholder:`输入原文内容...`,rows:6,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`tags`,children:`标签`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(hb,{id:`tags`,value:a,onChange:e=>_(e.target.value),onKeyDown:v,placeholder:`输入标签,按回车或逗号分隔...`}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:r.tags.map(e=>(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(e,`cursor-pointer hover:opacity-60`),onClick:()=>b(e),title:`点击移除`,children:[e,` ×`]},e))})]})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`source`,children:`来源`}),(0,K.jsx)(hb,{id:`source`,value:r.source,onChange:e=>i(n=>({...n,source:e.target.value})),placeholder:`记忆来源(可选)...`})]}),(0,K.jsxs)(`div`,{className:`flex justify-end gap-3 pt-4`,children:[(0,K.jsx)(J,{variant:`outline`,onClick:()=>n(-1),disabled:l,children:`取消`}),(0,K.jsx)(J,{onClick:g,disabled:l,children:l?`保存中...`:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Bm,{className:`size-4 mr-1.5`}),`保存`]})})]})]})]})}var Ume=300;function Wme({onUnlock:e}){let[n,r]=(0,y.useState)(``),[i,a]=(0,y.useState)(null),[o,s]=(0,y.useState)(!1),c=ob(e=>e.setPassword),l=ob(e=>e.verifyPassword),u=ob(e=>e.checkStatus),d=ob(e=>e.hasPassword);(0,y.useEffect)(()=>{u().then(()=>{s(!d)})},[u,d]);let f=async()=>{if(!n.trim()){a(`请输入密码`);return}o?(await c(n),e()):await l(n)?(a(null),e()):a(`密码错误`)};return(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4 max-w-md mx-auto mt-12`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:o?`设置 Vault 密码`:`Vault 已锁定`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:o?`首次查看私密记忆,请设置 Vault 密码`:`私密记忆已加密,请输入 Vault 密码查看`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 max-w-xs mx-auto`,children:[(0,K.jsx)(hb,{type:`password`,placeholder:o?`设置密码...`:`输入密码...`,value:n,onChange:e=>{r(e.target.value),a(null)},onKeyDown:e=>e.key===`Enter`&&f(),className:i?`border-destructive`:``}),(0,K.jsx)(J,{size:`sm`,onClick:f,children:o?`设置`:`解锁`})]}),i&&(0,K.jsx)(`p`,{className:`text-xs text-destructive`,children:i})]})}function Gme(){let e=et(),n=ob(e=>e.isUnlocked),r=ob(e=>e.lock),[i,a]=(0,y.useState)(!1),[o,s]=(0,y.useState)([]),[c,l]=(0,y.useState)(!0),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(1),[m,h]=(0,y.useState)(``),[g,_]=(0,y.useState)(0),[v,b]=(0,y.useState)(`all`),[x,S]=(0,y.useState)(`created_at`),[C,w]=(0,y.useState)(50),[T,E]=(0,y.useState)(null),[D,O]=(0,y.useState)(!1),k=n||i,A=(0,y.useCallback)(async(e,n)=>{try{l(!0),d(null);let r={offset:(e-1)*C,limit:C,search:n||void 0,sort:x};v!==`all`&&(r.tier=v);let i=await ib.get(`/v1/memories`,{params:r});s(i.memories||[]),_(i.total_count||0)}catch(e){console.error(`Failed to fetch memories:`,e),d(`加载记忆列表失败`)}finally{l(!1)}},[v,x,C]);(0,y.useEffect)(()=>{if(!k)return;let e=setTimeout(()=>{p(1),A(1,m)},Ume);return()=>clearTimeout(e)},[m,A,k]),(0,y.useEffect)(()=>{k&&A(f,m)},[f,m,A,k]);let j=o.filter(e=>xJ(e.tags,e.visibility)),M=n=>{e(`/memories/${n}`)},N=e=>{h(e.target.value)},P=()=>{f>1&&p(f-1)},F=()=>{f*C<g&&p(f+1)},I=(e,n)=>{n.stopPropagation(),E(e)},L=async()=>{if(!T)return;let e=T,n=o;s(n=>n.filter(n=>n.id!==e)),O(!0);try{await ib.delete(`/v1/memories/${e}`),G.success(`记忆已删除`),E(null),n.filter(n=>n.id!==e).length===0&&f>1?(p(f-1),A(f-1,m)):A(f,m)}catch(e){console.error(`Failed to delete memory:`,e),G.error(`删除失败,请重试`),s(n),E(null)}finally{O(!1)}},R=f*C<g,z=f>1;return k?(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(`h1`,{className:`text-2xl font-semibold tracking-tight flex items-center gap-2`,children:[(0,K.jsx)(Em,{className:`size-6 text-amber-500`}),`私密记忆`]}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`管理您的私密记忆内容`})]}),(0,K.jsxs)(J,{variant:`outline`,size:`sm`,onClick:()=>r(),children:[(0,K.jsx)(Em,{className:`size-3.5 mr-1.5`}),`锁定 Vault`]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:[(0,K.jsxs)(`div`,{className:`relative flex-1 max-w-md`,children:[(0,K.jsx)(Vm,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,K.jsx)(hb,{type:`text`,placeholder:`搜索私密记忆内容...`,value:m,onChange:N,className:`pl-9`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(Wm,{className:`size-3.5 text-muted-foreground`}),(0,K.jsxs)(`select`,{value:v,onChange:e=>{b(e.target.value),p(1)},className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,K.jsx)(`option`,{value:`all`,children:`全部分类`}),(0,K.jsx)(`option`,{value:`core`,children:`核心`}),(0,K.jsx)(`option`,{value:`working`,children:`工作区`}),(0,K.jsx)(`option`,{value:`peripheral`,children:`边缘`})]}),(0,K.jsx)(Hp,{className:`size-3.5 text-muted-foreground`}),(0,K.jsxs)(`select`,{value:x,onChange:e=>{S(e.target.value),p(1)},className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,K.jsx)(`option`,{value:`updated_at`,children:`按更新时间`}),(0,K.jsx)(`option`,{value:`created_at`,children:`按创建时间`}),(0,K.jsx)(`option`,{value:`importance`,children:`按重要性`}),(0,K.jsx)(`option`,{value:`confidence`,children:`按置信度`}),(0,K.jsx)(`option`,{value:`access_count`,children:`按访问次数`})]}),(0,K.jsxs)(`select`,{value:C,onChange:e=>{w(Number(e.target.value)),p(1)},className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,K.jsx)(`option`,{value:20,children:`20条/页`}),(0,K.jsx)(`option`,{value:50,children:`50条/页`}),(0,K.jsx)(`option`,{value:100,children:`100条/页`})]})]})]}),u&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:u}),(0,K.jsx)(`div`,{className:`space-y-3`,children:c?[1,2,3,4,5].map(e=>(0,K.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-4 space-y-2`,children:[(0,K.jsx)(Tb,{className:`h-4 w-[95%]`}),(0,K.jsx)(Tb,{className:`h-4 w-[80%]`}),(0,K.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,K.jsx)(Tb,{className:`h-5 w-16`}),(0,K.jsx)(Tb,{className:`h-5 w-12`})]})]},`sk-${e}`)):j.length===0?(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-8 text-center text-muted-foreground`,children:`暂无私密记忆`}):j.map(e=>(0,K.jsxs)(`button`,{type:`button`,onClick:()=>M(e.id),className:wp(`w-full text-left rounded-lg border p-4 cursor-pointer transition-colors`,`border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10`),children:[(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,K.jsx)(Em,{className:`h-3 w-3 text-amber-500`}),(0,K.jsx)(`span`,{className:`text-xs text-amber-500 font-medium`,children:`私密记忆`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,K.jsx)(Em,{className:`h-3.5 w-3.5 text-amber-500`}),(0,K.jsx)(`span`,{children:`🔒 已加密,请点击解锁`})]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 mt-3 flex-wrap`,children:[(0,K.jsx)(hJ,{variant:`outline`,className:`font-normal text-xs`,children:e.category||`未分类`}),(0,K.jsx)(hJ,{variant:TJ(e.tier),className:`text-xs`,children:wJ(e.tier)}),(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(`私密`,`text-xs`),children:[(0,K.jsx)(Em,{className:`size-2.5 mr-1`}),`私密`]}),(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:kJ(e.created_at)}),(0,K.jsx)(`button`,{type:`button`,onClick:n=>I(e.id,n),className:`ml-2 p-1 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive transition-colors`,title:`删除`,children:(0,K.jsx)(Xm,{className:`size-3.5`})})]})]},e.id))}),!c&&(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`本页共 `,j.length,` 条私密记忆`]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsxs)(J,{variant:`outline`,size:`sm`,onClick:P,disabled:!z||c,children:[(0,K.jsx)(Zp,{className:`size-4`}),`上一页`]}),(0,K.jsxs)(J,{variant:`outline`,size:`sm`,onClick:F,disabled:!R||c,children:[`下一页`,(0,K.jsx)(Qp,{className:`size-4`})]})]})]}),(0,K.jsx)(aJ,{open:!!T,onOpenChange:e=>{!e&&!D&&E(null)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认删除记忆`}),(0,K.jsx)(uJ,{children:`确定要删除这条记忆吗?此操作不可撤销。`})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{onClick:()=>E(null),disabled:D,children:`取消`}),(0,K.jsx)(dJ,{disabled:D,onClick:L,className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:D?`删除中...`:`删除`})]})]})})]}):(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(`h1`,{className:`text-2xl font-semibold tracking-tight flex items-center gap-2`,children:[(0,K.jsx)(Em,{className:`size-6 text-amber-500`}),`私密记忆`]}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`管理您的私密记忆内容`})]}),(0,K.jsx)(Wme,{onUnlock:()=>a(!0)})]})}var p9=20;function Kme(e){return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function m9(e){return e?e.length<=16?e:e.slice(0,8)+`...`+e.slice(-8):`—`}function qme(){let e=et(),n=Ze(),[r,i]=(0,y.useState)([]),[a,o]=(0,y.useState)(!0),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(``),[d,f]=(0,y.useState)(1),[p,m]=(0,y.useState)(null),[h,g]=(0,y.useState)(!1),[_,v]=(0,y.useState)(new Set),[b,x]=(0,y.useState)(!1),[S,C]=(0,y.useState)(!1);(0,y.useEffect)(()=>{async function e(){try{o(!0),c(null),i((await ib.get(`/v1/session-recalls/groups`,{params:{limit:1e3,offset:0}}))?.groups||[])}catch(e){console.error(`Failed to fetch session groups:`,e),c(`加载 Session 记忆注入记录失败`),G.error(`加载 Session 记忆注入记录失败`)}finally{o(!1)}}e()},[]);let w=(0,y.useMemo)(()=>[...r].sort((e,n)=>new Date(n.last_injected_at).getTime()-new Date(e.last_injected_at).getTime()),[r]),T=(0,y.useMemo)(()=>{if(!l.trim())return w;let e=l.trim().toLowerCase();return w.filter(n=>n.session_id.toLowerCase().includes(e)||n.latest_query.toLowerCase().includes(e))},[w,l]),E=Math.ceil(T.length/p9),D=(0,y.useMemo)(()=>{let e=(d-1)*p9;return T.slice(e,e+p9)},[T,d]),O=r=>{e(`/sessions/${encodeURIComponent(r)}`,{state:{from:n.pathname+n.search}})},k=(e,n)=>{n.stopPropagation(),m(e)},A=async()=>{if(p){C(!0);try{await ib.delete(`/v1/session-recalls/session/${encodeURIComponent(p)}`),i(e=>e.filter(e=>e.session_id!==p)),G.success(`删除成功`)}catch(e){console.error(`Failed to delete session:`,e),G.error(`删除失败`)}finally{C(!1),m(null)}}},j=e=>{v(n=>{let r=new Set(n);return r.has(e)?r.delete(e):r.add(e),r})},M=()=>{v(new Set(D.map(e=>e.session_id)))},N=()=>{v(new Set)},P=async()=>{if(_.size===0)return;let e=Array.from(_);C(!0);try{await Promise.all(e.map(e=>ib.delete(`/v1/session-recalls/session/${encodeURIComponent(e)}`))),i(n=>n.filter(n=>!e.includes(n.session_id))),v(new Set),x(!1),G.success(`已删除 ${e.length} 个 Session`)}catch(e){console.error(`Failed to batch delete sessions:`,e),G.error(`批量删除失败`)}finally{C(!1)}};return(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Session 记忆注入记录`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`查看各 Session 的记忆注入统计与分布`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:[(0,K.jsxs)(`div`,{className:`relative w-80`,children:[(0,K.jsx)(Vm,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,K.jsx)(hb,{type:`text`,placeholder:`搜索 Session ID 或对话内容...`,value:l,onChange:e=>{u(e.target.value),f(1)},className:`pl-9`})]}),(0,K.jsx)(J,{variant:h?`default`:`outline`,size:`sm`,onClick:()=>{g(!h),h&&N()},children:h?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(rh,{className:`size-3.5 mr-1.5`}),`退出管理`]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Wm,{className:`size-3.5 mr-1.5`}),`批量管理`]})}),!a&&T.length>0&&E>1&&(0,K.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(J,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>f(e=>Math.max(1,e-1)),disabled:d===1,children:(0,K.jsx)(Zp,{className:`size-3`})}),(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground min-w-[3ch] text-center`,children:[d,`/`,E]}),(0,K.jsx)(J,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>f(e=>Math.min(E,e+1)),disabled:d===E,children:(0,K.jsx)(Qp,{className:`size-3`})})]}),(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`共 `,T.length,` 个`]})]})]}),h&&(0,K.jsxs)(`div`,{className:`flex items-center justify-between bg-muted/50 rounded-lg px-4 py-3`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,K.jsxs)(`span`,{className:`text-sm font-medium`,children:[`已选择 `,_.size,` 个 Session`]}),_.size>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(J,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:N,children:`取消选择`}),(0,K.jsx)(J,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:M,children:`全选本页`})]})]}),_.size>0&&(0,K.jsxs)(J,{variant:`destructive`,size:`sm`,className:`h-7`,onClick:()=>x(!0),children:[(0,K.jsx)(Xm,{className:`size-3.5 mr-1`}),`删除 (`,_.size,`)`]})]}),s&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:s}),(0,K.jsx)(`div`,{className:`space-y-3`,children:a?[1,2,3,4,5].map(e=>(0,K.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-4 space-y-2`,children:[(0,K.jsx)(Tb,{className:`h-4 w-[40%]`}),(0,K.jsx)(Tb,{className:`h-4 w-[60%]`}),(0,K.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,K.jsx)(Tb,{className:`h-5 w-16`}),(0,K.jsx)(Tb,{className:`h-5 w-12`})]})]},`sk-${e}`)):D.length===0?(0,K.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-12 text-center space-y-4`,children:[(0,K.jsx)(_m,{className:`h-12 w-12 text-muted-foreground mx-auto`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:l?`未找到匹配的 Session`:`暂无 Session 记忆注入记录`}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l?`尝试调整搜索条件`:`注入记忆后此处将显示记录`})]})]}):D.map(e=>{let n=_.has(e.session_id);return(0,K.jsxs)(`div`,{onClick:()=>h?j(e.session_id):O(e.session_id),className:`w-full text-left rounded-lg border border-border bg-card p-4 cursor-pointer transition-colors hover:bg-muted/50 group relative ${h&&n?`ring-2 ring-primary bg-primary/5`:``}`,children:[h&&(0,K.jsx)(`div`,{className:`absolute left-3 top-1/2 -translate-y-1/2 z-10`,children:(0,K.jsx)(`input`,{type:`checkbox`,checked:n,onChange:n=>{n.stopPropagation(),j(e.session_id)},onClick:e=>e.stopPropagation(),className:`size-4 cursor-pointer`})}),(0,K.jsxs)(`div`,{className:h?`pl-8`:``,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-3 flex-1 min-w-0`,children:[(0,K.jsx)(`code`,{className:`text-sm font-mono bg-muted px-2 py-0.5 rounded shrink-0`,children:m9(e.session_id)}),e.latest_query&&(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground truncate max-w-[300px] sm:max-w-[400px] lg:max-w-[500px]`,children:e.latest_query})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground shrink-0`,children:[(0,K.jsxs)(`span`,{className:`text-xs flex items-center gap-1 whitespace-nowrap`,children:[(0,K.jsx)(nm,{className:`size-3.5`}),Kme(e.last_injected_at)]}),(0,K.jsx)(Qp,{className:`size-4 opacity-0 group-hover:opacity-50 transition-opacity`})]})]}),(0,K.jsxs)(`div`,{className:`mt-2 flex items-center justify-between`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,K.jsxs)(hJ,{variant:`secondary`,className:`text-xs font-normal`,children:[(0,K.jsx)(ih,{className:`size-3 mr-1`}),`自动 `,e.auto_count]}),e.manual_count>0&&(0,K.jsxs)(hJ,{variant:`outline`,className:`text-xs font-normal`,children:[(0,K.jsx)(Mm,{className:`size-3 mr-1`}),`手动 `,e.manual_count]}),(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`共 `,(0,K.jsx)(`span`,{className:`font-medium text-foreground`,children:e.count}),` 条`]})]}),!h&&(0,K.jsx)(J,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:n=>k(e.session_id,n),children:(0,K.jsx)(Xm,{className:`size-4 text-destructive`})})]})]})]},e.session_id)})}),!a&&T.length>0&&(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`共 `,T.length,` 个 Session`]}),E>1&&(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(J,{variant:`outline`,size:`sm`,onClick:()=>f(e=>Math.max(1,e-1)),disabled:d===1,children:(0,K.jsx)(Zp,{className:`size-4`})}),(0,K.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[d,` / `,E]}),(0,K.jsx)(J,{variant:`outline`,size:`sm`,onClick:()=>f(e=>Math.min(E,e+1)),disabled:d===E,children:(0,K.jsx)(Qp,{className:`size-4`})})]})]}),(0,K.jsx)(aJ,{open:!!p,onOpenChange:e=>{!e&&!S&&m(null)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认删除 Session`}),(0,K.jsxs)(uJ,{children:[`此操作不可撤销。将删除 Session `,p?m9(p):``,` 的所有注入记录。`]})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{onClick:()=>m(null),disabled:S,children:`取消`}),(0,K.jsx)(dJ,{disabled:S,onClick:A,className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:S?`删除中...`:`删除`})]})]})}),(0,K.jsx)(aJ,{open:b,onOpenChange:e=>{!e&&!S&&x(!1)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认批量删除`}),(0,K.jsxs)(uJ,{children:[`确定要删除选中的 `,_.size,` 个 Session 吗?此操作不可撤销。`]})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{onClick:()=>x(!1),disabled:S,children:`取消`}),(0,K.jsx)(dJ,{disabled:S,onClick:e=>{e.preventDefault(),P()},className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:S?`删除中...`:`删除 ${_.size} 个`})]})]})})]})}function Jme(e){return!e||e.includes(`
|
|
160
|
+
- `).trim()}function l9(e){return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Mme(){let[e,n]=(0,y.useState)(``),[r,i]=(0,y.useState)(null),a=ob(e=>e.hasPassword),o=ob(e=>e.unlock),s=async()=>{if(!e.trim()){i(`请输入密码`);return}if(!a){i(`您还没设置密码,请先设置密码`);return}await o(e)||i(`密码错误`)};return(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:a?`Vault 已锁定`:`无法解锁`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:a?`此记忆已加密,请输入 Vault 密码查看`:`您尚未设置 Vault 密码,请先前往设置`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 max-w-xs mx-auto`,children:[(0,K.jsx)(hb,{type:`password`,placeholder:a?`输入密码...`:`请先设置密码...`,value:e,onChange:e=>{n(e.target.value),i(null)},onKeyDown:e=>e.key===`Enter`&&s(),className:r?`border-destructive`:``,disabled:!a}),(0,K.jsx)(J,{size:`sm`,onClick:s,disabled:!a,children:`解锁`})]}),r&&(0,K.jsx)(`p`,{className:`text-xs text-destructive`,children:r})]})}function Nme({memory:e}){let n=[{key:`l0_abstract`,label:`摘要`},{key:`l1_overview`,label:`概览`},{key:`l2_content`,label:`详情`},{key:`content`,label:`原文`}].filter(n=>{let r=e[n.key];return r!=null&&String(r).trim().length>0}),r=`omem-memory-tab-${e.id}`,[i,a]=(0,y.useState)(()=>{try{let e=sessionStorage.getItem(r);if(e&&n.some(n=>n.key===e))return e}catch{}return n.find(e=>e.key===`content`)?.key||n.find(e=>e.key===`l2_content`)?.key||n[0]?.key});if((0,y.useEffect)(()=>{(!i||!n.some(e=>e.key===i))&&a(n[0]?.key)},[n,i]),n.length===0)return(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-4 text-sm text-muted-foreground`,children:`无内容`});if(n.length===1){let r=e[n[0].key];return(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-4 prose prose-sm dark:prose-invert max-w-none break-words`,children:!r||r.trim().length===0?(0,K.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`无内容`}):(0,K.jsx)(p0,{remarkPlugins:[Y4],children:c9(r)})})}return(0,K.jsxs)(x7,{value:i,onValueChange:e=>{a(e);try{sessionStorage.setItem(r,e)}catch{}},className:`w-full`,children:[(0,K.jsx)(S7,{className:`mb-2`,children:n.map(e=>(0,K.jsxs)(C7,{value:e.key,children:[(0,K.jsx)(bm,{className:`size-3 mr-1`}),e.label]},e.key))}),n.map(n=>{let r=e[n.key],i=!r||r.trim().length===0;return(0,K.jsx)(w7,{value:n.key,children:(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-4 prose prose-sm dark:prose-invert max-w-none break-words`,children:i?(0,K.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`无内容`}):(0,K.jsx)(p0,{remarkPlugins:[Y4],children:c9(r)})})},n.key)})]})}function u9({label:e,value:n}){return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),(0,K.jsx)(`div`,{className:`text-sm font-medium`,children:n})]})}var Pme={supersedes:`#ef4444`,contextualizes:`#3b82f6`,supports:`#10b981`,contradicts:`#a855f7`,continues:`#06b6d4`,continued_by:`#06b6d4`};function Fme({memoryId:e,relations:n}){let r=(0,y.useRef)(null),i=(0,y.useRef)(null),a=et(),o=(0,y.useMemo)(()=>{let r=new Map;return n.forEach(e=>{r.has(e.target_id)||r.set(e.target_id,{id:e.target_id,name:e.target_id.slice(0,8),isCenter:!1})}),{nodes:[{id:e,name:e.slice(0,8),isCenter:!0},...Array.from(r.values())],links:n.map(n=>({source:e,target:n.target_id,color:Pme[n.relation_type]||`#6b7280`,relationType:n.relation_type,contextLabel:n.context_label}))}},[e,n]);return(0,K.jsx)(`div`,{ref:r,className:`h-[300px] w-full`,children:(0,K.jsx)(p7,{ref:i,graphData:o,nodeCanvasObject:(e,n,r)=>{let i=e.x??0,a=e.y??0;if(!isFinite(i)||!isFinite(a))return;let o=e.isCenter,s=o?14:8;if(o){let e=n.createRadialGradient(i,a,s*.5,i,a,s*2.5);e.addColorStop(0,`rgba(245,158,11,0.25)`),e.addColorStop(1,`rgba(245,158,11,0)`),n.fillStyle=e,n.beginPath(),n.arc(i,a,s*2.5,0,Math.PI*2),n.fill()}if(o){let e=n.createRadialGradient(i-s*.3,a-s*.3,0,i,a,s);e.addColorStop(0,`#fbbf24`),e.addColorStop(1,`#f97316`),n.fillStyle=e,n.strokeStyle=`#f59e0b`,n.lineWidth=2}else n.fillStyle=`#3b82f6`,n.strokeStyle=`#60a5fa`,n.lineWidth=1.5;n.beginPath(),n.arc(i,a,s,0,Math.PI*2),n.fill(),n.stroke();let c=e.name;n.font=`${Math.max(10/r,8)}px sans-serif`,n.textAlign=`center`,n.textBaseline=`bottom`,n.fillStyle=o?`#fbbf24`:`#94a3b8`,n.fillText(c,i,a-s-4/r)},nodePointerAreaPaint:(e,n,r)=>{let i=e.x??0,a=e.y??0;if(!isFinite(i)||!isFinite(a))return;let o=e.isCenter?18:14;r.fillStyle=n,r.beginPath(),r.arc(i,a,o,0,Math.PI*2),r.fill()},nodeLabel:e=>{let n=e;if(n.isCenter)return`当前记忆: ${n.name}`;let r=o.links.find(e=>(typeof e.target==`string`?e.target:e.target.id)===n.id);if(!r)return n.name;let i=[`ID: ${n.name}`];return r.relationType&&i.push(`关系: ${r.relationType}`),r.contextLabel&&i.push(r.contextLabel),i.join(` | `)},linkDirectionalArrowLength:6,linkDirectionalArrowRelPos:1,linkCurvature:.15,linkColor:e=>e.color,linkWidth:1.5,backgroundColor:`transparent`,enableNodeDrag:!1,enableZoomInteraction:!0,enablePanInteraction:!0,nodeRelSize:0,cooldownTime:2e3,onEngineStop:()=>{i.current&&i.current.zoomToFit(0,30)},onNodeClick:e=>{let n=e;!n.isCenter&&n.id&&a(`/memories/${n.id}`)}})})}function Ime({memory:e}){let n={peripheral:0,working:1,core:2},r={access_via_get:`访问触发`,access_via_search:`搜索触发`,access_via_recall:`召回触发`,access_via_cross_space_search:`跨空间搜索触发`,scheduled_evaluation:`定时评估`},i=[];if(e.tier_history)try{i=JSON.parse(e.tier_history)}catch{}return i.length===0?null:(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{className:`pb-3`,children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(nm,{className:`size-4 text-muted-foreground`}),`等级变更历史`]})}),(0,K.jsx)(wb,{children:(0,K.jsx)(`div`,{className:`overflow-x-auto`,children:(0,K.jsx)(`div`,{className:`flex items-start min-w-max`,children:i.map((e,a)=>{let o=(n[e.from]??0)<(n[e.to]??0);return(0,K.jsxs)(`div`,{className:`flex flex-col items-center`,style:{minWidth:`140px`},children:[(0,K.jsxs)(`div`,{className:`text-[11px] text-muted-foreground mb-3 whitespace-nowrap text-center`,children:[new Date(e.at).toLocaleDateString(`zh-CN`,{month:`2-digit`,day:`2-digit`}),(0,K.jsx)(`span`,{className:`text-[10px] ml-1 opacity-70`,children:new Date(e.at).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})})]}),(0,K.jsxs)(`div`,{className:`flex items-center w-full`,children:[a>0&&(0,K.jsx)(`div`,{className:`flex-1 h-px bg-border`}),(0,K.jsx)(`div`,{className:`size-3 rounded-full border-2 shrink-0 z-10 ring-2 ring-background ${o?`bg-emerald-500/20 border-emerald-500`:`bg-red-500/20 border-red-500`}`}),a<i.length-1&&(0,K.jsx)(`div`,{className:`flex-1 h-px bg-border`})]}),(0,K.jsxs)(`div`,{className:`mt-3 flex flex-col items-center gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1`,children:[o?(0,K.jsx)(Up,{className:`size-3.5 text-emerald-500 shrink-0`}):(0,K.jsx)(zp,{className:`size-3.5 text-red-500 shrink-0`}),(0,K.jsx)(hJ,{variant:`outline`,className:`text-[10px] px-1.5 py-0 ${EJ(e.from)}`,children:wJ(e.from)}),(0,K.jsx)(`span`,{className:`text-muted-foreground text-[10px]`,children:`→`}),(0,K.jsx)(hJ,{variant:`outline`,className:`text-[10px] px-1.5 py-0 ${EJ(e.to)}`,children:wJ(e.to)})]}),(0,K.jsxs)(`p`,{className:`text-[10px] text-muted-foreground text-center`,children:[r[e.reason]||e.reason,` · #`,e.access_count]})]})]},e.at+e.from+e.to)})})})})]})}function Lme(){let{id:e}=it(),n=et(),r=Ze(),i=()=>{let e=r.state?.from||sessionStorage.getItem(`memories-list-from`)||`/memories`;n(e.startsWith(`/`)?e:`/${e}`)},[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!0),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(!1),[p,m]=(0,y.useState)(!1),[h,g]=(0,y.useState)(!1),[_,v]=(0,y.useState)(!1),b=ob(e=>e.isUnlocked),x=ob(e=>e.lock);if((0,y.useEffect)(()=>{if(!e)return;async function n(){try{c(!0),u(null);let n=await ib.get(`/v1/memories/${e}`,{params:{skip_access:!0}});console.log(`Memory detail raw response:`,n),o({...n,l0_abstract:n.l0_abstract??n.abstract??``,l1_overview:n.l1_overview??n.overview??``,l2_content:n.l2_content??n.detail??``})}catch(e){console.error(`Failed to fetch memory:`,e),u(`加载记忆详情失败`)}finally{c(!1)}}n()},[e]),s)return(0,K.jsxs)(`div`,{className:`space-y-6 max-w-6xl mx-auto`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(Tb,{className:`h-8 w-8`}),(0,K.jsx)(Tb,{className:`h-6 w-32`})]}),(0,K.jsx)(Tb,{className:`h-8 w-3/4`}),(0,K.jsx)(Tb,{className:`h-4 w-1/2`}),(0,K.jsxs)(`div`,{className:`space-y-3`,children:[(0,K.jsx)(Tb,{className:`h-4 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-4/5`})]})]});if(l||!a)return(0,K.jsxs)(`div`,{className:`space-y-4`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>i(),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-6 text-sm text-destructive`,children:l||`记忆不存在`})]});let S=xJ(a.tags,a.visibility),C=!S||b;return(0,K.jsxs)(`div`,{className:`space-y-6 max-w-6xl mx-auto`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>i(),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),S&&(0,K.jsxs)(hJ,{variant:`outline`,className:`border-amber-500/50 text-amber-500 bg-amber-500/10`,children:[(0,K.jsx)(Em,{className:`size-3 mr-1`}),`私密记忆`]}),(0,K.jsx)(hJ,{variant:`outline`,className:EJ(a.tier),children:wJ(a.tier)})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[C&&(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,className:`text-muted-foreground hover:text-destructive`,onClick:()=>f(!0),children:[(0,K.jsx)(Xm,{className:`size-3.5 mr-1.5`}),`删除`]}),b&&S&&(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>{x()},children:[(0,K.jsx)(Em,{className:`size-3.5 mr-1.5`}),`锁定`]})]})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:S&&!C?`🔒 私密记忆`:`记忆详情`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-4 text-sm text-muted-foreground flex-wrap`,children:[(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(qp,{className:`size-3.5`}),l9(a.created_at)]}),a.updated_at!==a.created_at&&(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(nm,{className:`size-3.5`}),l9(a.updated_at)]}),(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(om,{className:`size-3.5`}),`访问 `,a.access_count||0,` 次`]}),(0,K.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(pm,{className:`size-3.5`}),a.id.slice(0,8),`...`]})]})]}),(0,K.jsx)(m7,{}),C?(0,K.jsxs)(`div`,{className:`flex gap-6`,children:[(0,K.jsxs)(`div`,{className:`flex-1 min-w-0 space-y-6`,children:[(0,K.jsx)(Ime,{memory:a}),(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(bm,{className:`size-4 text-muted-foreground`}),`内容`,S&&(0,K.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-amber-500 ml-auto font-normal`,children:[(0,K.jsx)(Tm,{className:`size-3`}),`已解锁`]})]})}),(0,K.jsx)(wb,{children:(0,K.jsx)(Nme,{memory:a})})]}),a.tags&&a.tags.length>0&&(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(Jm,{className:`size-4 text-muted-foreground`}),`标签`]})}),(0,K.jsx)(wb,{children:(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:a.tags.map(e=>(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(e),children:[e===`私密`&&(0,K.jsx)(Em,{className:`size-2.5 mr-1`}),e]},e))})})]}),(0,K.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-4`,children:[(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(vm,{className:`size-4 text-muted-foreground`}),`基本信息`]})}),(0,K.jsxs)(wb,{className:`space-y-3`,children:[(0,K.jsx)(u9,{label:`分类`,value:a.category||`—`}),(0,K.jsx)(u9,{label:`类型`,value:a.memory_type||`—`}),(0,K.jsx)(u9,{label:`状态`,value:a.state||`—`}),(0,K.jsx)(u9,{label:`等级`,value:(0,K.jsx)(hJ,{variant:`outline`,className:EJ(a.tier),children:wJ(a.tier)})})]})]}),(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(Jp,{className:`size-4 text-muted-foreground`}),`质量指标`]})}),(0,K.jsxs)(wb,{className:`space-y-3`,children:[(0,K.jsx)(u9,{label:`重要性`,value:a.importance?.toFixed(2)??`—`}),(0,K.jsx)(u9,{label:`置信度`,value:a.confidence?.toFixed(2)??`—`}),(0,K.jsx)(u9,{label:`访问次数`,value:a.access_count??`—`})]})]}),(0,K.jsxs)(bb,{children:[(0,K.jsx)(xb,{children:(0,K.jsxs)(Sb,{className:`flex items-center gap-1.5 text-base`,children:[(0,K.jsx)(fm,{className:`size-4 text-muted-foreground`}),`来源信息`]})}),(0,K.jsxs)(wb,{className:`space-y-3`,children:[(0,K.jsx)(u9,{label:`来源`,value:a.source||`—`}),a.project_path&&(0,K.jsx)(u9,{label:`项目路径`,value:a.project_path}),(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`范围`}),h?null:(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,className:`h-5 px-1.5 text-xs text-muted-foreground hover:text-foreground`,onClick:()=>g(!0),children:[(0,K.jsx)(Pm,{className:`size-3 mr-1`}),`编辑`]})]}),h?(0,K.jsxs)(r9,{defaultValue:a.scope||`global`,onValueChange:async e=>{if(!a||!e||e===a.scope){g(!1);return}v(!0);try{await ib.post(`/v1/memories/batch-visibility`,{memory_ids:[a.id],scope:e}),o(n=>n?{...n,scope:e}:null),G.success(`范围已更新`)}catch(e){console.error(`Update scope failed:`,e),G.error(`更新失败,请重试`)}finally{v(!1),g(!1)}},disabled:_,children:[(0,K.jsx)(a9,{className:`h-8 text-sm`,children:(0,K.jsx)(i9,{})}),(0,K.jsxs)(o9,{children:[(0,K.jsx)(s9,{value:`public`,children:`public`}),(0,K.jsx)(s9,{value:`private`,children:`private`}),(0,K.jsx)(s9,{value:`global`,children:`global`})]})]}):(0,K.jsx)(`div`,{className:`text-sm font-medium`,children:a.scope||`—`})]}),(0,K.jsx)(u9,{label:`Agent ID`,value:a.agent_id||`—`}),(0,K.jsx)(u9,{label:`Session ID`,value:a.session_id||`—`})]})]})]})]}),a.relations&&a.relations.length>0&&(0,K.jsxs)(`div`,{className:`w-80 shrink-0 sticky top-6`,children:[(0,K.jsxs)(`div`,{className:`text-xs text-muted-foreground mb-2 flex items-center gap-1.5`,children:[(0,K.jsx)(Cm,{className:`size-3.5`}),`关联图谱`]}),(0,K.jsx)(Fme,{memoryId:a.id,relations:a.relations},a.id+a.relations.length)]})]}):(0,K.jsx)(Mme,{}),(0,K.jsx)(aJ,{open:d,onOpenChange:e=>{!e&&!p&&f(!1)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认删除记忆`}),(0,K.jsx)(uJ,{children:`确定要删除这条记忆吗?此操作不可撤销。`})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{disabled:p,children:`取消`}),(0,K.jsx)(dJ,{disabled:p,onClick:async()=>{m(!0);try{await ib.delete(`/v1/memories/${e}`),G.success(`记忆已删除`),n(`/memories`)}catch(e){console.error(`Delete failed:`,e),G.error(`删除失败,请重试`),f(!1)}finally{m(!1)}},className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:p?`删除中...`:`删除`})]})]})})]})}function d9({className:e,...n}){return(0,K.jsx)(`textarea`,{"data-slot":`textarea`,className:wp(`flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...n})}function Rme(e){return e.split(/[,,]/).map(e=>e.trim()).filter(e=>e.length>0)}function zme(e){return e.join(`, `)}function f9(){let{id:e}=it(),n=et(),r=!!e,[i,a]=(0,y.useState)({content:``,tags:[],source:``}),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(r),[u,d]=(0,y.useState)(!1),[f,p]=(0,y.useState)(null),[m,h]=(0,y.useState)(!1),g=ob(e=>e.isUnlocked);(0,y.useEffect)(()=>{if(!r)return;async function n(){try{l(!0);let n=await ib.get(`/v1/memories/${e}`);a({content:n.content||``,tags:n.tags||[],source:n.source||``}),s(zme(n.tags||[])),h(xJ(n.tags,n.visibility))}catch(e){console.error(`Failed to fetch memory:`,e),p(`加载记忆失败`)}finally{l(!1)}}n()},[e,r]);let _=async()=>{if(!i.content.trim()){p(`内容不能为空`);return}try{d(!0),p(null);let a={content:i.content.trim(),tags:i.tags,source:i.source.trim()||void 0};r?(await ib.put(`/v1/memories/${e}`,a),n(`/memories/${e}`)):n(`/memories/${(await ib.post(`/v1/memories`,a)).id}`)}catch(e){console.error(`Failed to save memory:`,e),p(r?`保存记忆失败`:`创建记忆失败`)}finally{d(!1)}},v=e=>{s(e),a(n=>({...n,tags:Rme(e)}))},b=e=>{if(e.key===`Enter`){e.preventDefault();let n=o.trim();n&&!i.tags.includes(n)&&(a(e=>({...e,tags:[...e.tags,n]})),s(``))}},x=e=>{a(n=>({...n,tags:n.tags.filter(n=>n!==e)}))};return c?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsx)(Tb,{className:`h-8 w-32`}),(0,K.jsxs)(`div`,{className:`space-y-4`,children:[(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-32 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-10 w-full`})]})]}):r&&m&&!g?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:`Vault 已锁定`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:`此记忆为私密记忆,请先解锁 Vault 后再进行编辑`}),(0,K.jsx)(J,{size:`sm`,onClick:()=>n(`/memories/${e}`),children:`返回详情页`})]})]}):(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsx)(`h1`,{className:`text-xl font-semibold`,children:r?`编辑记忆`:`新建记忆`})]}),f&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:f}),(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(gb,{htmlFor:`content`,children:[`内容 `,(0,K.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,K.jsx)(d9,{id:`content`,value:i.content,onChange:e=>a(n=>({...n,content:e.target.value})),placeholder:`输入记忆内容...`,rows:8,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`tags`,children:`标签`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(hb,{id:`tags`,value:o,onChange:e=>v(e.target.value),onKeyDown:b,placeholder:`输入标签,按回车或逗号分隔...`}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:i.tags.map(e=>(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(e,`cursor-pointer hover:opacity-60`),onClick:()=>x(e),title:`点击移除`,children:[e,` ×`]},e))})]})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`source`,children:`来源`}),(0,K.jsx)(hb,{id:`source`,value:i.source,onChange:e=>a(n=>({...n,source:e.target.value})),placeholder:`记忆来源(可选)...`})]}),(0,K.jsxs)(`div`,{className:`flex justify-end gap-3 pt-4`,children:[(0,K.jsx)(J,{variant:`outline`,onClick:()=>n(-1),disabled:u,children:`取消`}),(0,K.jsx)(J,{onClick:_,disabled:u,children:u?`保存中...`:r?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Bm,{className:`size-4 mr-1.5`}),`保存`]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Lm,{className:`size-4 mr-1.5`}),`创建`]})})]})]})]})}function Bme(e){return e.split(/[,,]/).map(e=>e.trim()).filter(e=>e.length>0)}function Vme(e){return e.join(`, `)}function Hme(){let{id:e}=it(),n=et(),[r,i]=(0,y.useState)({l0_abstract:``,l1_overview:``,l2_content:``,content:``,tags:[],source:``}),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(!0),[l,u]=(0,y.useState)(!1),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),h=ob(e=>e.isUnlocked);(0,y.useEffect)(()=>{if(!e)return;async function n(){try{c(!0);let n=await ib.get(`/v1/memories/${e}`);i({l0_abstract:n.l0_abstract??n.abstract??``,l1_overview:n.l1_overview??n.overview??``,l2_content:n.l2_content??n.detail??``,content:n.content||``,tags:n.tags||[],source:n.source||``}),o(Vme(n.tags||[])),m(xJ(n.tags,n.visibility))}catch(e){console.error(`Failed to fetch memory:`,e),f(`加载记忆失败`)}finally{c(!1)}}n()},[e]);let g=async()=>{if(!r.content.trim()){f(`原文内容不能为空`);return}try{u(!0),f(null);let i={content:r.content.trim(),l0_abstract:r.l0_abstract.trim()||void 0,l1_overview:r.l1_overview.trim()||void 0,l2_content:r.l2_content.trim()||void 0,tags:r.tags,source:r.source.trim()||void 0};await ib.put(`/v1/memories/${e}`,i),n(`/memories/${e}`)}catch(e){console.error(`Failed to save memory:`,e),f(`保存记忆失败`)}finally{u(!1)}},_=e=>{o(e),i(n=>({...n,tags:Bme(e)}))},v=e=>{if(e.key===`Enter`){e.preventDefault();let n=a.trim();n&&!r.tags.includes(n)&&(i(e=>({...e,tags:[...e.tags,n]})),o(``))}},b=e=>{i(n=>({...n,tags:n.tags.filter(n=>n!==e)}))};return s?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsx)(Tb,{className:`h-8 w-32`}),(0,K.jsxs)(`div`,{className:`space-y-4`,children:[(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-32 w-full`}),(0,K.jsx)(Tb,{className:`h-4 w-16`}),(0,K.jsx)(Tb,{className:`h-10 w-full`})]})]}):p&&!h?(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:`Vault 已锁定`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:`此记忆为私密记忆,请先解锁 Vault 后再进行编辑`}),(0,K.jsx)(J,{size:`sm`,onClick:()=>n(`/memories/${e}`),children:`返回详情页`})]})]}):(0,K.jsxs)(`div`,{className:`space-y-6 max-w-2xl`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(J,{variant:`ghost`,size:`sm`,onClick:()=>n(-1),children:[(0,K.jsx)(Bp,{className:`size-4 mr-1.5`}),`返回`]}),(0,K.jsx)(`h1`,{className:`text-xl font-semibold`,children:`编辑 Insight 记忆`})]}),d&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:d}),(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`l0_abstract`,children:`摘要`}),(0,K.jsx)(d9,{id:`l0_abstract`,value:r.l0_abstract,onChange:e=>i(n=>({...n,l0_abstract:e.target.value})),placeholder:`输入摘要...`,rows:3,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`l1_overview`,children:`概览`}),(0,K.jsx)(d9,{id:`l1_overview`,value:r.l1_overview,onChange:e=>i(n=>({...n,l1_overview:e.target.value})),placeholder:`输入概览...`,rows:4,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(gb,{htmlFor:`l2_content`,children:[`详情 `,(0,K.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,K.jsx)(d9,{id:`l2_content`,value:r.l2_content,onChange:e=>i(n=>({...n,l2_content:e.target.value})),placeholder:`输入详情内容...`,rows:6,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(gb,{htmlFor:`content`,children:[`原文 `,(0,K.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,K.jsx)(d9,{id:`content`,value:r.content,onChange:e=>i(n=>({...n,content:e.target.value})),placeholder:`输入原文内容...`,rows:6,className:`resize-none`})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`tags`,children:`标签`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(hb,{id:`tags`,value:a,onChange:e=>_(e.target.value),onKeyDown:v,placeholder:`输入标签,按回车或逗号分隔...`}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:r.tags.map(e=>(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(e,`cursor-pointer hover:opacity-60`),onClick:()=>b(e),title:`点击移除`,children:[e,` ×`]},e))})]})]}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(gb,{htmlFor:`source`,children:`来源`}),(0,K.jsx)(hb,{id:`source`,value:r.source,onChange:e=>i(n=>({...n,source:e.target.value})),placeholder:`记忆来源(可选)...`})]}),(0,K.jsxs)(`div`,{className:`flex justify-end gap-3 pt-4`,children:[(0,K.jsx)(J,{variant:`outline`,onClick:()=>n(-1),disabled:l,children:`取消`}),(0,K.jsx)(J,{onClick:g,disabled:l,children:l?`保存中...`:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Bm,{className:`size-4 mr-1.5`}),`保存`]})})]})]})]})}var Ume=300;function Wme({onUnlock:e}){let[n,r]=(0,y.useState)(``),[i,a]=(0,y.useState)(null),[o,s]=(0,y.useState)(!1),c=ob(e=>e.setPassword),l=ob(e=>e.verifyPassword),u=ob(e=>e.checkStatus),d=ob(e=>e.hasPassword);(0,y.useEffect)(()=>{u().then(()=>{s(!d)})},[u,d]);let f=async()=>{if(!n.trim()){a(`请输入密码`);return}o?(await c(n),e()):await l(n)?(a(null),e()):a(`密码错误`)};return(0,K.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/5 p-8 text-center space-y-4 max-w-md mx-auto mt-12`,children:[(0,K.jsx)(Em,{className:`h-10 w-10 text-amber-500 mx-auto`}),(0,K.jsx)(`h3`,{className:`text-lg font-semibold text-amber-500`,children:o?`设置 Vault 密码`:`Vault 已锁定`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground max-w-xs mx-auto`,children:o?`首次查看私密记忆,请设置 Vault 密码`:`私密记忆已加密,请输入 Vault 密码查看`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 max-w-xs mx-auto`,children:[(0,K.jsx)(hb,{type:`password`,placeholder:o?`设置密码...`:`输入密码...`,value:n,onChange:e=>{r(e.target.value),a(null)},onKeyDown:e=>e.key===`Enter`&&f(),className:i?`border-destructive`:``}),(0,K.jsx)(J,{size:`sm`,onClick:f,children:o?`设置`:`解锁`})]}),i&&(0,K.jsx)(`p`,{className:`text-xs text-destructive`,children:i})]})}function Gme(){let e=et(),n=ob(e=>e.isUnlocked),r=ob(e=>e.lock),[i,a]=(0,y.useState)(!1),[o,s]=(0,y.useState)([]),[c,l]=(0,y.useState)(!0),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(1),[m,h]=(0,y.useState)(``),[g,_]=(0,y.useState)(0),[v,b]=(0,y.useState)(`all`),[x,S]=(0,y.useState)(`created_at`),[C,w]=(0,y.useState)(50),[T,E]=(0,y.useState)(null),[D,O]=(0,y.useState)(!1),k=n||i,A=(0,y.useCallback)(async(e,n)=>{try{l(!0),d(null);let r={offset:(e-1)*C,limit:C,search:n||void 0,sort:x};v!==`all`&&(r.tier=v);let i=await ib.get(`/v1/memories`,{params:r});s(i.memories||[]),_(i.total_count||0)}catch(e){console.error(`Failed to fetch memories:`,e),d(`加载记忆列表失败`)}finally{l(!1)}},[v,x,C]);(0,y.useEffect)(()=>{if(!k)return;let e=setTimeout(()=>{p(1),A(1,m)},Ume);return()=>clearTimeout(e)},[m,A,k]),(0,y.useEffect)(()=>{k&&A(f,m)},[f,m,A,k]);let j=o.filter(e=>xJ(e.tags,e.visibility)),M=n=>{e(`/memories/${n}`)},N=e=>{h(e.target.value)},P=()=>{f>1&&p(f-1)},F=()=>{f*C<g&&p(f+1)},I=(e,n)=>{n.stopPropagation(),E(e)},L=async()=>{if(!T)return;let e=T,n=o;s(n=>n.filter(n=>n.id!==e)),O(!0);try{await ib.delete(`/v1/memories/${e}`),G.success(`记忆已删除`),E(null),n.filter(n=>n.id!==e).length===0&&f>1?(p(f-1),A(f-1,m)):A(f,m)}catch(e){console.error(`Failed to delete memory:`,e),G.error(`删除失败,请重试`),s(n),E(null)}finally{O(!1)}},R=f*C<g,z=f>1;return k?(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(`h1`,{className:`text-2xl font-semibold tracking-tight flex items-center gap-2`,children:[(0,K.jsx)(Em,{className:`size-6 text-amber-500`}),`私密记忆`]}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`管理您的私密记忆内容`})]}),(0,K.jsxs)(J,{variant:`outline`,size:`sm`,onClick:()=>r(),children:[(0,K.jsx)(Em,{className:`size-3.5 mr-1.5`}),`锁定 Vault`]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:[(0,K.jsxs)(`div`,{className:`relative flex-1 max-w-md`,children:[(0,K.jsx)(Vm,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,K.jsx)(hb,{type:`text`,placeholder:`搜索私密记忆内容...`,value:m,onChange:N,className:`pl-9`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(Wm,{className:`size-3.5 text-muted-foreground`}),(0,K.jsxs)(`select`,{value:v,onChange:e=>{b(e.target.value),p(1)},className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,K.jsx)(`option`,{value:`all`,children:`全部分类`}),(0,K.jsx)(`option`,{value:`core`,children:`核心`}),(0,K.jsx)(`option`,{value:`working`,children:`工作区`}),(0,K.jsx)(`option`,{value:`peripheral`,children:`边缘`})]}),(0,K.jsx)(Hp,{className:`size-3.5 text-muted-foreground`}),(0,K.jsxs)(`select`,{value:x,onChange:e=>{S(e.target.value),p(1)},className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,K.jsx)(`option`,{value:`updated_at`,children:`按更新时间`}),(0,K.jsx)(`option`,{value:`created_at`,children:`按创建时间`}),(0,K.jsx)(`option`,{value:`importance`,children:`按重要性`}),(0,K.jsx)(`option`,{value:`confidence`,children:`按置信度`}),(0,K.jsx)(`option`,{value:`access_count`,children:`按访问次数`})]}),(0,K.jsxs)(`select`,{value:C,onChange:e=>{w(Number(e.target.value)),p(1)},className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,K.jsx)(`option`,{value:20,children:`20条/页`}),(0,K.jsx)(`option`,{value:50,children:`50条/页`}),(0,K.jsx)(`option`,{value:100,children:`100条/页`})]})]})]}),u&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:u}),(0,K.jsx)(`div`,{className:`space-y-3`,children:c?[1,2,3,4,5].map(e=>(0,K.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-4 space-y-2`,children:[(0,K.jsx)(Tb,{className:`h-4 w-[95%]`}),(0,K.jsx)(Tb,{className:`h-4 w-[80%]`}),(0,K.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,K.jsx)(Tb,{className:`h-5 w-16`}),(0,K.jsx)(Tb,{className:`h-5 w-12`})]})]},`sk-${e}`)):j.length===0?(0,K.jsx)(`div`,{className:`rounded-lg border border-border bg-card p-8 text-center text-muted-foreground`,children:`暂无私密记忆`}):j.map(e=>(0,K.jsxs)(`button`,{type:`button`,onClick:()=>M(e.id),className:wp(`w-full text-left rounded-lg border p-4 cursor-pointer transition-colors`,`border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10`),children:[(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,K.jsx)(Em,{className:`h-3 w-3 text-amber-500`}),(0,K.jsx)(`span`,{className:`text-xs text-amber-500 font-medium`,children:`私密记忆`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,K.jsx)(Em,{className:`h-3.5 w-3.5 text-amber-500`}),(0,K.jsx)(`span`,{children:`🔒 已加密,请点击解锁`})]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 mt-3 flex-wrap`,children:[(0,K.jsx)(hJ,{variant:`outline`,className:`font-normal text-xs`,children:e.category||`未分类`}),(0,K.jsx)(hJ,{variant:TJ(e.tier),className:`text-xs`,children:wJ(e.tier)}),(0,K.jsxs)(hJ,{variant:`outline`,className:bJ(`私密`,`text-xs`),children:[(0,K.jsx)(Em,{className:`size-2.5 mr-1`}),`私密`]}),(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:kJ(e.created_at)}),(0,K.jsx)(`button`,{type:`button`,onClick:n=>I(e.id,n),className:`ml-2 p-1 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive transition-colors`,title:`删除`,children:(0,K.jsx)(Xm,{className:`size-3.5`})})]})]},e.id))}),!c&&(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`本页共 `,j.length,` 条私密记忆`]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsxs)(J,{variant:`outline`,size:`sm`,onClick:P,disabled:!z||c,children:[(0,K.jsx)(Zp,{className:`size-4`}),`上一页`]}),(0,K.jsxs)(J,{variant:`outline`,size:`sm`,onClick:F,disabled:!R||c,children:[`下一页`,(0,K.jsx)(Qp,{className:`size-4`})]})]})]}),(0,K.jsx)(aJ,{open:!!T,onOpenChange:e=>{!e&&!D&&E(null)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认删除记忆`}),(0,K.jsx)(uJ,{children:`确定要删除这条记忆吗?此操作不可撤销。`})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{onClick:()=>E(null),disabled:D,children:`取消`}),(0,K.jsx)(dJ,{disabled:D,onClick:L,className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:D?`删除中...`:`删除`})]})]})})]}):(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(`h1`,{className:`text-2xl font-semibold tracking-tight flex items-center gap-2`,children:[(0,K.jsx)(Em,{className:`size-6 text-amber-500`}),`私密记忆`]}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`管理您的私密记忆内容`})]}),(0,K.jsx)(Wme,{onUnlock:()=>a(!0)})]})}var p9=20;function Kme(e){return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function m9(e){return e?e.length<=16?e:e.slice(0,8)+`...`+e.slice(-8):`—`}function qme(){let e=et(),n=Ze(),[r,i]=(0,y.useState)([]),[a,o]=(0,y.useState)(!0),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(``),[d,f]=(0,y.useState)(1),[p,m]=(0,y.useState)(null),[h,g]=(0,y.useState)(!1),[_,v]=(0,y.useState)(new Set),[b,x]=(0,y.useState)(!1),[S,C]=(0,y.useState)(!1);(0,y.useEffect)(()=>{async function e(){try{o(!0),c(null),i((await ib.get(`/v1/session-recalls/groups`,{params:{limit:1e3,offset:0}}))?.groups||[])}catch(e){console.error(`Failed to fetch session groups:`,e),c(`加载 Session 记忆注入记录失败`),G.error(`加载 Session 记忆注入记录失败`)}finally{o(!1)}}e()},[]);let w=(0,y.useMemo)(()=>[...r].sort((e,n)=>new Date(n.last_injected_at).getTime()-new Date(e.last_injected_at).getTime()),[r]),T=(0,y.useMemo)(()=>{if(!l.trim())return w;let e=l.trim().toLowerCase();return w.filter(n=>n.session_id.toLowerCase().includes(e)||n.latest_query.toLowerCase().includes(e))},[w,l]),E=Math.ceil(T.length/p9),D=(0,y.useMemo)(()=>{let e=(d-1)*p9;return T.slice(e,e+p9)},[T,d]),O=r=>{e(`/sessions/${encodeURIComponent(r)}`,{state:{from:n.pathname+n.search}})},k=(e,n)=>{n.stopPropagation(),m(e)},A=async()=>{if(p){C(!0);try{await ib.delete(`/v1/session-recalls/session/${encodeURIComponent(p)}`),i(e=>e.filter(e=>e.session_id!==p)),G.success(`删除成功`)}catch(e){console.error(`Failed to delete session:`,e),G.error(`删除失败`)}finally{C(!1),m(null)}}},j=e=>{v(n=>{let r=new Set(n);return r.has(e)?r.delete(e):r.add(e),r})},M=()=>{v(new Set(D.map(e=>e.session_id)))},N=()=>{v(new Set)},P=async()=>{if(_.size===0)return;let e=Array.from(_);C(!0);try{await Promise.all(e.map(e=>ib.delete(`/v1/session-recalls/session/${encodeURIComponent(e)}`))),i(n=>n.filter(n=>!e.includes(n.session_id))),v(new Set),x(!1),G.success(`已删除 ${e.length} 个 Session`)}catch(e){console.error(`Failed to batch delete sessions:`,e),G.error(`批量删除失败`)}finally{C(!1)}};return(0,K.jsxs)(`div`,{className:`space-y-6`,children:[(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Session 记忆注入记录`}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`查看各 Session 的记忆注入统计与分布`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:[(0,K.jsxs)(`div`,{className:`relative w-80`,children:[(0,K.jsx)(Vm,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,K.jsx)(hb,{type:`text`,placeholder:`搜索 Session ID 或对话内容...`,value:l,onChange:e=>{u(e.target.value),f(1)},className:`pl-9`})]}),(0,K.jsx)(J,{variant:h?`default`:`outline`,size:`sm`,onClick:()=>{g(!h),h&&N()},children:h?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(rh,{className:`size-3.5 mr-1.5`}),`退出管理`]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Wm,{className:`size-3.5 mr-1.5`}),`批量管理`]})}),!a&&T.length>0&&E>1&&(0,K.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,K.jsx)(J,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>f(e=>Math.max(1,e-1)),disabled:d===1,children:(0,K.jsx)(Zp,{className:`size-3`})}),(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground min-w-[3ch] text-center`,children:[d,`/`,E]}),(0,K.jsx)(J,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>f(e=>Math.min(E,e+1)),disabled:d===E,children:(0,K.jsx)(Qp,{className:`size-3`})})]}),(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`共 `,T.length,` 个`]})]})]}),h&&(0,K.jsxs)(`div`,{className:`flex items-center justify-between bg-muted/50 rounded-lg px-4 py-3`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,K.jsxs)(`span`,{className:`text-sm font-medium`,children:[`已选择 `,_.size,` 个 Session`]}),_.size>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(J,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:N,children:`取消选择`}),(0,K.jsx)(J,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:M,children:`全选本页`})]})]}),_.size>0&&(0,K.jsxs)(J,{variant:`destructive`,size:`sm`,className:`h-7`,onClick:()=>x(!0),children:[(0,K.jsx)(Xm,{className:`size-3.5 mr-1`}),`删除 (`,_.size,`)`]})]}),s&&(0,K.jsx)(`div`,{className:`rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:s}),(0,K.jsx)(`div`,{className:`space-y-3`,children:a?[1,2,3,4,5].map(e=>(0,K.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-4 space-y-2`,children:[(0,K.jsx)(Tb,{className:`h-4 w-[40%]`}),(0,K.jsx)(Tb,{className:`h-4 w-[60%]`}),(0,K.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,K.jsx)(Tb,{className:`h-5 w-16`}),(0,K.jsx)(Tb,{className:`h-5 w-12`})]})]},`sk-${e}`)):D.length===0?(0,K.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-12 text-center space-y-4`,children:[(0,K.jsx)(_m,{className:`h-12 w-12 text-muted-foreground mx-auto`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:l?`未找到匹配的 Session`:`暂无 Session 记忆注入记录`}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l?`尝试调整搜索条件`:`注入记忆后此处将显示记录`})]})]}):D.map(e=>{let n=_.has(e.session_id);return(0,K.jsxs)(`div`,{onClick:()=>h?j(e.session_id):O(e.session_id),className:`w-full text-left rounded-lg border border-border bg-card p-4 cursor-pointer transition-colors hover:bg-muted/50 group relative ${h&&n?`ring-2 ring-primary bg-primary/5`:``}`,children:[h&&(0,K.jsx)(`div`,{className:`absolute left-3 top-1/2 -translate-y-1/2 z-10`,children:(0,K.jsx)(`input`,{type:`checkbox`,checked:n,onChange:n=>{n.stopPropagation(),j(e.session_id)},onClick:e=>e.stopPropagation(),className:`size-4 cursor-pointer`})}),(0,K.jsxs)(`div`,{className:h?`pl-8`:``,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-3 flex-1 min-w-0`,children:[(0,K.jsx)(`code`,{className:`text-sm font-mono bg-muted px-2 py-0.5 rounded shrink-0`,children:m9(e.session_id)}),e.latest_query&&(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground truncate max-w-[300px] sm:max-w-[400px] lg:max-w-[500px]`,children:e.latest_query})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground shrink-0`,children:[(0,K.jsxs)(`span`,{className:`text-xs flex items-center gap-1 whitespace-nowrap`,children:[(0,K.jsx)(nm,{className:`size-3.5`}),Kme(e.last_injected_at)]}),(0,K.jsx)(Qp,{className:`size-4 opacity-0 group-hover:opacity-50 transition-opacity`})]})]}),(0,K.jsxs)(`div`,{className:`mt-2 flex items-center justify-between`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,K.jsxs)(hJ,{variant:`secondary`,className:`text-xs font-normal`,children:[(0,K.jsx)(ih,{className:`size-3 mr-1`}),`自动 `,e.auto_count]}),e.manual_count>0&&(0,K.jsxs)(hJ,{variant:`outline`,className:`text-xs font-normal`,children:[(0,K.jsx)(Mm,{className:`size-3 mr-1`}),`手动 `,e.manual_count]}),(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`共 `,(0,K.jsx)(`span`,{className:`font-medium text-foreground`,children:e.count}),` 条`]})]}),!h&&(0,K.jsx)(J,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:n=>k(e.session_id,n),children:(0,K.jsx)(Xm,{className:`size-4 text-destructive`})})]})]})]},e.session_id)})}),!a&&T.length>0&&(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`共 `,T.length,` 个 Session`]}),E>1&&(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(J,{variant:`outline`,size:`sm`,onClick:()=>f(e=>Math.max(1,e-1)),disabled:d===1,children:(0,K.jsx)(Zp,{className:`size-4`})}),(0,K.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[d,` / `,E]}),(0,K.jsx)(J,{variant:`outline`,size:`sm`,onClick:()=>f(e=>Math.min(E,e+1)),disabled:d===E,children:(0,K.jsx)(Qp,{className:`size-4`})})]})]}),(0,K.jsx)(aJ,{open:!!p,onOpenChange:e=>{!e&&!S&&m(null)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认删除 Session`}),(0,K.jsxs)(uJ,{children:[`此操作不可撤销。将删除 Session `,p?m9(p):``,` 的所有注入记录。`]})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{onClick:()=>m(null),disabled:S,children:`取消`}),(0,K.jsx)(dJ,{disabled:S,onClick:A,className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:S?`删除中...`:`删除`})]})]})}),(0,K.jsx)(aJ,{open:b,onOpenChange:e=>{!e&&!S&&x(!1)},children:(0,K.jsxs)(oJ,{children:[(0,K.jsxs)(sJ,{children:[(0,K.jsx)(lJ,{children:`确认批量删除`}),(0,K.jsxs)(uJ,{children:[`确定要删除选中的 `,_.size,` 个 Session 吗?此操作不可撤销。`]})]}),(0,K.jsxs)(cJ,{children:[(0,K.jsx)(fJ,{onClick:()=>x(!1),disabled:S,children:`取消`}),(0,K.jsx)(dJ,{disabled:S,onClick:e=>{e.preventDefault(),P()},className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:S?`删除中...`:`删除 ${_.size} 个`})]})]})})]})}function Jme(e){return!e||e.includes(`
|
|
161
161
|
`)?e:e.replace(/(#{1,3}\s+[^#])/g,`
|
|
162
162
|
$1`).replace(/(\d+\.\s+[^\d])/g,`
|
|
163
163
|
$1`).replace(/(\s-\s)/g,`
|
package/web/index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<script>window.__OMEM_API_URL__ = "__OMEM_API_URL__";</script>
|
|
8
8
|
<title>omem - 记忆管理</title>
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-OR03Q22A.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/assets/index-B_7AC9Gn.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|