@runfusion/fusion 0.3.0 → 0.4.1
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/dist/bin.js +67600 -65202
- package/dist/client/assets/{AgentDetailView-CJIxNRq-.js → AgentDetailView-sy6Hg1Xr.js} +3 -3
- package/dist/client/assets/{AgentsView-BS17exn3.js → AgentsView-DpEpW88a.js} +3 -3
- package/dist/client/assets/ChatView-BUt3C4cf.js +1 -0
- package/dist/client/assets/{DevServerView-qMPpnXRb.js → DevServerView-BOyWtQJM.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CTwgv9LY.js → DirectoryPicker-BJyEEso5.js} +1 -1
- package/dist/client/assets/{DocumentsView-DOz1KFGN.js → DocumentsView-Dx0M1YHw.js} +1 -1
- package/dist/client/assets/{InsightsView-CHZTJUic.js → InsightsView-BtXdAo7D.js} +1 -1
- package/dist/client/assets/MemoryView-DiajLXby.css +1 -0
- package/dist/client/assets/MemoryView-kKPuqmwf.js +2 -0
- package/dist/client/assets/{NodesView-BtGNRj2z.js → NodesView-B_ZwUORz.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-D9Ye2Vak.js → PiExtensionsManager-Db0EGr0Q.js} +3 -3
- package/dist/client/assets/{PluginManager-LeHp0jJ_.js → PluginManager-mOwWndfg.js} +1 -1
- package/dist/client/assets/{RoadmapsView-C413ISVU.js → RoadmapsView-DbUzBLeF.js} +1 -1
- package/dist/client/assets/SettingsModal-Bs_lNs5B.js +31 -0
- package/dist/client/assets/SettingsModal-G0ESQXRD.css +1 -0
- package/dist/client/assets/{SettingsModal-olTBmYJs.js → SettingsModal-TRJu_mTn.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-WdaR2eQQ.js → SetupWizardModal-D1bmCQrf.js} +1 -1
- package/dist/client/assets/{SkillsView-BcE57w8i.js → SkillsView-Dzzpd5Md.js} +1 -1
- package/dist/client/assets/{folder-open-Ec4hU1xL.js → folder-open-BcuByk6U.js} +1 -1
- package/dist/client/assets/index-BipedNj4.css +1 -0
- package/dist/client/assets/index-k2c4LrUr.js +616 -0
- package/dist/client/assets/{upload-BksRDuGJ.js → upload-BzNbXYEj.js} +1 -1
- package/dist/client/assets/{users-EFU4n9Qr.js → users-BvIqhSXp.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -0
- package/dist/extension.js +2165 -885
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/pi-claude-cli/src/provider.ts +0 -1
- package/package.json +5 -5
- package/dist/client/assets/ChatView-BUlq3WNJ.js +0 -1
- package/dist/client/assets/MemoryView-DhinauGs.css +0 -1
- package/dist/client/assets/MemoryView-V0QdeO3e.js +0 -2
- package/dist/client/assets/SettingsModal--vWmKBpT.css +0 -1
- package/dist/client/assets/SettingsModal-BZLL2xAP.js +0 -31
- package/dist/client/assets/index-CCYdhck-.js +0 -616
- package/dist/client/assets/index-lJ5WOmO9.css +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion/pi-claude-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Fusion vendored fork: pi coding-agent extension that routes LLM calls through the Claude Code CLI. Forked from rchern/pi-claude-cli (MIT). See UPSTREAM.md.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": true,
|
|
@@ -135,7 +135,6 @@ export function streamViaCli(
|
|
|
135
135
|
newSessionId: !resumeSessionId ? options?.sessionId : undefined,
|
|
136
136
|
});
|
|
137
137
|
const getStderr = captureStderr(proc);
|
|
138
|
-
const spawnTime = Date.now();
|
|
139
138
|
|
|
140
139
|
// Register in global process registry for teardown cleanup
|
|
141
140
|
registerProcess(proc);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
|
|
6
6
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
|
@@ -75,10 +75,10 @@
|
|
|
75
75
|
"typescript": "^5.7.0",
|
|
76
76
|
"vitest": "^3.1.0",
|
|
77
77
|
"yaml": "^2.8.3",
|
|
78
|
-
"@fusion/core": "0.
|
|
79
|
-
"@fusion/
|
|
80
|
-
"@fusion/
|
|
81
|
-
"@fusion/
|
|
78
|
+
"@fusion/core": "0.4.1",
|
|
79
|
+
"@fusion/dashboard": "0.4.1",
|
|
80
|
+
"@fusion/pi-claude-cli": "0.4.1",
|
|
81
|
+
"@fusion/engine": "0.4.1"
|
|
82
82
|
},
|
|
83
83
|
"repository": {
|
|
84
84
|
"type": "git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{i as ze,aw as mt,g as gt,ax as ft,a as pt,ay as xt,az as St,aA as bt,aB as vt,aC as wt,aD as kt,s as Nt,aE as Ct,aF as jt,f as Mt,a5 as yt,a6 as Tt,w as Le,S as At,I as Ge,ai as $t,aG as Et,B as Me,a2 as Ue,a3 as qe,aH as Pt,aI as Dt,aJ as Rt,aK as Lt,aL as _t,aM as zt,h as It,j as Ft}from"./index-CCYdhck-.js";import"./vendor-xterm-DzcZoU0P.js";const _e="kb-chat-active-session";function Ot(n){const i=n?.toolCalls;if(!Array.isArray(i))return;const c=i.map(l=>{if(!l||typeof l!="object")return null;const r=l,f=typeof r.toolName=="string"?r.toolName:"";if(!f)return null;const S=r.args;return{toolName:f,...S&&typeof S=="object"?{args:S}:{},isError:!!r.isError,result:r.result,status:"completed"}}).filter(l=>l!==null);return c.length>0?c:void 0}function Je(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Ot(n.metadata),createdAt:n.createdAt}}function Vt(n){const[i,c]=s.useState([]),[l,r]=s.useState(null),[f,S]=s.useState(!0),[j,b]=s.useState([]),[ee,F]=s.useState(!1),[O,_]=s.useState(!1),[de,P]=s.useState(""),[V,y]=s.useState(""),[xe,D]=s.useState([]),[p,R]=s.useState(""),[te,K]=s.useState(""),[T,B]=s.useState(!0),[Q,ie]=s.useState(new Map),w=s.useRef(null),W=s.useRef(!1),Y=s.useRef(""),Se=s.useRef(i),H=s.useRef(l),Ne=s.useRef(O);Se.current=i,H.current=l,Ne.current=O,s.useEffect(()=>{Y.current=p},[p]);const le=s.useRef(new Set),se=s.useRef(0),Ce=s.useRef(n);Ce.current!==n&&(Ce.current=n,se.current++),s.useEffect(()=>{const u=se.current;ze(void 0,n).then(m=>{if(se.current!==u)return;const h=new Map;for(const x of m)h.set(x.id,x);ie(h)}).catch(()=>{})},[n]);const ne=s.useCallback(async()=>{S(!0);try{const m=[...(await mt(n)).sessions].sort((h,x)=>new Date(x.updatedAt).getTime()-new Date(h.updatedAt).getTime());c(m)}catch{}finally{S(!1)}},[n]);s.useEffect(()=>{ne()},[ne]);const X=s.useRef(()=>{});s.useEffect(()=>{if(f)return;const u=gt(_e,n);u&&i.find(h=>h.id===u)&&X.current(u)},[f,i,n]);const z=s.useCallback(async(u,m)=>{F(!0);try{const h=await ft(u,{limit:50,...m},n),x=h.messages.map(Je);m?.offset&&m.offset>0?b(q=>[...x,...q]):b(x),B(h.messages.length>=50)}catch{}finally{F(!1)}},[n]),ue=s.useCallback(u=>{w.current&&(w.current.close(),w.current=null);const m=i.find(h=>h.id===u);r(m||null),P(""),y(""),D([]),_(!1),B(!0),u?z(u):b([]),u?pt(_e,u,n):xt(_e,n)},[i,z,n]);X.current=ue;const he=s.useCallback(async u=>{const m=await St(u,n),h={id:m.session.id,title:m.session.title,agentId:m.session.agentId,status:m.session.status,modelProvider:m.session.modelProvider,modelId:m.session.modelId,createdAt:m.session.createdAt,updatedAt:m.session.updatedAt};return c(x=>[h,...x]),r(h),b([]),P(""),y(""),D([]),_(!1),B(!0),h},[n]),me=s.useCallback(async u=>{await bt(u,{status:"archived"},n),c(m=>m.filter(h=>h.id!==u)),l?.id===u&&(r(null),b([]))},[l,n]),re=s.useCallback(async u=>{l?.id===u&&w.current&&(w.current.close(),w.current=null),await vt(u,n),c(m=>m.filter(h=>h.id!==u)),l?.id===u&&(r(null),b([]))},[l,n]),ge=s.useCallback(async()=>{!l||!T||await z(l.id,{offset:j.length})},[l,T,z,j.length]),ae=s.useCallback(()=>{l&&(W.current=!0,w.current?.close(),w.current=null,wt(l.id,n).catch(()=>{}),_(!1),P(""),y(""),D([]))},[l,n]),G=s.useCallback(()=>{Y.current="",R("")},[]),U=s.useCallback(u=>{if(!l)return;if(O){Y.current=u,R(u);return}W.current=!1,w.current&&(w.current.close(),w.current=null);const m=`temp-${Date.now()}`,h={id:m,sessionId:l.id,role:"user",content:u,createdAt:new Date().toISOString()};b(g=>[...g,h]),P(""),y(""),D([]),_(!0);let x="",q="",C=[];const ve={onThinking:g=>{q+=g,y(q)},onText:g=>{x+=g,P(x)},onToolStart:g=>{C=[...C,{toolName:g.toolName,args:g.args,isError:!1,status:"running"}],D(C)},onToolEnd:g=>{const k=[...C];for(let v=k.length-1;v>=0;v--){const o=k[v];if(o?.toolName===g.toolName&&o.status==="running"){k[v]={...o,status:"completed",isError:g.isError,result:g.result},C=k,D(k);return}}C=[...k,{toolName:g.toolName,isError:g.isError,result:g.result,status:"completed"}],D(C)},onDone:g=>{const k={id:g.messageId||`msg-${Date.now()}`,sessionId:l.id,role:"assistant",content:x,thinkingOutput:q,toolCalls:C.length>0?C:void 0,createdAt:new Date().toISOString()};le.current.add(k.id),b(o=>[...o,k]),P(""),y(""),D([]),_(!1),w.current=null,setTimeout(()=>{le.current.delete(k.id)},1e3),ne();const v=Y.current.trim();v&&(Y.current="",R(""),U(v))},onError:g=>{if(b(k=>k.filter(v=>v.id!==m)),P(""),y(""),D([]),_(!1),w.current=null,console.error("[useChat] Stream error:",g),!W.current){const k=Y.current.trim();k&&(Y.current="",R(""),U(k))}}};w.current=kt(l.id,u,ve,n)},[l,O,n,ne]),be=te?i.filter(u=>u.title?.toLowerCase().includes(te.toLowerCase())||u.agentId.toLowerCase().includes(te.toLowerCase())):i;return s.useEffect(()=>{const u=se.current,m=n?`?projectId=${encodeURIComponent(n)}`:"",h=()=>se.current!==u,x=v=>{if(h())return;const o=JSON.parse(v.data);c(N=>N.some(L=>L.id===o.id)?N:[o,...N])},q=v=>{if(h())return;const o=JSON.parse(v.data);c(N=>[...N.map($=>$.id===o.id?o:$)]),H.current?.id===o.id&&r(o)},C=v=>{if(h())return;const{id:o}=JSON.parse(v.data);c(N=>N.filter(L=>L.id!==o)),H.current?.id===o&&(r(null),b([]))},ve=v=>{if(h())return;const o=JSON.parse(v.data),N=Je(o);le.current.has(N.id)||H.current?.id===N.sessionId&&!Ne.current&&b(L=>L.some($=>$.id===N.id)?L:[...L,N])},g=v=>{if(h())return;const{id:o}=JSON.parse(v.data);b(N=>N.filter(L=>L.id!==o))};return Nt(`/api/events${m}`,{events:{"chat:session:created":x,"chat:session:updated":q,"chat:session:deleted":C,"chat:message:added":ve,"chat:message:deleted":g}})},[n]),s.useEffect(()=>()=>{w.current&&(w.current.close(),w.current=null)},[]),{sessions:i,activeSession:l,sessionsLoading:f,messages:j,messagesLoading:ee,isStreaming:O,streamingText:de,streamingThinking:V,streamingToolCalls:xe,pendingMessage:p,selectSession:ue,createSession:he,archiveSession:me,deleteSession:re,sendMessage:U,stopStreaming:ae,clearPendingMessage:G,loadMoreMessages:ge,hasMoreMessages:T,searchQuery:te,setSearchQuery:K,filteredSessions:be,refreshSessions:ne,agentsMap:Q}}function Ke(n){const i=new Date(n),l=new Date().getTime()-i.getTime(),r=Math.floor(l/1e3),f=Math.floor(r/60),S=Math.floor(f/60),j=Math.floor(S/24);return r<60?"just now":f<60?`${f}m ago`:S<24?`${S}h ago`:j<7?`${j}d ago`:i.toLocaleDateString()}function Qe(n,i){if(!n||!i)return null;const c=i.toLowerCase();if(c.includes("claude")){let r=i.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return r=r.replace(/\s+/g," "),r.length>30?r.slice(0,30)+"…":r}if(c.includes("gpt")||c.includes("openai")){const r=i.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return r.length>30?r.slice(0,30)+"…":r}if(c.includes("gemini")){const r=i.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return r.length>30?r.slice(0,30)+"…":r}const l=i.replace(/-/g," ").replace(/^\w/,r=>r.toUpperCase()).replace(/\s+/g," ").trim();return l.length>30?l.slice(0,30)+"…":l}function ye(n,i){return n.length>i?`${n.slice(0,i)}…`:n}function Bt(n){if(!n)return null;const i=Object.entries(n);return i.length===0?null:i.map(([c,l])=>{let r="";if(typeof l=="string")r=l;else try{r=JSON.stringify(l)}catch{r=String(l)}return`${c}=${ye(r,50)}`}).join(", ")}function Ht(n){if(n===void 0)return null;if(typeof n=="string")return ye(n,200);try{return ye(JSON.stringify(n),200)}catch{return ye(String(n),200)}}function We(n){return!n||n.length===0?null:e.jsxs("div",{className:"chat-tool-calls","data-testid":"chat-tool-calls",children:[e.jsxs("div",{className:"chat-tool-calls-header",children:[e.jsx(zt,{size:12,"aria-hidden":"true"}),e.jsx("span",{children:"Tool calls"})]}),n.map((i,c)=>{const l=i.status==="running",r=i.status==="completed"&&i.isError,f=Bt(i.args),S=Ht(i.result),j=l?f:S?`result: ${S}`:f?`args: ${f}`:null,b=l?"running":r?"error":"completed";return e.jsxs("details",{className:`chat-tool-call${l?" chat-tool-call--running":""}${r?" chat-tool-call--error":""}`,open:l,children:[e.jsxs("summary",{children:[e.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),e.jsx("span",{className:"chat-tool-call-name",children:i.toolName}),j&&e.jsx("span",{className:"chat-tool-call-preview",title:j,children:j}),e.jsx("span",{className:"chat-tool-call-status-text",children:b})]}),e.jsxs("div",{className:"chat-tool-call-content",children:[f&&e.jsxs("div",{className:"chat-tool-call-row",children:[e.jsx("span",{className:"chat-tool-call-label",children:"args"}),e.jsx("span",{className:"chat-tool-call-value",children:f})]}),S&&e.jsxs("div",{className:`chat-tool-call-row${r?" chat-tool-call-row--error":""}`,children:[e.jsx("span",{className:"chat-tool-call-label",children:"result"}),e.jsx("span",{className:"chat-tool-call-value",children:S})]})]})]},`${i.toolName}-${c}`)})]})}const Gt={pre:({children:n,...i})=>e.jsx("pre",{...i,className:"chat-markdown-pre",children:n}),table:({children:n,...i})=>e.jsx("table",{...i,className:"chat-markdown-table",children:n})},Te="__fn_agent__";function Ye(n){const i=/(^|[\s])\/([^\s]*)$/.exec(n);if(!i)return null;const c=i[1]??"",l=i[2]??"",r=i.index+c.length;return{filter:l,start:r,end:n.length}}function Ut(n,i){const c=n.slice(0,i),l=/(^|[\s\n])@([\w-]*)$/.exec(c);if(!l)return null;const r=l[2]??"",f=c.length-r.length-1;return{filter:r,start:f,end:i}}function qt({projectId:n,onClose:i,onCreate:c}){const[l,r]=s.useState("agent"),[f,S]=s.useState([]),[j,b]=s.useState(!0),[ee,F]=s.useState(""),[O,_]=s.useState([]),[de,P]=s.useState(!0),[V,y]=s.useState("");s.useEffect(()=>{let p=!1;return b(!0),ze(void 0,n).then(R=>{p||S(R)}).catch(()=>{p||S([])}).finally(()=>{p||b(!1)}),()=>{p=!0}},[n]),s.useEffect(()=>{P(!0),It().then(p=>{_(p.models)}).catch(()=>{_([])}).finally(()=>{P(!1)})},[]);const xe=p=>{if(p.preventDefault(),l==="agent"){if(!ee)return;c({agentId:ee});return}if(!V)return;const R=V.indexOf("/");if(R<=0)return;const te=V.slice(0,R),K=V.slice(R+1);c({agentId:Te,modelProvider:te,modelId:K})},D=l==="agent"?!ee:!V;return e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:i,role:"dialog","aria-modal":"true",children:e.jsxs("div",{className:"chat-new-dialog",onClick:p=>p.stopPropagation(),children:[e.jsx("h3",{children:"New Chat"}),e.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{r("agent"),y("")},children:"Agent"}),e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{r("model"),F("")},children:"Model"})]}),e.jsxs("form",{onSubmit:xe,children:[l==="agent"&&e.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",j?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):f.length===0?e.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):e.jsx("div",{className:"chat-new-dialog-agent-list",children:f.map(p=>e.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${ee===p.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>F(p.id),"data-testid":`agent-option-${p.id}`,children:[e.jsx(Me,{size:16}),e.jsx("span",{className:"chat-new-dialog-agent-name",children:p.name}),e.jsx("span",{className:"chat-new-dialog-agent-role",children:p.role})]},p.id))})]}),l==="model"&&e.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:de?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):e.jsx(Ft,{models:O,value:V,onChange:y,label:"Model",placeholder:"Select a model"})}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:i,children:"Cancel"}),e.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:D,children:"Create"})]})]})]})})}function Yt({projectId:n,addToast:i}){const{activeSession:c,sessionsLoading:l,messages:r,messagesLoading:f,isStreaming:S,streamingText:j,streamingThinking:b,streamingToolCalls:ee,selectSession:F,createSession:O,archiveSession:_,deleteSession:de,sendMessage:P,stopStreaming:V,pendingMessage:y,clearPendingMessage:xe,searchQuery:D,setSearchQuery:p,filteredSessions:R}=Vt(n),[te,K]=s.useState(!1),[T,B]=s.useState(""),[Q,ie]=s.useState(null),[w,W]=s.useState(null),[Y,Se]=s.useState(!0),[H,Ne]=s.useState(new Map),[le,se]=s.useState([]),[Ce,ne]=s.useState(!0),[X,z]=s.useState(!1),[ue,he]=s.useState(""),[me,re]=s.useState(0),[ge,ae]=s.useState(""),[G,U]=s.useState(!1),[be,u]=s.useState(0),[m,h]=s.useState(-1),[x,q]=s.useState(!0),[C,ve]=s.useState(()=>new Set),[,g]=s.useState(!1),[k,v]=s.useState({top:0,left:0}),o=Ct({projectId:n}),N=s.useCallback(t=>{if(!t||!o.mentionActive)return;const a=t.getBoundingClientRect();v({top:a.top-260,left:a.left+8})},[o.mentionActive]),L=s.useRef(null),$=s.useRef(null),Xe=s.useRef(null),E=s.useRef(null),we=s.useRef(0),J=jt()==="mobile",I=s.useMemo(()=>{const t=ue.trim().toLowerCase();return(t?le.filter(d=>d.name.toLowerCase().includes(t)):le).slice(0,10)},[le,ue]),fe=s.useMemo(()=>Array.from(H.values()),[H]),ce=s.useMemo(()=>{const t=ge.trim().toLowerCase();return t?fe.filter(a=>a.name.toLowerCase().includes(t)):fe},[fe,ge]),Ie=s.useMemo(()=>{const t=new Map;for(const a of fe)t.set(a.name.toLowerCase(),a);return t},[fe]);s.useEffect(()=>{re(0)},[I]),s.useEffect(()=>{u(0)},[ge,G]),s.useEffect(()=>()=>{$.current!==null&&window.clearTimeout($.current)},[]),s.useEffect(()=>{L.current?.scrollIntoView({behavior:"smooth"})},[r,j]),s.useEffect(()=>{const t=()=>ie(null);if(Q)return document.addEventListener("click",t),()=>document.removeEventListener("click",t)},[Q]),s.useEffect(()=>{let t=!1;const a=n;return ze(void 0,n).then(d=>{if(t||a!==n)return;const M=new Map;for(const A of d)M.set(A.id,A);Ne(M)}).catch(()=>{}),()=>{t=!0}},[n]),s.useEffect(()=>{let t=!1;return ne(!0),Mt(n).then(a=>{t||se(a)}).catch(()=>{t||se([])}).finally(()=>{t||ne(!1)}),()=>{t=!0}},[n]);const Ze=s.useCallback(async t=>{try{await O(t),K(!1),J&&Se(!1)}catch{i("Failed to create chat session","error")}},[O,i,J]),Ae=s.useCallback(()=>{const t=T.trim();!t||!c||(B(""),z(!1),he(""),U(!1),ae(""),h(-1),P(t))},[T,c,P]),$e=s.useCallback(t=>{B(a=>{const d=Ye(a);if(!d)return a;const M=`/skill:${t.name} `,A=a.slice(0,d.start)+M+a.slice(d.end);return window.requestAnimationFrame(()=>{E.current&&(E.current.style.height="auto",E.current.style.height=`${Math.min(E.current.scrollHeight,120)}px`,E.current.focus())}),A}),z(!1),he(""),re(0)},[]),Ee=s.useCallback(t=>{const a=E.current;if(!a||m<0)return;const d=a.selectionStart??we.current,M=a.selectionEnd??d,A=Math.max(d,M),ke=Math.min(m,A),oe=`${`@${t.name.replace(/\s+/g,"_")}`} `,Re=T.slice(0,ke)+oe+T.slice(A),pe=ke+oe.length;B(Re),U(!1),ae(""),u(0),h(-1),window.requestAnimationFrame(()=>{E.current&&(E.current.style.height="auto",E.current.style.height=`${Math.min(E.current.scrollHeight,120)}px`,E.current.focus(),E.current.setSelectionRange(pe,pe))})},[m,T]),et=s.useCallback(t=>{const a=/@([\w-]+)/g,d=[];let M=0,A=a.exec(t);for(;A;){const[ke,He=""]=A,oe=A.index;oe>M&&d.push(t.slice(M,oe));const Re=He.replace(/_/g," ").toLowerCase(),pe=Ie.get(Re);pe?d.push(e.jsxs("span",{className:"chat-mention-chip",children:["@",pe.name.replace(/\s+/g,"_")]},`${pe.id}-${oe}`)):d.push(ke),M=oe+ke.length,A=a.exec(t)}return M<t.length&&d.push(t.slice(M)),d.length===0?t:d},[Ie]),tt=s.useCallback(t=>{if(we.current=t.currentTarget.selectionStart??we.current,o.mentionActive&&o.files.length>0){if(o.handleKeyDown(t,T),t.key==="Enter"||t.key==="Tab"){const a=o.files[o.selectedIndex];if(a){const d=o.selectFile(a,T);B(d),o.dismissMention(),g(!1)}}return}if(G&&t.key==="ArrowDown"){t.preventDefault(),ce.length>0&&u(a=>(a+1)%ce.length);return}if(G&&t.key==="ArrowUp"){t.preventDefault(),ce.length>0&&u(a=>a===0?ce.length-1:a-1);return}if(G&&t.key==="Enter"){t.preventDefault();const a=ce[be]??ce[0];a&&Ee(a);return}if(G&&t.key==="Escape"){t.preventDefault(),U(!1),ae(""),h(-1);return}if(X&&t.key==="ArrowDown"){t.preventDefault(),I.length>0&&re(a=>(a+1)%I.length);return}if(X&&t.key==="ArrowUp"){t.preventDefault(),I.length>0&&re(a=>a===0?I.length-1:a-1);return}if(X&&(t.key==="Enter"||t.key==="Tab")&&I.length>0){t.preventDefault();const a=I[me]??I[0];a&&$e(a);return}if(X&&t.key==="Escape"){t.preventDefault(),z(!1);return}t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),Ae())},[G,ce,be,Ee,X,I,me,$e,Ae,o,T]),je=s.useCallback((t,a)=>{const d=Ut(t,a);if(d){U(!0),ae(d.filter),h(d.start);return}U(!1),ae(""),h(-1)},[]),st=s.useCallback(t=>{const a=t.target,d=a.value,M=a.selectionStart??d.length;we.current=M,B(d);const A=Ye(d);A?(z(!0),he(A.filter)):(z(!1),he("")),je(d,M),o.detectMention(d,M),g(o.mentionActive),o.mentionActive&&N(a),a.style.height="auto",a.style.height=`${Math.min(a.scrollHeight,120)}px`},[je]),Pe=s.useCallback(t=>{const a=t.currentTarget,d=a.selectionStart??a.value.length;we.current=d,je(a.value,d),o.detectMention(a.value,d),g(o.mentionActive),o.mentionActive&&N(a)},[je,o,N]),nt=s.useCallback(t=>{t.key!=="Escape"&&Pe(t)},[Pe]),at=s.useCallback(()=>{$.current!==null&&window.clearTimeout($.current),$.current=window.setTimeout(()=>{z(!1),U(!1),ae(""),h(-1),g(!1),o.dismissMention(),$.current=null},120)},[o]),it=s.useCallback(()=>{$.current!==null&&(window.clearTimeout($.current),$.current=null)},[]),lt=s.useCallback(async t=>{ie(null);try{await _(t),i("Conversation archived","success")}catch{i("Failed to archive conversation","error")}},[_,i]),rt=s.useCallback(async t=>{W(null),ie(null);try{await de(t),i("Conversation deleted","success")}catch{i("Failed to delete conversation","error")}},[de,i]),ct=s.useCallback(t=>{F(t),J&&Se(!1)},[F,J]),ot=s.useCallback(()=>{F(""),Se(!0)},[F]),dt=()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(_t,{size:48,strokeWidth:1.5}),e.jsx("h2",{children:"Start a new conversation"}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>K(!0),children:[e.jsx(Le,{size:16}),"New Chat"]})]}),Z=Qe(c?.modelProvider,c?.modelId),Fe=c?.agentId===Te?Z??"Fusion":c?.title||H.get(c?.agentId??"")?.name||c?.agentId||"Chat",ut=!!(Z&&Z!==Fe),De=H.get(c?.agentId??"")?.name||(c?.agentId===Te?Z??"Fusion":c?.agentId?.slice(0,30)??"Fusion"),Oe=!!(Z&&Z!==De),ht=y.length>50?`${y.slice(0,50)}…`:y,Ve=s.useCallback(t=>{ve(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},[]),Be=s.useCallback((t,a=!1)=>(J?a:a||!x)?e.jsx("div",{className:"chat-message-content chat-message-content--plain",children:t}):e.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:e.jsx(yt,{remarkPlugins:[Tt],components:Gt,children:t})}),[J,x]);return e.jsxs("div",{className:"chat-view",children:[e.jsxs("div",{className:`chat-sidebar${Y?"":" chat-sidebar--hidden"}`,children:[e.jsx("div",{className:"chat-sidebar-header",children:e.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>K(!0),"data-testid":"chat-new-btn",children:[e.jsx(Le,{size:14}),"New Chat"]})}),e.jsx("div",{className:"chat-sidebar-search",children:e.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[e.jsx(At,{size:14,className:"chat-sidebar-search-icon"}),e.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:D,onChange:t=>p(t.target.value),"data-testid":"chat-search-input"})]})}),e.jsx("div",{className:"chat-session-list chat-sidebar-list",children:l?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"Loading..."}):R.length===0?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):R.map(t=>e.jsxs("div",{className:`chat-session-item${c?.id===t.id?" chat-session-item--active":""}`,onClick:()=>ct(t.id),onContextMenu:a=>{a.preventDefault(),ie({sessionId:t.id,x:a.clientX,y:a.clientY})},"data-testid":`chat-session-${t.id}`,children:[e.jsx("button",{className:"chat-session-delete-btn",onClick:a=>{a.stopPropagation(),W(t.id)},"data-testid":"chat-session-delete-btn","aria-label":"Delete conversation",children:e.jsx(Ge,{size:14})}),e.jsx("div",{className:"chat-session-title",children:t.title||"Untitled"}),e.jsx("div",{className:"chat-session-preview",children:t.lastMessagePreview||"No messages"}),e.jsxs("div",{className:"chat-session-meta",children:[e.jsx("span",{children:H.get(t.agentId)?.name||(t.agentId===Te?Qe(t.modelProvider,t.modelId)??"Fusion":t.agentId.slice(0,30))}),e.jsx("span",{children:t.updatedAt?Ke(t.updatedAt):""})]})]},t.id))}),e.jsx("div",{className:"chat-sidebar-footer",children:e.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>K(!0),"data-testid":"chat-new-btn-mobile",children:[e.jsx(Le,{size:14}),"New Chat"]})})]}),Q&&e.jsxs("div",{className:"chat-session-context-menu",style:{top:Q.y,left:Q.x},onClick:t=>t.stopPropagation(),children:[e.jsxs("button",{onClick:()=>lt(Q.sessionId),"data-testid":"chat-context-archive",children:[e.jsx($t,{size:14}),"Archive"]}),e.jsxs("button",{onClick:()=>{ie(null),W(Q.sessionId)},"data-testid":"chat-context-delete",children:[e.jsx(Ge,{size:14}),"Delete"]})]}),w&&e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:()=>W(null),children:e.jsxs("div",{className:"chat-new-dialog",onClick:t=>t.stopPropagation(),children:[e.jsx("h3",{children:"Delete Conversation?"}),e.jsx("p",{style:{fontSize:"14px",color:"var(--text-secondary)",marginBottom:"16px"},children:"This action cannot be undone. All messages in this conversation will be permanently deleted."}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{className:"btn btn-sm",onClick:()=>W(null),children:"Cancel"}),e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void rt(w),children:"Delete"})]})]})}),e.jsxs("div",{className:"chat-thread",children:[(c||!J)&&e.jsxs("div",{className:"chat-thread-header",children:[J&&c&&e.jsx("button",{className:"btn-icon",onClick:ot,"data-testid":"chat-back-btn",children:e.jsx(Et,{size:16})}),e.jsx(Me,{size:16}),e.jsx("span",{className:"chat-thread-header-title",children:Fe}),ut&&e.jsx("span",{className:"chat-model-tag",children:Z}),c&&e.jsxs("div",{className:"chat-render-mode-toggle",role:"group","aria-label":"Assistant response render mode",children:[e.jsx("button",{type:"button",className:`chat-render-mode-btn${x?" chat-render-mode-btn--active":""}`,"aria-pressed":x,"aria-label":"Render assistant responses as markdown","data-testid":"chat-render-mode-markdown",onClick:()=>q(!0),children:"Markdown"}),e.jsx("button",{type:"button",className:`chat-render-mode-btn${x?"":" chat-render-mode-btn--active"}`,"aria-pressed":!x,"aria-label":"Render assistant responses as plain text","data-testid":"chat-render-mode-plain",onClick:()=>q(!1),children:"Plain"})]})]}),e.jsxs("div",{className:"chat-messages",ref:Xe,children:[f?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):r.length===0&&!c?dt():r.length===0&&c?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):e.jsxs(e.Fragment,{children:[r.map(t=>{const a=t.role==="assistant",d=C.has(t.id);return e.jsxs("div",{className:`chat-message chat-message--${t.role}`,"data-testid":`chat-message-${t.id}`,children:[a&&e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Me,{size:14}),e.jsx("span",{children:De}),Oe&&e.jsx("span",{className:"chat-model-tag",children:Z}),J&&e.jsx("button",{type:"button",className:`btn btn-icon chat-message-render-toggle${d?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":d?"Show rendered markdown":"Show plain text",onClick:()=>Ve(t.id),children:d?e.jsx(Ue,{size:14}):e.jsx(qe,{size:14})})]}),a?Be(t.content,d):e.jsx("div",{className:"chat-message-content",children:et(t.content)}),We(t.toolCalls),t.thinkingOutput&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:t.thinkingOutput})]}),e.jsx("div",{className:"chat-message-time",children:Ke(t.createdAt)})]},t.id)}),S&&e.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Me,{size:14}),e.jsx("span",{children:De}),Oe&&e.jsx("span",{className:"chat-model-tag",children:Z}),J&&e.jsx("button",{type:"button",className:`btn btn-icon chat-message-render-toggle${C.has("__streaming__")?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":C.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>Ve("__streaming__"),children:C.has("__streaming__")?e.jsx(Ue,{size:14}):e.jsx(qe,{size:14})})]}),j?Be(j,C.has("__streaming__")):e.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:b?"Thinking…":"Connecting…"}),We(ee),b&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:b})]}),e.jsxs("div",{className:"chat-typing-indicator",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]})]})]}),e.jsx("div",{ref:L})]}),c&&e.jsxs("div",{className:"chat-input-area",children:[X&&e.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ce?e.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):I.length===0?e.jsx("div",{className:"chat-skill-menu-empty",children:ue?"No skills found":"No skills available"}):I.map((t,a)=>e.jsxs("button",{type:"button",role:"option","aria-selected":a===me,className:`chat-skill-menu-item${a===me?" chat-skill-menu-item--highlighted":""}`,onMouseDown:d=>d.preventDefault(),onMouseEnter:()=>re(a),onClick:()=>$e(t),children:[e.jsx("span",{className:"chat-skill-menu-item-name",children:t.name}),e.jsx("span",{className:"chat-skill-menu-item-description",title:t.relativePath,children:t.relativePath})]},t.id))}),e.jsxs("div",{className:"chat-input-wrapper",children:[e.jsx("textarea",{ref:E,className:"chat-input-textarea",placeholder:"Type a message...",value:T,onChange:st,onKeyDown:tt,onKeyUp:nt,onClick:Pe,onBlur:at,onFocus:it,rows:1,"data-testid":"chat-input"}),e.jsx(Pt,{agents:fe,filter:ge,highlightedIndex:be,visible:G,onSelect:Ee,position:"below"}),e.jsx(Dt,{visible:o.mentionActive&&!G,position:k,files:o.files,selectedIndex:o.selectedIndex,onSelect:t=>{const a=o.selectFile(t,T);B(a),o.dismissMention(),g(!1),E.current?.focus()},loading:o.loading}),y&&e.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[e.jsx("span",{children:`Queued: ${ht}`}),e.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:xe,children:"×"})]})]}),S?e.jsx("button",{className:"chat-input-stop",onClick:V,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:e.jsx(Rt,{size:14})}):e.jsx("button",{className:"chat-input-send",onClick:()=>void Ae(),disabled:!T.trim(),"data-testid":"chat-send-btn",children:e.jsx(Lt,{size:16})})]})]}),te&&e.jsx(qt,{projectId:n,onClose:()=>K(!1),onCreate:Ze})]})}export{Yt as ChatView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.memory-view{display:flex;flex-direction:column;height:100%;padding:var(--space-lg);overflow:hidden}.memory-view-header{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-start;margin-bottom:var(--space-lg)}.memory-view-header h2{font-size:18px;color:var(--text);margin:0}.memory-view-description{color:var(--text-muted);font-size:13px;margin:var(--space-xs) 0 0 0}.memory-view-tabs{display:flex;flex-direction:row;gap:var(--space-xs);border-bottom:1px solid var(--border);margin-bottom:var(--space-lg)}.memory-view-tab{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm) var(--radius-sm) 0 0;color:var(--text-muted);background:transparent;border:none;cursor:pointer;font-size:13px;transition:background var(--transition-fast),color var(--transition-fast)}.memory-view-tab:hover{background:var(--card-hover);color:var(--text)}.memory-view-tab:focus-visible{outline:none;box-shadow:var(--focus-ring)}.memory-view-tab--active{color:var(--text);border-bottom:2px solid var(--todo);font-weight:500}.memory-view-content{flex:1;overflow-y:auto}.memory-editor-container{border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column;height:calc(100vh - var(--header-height) - 180px)}.memory-category-section{margin-bottom:var(--space-lg)}.memory-category-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;cursor:pointer;padding:var(--space-sm) 0;border-bottom:1px solid var(--border);transition:opacity var(--transition-fast)}.memory-category-header:hover{opacity:.8}.memory-category-header h4{font-size:14px;font-weight:500;margin:0;color:var(--text)}.memory-category-count{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);background:color-mix(in srgb,var(--text-muted) 15%,transparent);padding:2px 8px;border-radius:var(--radius-pill)}.memory-category-items{padding-top:var(--space-sm)}.memory-insight-item{padding:var(--space-xs) var(--space-sm);margin-bottom:var(--space-xs);border-left:3px solid var(--border);font-size:13px;color:var(--text);line-height:1.5}.memory-engine-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-xl);margin-bottom:var(--space-lg)}.memory-engine-card h3{font-size:14px;font-weight:500;margin:0 0 var(--space-md) 0;color:var(--text)}.memory-engine-status{display:flex;flex-direction:row;align-items:center;gap:var(--space-sm)}.memory-health-badge{display:inline-block;padding:2px 10px;border-radius:var(--radius-pill);font-size:12px}.memory-health-badge--healthy{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.memory-health-badge--warning{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.memory-health-badge--issues{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.memory-action-bar{display:flex;flex-direction:row;gap:var(--space-sm);margin-top:var(--space-md);align-items:center}.memory-empty-state{color:var(--text-muted);padding:var(--space-2xl);text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--space-sm)}.memory-stats-row{display:flex;flex-direction:row;gap:var(--space-lg);margin-bottom:var(--space-lg)}.memory-stat-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);flex:1}.memory-stat-value{font-size:24px;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.memory-stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.memory-audit-check{display:flex;flex-direction:row;padding:var(--space-sm) 0;border-bottom:1px solid var(--border);gap:var(--space-sm)}.memory-audit-check:last-child{border-bottom:none}.memory-audit-check-passed{color:var(--color-success);font-weight:600}.memory-audit-check-failed{color:var(--color-error);font-weight:600}.memory-capability-badge{font-size:11px;padding:2px 8px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--todo) 15%,transparent);color:var(--text-muted)}.memory-readonly-banner{background:color-mix(in srgb,var(--color-warning) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-warning) 30%,transparent);border-radius:var(--radius-md);padding:var(--space-md);color:var(--color-warning);font-size:13px;margin-bottom:var(--space-md)}.memory-char-count{font-size:12px;color:var(--text-muted)}.memory-categories-list{margin-top:var(--space-lg)}.memory-config-section{margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--border);display:flex;flex-direction:column;gap:var(--space-md)}.memory-settings-group{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-sm) 0}.memory-qmd-card{border-style:solid}.memory-retrieval-card{display:flex;flex-direction:column;gap:var(--space-sm)}.memory-retrieval-input-row{display:flex;align-items:center;gap:var(--space-sm)}.memory-retrieval-input-row .input{flex:1}.memory-retrieval-card .memory-test-result{margin-top:var(--space-sm)}@media(max-width:768px){.memory-view{padding:var(--space-md)}.memory-view-header{flex-direction:column;gap:var(--space-sm)}.memory-editor-container{height:calc(100vh - var(--header-height) - var(--mobile-nav-height) - 200px)}.memory-stats-row{flex-wrap:wrap}.memory-stat-card{min-width:calc(50% - var(--space-sm))}.memory-view-tab{min-height:36px;padding:var(--space-sm)}.memory-engine-card{padding:var(--space-md)}.memory-retrieval-input-row{flex-direction:column;align-items:stretch}.memory-settings-group{padding:var(--space-xs) 0}.memory-config-section{margin-top:var(--space-md);padding-top:var(--space-md)}}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{u as Ae}from"./SettingsModal-olTBmYJs.js";import{b8 as Se,b9 as Ne,ba as Fe,o as ze,bb as De,bc as Ie,bd as Le,be as Ce,bf as Ee,bg as Re,bh as Te,bi as ke,bj as We,n as qe,bk as Pe,L as A,bl as Me}from"./index-CCYdhck-.js";import"./vendor-xterm-DzcZoU0P.js";const U=".fusion/memory/MEMORY.md",_e=5e4,Oe="0 3 * * *",Ue="0 4 * * *";function me(l){return{memoryEnabled:l.memoryEnabled!==!1,memoryAutoSummarizeEnabled:l.memoryAutoSummarizeEnabled??!1,memoryAutoSummarizeThresholdChars:l.memoryAutoSummarizeThresholdChars??_e,memoryAutoSummarizeSchedule:l.memoryAutoSummarizeSchedule??Oe,memoryDreamsEnabled:l.memoryDreamsEnabled??!1,memoryDreamsSchedule:l.memoryDreamsSchedule??Ue}}function we(l,t){return l.some(o=>o.path===t)?t:l.find(o=>o.path===U)?.path??l[0]?.path??U}function Qe(l={}){const{projectId:t}=l,[o,b]=a.useState(""),[F,E]=a.useState(!0),[S,N]=a.useState(!1),[y,g]=a.useState(!1),[r,p]=a.useState(null),[Q,J]=a.useState(!0),[X,z]=a.useState(!1),[f,T]=a.useState(()=>me({})),[k,ee]=a.useState(!0),[oe,B]=a.useState(!1),[c,v]=a.useState([]),[se,D]=a.useState(!0),[m,C]=a.useState(U),[W,u]=a.useState(""),[d,te]=a.useState(!1),[H,x]=a.useState(!1),[ae,$]=a.useState(!1),[ne,Y]=a.useState(!1),[G,q]=a.useState(null),[M,P]=a.useState(!0),[ce,I]=a.useState(!1),[de,V]=a.useState(!1),[re,Z]=a.useState(null),{status:K,loading:j,refresh:ie}=Ae({projectId:t}),L=a.useCallback(n=>{u(n),x(!0)},[]),_=a.useCallback(async n=>{te(!0);try{const{content:s}=await Se(n,t);C(n),u(s),x(!1)}finally{te(!1)}},[t]),w=a.useCallback(async()=>{D(!0);try{const{files:n}=await Ne(t);if(v(n),n.length===0){C(U),u(""),x(!1);return}const s=we(n,m);s!==m&&await _(s)}finally{D(!1)}},[t,m,_]);a.useEffect(()=>{let n=!1;async function s(){try{const i=await We(t);n||(b(i.content),E(!1))}catch{n||(b(""),E(!1))}}return s(),()=>{n=!0}},[t]),a.useEffect(()=>{let n=!1;async function s(){try{const i=await Ee(t);n||(p(i.content),z(i.exists),J(!1))}catch{n||(p(null),z(!1),J(!1))}}return s(),()=>{n=!0}},[t]),a.useEffect(()=>{let n=!1;async function s(){ee(!0);try{const i=await qe(t);n||T(me(i))}catch{n||T(me({}))}finally{n||ee(!1)}}return s(),()=>{n=!0}},[t]),a.useEffect(()=>{let n=!1;async function s(){D(!0);try{const{files:i}=await Ne(t);if(n)return;if(v(i),i.length===0){C(U),u(""),x(!1);return}const h=we(i,m),{content:je}=await Se(h,t);if(n)return;C(h),u(je),x(!1)}catch{n||(v([]),C(U),u(""),x(!1))}finally{n||D(!1)}}return s(),()=>{n=!0}},[t,m]),a.useEffect(()=>{let n=!1;async function s(){try{const i=await Ce(t);n||(q(i),P(!1))}catch{n||(q(null),P(!1))}}return s(),()=>{n=!0}},[t]),a.useEffect(()=>{let n=!1;async function s(){try{const i=await Pe(t);n||Z(i)}catch{n||Z(null)}}return s(),()=>{n=!0}},[t]);const le=a.useCallback(n=>{b(n),N(!0)},[]),he=a.useCallback(async()=>{if(S){g(!0);try{await Fe(o,t),N(!1)}finally{g(!1)}}},[o,S,t]),ue=a.useCallback(async n=>{B(!0);try{const s=await ze(n,t);T(me(s))}finally{B(!1)}},[t]),ye=a.useCallback(async n=>{await _(n)},[_]),ge=a.useCallback(async()=>{if(H){$(!0);try{await De(m,W,t),x(!1),await w()}finally{$(!1)}}},[W,H,m,t,w]),pe=a.useCallback(async()=>{V(!0);try{const n=await Ie(t);return await ie(),n}finally{V(!1)}},[t,ie]),xe=a.useCallback(async n=>Le(n,t),[t]),O=a.useCallback(async()=>{try{const n=await Ce(t);q(n)}catch{q(null)}},[t]),R=a.useCallback(async()=>{try{const n=await Ee(t);p(n.content),z(n.exists)}catch{p(null),z(!1)}},[t]),be=a.useCallback(async n=>{await Re(n,t),await R()},[t,R]),fe=a.useCallback(async()=>{Y(!0);try{const n=await Te(t);return await Promise.all([R(),O()]),{success:n.success,summary:n.summary}}finally{Y(!1)}},[t,R,O]),ve=a.useCallback(async n=>{I(!0);try{const s=n?await ke(n,t):await ke(t);if(n){const i=s.path??n;C(i),u(s.content),x(!1),await w();return}b(s.content),N(!0)}finally{I(!1)}},[t,w]);return{workingMemory:o,workingMemoryLoading:F,workingMemoryDirty:S,setWorkingMemory:le,saveWorkingMemory:he,savingWorkingMemory:y,insightsContent:r,insightsLoading:Q,insightsExists:X,refreshInsights:R,saveInsights:be,memorySettings:f,settingsLoading:k,savingMemorySettings:oe,saveMemorySettings:ue,memoryFiles:c,memoryFilesLoading:se,selectedFilePath:m,selectedFileContent:W,selectedFileLoading:d,selectedFileDirty:H,setSelectedFileContent:L,selectFile:ye,saveSelectedFile:ge,savingSelectedFile:ae,reloadMemoryFiles:w,backendStatus:K,backendLoading:j,extractInsights:fe,extracting:ne,auditReport:G,auditLoading:M,refreshAudit:O,compactMemory:ve,compacting:ce,installQmdAction:pe,installingQmd:de,testRetrieval:xe,stats:re}}const Be={Patterns:"pattern",Principles:"principle",Conventions:"convention",Pitfalls:"pitfall",Context:"context"},He={"long-term":"Long-term",daily:"Daily",dreams:"Dreams"},$e={"long-term":"Curated durable decisions, conventions, constraints, and pitfalls promoted from dreams.",daily:"Raw daily observations, open loops, and running context for dream processing.",dreams:"Synthesized patterns and open loops promoted from daily memory."};function Ye(l){if(!l)return[];const t=[],o=l.split(/(?=^## )/m);for(const b of o){const F=b.trim();if(!F)continue;const E=F.match(/^##\s+(.+?)(\n|$)/);if(E){const S=E[1].trim(),N=Be[S]??S.toLowerCase(),y=F.slice(E[0].length).trim(),g=y.split(`
|
|
2
|
-
`).map(r=>r.replace(/^-\s+/,"").trim()).filter(r=>r.length>0&&(r.startsWith("- ")||r.startsWith("* ")));(g.length>0||y.length>0)&&t.push({name:S,key:N,items:g.length>0?g:y.length>0?[y]:[],expanded:!0})}}return t}function Ge(l){if(!l)return null;const t=l.match(/##\s+Last\s+Updated:\s*(\d{4}-\d{2}-\d{2})/i);return t?t[1]:null}function Ve(l){return l.reduce((t,o)=>t+o.items.length,0)}function Ze(l){switch(l){case"file":return"File (.fusion/memory/)";case"readonly":return"Read-Only";case"qmd":return"QMD (Quantized Memory Distillation)";default:return l}}function Ke(l){switch(l){case"healthy":return"Healthy";case"warning":return"Warning";case"issues":return"Issues Found"}}function ts({projectId:l,addToast:t}){const[o,b]=a.useState("working"),[F,E]=a.useState(new Set),[S,N]=a.useState(!1),[y,g]=a.useState(null),[r,p]=a.useState({memoryEnabled:!0,memoryAutoSummarizeEnabled:!1,memoryAutoSummarizeThresholdChars:5e4,memoryAutoSummarizeSchedule:"0 3 * * *",memoryDreamsEnabled:!1,memoryDreamsSchedule:"0 4 * * *"}),[Q,J]=a.useState(""),[X,z]=a.useState(!1),[f,T]=a.useState(null),{insightsContent:k,insightsLoading:ee,insightsExists:oe,saveInsights:B,memorySettings:c,settingsLoading:v,saveMemorySettings:se,savingMemorySettings:D,backendStatus:m,backendLoading:C,extractInsights:W,extracting:u,auditReport:d,auditLoading:te,refreshAudit:H,compactMemory:x,compacting:ae,installQmdAction:$,installingQmd:ne,testRetrieval:Y,memoryFiles:G,memoryFilesLoading:q,selectedFilePath:M,selectedFileContent:P,selectedFileLoading:ce,selectedFileDirty:I,setSelectedFileContent:de,selectFile:V,saveSelectedFile:re,savingSelectedFile:Z}=Qe({projectId:l});a.useEffect(()=>{p(c)},[c]);const K=a.useMemo(()=>r.memoryEnabled!==c.memoryEnabled||r.memoryAutoSummarizeEnabled!==c.memoryAutoSummarizeEnabled||r.memoryAutoSummarizeThresholdChars!==c.memoryAutoSummarizeThresholdChars||r.memoryAutoSummarizeSchedule!==c.memoryAutoSummarizeSchedule||r.memoryDreamsEnabled!==c.memoryDreamsEnabled||r.memoryDreamsSchedule!==c.memoryDreamsSchedule,[r,c]),j=a.useMemo(()=>G.find(s=>s.path===M),[G,M]),ie=j?$e[j.layer]:"Edits the selected memory file.",L=a.useMemo(()=>Ye(k),[k]),_=a.useMemo(()=>Ve(L),[L]),w=a.useMemo(()=>Ge(k),[k]),le=a.useCallback(s=>{E(i=>{const h=new Set(i);return h.has(s)?h.delete(s):h.add(s),h})},[]),he=a.useCallback(async s=>{try{await V(s)}catch{t("Failed to load memory file","error")}},[V,t]),ue=a.useCallback(async()=>{try{await re(),t("Memory saved","success")}catch{t("Failed to save memory","error")}},[re,t]),ye=a.useCallback(async()=>{if(!K)return;const s={};r.memoryEnabled!==c.memoryEnabled&&(s.memoryEnabled=r.memoryEnabled),r.memoryAutoSummarizeEnabled!==c.memoryAutoSummarizeEnabled&&(s.memoryAutoSummarizeEnabled=r.memoryAutoSummarizeEnabled),r.memoryAutoSummarizeThresholdChars!==c.memoryAutoSummarizeThresholdChars&&(s.memoryAutoSummarizeThresholdChars=r.memoryAutoSummarizeThresholdChars),r.memoryAutoSummarizeSchedule!==c.memoryAutoSummarizeSchedule&&(s.memoryAutoSummarizeSchedule=r.memoryAutoSummarizeSchedule),r.memoryDreamsEnabled!==c.memoryDreamsEnabled&&(s.memoryDreamsEnabled=r.memoryDreamsEnabled),r.memoryDreamsSchedule!==c.memoryDreamsSchedule&&(s.memoryDreamsSchedule=r.memoryDreamsSchedule);try{await se(s),t("Memory settings saved","success")}catch{t("Failed to save memory settings","error")}},[K,r,c,se,t]),ge=a.useCallback(async()=>{try{const s=await $();t(s.qmdAvailable?"qmd installed successfully":"qmd install finished, but qmd is still unavailable",s.qmdAvailable?"success":"info")}catch{t("Failed to install qmd","error")}},[$,t]),pe=a.useCallback(async()=>{z(!0),T(null);try{const s=await Y(Q);T(s),t(s.qmdAvailable?"Memory retrieval test complete":"qmd is not installed; local fallback was used",s.qmdAvailable?"success":"info")}catch{t("Failed to test memory retrieval","error")}finally{z(!1)}},[Q,Y,t]),xe=a.useCallback(async()=>{try{await x(M),t("Memory file compacted","success")}catch{t("Failed to compact memory","error")}},[x,M,t]),O=a.useCallback(async()=>{try{const s=await W();t(s.summary,"success")}catch(s){t(s instanceof Error?s.message:"Failed to extract insights","error")}},[W,t]),R=a.useCallback(async()=>{if(y!==null)try{await B(y),N(!1),g(null),t("Insights saved","success")}catch{t("Failed to save insights","error")}},[y,B,t]),be=a.useCallback(()=>{g(k??""),N(!0)},[k]),fe=a.useCallback(()=>{N(!1),g(null)},[]),ve=!C&&m!==null,n=m?.capabilities?.writable??!1;return e.jsxs("div",{className:"memory-view",children:[e.jsx("div",{className:"memory-view-header",children:e.jsxs("div",{children:[e.jsx("h2",{children:"Memory"}),e.jsx("p",{className:"memory-view-description",children:"Working memory, long-term insights, and engine status"})]})}),e.jsxs("div",{className:"memory-view-tabs",role:"tablist",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":o==="working",className:`memory-view-tab${o==="working"?" memory-view-tab--active":""}`,onClick:()=>b("working"),"data-testid":"memory-tab-working",children:"Working Memory"}),e.jsx("button",{type:"button",role:"tab","aria-selected":o==="insights",className:`memory-view-tab${o==="insights"?" memory-view-tab--active":""}`,onClick:()=>b("insights"),"data-testid":"memory-tab-insights",children:"Insights"}),e.jsx("button",{type:"button",role:"tab","aria-selected":o==="engines",className:`memory-view-tab${o==="engines"?" memory-view-tab--active":""}`,onClick:()=>b("engines"),"data-testid":"memory-tab-engines",children:"Engines"})]}),e.jsxs("div",{className:"memory-view-content",children:[o==="working"&&e.jsxs("div",{className:"memory-working-tab",children:[ve&&!n&&e.jsx("div",{className:"memory-readonly-banner",children:"This memory backend is read-only. Changes cannot be saved."}),q||ce?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(A,{size:20,className:"animate-spin"}),e.jsx("span",{children:"Loading memory file…"})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"memory-editor-section",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryViewFilePath",children:"Memory File"}),e.jsx("select",{id:"memoryViewFilePath",className:"select",value:M,onChange:s=>{he(s.target.value)},disabled:I,children:G.map(s=>e.jsxs("option",{value:s.path,children:[s.label," - ",s.path]},s.path))}),e.jsx("small",{children:I?"Save or discard the current edits before switching files.":"Choose any project memory file to view or edit."})]}),j&&e.jsxs("div",{className:"memory-file-summary",children:[e.jsx("span",{children:He[j.layer]}),e.jsx("strong",{children:j.path}),e.jsxs("small",{children:[j.size.toLocaleString()," bytes · updated ",new Date(j.updatedAt).toLocaleString()]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:j?.label||"Memory Editor"}),e.jsx("small",{children:ie}),e.jsx("div",{className:"memory-editor-container",children:e.jsx(Me,{content:P,onChange:de,readOnly:!n,filePath:M})})]})]}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsxs("span",{className:"memory-char-count",children:[P.length," characters"]}),e.jsx("div",{style:{flex:1}}),n&&P.length>0&&e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:xe,disabled:ae||I,children:ae?e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14,className:"animate-spin"}),"Compacting…"]}):"Compact Selected File"}),I&&n&&e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:ue,disabled:Z,children:Z?e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14,className:"animate-spin"}),"Saving…"]}):"Save"})]}),e.jsxs("div",{className:"memory-config-section",children:[e.jsxs("div",{className:"memory-settings-group",children:[e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:"memoryDreamsEnabled",className:"checkbox-label",children:[e.jsx("input",{id:"memoryDreamsEnabled",type:"checkbox",checked:r.memoryDreamsEnabled,onChange:s=>{p(i=>({...i,memoryDreamsEnabled:s.target.checked}))},disabled:!r.memoryEnabled||v}),"Process dreams from daily memory"]}),e.jsx("small",{children:"Turns daily notes into DREAMS.md and promotes reusable lessons into MEMORY.md."})]}),r.memoryEnabled&&r.memoryDreamsEnabled&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryDreamsSchedule",children:"Dream Schedule"}),e.jsx("input",{id:"memoryDreamsSchedule",type:"text",className:"input",value:r.memoryDreamsSchedule,onChange:s=>{p(i=>({...i,memoryDreamsSchedule:s.target.value}))},placeholder:"0 4 * * *",disabled:v}),e.jsx("small",{children:"Cron expression for dream processing."})]})]}),e.jsxs("div",{className:"memory-settings-group",children:[e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:"memoryAutoSummarizeEnabled",className:"checkbox-label",children:[e.jsx("input",{id:"memoryAutoSummarizeEnabled",type:"checkbox",checked:r.memoryAutoSummarizeEnabled,onChange:s=>{p(i=>({...i,memoryAutoSummarizeEnabled:s.target.checked}))},disabled:!r.memoryEnabled||v}),"Auto-Summarize Memory"]}),e.jsx("small",{children:"Automatically compact memory when it exceeds the threshold on a schedule"})]}),r.memoryEnabled&&r.memoryAutoSummarizeEnabled&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryAutoSummarizeThresholdChars",children:"Compaction Threshold (chars)"}),e.jsx("input",{id:"memoryAutoSummarizeThresholdChars",type:"number",className:"input",value:r.memoryAutoSummarizeThresholdChars,onChange:s=>{p(i=>({...i,memoryAutoSummarizeThresholdChars:parseInt(s.target.value,10)||5e4}))},min:1e3,disabled:v}),e.jsx("small",{children:"Memory will be compacted when it exceeds this character count"})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryAutoSummarizeSchedule",children:"Schedule (cron)"}),e.jsx("input",{id:"memoryAutoSummarizeSchedule",type:"text",className:"input",value:r.memoryAutoSummarizeSchedule,onChange:s=>{p(i=>({...i,memoryAutoSummarizeSchedule:s.target.value}))},placeholder:"0 3 * * *",disabled:v}),e.jsx("small",{children:"Cron expression for auto-summarize schedule (default: daily at 3 AM)"})]})]})]}),!r.memoryEnabled&&e.jsx("div",{className:"settings-empty-state memory-status-message",children:"Memory is currently disabled. Enable memory tools in Settings to edit these automations."}),K&&e.jsx("div",{className:"memory-action-bar",children:e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:ye,disabled:D||v,children:D?e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14,className:"animate-spin"}),"Saving…"]}):"Save Settings"})})]})]})]}),o==="insights"&&e.jsx("div",{className:"memory-insights-tab",children:ee?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(A,{size:20,className:"animate-spin"}),e.jsx("span",{children:"Loading insights…"})]}):S?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"memory-editor-container",children:e.jsx(Me,{content:y??"",onChange:g,readOnly:!1,filePath:".fusion/memory/INSIGHTS.md"})}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:fe,children:"Cancel"}),e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:R,children:"Save Insights"})]})]}):!oe||L.length===0?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx("p",{children:"No insights extracted yet."}),e.jsx("p",{children:'Insights are automatically extracted from working memory. Click "Extract Now" to trigger extraction manually.'}),e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:O,disabled:u,style:{marginTop:"var(--space-md)"},children:u?e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14,className:"animate-spin"}),"Extracting…"]}):"Extract Now"})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"memory-stats-row",children:[e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value",children:_}),e.jsx("div",{className:"memory-stat-label",children:"Total Insights"})]}),e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value",children:L.length}),e.jsx("div",{className:"memory-stat-label",children:"Categories"})]}),w&&e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value",style:{fontSize:"16px"},children:w}),e.jsx("div",{className:"memory-stat-label",children:"Last Updated"})]})]}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:O,disabled:u,children:u?e.jsxs(e.Fragment,{children:[e.jsx(A,{size:14,className:"animate-spin"}),"Extracting…"]}):"Extract Now"}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:be,children:"Edit Raw"})]}),e.jsx("div",{className:"memory-categories-list",children:L.map(s=>{const i=!F.has(s.key);return e.jsxs("div",{className:"memory-category-section",children:[e.jsxs("div",{className:"memory-category-header",onClick:()=>le(s.key),role:"button",tabIndex:0,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),le(s.key))},children:[e.jsx("h4",{children:s.name}),e.jsx("span",{className:"memory-category-count",children:s.items.length})]}),i&&e.jsx("div",{className:"memory-category-items",children:s.items.map((h,je)=>e.jsx("div",{className:"memory-insight-item",children:h.replace(/^-\s+/,"").replace(/^\*\s+/,"")},je))})]},s.key)})})]})}),o==="engines"&&e.jsx("div",{className:"memory-engines-tab",children:C||te?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(A,{size:20,className:"animate-spin"}),e.jsx("span",{children:"Loading engine status…"})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"memory-engine-card memory-qmd-card",children:[e.jsx("h3",{children:"QMD Integration"}),m?.qmdAvailable===!0?e.jsxs("div",{className:"memory-engine-status",children:[e.jsx("span",{className:"memory-health-badge memory-health-badge--healthy",children:"Installed"}),e.jsx("span",{className:"memory-char-count",children:"qmd is available on PATH."})]}):m?.qmdAvailable===!1?e.jsxs("div",{className:"settings-empty-state memory-status-message",children:[e.jsxs("span",{children:["qmd is not installed. Search will use local files. Install indexed retrieval: ",e.jsx("code",{children:m.qmdInstallCommand||"bun install -g @tobilu/qmd"})]}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:ge,disabled:ne,children:ne?"Installing…":"Install qmd"})]}):e.jsxs("div",{className:"memory-engine-status",children:[e.jsx("span",{className:"memory-health-badge",children:"Checking"}),e.jsx("span",{className:"memory-char-count",children:"Checking qmd availability…"})]}),e.jsxs("div",{style:{display:"flex",gap:"var(--space-xs)",marginTop:"var(--space-sm)",flexWrap:"wrap"},children:[m?.capabilities?.readable&&e.jsx("span",{className:"memory-capability-badge",children:"Readable"}),m?.capabilities?.writable&&e.jsx("span",{className:"memory-capability-badge",children:"Writable"}),m?.capabilities?.supportsAtomicWrite&&e.jsx("span",{className:"memory-capability-badge",children:"Atomic Writes"}),m?.capabilities?.persistent&&e.jsx("span",{className:"memory-capability-badge",children:"Persistent"})]})]}),e.jsxs("div",{className:"memory-engine-card memory-retrieval-card",children:[e.jsx("h3",{children:"Test Memory Search"}),e.jsxs("div",{className:"memory-retrieval-input-row",children:[e.jsx("input",{type:"text",className:"input",value:Q,onChange:s=>J(s.target.value),placeholder:"Search memory with qmd"}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:pe,disabled:X,children:X?"Testing…":"Test Retrieval"})]}),e.jsx("small",{className:"settings-muted",children:"Runs the same qmd-backed memory_search path agents use."}),f&&e.jsxs("div",{className:"memory-test-result",children:[e.jsxs("strong",{children:[f.results.length," result",f.results.length===1?"":"s"," ",'for "',f.query,'"']}),e.jsxs("small",{children:["qmd ",f.qmdAvailable?"available":"missing"," · ",f.usedFallback?"local fallback used":"qmd path used"]}),f.results.length>0?e.jsx("ul",{children:f.results.map((s,i)=>e.jsxs("li",{children:[e.jsxs("span",{children:[s.path,":",s.lineStart]}),e.jsx("p",{children:s.snippet})]},`${s.path}-${s.lineStart}-${i}`))}):e.jsx("small",{children:"No matching memory found."})]})]}),e.jsxs("div",{className:"memory-engine-card",children:[e.jsx("h3",{children:"Current Backend"}),e.jsx("div",{className:"memory-engine-status",children:e.jsx("span",{style:{fontWeight:500},children:Ze(m?.currentBackend??"unknown")})}),e.jsxs("div",{style:{display:"flex",gap:"var(--space-xs)",marginTop:"var(--space-sm)",flexWrap:"wrap"},children:[m?.capabilities?.readable&&e.jsx("span",{className:"memory-capability-badge",children:"Readable"}),m?.capabilities?.writable&&e.jsx("span",{className:"memory-capability-badge",children:"Writable"}),m?.capabilities?.supportsAtomicWrite&&e.jsx("span",{className:"memory-capability-badge",children:"Atomic Writes"}),m?.capabilities?.persistent&&e.jsx("span",{className:"memory-capability-badge",children:"Persistent"})]})]}),d&&e.jsxs("div",{className:"memory-engine-card",children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"var(--space-md)"},children:[e.jsx("h3",{children:"Health Status"}),e.jsx("span",{className:`memory-health-badge memory-health-badge--${d.health}`,children:Ke(d.health)})]}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"var(--space-md)"},children:[e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:"12px",color:"var(--text-muted)",textTransform:"uppercase",marginBottom:"var(--space-xs)"},children:"Working Memory"}),e.jsxs("div",{style:{fontWeight:500},children:[d.workingMemory.size," chars"]}),e.jsxs("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:[d.workingMemory.sectionCount," sections"]})]}),e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:"12px",color:"var(--text-muted)",textTransform:"uppercase",marginBottom:"var(--space-xs)"},children:"Insights Memory"}),e.jsxs("div",{style:{fontWeight:500},children:[d.insightsMemory.size," chars"]}),e.jsxs("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:[d.insightsMemory.insightCount," insights"]})]})]}),e.jsxs("div",{style:{marginTop:"var(--space-md)",paddingTop:"var(--space-md)",borderTop:"1px solid var(--border)"},children:[e.jsx("div",{style:{fontSize:"12px",color:"var(--text-muted)",textTransform:"uppercase",marginBottom:"var(--space-xs)"},children:"Last Extraction"}),e.jsx("div",{style:{fontWeight:500},children:d.extraction.success?e.jsx("span",{style:{color:"var(--color-success)"},children:"Success"}):e.jsx("span",{style:{color:"var(--color-error)"},children:"Failed"})}),e.jsx("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:d.extraction.summary||`${d.extraction.insightCount} insights extracted`})]}),e.jsxs("div",{style:{marginTop:"var(--space-md)",paddingTop:"var(--space-md)",borderTop:"1px solid var(--border)"},children:[e.jsx("div",{style:{fontSize:"12px",color:"var(--text-muted)",textTransform:"uppercase",marginBottom:"var(--space-xs)"},children:"Pruning"}),e.jsx("div",{style:{fontWeight:500},children:d.pruning.applied?e.jsx("span",{style:{color:"var(--color-warning)"},children:"Applied"}):e.jsx("span",{style:{color:"var(--text-muted)"},children:"Not needed"})}),d.pruning.applied&&e.jsx("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:d.pruning.reason})]})]}),d&&d.checks.length>0&&e.jsxs("div",{className:"memory-engine-card",children:[e.jsx("h3",{children:"Audit Checks"}),e.jsx("div",{children:d.checks.map(s=>e.jsxs("div",{className:"memory-audit-check",children:[e.jsx("span",{className:s.passed?"memory-audit-check-passed":"memory-audit-check-failed",children:s.passed?"✓":"✗"}),e.jsxs("div",{style:{flex:1},children:[e.jsx("div",{style:{fontWeight:500},children:s.name}),e.jsx("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:s.details})]})]},s.id))})]}),e.jsx("div",{className:"memory-action-bar",children:e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:()=>H(),children:"Run Audit"})}),e.jsxs("div",{style:{marginTop:"var(--space-lg)",fontSize:"13px",color:"var(--text-muted)"},children:["Note: Change backend type in"," ",e.jsx("span",{style:{cursor:"pointer",textDecoration:"underline"},onClick:()=>{t("Open Settings → Memory to change backend type","info")},children:"Settings → Memory"})]})]})})]})]})}export{ts as MemoryView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.settings-modal-heading{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-modal-heading h3{margin:0}.settings-modal-version{margin:0;font-size:.85rem;color:var(--text-muted);font-weight:500}.settings-layout{display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.settings-mobile-section-picker{display:none}.settings-sidebar{width:170px;min-width:170px;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;padding:10px 8px;gap:2px;background:#0000001a;scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-sidebar::-webkit-scrollbar{width:6px}.settings-sidebar::-webkit-scrollbar-track{background:transparent}.settings-sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-sidebar::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-nav-item{display:block;width:100%;padding:var(--space-sm) var(--space-md);font-size:13px;font-weight:500;color:var(--text-muted);background:none;border:none;border-left:3px solid transparent;border-radius:0 var(--radius) var(--radius) 0;cursor:pointer;text-align:left;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.settings-nav-item:hover{background:var(--bg);color:var(--text);border-left-color:var(--border)}.settings-nav-item:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}.settings-nav-item.active{background:var(--bg);color:var(--todo);font-weight:600;border-left-color:var(--todo)}.settings-group-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);padding:var(--space-md) var(--space-md) var(--space-xs);margin-top:var(--space-sm);user-select:none}.settings-group-header:first-child{margin-top:0}.settings-content{flex:1;overflow-x:hidden;overflow-y:auto;padding:4px 0 12px;scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-content::-webkit-scrollbar{width:6px}.settings-content::-webkit-scrollbar-track{background:transparent}.settings-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-content::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-content>*{animation:settingsFadeIn var(--transition-normal)}@keyframes settingsFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.settings-section-heading{font-size:14px;font-weight:600;padding:var(--space-lg) var(--space-xl) var(--space-md);margin:0 var(--space-xl) 0;color:var(--text);border-bottom:1px solid var(--border);margin-bottom:var(--space-xs)}.settings-section-heading--spaced{margin-top:var(--space-xl)}.settings-plugins-subsection-toggle{display:inline-flex;gap:var(--space-xs);padding:0 var(--space-xl);margin:var(--space-md) 0}.settings-plugins-subsection-btn{display:inline-flex;align-items:center;justify-content:center;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--surface);color:var(--text-muted);font-size:.85rem;font-weight:600;padding:var(--space-xs) var(--space-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.settings-plugins-subsection-btn:hover{background:var(--surface-hover, color-mix(in srgb, var(--text-muted) 8%, transparent));color:var(--text)}.settings-plugins-subsection-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.settings-plugins-subsection-btn.active{background:color-mix(in srgb,var(--todo) 14%,transparent);border-color:color-mix(in srgb,var(--todo) 45%,var(--border));color:var(--todo)}.settings-plugins-subsection-panel{padding-bottom:var(--space-md)}.settings-scope-icon{margin-right:6px;display:inline-flex;vertical-align:middle;color:var(--text-muted)}.settings-scope-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xl);margin:0 var(--space-xl) var(--space-xs);font-size:12px;border-radius:var(--radius);color:var(--text-muted)}.settings-scope-global{background:color-mix(in srgb,var(--color-info) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-info) 40%,transparent)}.settings-scope-project{background:color-mix(in srgb,var(--color-success) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-success) 40%,transparent)}.settings-scope-mixed{background:color-mix(in srgb,var(--triage) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--triage) 40%,transparent)}.settings-note{display:block;padding:0 var(--space-xl);margin-top:var(--space-xs);font-size:12px;color:var(--text-muted)}.settings-overlap-ignore-group code{font-family:var(--font-mono);font-size:.9em}.settings-overlap-ignore-list{display:flex;flex-direction:column;gap:var(--space-sm);margin:var(--space-sm) 0}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-sm);align-items:center}.settings-overlap-path-picker-modal{max-width:min(960px,calc(100vw - var(--space-2xl)))}.settings-overlap-path-picker-body{display:flex;flex-direction:column;gap:var(--space-sm);max-height:min(70vh,720px)}.settings-overlap-path-picker-note{margin:0;font-size:12px;color:var(--text-muted)}.settings-section-divider{border-top:1px solid var(--border);margin:var(--space-lg) var(--space-xl)}@media(max-width:768px){.settings-note{padding:0 var(--space-lg)}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{grid-template-columns:minmax(0,1fr)}.settings-overlap-ignore-row>.btn{justify-self:start}.settings-overlap-path-picker-modal{max-width:calc(100vw - var(--space-md))}}.ntfy-advanced-disclosure{margin-top:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.ntfy-advanced-disclosure>summary{cursor:pointer;list-style:none;padding:var(--space-sm) var(--space-md);font-size:12px;font-weight:600;color:var(--text)}.ntfy-advanced-disclosure>summary::-webkit-details-marker{display:none}.ntfy-advanced-content{padding:0 var(--space-md) var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.memory-status-message{display:flex;gap:var(--space-md);align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.memory-status-message span{min-width:0}.memory-retrieval-test{margin-top:var(--space-lg)}.memory-test-result{margin:0 var(--space-xl) var(--space-lg);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-test-result strong,.memory-test-result span{color:var(--text);font-size:12px}.memory-test-result small{display:block;margin-top:var(--space-xs);color:var(--text-muted);font-size:12px}.memory-test-result ul{margin:var(--space-md) 0 0;padding:0;list-style:none}.memory-test-result li{padding-top:var(--space-sm);border-top:var(--btn-border-width) solid var(--border)}.memory-test-result li+li{margin-top:var(--space-sm)}.memory-test-result p{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.memory-editor-section{margin-top:var(--space-lg)}.memory-file-summary{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-xs) var(--space-md);align-items:center;margin:0 var(--space-xl) var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-file-summary span{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent);font-size:11px;font-weight:600}.memory-file-summary strong{min-width:0;overflow-wrap:anywhere;color:var(--text);font-family:var(--font-mono);font-size:12px}.memory-file-summary small{grid-column:2;color:var(--text-muted);font-size:12px}.memory-editor-frame{min-height:50vh;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column}.auth-section-hint{padding:12px 16px;margin-bottom:12px;background:var(--bg-tertiary);border-radius:var(--radius);font-size:13px;color:var(--text-muted);border-left:3px solid var(--text-muted)}.auth-provider-group{margin-bottom:16px}.auth-group-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:8px;padding:0 4px}.auth-provider-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:8px;overflow:hidden;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.auth-provider-card:hover{border-color:var(--text-dim)}.auth-provider-card--authenticated{border-color:color-mix(in srgb,var(--color-success) 40%,var(--border));background:color-mix(in srgb,var(--color-success) 5%,var(--surface))}.auth-provider-card--authenticated:hover{border-color:color-mix(in srgb,var(--color-success) 60%,var(--border))}.auth-provider-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;gap:12px}.auth-provider-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.auth-provider-info strong{font-weight:500;color:var(--text)}.auth-provider-icon-slot{display:inline-flex;align-items:center;justify-content:center;inline-size:calc(var(--space-md) + var(--space-xs) * 2);block-size:calc(var(--space-md) + var(--space-xs) * 2);flex-shrink:0}.auth-provider-icon-slot .provider-icon{display:inline-flex}.auth-hint{display:block;padding:12px 4px 0;font-size:12px;color:var(--text-muted);border-top:1px solid var(--border);margin-top:8px}.auth-login-instructions{margin-top:var(--space-sm);margin-bottom:0;padding:var(--space-sm) var(--space-md);border:1px solid color-mix(in srgb,var(--color-info) 35%,var(--border));border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-info) 8%,transparent);color:var(--text);line-height:1.5;white-space:pre-wrap}.auth-apikey-section{display:flex;flex-direction:column;gap:4px;align-items:flex-end;flex-shrink:0}.auth-apikey-input-row{display:flex;gap:6px;align-items:center}.auth-apikey-input{background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:6px 10px;font-size:13px;width:180px;font-family:monospace}.auth-apikey-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px #6366f133}.auth-apikey-input:disabled{opacity:.6}.auth-apikey-progress{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding-right:4px}.auth-apikey-error{font-size:11px;color:var(--color-error);padding-right:4px}.auth-key-hint{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);display:inline-block;margin-top:var(--space-xs);user-select:none}.settings-lane-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500;white-space:nowrap}.settings-lane-badge--override{background-color:color-mix(in srgb,var(--color-accent) 20%,transparent);color:var(--color-accent)}.settings-lane-badge--inherited{background-color:color-mix(in srgb,var(--color-text-muted) 15%,transparent);color:var(--text-muted)}.settings-description{font-size:13px;color:var(--text-secondary);margin-bottom:var(--space-md);line-height:1.5}.settings-model-presets{display:flex;flex-direction:column;gap:var(--space-md)}.settings-preset-list{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-item{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.settings-preset-item-meta{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.settings-preset-item-meta strong{color:var(--text);overflow-wrap:anywhere}.settings-preset-summary{font-size:12px;overflow-wrap:anywhere}.settings-preset-item-actions{display:flex;gap:var(--space-xs);flex-wrap:wrap;justify-content:flex-end}.settings-preset-actions{display:flex;justify-content:flex-start}.settings-preset-editor{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,var(--card))}.settings-preset-editor-fields{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-editor .form-group{padding:0}.settings-preset-editor-actions{justify-content:flex-start;margin-top:0;padding:0}.settings-preset-auto-select{margin-top:var(--space-sm)}.settings-preset-size-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm)}.settings-preset-size-row{padding:0}@media(max-width:768px){.settings-layout{flex-direction:column;min-height:0}.settings-mobile-section-picker{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border);background:var(--surface)}.settings-mobile-section-picker label{color:var(--text-muted);font-weight:600;text-transform:uppercase}.settings-mobile-section-picker select{width:100%}.settings-mobile-section-picker select:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.settings-sidebar{display:none}.settings-nav-item{display:flex;align-items:center;justify-content:center;gap:4px;border-left:none;border-bottom:2px solid transparent;border-radius:var(--radius) var(--radius) 0 0;padding:6px 12px;white-space:nowrap}.settings-nav-item:hover{border-left-color:transparent;border-bottom-color:var(--border)}.settings-nav-item.active{border-left-color:transparent;border-bottom-color:var(--todo)}.settings-group-header{display:none}.settings-scope-icon{margin-right:0}.settings-content{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto}.settings-content .form-group small{overflow-wrap:break-word;word-break:break-all}.settings-content input,.settings-content select,.settings-content textarea{font-size:16px}.settings-section-heading{padding:var(--space-lg) var(--space-lg) var(--space-md);margin:0 var(--space-lg) 0}.settings-plugins-subsection-toggle{display:flex;width:100%;padding:0 var(--space-lg)}.settings-plugins-subsection-btn{flex:1;min-height:36px}.settings-plugins-subsection-panel{padding-left:var(--space-lg);padding-right:var(--space-lg)}.form-group{padding:0 14px}.settings-scope-banner{padding:var(--space-sm) var(--space-lg)}.memory-editor-frame{min-height:45vh}.memory-file-summary{grid-template-columns:1fr;margin:0 var(--space-lg) var(--space-md)}.memory-status-message{align-items:stretch;flex-direction:column}.memory-file-summary span{justify-content:flex-start}.memory-file-summary small{grid-column:auto}.settings-description{padding:0 var(--space-lg)}.settings-content .btn,.settings-preset-item-actions .btn{min-height:36px}.auth-provider-row{flex-wrap:wrap;padding:12px 14px;gap:var(--space-sm)}.auth-section-hint{margin:0 14px 12px;padding:10px 14px}.auth-provider-group{margin-bottom:12px}.auth-group-label{padding:0 14px}.auth-provider-card{margin:0 14px 8px}.auth-provider-header{flex-wrap:wrap;padding:10px 14px;gap:10px}.auth-provider-header>div:not(.auth-provider-info):not(.auth-apikey-section){margin-left:auto}.auth-provider-info{width:100%;flex-basis:100%}.auth-apikey-section{width:100%;flex-basis:100%;align-items:flex-end}.auth-apikey-input-row{width:100%;flex-wrap:wrap;justify-content:flex-end}.auth-apikey-input{flex:1;min-width:120px;width:auto}.auth-apikey-input-row .btn{flex-shrink:0;margin-left:auto}.auth-hint{padding:12px 14px 0}.settings-model-presets{gap:var(--space-sm)}.settings-preset-item{flex-direction:column;align-items:stretch;padding:var(--space-sm) var(--space-md)}.settings-preset-item-actions{justify-content:flex-start}.settings-preset-editor{padding:var(--space-sm) var(--space-md)}.settings-preset-editor-actions{flex-wrap:wrap}.settings-preset-size-grid{grid-template-columns:1fr;gap:var(--space-xs)}}
|