@runfusion/fusion 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +311 -56
- package/dist/client/assets/{AgentDetailView-CkuuGA1O.js → AgentDetailView-CBdzWtd-.js} +1 -1
- package/dist/client/assets/{AgentsView-CWFLMIDP.js → AgentsView-DPlnCa_B.js} +3 -3
- package/dist/client/assets/{ChatView-C_T91ebd.js → ChatView-BXzYysNG.js} +1 -1
- package/dist/client/assets/{DevServerView-ChWTzTvy.js → DevServerView-BY5cGz23.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BMJIT7HD.js → DirectoryPicker-DZ90eSBn.js} +1 -1
- package/dist/client/assets/{DocumentsView-Co9to4Zp.css → DocumentsView-DV2DrCZb.css} +1 -1
- package/dist/client/assets/{DocumentsView-CjfVl8mZ.js → DocumentsView-lQwJmc4G.js} +1 -1
- package/dist/client/assets/{InsightsView-Rb735C9_.js → InsightsView-DUiZZ0z8.js} +1 -1
- package/dist/client/assets/{MemoryView-LLc_uNtG.js → MemoryView-DvSmMN6G.js} +1 -1
- package/dist/client/assets/{NodesView-BviqBWRA.js → NodesView-DgyM-ktg.js} +1 -1
- package/dist/client/assets/PiExtensionsManager-K7HQ08L4.css +1 -0
- package/dist/client/assets/PiExtensionsManager-wxB-q06A.js +11 -0
- package/dist/client/assets/{PluginManager-BywTPbLB.js → PluginManager-LH02ybSH.js} +1 -1
- package/dist/client/assets/PluginManager-tCFMZMLL.css +1 -0
- package/dist/client/assets/{RoadmapsView-Dhl--4vY.js → RoadmapsView-ANn2jmsU.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-CVtmwoJC.js → SetupWizardModal-UxlAtKWA.js} +1 -1
- package/dist/client/assets/{SkillsView-CG9y4fsE.js → SkillsView-DEjGh7wW.js} +1 -1
- package/dist/client/assets/{folder-open-BVDq27HP.js → folder-open-J7yPbaCt.js} +1 -1
- package/dist/client/assets/index-BdJsO65L.css +1 -0
- package/dist/client/assets/index-CHoVMPAA.js +649 -0
- package/dist/client/assets/{upload-BDvpReDO.js → upload-B_grq4hM.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/extension.js +70 -8
- package/dist/pi-claude-cli/package.json +1 -1
- package/package.json +5 -5
- package/dist/client/assets/PiExtensionsManager-CPgmJgDk.css +0 -1
- package/dist/client/assets/PiExtensionsManager-CriZBkQe.js +0 -11
- package/dist/client/assets/PluginManager-D64RIzmL.css +0 -1
- package/dist/client/assets/index-CikysL-d.js +0 -644
- package/dist/client/assets/index-Da1qmtc7.css +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{b9 as Ae,ba as je,bb as Se,bc as Fe,o as ze,bd as De,be as Ie,bf as Le,bg as Ne,bh as Ce,bi as Re,bj as Te,bk as Ee,bl as We,n as qe,bm as Pe,L as w,bn as ke}from"./index-
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{b9 as Ae,ba as je,bb as Se,bc as Fe,o as ze,bd as De,be as Ie,bf as Le,bg as Ne,bh as Ce,bi as Re,bj as Te,bk as Ee,bl as We,n as qe,bm as Pe,L as w,bn as ke}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";const U=".fusion/memory/MEMORY.md",_e=5e4,Oe="0 3 * * *",Ue="0 4 * * *";function oe(i){return{memoryEnabled:i.memoryEnabled!==!1,memoryAutoSummarizeEnabled:i.memoryAutoSummarizeEnabled??!1,memoryAutoSummarizeThresholdChars:i.memoryAutoSummarizeThresholdChars??_e,memoryAutoSummarizeSchedule:i.memoryAutoSummarizeSchedule??Oe,memoryDreamsEnabled:i.memoryDreamsEnabled??!1,memoryDreamsSchedule:i.memoryDreamsSchedule??Ue}}function Me(i,t){return i.some(m=>m.path===t)?t:i.find(m=>m.path===U)?.path??i[0]?.path??U}function Qe(i={}){const{projectId:t}=i,[m,x]=a.useState(""),[A,N]=a.useState(!0),[j,S]=a.useState(!1),[h,y]=a.useState(!1),[n,g]=a.useState(null),[Q,J]=a.useState(!0),[X,F]=a.useState(!1),[b,R]=a.useState(()=>oe({})),[C,ee]=a.useState(!0),[ce,B]=a.useState(!1),[c,f]=a.useState([]),[se,z]=a.useState(!0),[o,E]=a.useState(U),[T,u]=a.useState(""),[d,te]=a.useState(!1),[H,p]=a.useState(!1),[ae,$]=a.useState(!1),[ne,Y]=a.useState(!1),[G,W]=a.useState(null),[k,q]=a.useState(!0),[de,D]=a.useState(!1),[ue,V]=a.useState(!1),[re,Z]=a.useState(null),{status:K,loading:v,refresh:ie}=Ae({projectId:t}),I=a.useCallback(s=>{u(s),p(!0)},[]),P=a.useCallback(async s=>{te(!0);try{const{content:r}=await je(s,t);E(s),u(r),p(!1)}finally{te(!1)}},[t]),M=a.useCallback(async()=>{z(!0);try{const{files:s}=await Se(t);if(f(s),s.length===0){E(U),u(""),p(!1);return}const r=Me(s,o);r!==o&&await P(r)}finally{z(!1)}},[t,o,P]);a.useEffect(()=>{let s=!1;async function r(){try{const l=await We(t);s||(x(l.content),N(!1))}catch{s||(x(""),N(!1))}}return r(),()=>{s=!0}},[t]),a.useEffect(()=>{let s=!1;async function r(){try{const l=await Ce(t);s||(g(l.content),F(l.exists),J(!1))}catch{s||(g(null),F(!1),J(!1))}}return r(),()=>{s=!0}},[t]),a.useEffect(()=>{let s=!1;async function r(){ee(!0);try{const l=await qe(t);s||R(oe(l))}catch{s||R(oe({}))}finally{s||ee(!1)}}return r(),()=>{s=!0}},[t]),a.useEffect(()=>{let s=!1;async function r(){z(!0);try{const{files:l}=await Se(t);if(s)return;if(f(l),l.length===0){E(U),u(""),p(!1);return}const me=Me(l,o),{content:we}=await je(me,t);if(s)return;E(me),u(we),p(!1)}catch{s||(f([]),E(U),u(""),p(!1))}finally{s||z(!1)}}return r(),()=>{s=!0}},[t,o]),a.useEffect(()=>{let s=!1;async function r(){try{const l=await Ne(t);s||(W(l),q(!1))}catch{s||(W(null),q(!1))}}return r(),()=>{s=!0}},[t]),a.useEffect(()=>{let s=!1;async function r(){try{const l=await Pe(t);s||Z(l)}catch{s||Z(null)}}return r(),()=>{s=!0}},[t]);const le=a.useCallback(s=>{x(s),S(!0)},[]),he=a.useCallback(async()=>{if(j){y(!0);try{await Fe(m,t),S(!1)}finally{y(!1)}}},[m,j,t]),ye=a.useCallback(async s=>{B(!0);try{const r=await ze(s,t);R(oe(r))}finally{B(!1)}},[t]),ge=a.useCallback(async s=>{await P(s)},[P]),pe=a.useCallback(async()=>{if(H){$(!0);try{await De(o,T,t),p(!1),await M()}finally{$(!1)}}},[T,H,o,t,M]),xe=a.useCallback(async()=>{V(!0);try{const s=await Ie(t);return await ie(),s}finally{V(!1)}},[t,ie]),be=a.useCallback(async s=>Le(s,t),[t]),_=a.useCallback(async()=>{try{const s=await Ne(t);W(s)}catch{W(null)}},[t]),L=a.useCallback(async()=>{try{const s=await Ce(t);g(s.content),F(s.exists)}catch{g(null),F(!1)}},[t]),fe=a.useCallback(async s=>{await Re(s,t),await L()},[t,L]),ve=a.useCallback(async()=>{Y(!0);try{const s=await Te(t);return await Promise.all([L(),_()]),{success:s.success,summary:s.summary}}finally{Y(!1)}},[t,L,_]),O=a.useCallback(async s=>{D(!0);try{const r=s?await Ee(s,t):await Ee(t);if(s){const l=r.path??s;E(l),u(r.content),p(!1),await M();return}x(r.content),S(!0)}finally{D(!1)}},[t,M]);return{workingMemory:m,workingMemoryLoading:A,workingMemoryDirty:j,setWorkingMemory:le,saveWorkingMemory:he,savingWorkingMemory:h,insightsContent:n,insightsLoading:Q,insightsExists:X,refreshInsights:L,saveInsights:fe,memorySettings:b,settingsLoading:C,savingMemorySettings:ce,saveMemorySettings:ye,memoryFiles:c,memoryFilesLoading:se,selectedFilePath:o,selectedFileContent:T,selectedFileLoading:d,selectedFileDirty:H,setSelectedFileContent:I,selectFile:ge,saveSelectedFile:pe,savingSelectedFile:ae,reloadMemoryFiles:M,backendStatus:K,backendLoading:v,extractInsights:ve,extracting:ne,auditReport:G,auditLoading:k,refreshAudit:_,compactMemory:O,compacting:de,installQmdAction:xe,installingQmd:ue,testRetrieval:be,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(i){if(!i)return[];const t=[],m=i.split(/(?=^## )/m);for(const x of m){const A=x.trim();if(!A)continue;const N=A.match(/^##\s+(.+?)(\n|$)/);if(N){const j=N[1].trim(),S=Be[j]??j.toLowerCase(),h=A.slice(N[0].length).trim(),y=h.split(`
|
|
2
2
|
`).map(n=>n.replace(/^-\s+/,"").trim()).filter(n=>n.length>0&&(n.startsWith("- ")||n.startsWith("* ")));(y.length>0||h.length>0)&&t.push({name:j,key:S,items:y.length>0?y:h.length>0?[h]:[],expanded:!0})}}return t}function Ge(i){if(!i)return null;const t=i.match(/##\s+Last\s+Updated:\s*(\d{4}-\d{2}-\d{2})/i);return t?t[1]:null}function Ve(i){return i.reduce((t,m)=>t+m.items.length,0)}function Ze(i){switch(i){case"file":return"File (.fusion/memory/)";case"readonly":return"Read-Only";case"qmd":return"QMD (Quantized Memory Distillation)";default:return i}}function Ke(i){switch(i){case"healthy":return"Healthy";case"warning":return"Warning";case"issues":return"Issues Found"}}function ss({projectId:i,addToast:t}){const[m,x]=a.useState("working"),[A,N]=a.useState(new Set),[j,S]=a.useState(!1),[h,y]=a.useState(null),[n,g]=a.useState({memoryEnabled:!0,memoryAutoSummarizeEnabled:!1,memoryAutoSummarizeThresholdChars:5e4,memoryAutoSummarizeSchedule:"0 3 * * *",memoryDreamsEnabled:!1,memoryDreamsSchedule:"0 4 * * *"}),[Q,J]=a.useState(""),[X,F]=a.useState(!1),[b,R]=a.useState(null),{insightsContent:C,insightsLoading:ee,insightsExists:ce,saveInsights:B,memorySettings:c,settingsLoading:f,saveMemorySettings:se,savingMemorySettings:z,backendStatus:o,backendLoading:E,extractInsights:T,extracting:u,auditReport:d,auditLoading:te,refreshAudit:H,compactMemory:p,compacting:ae,installQmdAction:$,installingQmd:ne,testRetrieval:Y,memoryFiles:G,memoryFilesLoading:W,selectedFilePath:k,selectedFileContent:q,selectedFileLoading:de,selectedFileDirty:D,setSelectedFileContent:ue,selectFile:V,saveSelectedFile:re,savingSelectedFile:Z}=Qe({projectId:i});a.useEffect(()=>{g(c)},[c]);const K=a.useMemo(()=>n.memoryEnabled!==c.memoryEnabled||n.memoryAutoSummarizeEnabled!==c.memoryAutoSummarizeEnabled||n.memoryAutoSummarizeThresholdChars!==c.memoryAutoSummarizeThresholdChars||n.memoryAutoSummarizeSchedule!==c.memoryAutoSummarizeSchedule||n.memoryDreamsEnabled!==c.memoryDreamsEnabled||n.memoryDreamsSchedule!==c.memoryDreamsSchedule,[n,c]),v=a.useMemo(()=>G.find(s=>s.path===k),[G,k]),ie=v?$e[v.layer]:"Edits the selected memory file.",I=a.useMemo(()=>Ye(C),[C]),P=a.useMemo(()=>Ve(I),[I]),M=a.useMemo(()=>Ge(C),[C]),le=a.useCallback(s=>{N(r=>{const l=new Set(r);return l.has(s)?l.delete(s):l.add(s),l})},[]),he=a.useCallback(async s=>{try{await V(s)}catch{t("Failed to load memory file","error")}},[V,t]),ye=a.useCallback(async()=>{try{await re(),t("Memory saved","success")}catch{t("Failed to save memory","error")}},[re,t]),ge=a.useCallback(async()=>{if(!K)return;const s={};n.memoryEnabled!==c.memoryEnabled&&(s.memoryEnabled=n.memoryEnabled),n.memoryAutoSummarizeEnabled!==c.memoryAutoSummarizeEnabled&&(s.memoryAutoSummarizeEnabled=n.memoryAutoSummarizeEnabled),n.memoryAutoSummarizeThresholdChars!==c.memoryAutoSummarizeThresholdChars&&(s.memoryAutoSummarizeThresholdChars=n.memoryAutoSummarizeThresholdChars),n.memoryAutoSummarizeSchedule!==c.memoryAutoSummarizeSchedule&&(s.memoryAutoSummarizeSchedule=n.memoryAutoSummarizeSchedule),n.memoryDreamsEnabled!==c.memoryDreamsEnabled&&(s.memoryDreamsEnabled=n.memoryDreamsEnabled),n.memoryDreamsSchedule!==c.memoryDreamsSchedule&&(s.memoryDreamsSchedule=n.memoryDreamsSchedule);try{await se(s),t("Memory settings saved","success")}catch{t("Failed to save memory settings","error")}},[K,n,c,se,t]),pe=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]),xe=a.useCallback(async()=>{F(!0),R(null);try{const s=await Y(Q);R(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{F(!1)}},[Q,Y,t]),be=a.useCallback(async()=>{try{await p(k),t("Memory file compacted","success")}catch{t("Failed to compact memory","error")}},[p,k,t]),_=a.useCallback(async()=>{try{const s=await T();t(s.summary,"success")}catch(s){t(s instanceof Error?s.message:"Failed to extract insights","error")}},[T,t]),L=a.useCallback(async()=>{if(h!==null)try{await B(h),S(!1),y(null),t("Insights saved","success")}catch{t("Failed to save insights","error")}},[h,B,t]),fe=a.useCallback(()=>{y(C??""),S(!0)},[C]),ve=a.useCallback(()=>{S(!1),y(null)},[]),O=o?.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":m==="working",className:`memory-view-tab${m==="working"?" memory-view-tab--active":""}`,onClick:()=>x("working"),"data-testid":"memory-tab-working",children:"Working Memory"}),e.jsx("button",{type:"button",role:"tab","aria-selected":m==="insights",className:`memory-view-tab${m==="insights"?" memory-view-tab--active":""}`,onClick:()=>x("insights"),"data-testid":"memory-tab-insights",children:"Insights"}),e.jsx("button",{type:"button",role:"tab","aria-selected":m==="engines",className:`memory-view-tab${m==="engines"?" memory-view-tab--active":""}`,onClick:()=>x("engines"),"data-testid":"memory-tab-engines",children:"Engines"})]}),e.jsxs("div",{className:"memory-view-content",children:[m==="working"&&e.jsxs("div",{className:"memory-working-tab",children:[!O&&e.jsx("div",{className:"memory-readonly-banner",children:"This memory backend is read-only. Changes cannot be saved."}),W||de?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(w,{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:k,onChange:s=>{he(s.target.value)},disabled:D,children:G.map(s=>e.jsxs("option",{value:s.path,children:[s.label," - ",s.path]},s.path))}),e.jsx("small",{children:D?"Save or discard the current edits before switching files.":"Choose any project memory file to view or edit."})]}),v&&e.jsxs("div",{className:"memory-file-summary",children:[e.jsx("span",{children:He[v.layer]}),e.jsx("strong",{children:v.path}),e.jsxs("small",{children:[v.size.toLocaleString()," bytes · updated ",new Date(v.updatedAt).toLocaleString()]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:v?.label||"Memory Editor"}),e.jsx("small",{children:ie}),e.jsx("div",{className:"memory-editor-container",children:e.jsx(ke,{content:q,onChange:ue,readOnly:!O,filePath:k})})]})]}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsxs("span",{className:"memory-char-count",children:[q.length," characters"]}),e.jsx("div",{style:{flex:1}}),O&&q.length>0&&e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:be,disabled:ae||D,children:ae?e.jsxs(e.Fragment,{children:[e.jsx(w,{size:14,className:"animate-spin"}),"Compacting…"]}):"Compact Selected File"}),D&&O&&e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:ye,disabled:Z,children:Z?e.jsxs(e.Fragment,{children:[e.jsx(w,{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:n.memoryDreamsEnabled,onChange:s=>{g(r=>({...r,memoryDreamsEnabled:s.target.checked}))},disabled:!n.memoryEnabled||f}),"Process dreams from daily memory"]}),e.jsx("small",{children:"Turns daily notes into DREAMS.md and promotes reusable lessons into MEMORY.md."})]}),n.memoryEnabled&&n.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:n.memoryDreamsSchedule,onChange:s=>{g(r=>({...r,memoryDreamsSchedule:s.target.value}))},placeholder:"0 4 * * *",disabled:f}),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:n.memoryAutoSummarizeEnabled,onChange:s=>{g(r=>({...r,memoryAutoSummarizeEnabled:s.target.checked}))},disabled:!n.memoryEnabled||f}),"Auto-Summarize Memory"]}),e.jsx("small",{children:"Automatically compact memory when it exceeds the threshold on a schedule"})]}),n.memoryEnabled&&n.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:n.memoryAutoSummarizeThresholdChars,onChange:s=>{g(r=>({...r,memoryAutoSummarizeThresholdChars:parseInt(s.target.value,10)||5e4}))},min:1e3,disabled:f}),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:n.memoryAutoSummarizeSchedule,onChange:s=>{g(r=>({...r,memoryAutoSummarizeSchedule:s.target.value}))},placeholder:"0 3 * * *",disabled:f}),e.jsx("small",{children:"Cron expression for auto-summarize schedule (default: daily at 3 AM)"})]})]})]}),!n.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:ge,disabled:z||f,children:z?e.jsxs(e.Fragment,{children:[e.jsx(w,{size:14,className:"animate-spin"}),"Saving…"]}):"Save Settings"})})]})]})]}),m==="insights"&&e.jsx("div",{className:"memory-insights-tab",children:ee?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(w,{size:20,className:"animate-spin"}),e.jsx("span",{children:"Loading insights…"})]}):j?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"memory-editor-container",children:e.jsx(ke,{content:h??"",onChange:y,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:ve,children:"Cancel"}),e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:L,children:"Save Insights"})]})]}):!ce||I.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:_,disabled:u,style:{marginTop:"var(--space-md)"},children:u?e.jsxs(e.Fragment,{children:[e.jsx(w,{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:P}),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:I.length}),e.jsx("div",{className:"memory-stat-label",children:"Categories"})]}),M&&e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value",style:{fontSize:"16px"},children:M}),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:_,disabled:u,children:u?e.jsxs(e.Fragment,{children:[e.jsx(w,{size:14,className:"animate-spin"}),"Extracting…"]}):"Extract Now"}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:fe,children:"Edit Raw"})]}),e.jsx("div",{className:"memory-categories-list",children:I.map(s=>{const r=!A.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:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),le(s.key))},children:[e.jsx("h4",{children:s.name}),e.jsx("span",{className:"memory-category-count",children:s.items.length})]}),r&&e.jsx("div",{className:"memory-category-items",children:s.items.map((l,me)=>e.jsx("div",{className:"memory-insight-item",children:l.replace(/^-\s+/,"").replace(/^\*\s+/,"")},me))})]},s.key)})})]})}),m==="engines"&&e.jsx("div",{className:"memory-engines-tab",children:E||te?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(w,{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"}),o?.qmdAvailable?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."})]}):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:o?.qmdInstallCommand||"bun install -g @tobilu/qmd"})]}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:pe,disabled:ne,children:ne?"Installing…":"Install qmd"})]}),e.jsxs("div",{style:{display:"flex",gap:"var(--space-xs)",marginTop:"var(--space-sm)",flexWrap:"wrap"},children:[o?.capabilities?.readable&&e.jsx("span",{className:"memory-capability-badge",children:"Readable"}),o?.capabilities?.writable&&e.jsx("span",{className:"memory-capability-badge",children:"Writable"}),o?.capabilities?.supportsAtomicWrite&&e.jsx("span",{className:"memory-capability-badge",children:"Atomic Writes"}),o?.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:xe,disabled:X,children:X?"Testing…":"Test Retrieval"})]}),e.jsx("small",{className:"settings-muted",children:"Runs the same qmd-backed memory_search path agents use."}),b&&e.jsxs("div",{className:"memory-test-result",children:[e.jsxs("strong",{children:[b.results.length," result",b.results.length===1?"":"s"," ",'for "',b.query,'"']}),e.jsxs("small",{children:["qmd ",b.qmdAvailable?"available":"missing"," · ",b.usedFallback?"local fallback used":"qmd path used"]}),b.results.length>0?e.jsx("ul",{children:b.results.map((s,r)=>e.jsxs("li",{children:[e.jsxs("span",{children:[s.path,":",s.lineStart]}),e.jsx("p",{children:s.snippet})]},`${s.path}-${s.lineStart}-${r}`))}):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(o?.currentBackend??"unknown")})}),e.jsxs("div",{style:{display:"flex",gap:"var(--space-xs)",marginTop:"var(--space-sm)",flexWrap:"wrap"},children:[o?.capabilities?.readable&&e.jsx("span",{className:"memory-capability-badge",children:"Readable"}),o?.capabilities?.writable&&e.jsx("span",{className:"memory-capability-badge",children:"Writable"}),o?.capabilities?.supportsAtomicWrite&&e.jsx("span",{className:"memory-capability-badge",children:"Atomic Writes"}),o?.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{ss as MemoryView};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as n,j as e}from"./vendor-react-K0fH_qHe.js";import{c as Y,al as xe,am as ge,an as pe,ao as je,ap as Z,aq as Q,A as T,ar as _e,I as Ne,K as be,as as ee,at as ve,au as Ce,X as B,av as ke,aw as Se,R as J,w as G,G as we}from"./index-
|
|
1
|
+
import{r as n,j as e}from"./vendor-react-K0fH_qHe.js";import{c as Y,al as xe,am as ge,an as pe,ao as je,ap as Z,aq as Q,A as T,ar as _e,I as Ne,K as be,as as ee,at as ve,au as Ce,X as B,av as ke,aw as Se,R as J,w as G,G as we}from"./index-CHoVMPAA.js";import{U as se}from"./upload-B_grq4hM.js";import"./vendor-xterm-DzcZoU0P.js";/**
|
|
2
2
|
* @license lucide-react v1.7.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.pi-ext-manager{display:flex;flex-direction:column;gap:var(--space-lg)}.pi-ext-manager-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-sm);border-bottom:1px solid var(--border)}.pi-ext-manager-header .settings-section-heading{margin:0}.pi-ext-manager-actions{display:flex;gap:var(--space-sm);align-items:center}.pi-ext-description{font-size:.82rem;color:var(--text-muted);line-height:1.45;margin:0}.pi-ext-item{display:flex;align-items:flex-start;justify-content:space-between;padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast);flex-wrap:wrap;gap:var(--space-sm)}.pi-ext-item:hover{border-color:var(--text-dim)}.pi-ext-item-content{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0;flex:1}.pi-ext-info{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.pi-ext-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pi-ext-source-badge{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:color-mix(in srgb,currentColor 12%,transparent)}.pi-ext-source-badge--global{color:var(--color-info)}.pi-ext-source-badge--project{color:var(--color-success)}.pi-ext-path{font-size:.75rem;font-family:var(--font-mono);color:var(--text-dim);word-break:break-all;line-height:1.4}.pi-ext-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.pi-ext-manager .empty-state,.pi-ext-manager .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);text-align:center;color:var(--text-muted)}.pi-ext-list{display:flex;flex-direction:column;gap:var(--space-sm)}.pi-ext-item{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md)}.pi-ext-add-form{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.pi-ext-add-form-row{display:flex;gap:var(--space-sm);align-items:center}.pi-ext-add-form-row .input{flex:1;min-width:0}.pi-ext-package-list{display:flex;flex-direction:column;gap:var(--space-sm)}.pi-ext-package-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.pi-ext-package-header{display:flex;align-items:center;gap:var(--space-sm);padding:calc(var(--space-sm) + 2px) var(--space-md);flex-wrap:wrap}.pi-ext-expand-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;color:var(--text-muted);display:flex;align-items:center;border-radius:var(--radius-sm);transition:color var(--transition-fast)}.pi-ext-expand-btn:hover{color:var(--text)}.pi-ext-expand-btn:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}.pi-ext-expand-placeholder{width:18px;height:18px;flex-shrink:0}.pi-ext-source-badge--npm{color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent)}.pi-ext-source-badge--git{color:var(--color-success);background:color-mix(in srgb,var(--color-success) 12%,transparent)}.pi-ext-source-badge--local{color:var(--text-muted);background:color-mix(in srgb,var(--text-muted) 12%,transparent)}.pi-ext-package-source{font-family:var(--font-mono);font-size:.82rem;flex:1;min-width:0;word-break:break-all}.pi-ext-filter-hint{font-size:.72rem;color:var(--text-muted);flex-shrink:0}.pi-ext-package-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.pi-ext-remove-btn{background:none;border:none;padding:var(--space-xs);min-width:var(--space-2xl);min-height:var(--space-2xl);cursor:pointer;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.pi-ext-remove-btn:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.pi-ext-remove-btn:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}.pi-ext-filter-list{padding:var(--space-sm) var(--space-md);border-top:1px solid var(--border);background:var(--bg);display:flex;flex-direction:column;gap:var(--space-sm)}.pi-ext-filter-section{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;color:var(--text-muted)}.pi-ext-filter-label{font-size:.72rem;font-weight:500}.pi-ext-filter-tag{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.72rem;font-family:var(--font-mono);color:var(--text-muted)}.pi-ext-top-level{display:flex;flex-direction:column;gap:var(--space-md);margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--border)}.pi-ext-section{display:flex;flex-direction:column;gap:var(--space-sm)}.pi-ext-section-header{display:flex;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.82rem}.pi-ext-section-header span:first-of-type{font-weight:500}.pi-ext-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 var(--space-xs);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-pill);font-size:.68rem;color:var(--text-dim)}.pi-ext-resource-list{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.pi-ext-resource-tag{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm)}.pi-ext-resource-path{font-size:.75rem;font-family:var(--font-mono);color:var(--text-muted);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pi-ext-resource-remove{background:none;border:none;padding:var(--space-xs);min-width:var(--space-2xl);min-height:var(--space-2xl);cursor:pointer;color:var(--text-dim);display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.pi-ext-resource-remove:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.pi-ext-resource-remove:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}@media(max-width:768px){.pi-ext-list{gap:var(--space-xs)}.pi-ext-item{padding:var(--space-sm)}.pi-ext-add-form-row{flex-direction:column;align-items:stretch}.pi-ext-add-form-row .btn,.pi-ext-add-form-row .btn-primary{width:100%}.pi-ext-package-header{padding:var(--space-sm) var(--space-md)}.pi-ext-resource-path{max-width:120px}}.pi-ext-discovered-section{margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--border)}.pi-ext-discovered-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.pi-ext-discovered-header h4{margin:0;font-size:.9rem;font-weight:600}.pi-ext-source-badge--fusion-global{color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent)}.pi-ext-source-badge--pi-global{color:var(--color-warning);background:color-mix(in srgb,var(--color-warning) 12%,transparent)}.pi-ext-source-badge--fusion-project{color:var(--color-success);background:color-mix(in srgb,var(--color-success) 12%,transparent)}.pi-ext-source-badge--pi-project{color:var(--color-muted);background:color-mix(in srgb,var(--color-muted) 12%,transparent)}.pi-ext-source-badge--package{color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 12%,transparent)}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{r as l,j as e}from"./vendor-react-K0fH_qHe.js";import{c as A,bX as H,bY as J,bZ as Q,R as $,bN as y,w as V,K as T,D as ee,I as se,b_ as L,F as D,b$ as ae,c0 as te,c1 as _,X as ie}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";/**
|
|
2
|
+
* @license lucide-react v1.7.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const ne=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],I=A("palette",ne);/**
|
|
7
|
+
* @license lucide-react v1.7.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const le=[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]],M=A("puzzle",le);function ce(t){return t.replace(/-/g,"-")}function re(t){return{"fusion-global":"Fusion Global","pi-global":"Pi Global","fusion-project":"Fusion Project","pi-project":"Pi Project",package:"Package"}[t]??t}function oe(t){return t.startsWith("npm:")?"npm":t.startsWith("git:")?"git":"local"}function de(t){return t.replace(/^(npm:|git:)/,"")}function he({addToast:t,projectId:x}){const[c,G]=l.useState(null),[f,P]=l.useState(!0),[N,S]=l.useState(!1),[E,w]=l.useState(!1),[h,F]=l.useState(""),[K,O]=l.useState(new Set),[p,W]=l.useState([]),[b,z]=l.useState(!0),[X,C]=l.useState(!1),r=l.useCallback(async()=>{try{P(!0);const s=await H();G(s)}catch(s){t(`Failed to load Pi settings: ${s instanceof Error?s.message:String(s)}`,"error")}finally{P(!1)}},[t]),m=l.useCallback(async()=>{try{z(!0);const s=await J(x);W(s.extensions)}catch(s){t(`Failed to load extensions: ${s instanceof Error?s.message:String(s)}`,"error")}finally{z(!1)}},[t,x]),q=l.useCallback(async s=>{try{C(!0);const i=s.enabled?[...p.filter(a=>a.enabled&&a.id!==s.id).map(a=>a.id),s.id]:p.filter(a=>a.enabled&&a.id!==s.id).map(a=>a.id);await Q(i,x),await m(),t(s.enabled?"Extension disabled":"Extension enabled","success")}catch(i){t(`Failed to update extension: ${i instanceof Error?i.message:String(i)}`,"error")}finally{C(!1)}},[p,x,m,t]);l.useEffect(()=>{r()},[r]),l.useEffect(()=>{m()},[m]);const B=s=>{O(i=>{const a=new Set(i);return a.has(s)?a.delete(s):a.add(s),a})},R=async()=>{if(!h.trim()){t("Please enter a package source","error");return}try{S(!0),await ae(h.trim()),t("Package installed successfully","success"),F(""),await r()}catch(s){t(`Failed to install package: ${s instanceof Error?s.message:String(s)}`,"error")}finally{S(!1)}},U=async()=>{try{w(!0),await te(x),await Promise.all([r(),m()]),t("Fusion skill reinstalled successfully","success")}catch(s){t(`Failed to reinstall Fusion skill: ${s instanceof Error?s.message:String(s)}`,"error")}finally{w(!1)}},Y=async s=>{if(!c)return;const i=c.packages.filter(a=>(typeof a=="string"?a:a.source)!==s);try{await _({packages:i}),t("Package removed","success"),await r()}catch(a){t(`Failed to remove package: ${a instanceof Error?a.message:String(a)}`,"error")}},Z=async(s,i)=>{if(!c)return;const a=c[s].filter(n=>n!==i);try{await _({[s]:a}),t(`${s.slice(0,-1)} removed`,"success"),await r()}catch(n){t(`Failed to update settings: ${n instanceof Error?n.message:String(n)}`,"error")}},u=(s,i,a)=>!c||c[a].length===0?null:e.jsxs("div",{className:"pi-ext-section",children:[e.jsxs("div",{className:"pi-ext-section-header",children:[e.jsx(i,{size:14}),e.jsx("span",{children:s}),e.jsx("span",{className:"pi-ext-count",children:c[a].length})]}),e.jsx("div",{className:"pi-ext-resource-list",children:c[a].map((n,g)=>e.jsxs("span",{className:"pi-ext-resource-tag",children:[e.jsx("span",{className:"pi-ext-resource-path",children:n}),e.jsx("button",{className:"btn-icon touch-target pi-ext-resource-remove",onClick:()=>Z(a,n),title:`Remove ${n}`,"aria-label":`Remove ${n}`,children:e.jsx(ie,{size:12})})]},g))})]});return e.jsxs("div",{className:"pi-ext-manager",children:[e.jsxs("div",{className:"pi-ext-manager-header",children:[e.jsx("h4",{className:"settings-section-heading",children:"Pi Extensions"}),e.jsx("div",{className:"pi-ext-manager-actions",children:e.jsx("button",{className:"btn-icon",onClick:r,title:"Refresh",disabled:f,children:e.jsx($,{size:16,className:f?"spin":""})})})]}),f?e.jsx("div",{className:"loading-state",children:"Loading Pi settings…"}):c?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"pi-ext-add-form",children:[e.jsxs("div",{className:"pi-ext-add-form-row",children:[e.jsx("input",{type:"text",className:"input",placeholder:"npm:pi-extension-name or git:https://github.com/...",value:h,onChange:s=>F(s.target.value),onKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),R())},disabled:N}),e.jsxs("button",{className:"btn btn-primary",onClick:R,disabled:N||!h.trim(),children:[e.jsx(V,{size:14}),N?"Installing…":"Add"]})]}),e.jsx("div",{className:"pi-ext-add-form-row",children:e.jsx("button",{className:"btn",onClick:U,disabled:E,children:E?"Reinstalling Fusion…":"Reinstall Fusion skill"})})]}),c.packages.length>0?e.jsx("div",{className:"pi-ext-package-list",children:c.packages.map((s,i)=>{const a=typeof s=="string"?s:s.source,n=oe(a),g=de(a),j=typeof s=="object"&&s!==null,v=j&&(s.extensions?.length??0)>0||(s.skills?.length??0)>0||(s.prompts?.length??0)>0||(s.themes?.length??0)>0,k=K.has(i);return e.jsxs("div",{className:"pi-ext-package-card",children:[e.jsxs("div",{className:"pi-ext-package-header",children:[j&&v?e.jsx("button",{className:"pi-ext-expand-btn",onClick:()=>B(i),"aria-expanded":k,children:k?e.jsx(T,{size:14}):e.jsx(ee,{size:14})}):e.jsx("span",{className:"pi-ext-expand-placeholder"}),e.jsx("span",{className:`pi-ext-source-badge pi-ext-source-badge--${n}`,children:n}),e.jsx("span",{className:"pi-ext-package-source",children:g}),e.jsxs("div",{className:"pi-ext-package-actions",children:[j&&v&&e.jsxs("span",{className:"pi-ext-filter-hint",children:[s.extensions?.length??0," ext,"," ",s.skills?.length??0," skill,"," ",s.prompts?.length??0," prompt,"," ",s.themes?.length??0," theme"]}),e.jsx("button",{className:"btn-icon touch-target pi-ext-remove-btn",onClick:()=>Y(a),title:"Remove package","aria-label":`Remove package ${g}`,children:e.jsx(se,{size:14})})]})]}),j&&v&&k&&e.jsxs("div",{className:"pi-ext-filter-list",children:[s.extensions?.length?e.jsxs("div",{className:"pi-ext-filter-section",children:[e.jsx(M,{size:12}),e.jsx("span",{className:"pi-ext-filter-label",children:"Extensions:"}),s.extensions.map((o,d)=>e.jsx("span",{className:"pi-ext-filter-tag",children:o},d))]}):null,s.skills?.length?e.jsxs("div",{className:"pi-ext-filter-section",children:[e.jsx(L,{size:12}),e.jsx("span",{className:"pi-ext-filter-label",children:"Skills:"}),s.skills.map((o,d)=>e.jsx("span",{className:"pi-ext-filter-tag",children:o},d))]}):null,s.prompts?.length?e.jsxs("div",{className:"pi-ext-filter-section",children:[e.jsx(D,{size:12}),e.jsx("span",{className:"pi-ext-filter-label",children:"Prompts:"}),s.prompts.map((o,d)=>e.jsx("span",{className:"pi-ext-filter-tag",children:o},d))]}):null,s.themes?.length?e.jsxs("div",{className:"pi-ext-filter-section",children:[e.jsx(I,{size:12}),e.jsx("span",{className:"pi-ext-filter-label",children:"Themes:"}),s.themes.map((o,d)=>e.jsx("span",{className:"pi-ext-filter-tag",children:o},d))]}):null]})]},i)})}):e.jsxs("div",{className:"empty-state",children:[e.jsx(y,{size:32,className:"text-muted"}),e.jsx("p",{children:"No packages configured."}),e.jsx("p",{className:"text-muted",children:"Add a package source above to get started."})]}),e.jsxs("div",{className:"pi-ext-top-level",children:[u("Extensions",M,"extensions"),u("Skills",L,"skills"),u("Prompts",D,"prompts"),u("Themes",I,"themes")]})]}):e.jsxs("div",{className:"empty-state",children:[e.jsx(y,{size:32,className:"text-muted"}),e.jsx("p",{children:"Failed to load Pi settings."})]}),e.jsxs("div",{className:"pi-ext-discovered-section",children:[e.jsxs("div",{className:"pi-ext-discovered-header",children:[e.jsx("h4",{children:"Discovered Extensions"}),e.jsx("button",{className:"btn-icon",onClick:m,disabled:b,title:"Refresh extensions",children:e.jsx($,{size:14,className:b?"spin":""})})]}),e.jsx("p",{className:"pi-ext-description",children:"Installed extensions resolved from packages and configured paths."}),b?e.jsx("div",{className:"loading-state",children:"Loading extensions…"}):p.length===0?e.jsxs("div",{className:"empty-state",children:[e.jsx(y,{size:32,className:"text-muted"}),e.jsx("p",{children:"No extensions discovered."})]}):e.jsx("div",{className:"pi-ext-list",children:p.map(s=>e.jsxs("div",{className:"pi-ext-item",children:[e.jsxs("div",{className:"pi-ext-item-content",children:[e.jsxs("div",{className:"pi-ext-info",children:[e.jsx("span",{className:"pi-ext-name",children:s.name}),e.jsx("span",{className:`pi-ext-source-badge pi-ext-source-badge--${ce(s.source)}`,children:re(s.source)})]}),e.jsx("span",{className:"pi-ext-path",children:s.path})]}),e.jsx("div",{className:"pi-ext-actions",children:e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>void q(s),disabled:X,"aria-label":`Toggle ${s.name}`}),e.jsx("span",{className:"toggle-slider"})]})})]},s.id))})]})]})}export{he as PiExtensionsManager};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o,j as e}from"./vendor-react-K0fH_qHe.js";import{bL as H,s as J,X as k,ai as K,w as D,bM as O,I as A,R as Q,bN as X,ar as G,bO as W,bP as Y,bQ as Z,bR as T,bS as ee,bT as se,bU as te}from"./index-CikysL-d.js";import{D as ne}from"./DirectoryPicker-BMJIT7HD.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-BVDq27HP.js";const j={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function oe({addToast:r,projectId:d}){const[N,h]=o.useState([]),[S,w]=o.useState(!0),[U,f]=o.useState(!1),[b,v]=o.useState(""),[C,P]=o.useState(!1),[x,$]=o.useState(null),[a,y]=o.useState(null),[i,g]=o.useState({}),[V,R]=o.useState(!1),p=o.useCallback(async()=>{try{w(!0);const s=await H(d);h(s)}catch(s){r(`Failed to load plugins: ${s instanceof Error?s.message:String(s)}`,"error")}finally{w(!1)}},[d,r]);o.useEffect(()=>{p()},[p]);const B=o.useRef([]);B.current=N,o.useEffect(()=>{const s=d?`?projectId=${encodeURIComponent(d)}`:"",t=m=>{try{const n=JSON.parse(m.data);if(d&&n.projectId&&n.projectId!==d)return;switch(n.transition){case"installing":case"enabled":case"disabled":case"settings-updated":h(c=>{const u=c.findIndex(l=>l.id===n.pluginId);if(u>=0){const l=[...c];return l[u]={...l[u],enabled:n.enabled,state:n.state,settings:n.settings,error:n.error},l}else return p(),c});break;case"uninstalled":h(c=>c.filter(u=>u.id!==n.pluginId));break;case"error":h(c=>{const u=c.findIndex(l=>l.id===n.pluginId);if(u>=0){const l=[...c];return l[u]={...l[u],state:n.state,error:n.error},l}return c});break}}catch{}};return J(`/api/events${s}`,{events:{"plugin:lifecycle":t},onReconnect:()=>{p()}})},[d,p]);const E=async()=>{if(!b.trim()){r("Please enter a plugin path","error");return}try{P(!0),await se({path:b},d),r("Plugin installed successfully","success"),f(!1),v(""),await p()}catch(s){r(`Failed to install plugin: ${s instanceof Error?s.message:String(s)}`,"error")}finally{P(!1)}},I=async s=>{try{await T(s.id,d),r(`${s.name} enabled`,"success"),await p()}catch(t){r(`Failed to enable plugin: ${t instanceof Error?t.message:String(t)}`,"error")}},z=async s=>{try{await Z(s.id,d),r(`${s.name} disabled`,"success"),await p()}catch(t){r(`Failed to disable plugin: ${t instanceof Error?t.message:String(t)}`,"error")}},L=async s=>{try{$(s.id),await Y(s.id,d),r(`${s.name} reloaded`,"success"),await p()}catch(t){r(`Failed to reload plugin: ${t instanceof Error?t.message:String(t)}`,"error")}finally{$(null)}},q=async s=>{if(confirm(`Are you sure you want to uninstall "${s.name}"?`))try{await ee(s.id,d),r(`${s.name} uninstalled`,"success"),await p(),y(null)}catch(t){r(`Failed to uninstall plugin: ${t instanceof Error?t.message:String(t)}`,"error")}},M=async s=>{y(s);try{R(!0);const t=await te(s.id,d);g(t)}catch{g({})}finally{R(!1)}},_=async()=>{if(a)try{await W(a.id,i,d),r("Settings saved","success")}catch(s){r(`Failed to save settings: ${s instanceof Error?s.message:String(s)}`,"error")}};return a?e.jsxs("div",{className:"plugin-manager-detail","data-testid":"plugin-manager-detail",children:[e.jsxs("div",{className:"plugin-manager-detail-header",children:[e.jsx("button",{className:"btn-icon",onClick:()=>y(null),"aria-label":"Back to plugin list",children:e.jsx(k,{size:16})}),e.jsxs("div",{className:"plugin-detail-title",children:[e.jsx("h3",{children:a.name}),e.jsx("span",{className:"plugin-state-badge",style:{color:j[a.state]||j.installed},children:a.state})]})]}),e.jsxs("div",{className:"plugin-detail-content",children:[e.jsxs("div",{className:"plugin-detail-card",children:[a.description&&e.jsx("p",{className:"plugin-description",children:a.description}),a.author&&e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Author:"}),a.author]}),a.homepage&&e.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[e.jsx("span",{className:"text-muted",children:"Homepage:"}),e.jsxs("a",{href:a.homepage,target:"_blank",rel:"noopener noreferrer",children:[a.homepage,e.jsx(K,{size:12})]})]}),e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Version:"}),a.version]})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h4",{className:"settings-section-heading",children:"Settings"}),V?e.jsx("p",{className:"text-muted",children:"Loading..."}):a.settingsSchema&&Object.keys(a.settingsSchema).length>0?e.jsxs("div",{className:"plugin-settings-form",children:[Object.entries(a.settingsSchema).map(([s,t])=>{const m=`setting-${s}-help`;return e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:`setting-${s}`,children:[t.label||s,t.required&&" *"]}),t.type==="string"&&!t.multiline&&e.jsx("input",{type:"text",id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="string"&&t.multiline&&e.jsx("textarea",{id:`setting-${s}`,rows:4,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="password"&&e.jsx("input",{type:"password",id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="number"&&e.jsx("input",{type:"number",id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:Number(n.target.value)}),"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="boolean"&&e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:i[s]??!1,onChange:n=>g({...i,[s]:n.target.checked})}),t.description]}),t.type==="enum"&&e.jsxs("select",{id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),"aria-describedby":t.description&&!t.required?m:void 0,children:[e.jsx("option",{value:"",children:"Select..."}),t.enumValues?.map(n=>e.jsx("option",{value:n,children:n},n))]}),t.type==="array"&&e.jsxs("div",{className:"plugin-settings-array",children:[i[s]?.map((n,c)=>e.jsxs("div",{className:"plugin-settings-array-item",children:[e.jsx("input",{type:t.itemType==="number"?"number":"text",value:n??"",onChange:u=>{const l=u.target.value,F=[...i[s]||[]];F[c]=t.itemType==="number"?Number(l):l,g({...i,[s]:F})}}),e.jsx("button",{className:"btn-icon",onClick:()=>{const l=[...i[s]||[]];l.splice(c,1),g({...i,[s]:l})},"aria-label":"Remove item",children:e.jsx(k,{size:14})})]},c)),e.jsxs("button",{className:"btn-secondary",onClick:()=>{const n=i[s]||[],c=t.itemType==="number"?0:"";g({...i,[s]:[...n,c]})},children:[e.jsx(D,{size:14})," Add Item"]})]}),t.description&&!t.required&&!t.multiline&&e.jsx("span",{id:m,className:"form-help",children:t.description})]},s)}),e.jsx("button",{className:"btn-primary",onClick:_,children:"Save Settings"})]}):e.jsx("p",{className:"text-muted",children:"No configurable settings."})]}),e.jsxs("div",{className:"plugin-detail-actions",children:[a.state==="started"&&e.jsxs("button",{className:"btn-secondary",onClick:()=>L(a),disabled:x===a.id,children:[e.jsx(O,{size:14,className:x===a.id?"spin":""}),x===a.id?"Reloading...":"Reload"]}),a.enabled?e.jsx("button",{className:"btn-secondary",onClick:()=>z(a),children:"Disable"}):e.jsx("button",{className:"btn-primary",onClick:()=>I(a),children:"Enable"}),e.jsxs("button",{className:"btn-danger",onClick:()=>q(a),children:[e.jsx(A,{size:14})," Uninstall"]})]})]})]}):e.jsxs("div",{className:"plugin-manager","data-testid":"plugin-manager",children:[e.jsx("div",{className:"plugin-manager-header",children:e.jsxs("div",{className:"plugin-manager-actions",children:[e.jsx("button",{className:"btn-icon",onClick:p,title:"Refresh",children:e.jsx(Q,{size:16,className:S?"spin":""})}),e.jsxs("button",{className:"btn-primary",onClick:()=>f(!0),children:[e.jsx(D,{size:14})," Install"]})]})}),U&&e.jsxs("div",{className:"plugin-install-form",children:[e.jsxs("p",{className:"plugin-install-hint",children:["Browse to a plugin package root (contains ",e.jsx("code",{children:"manifest.json"}),") or a built ",e.jsx("code",{children:"dist"})," directory."]}),e.jsx(ne,{value:b,onChange:v,placeholder:"Absolute path to plugin directory or dist folder",onInputKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),E())}}),e.jsxs("div",{className:"plugin-install-actions",children:[e.jsx("button",{className:"btn-primary",onClick:E,disabled:C||!b.trim(),children:C?"Installing...":"Install Plugin"}),e.jsx("button",{className:"btn-secondary",onClick:()=>{f(!1),v("")},children:"Cancel"})]})]}),S?e.jsx("div",{className:"settings-empty-state",children:"Loading plugins..."}):N.length===0?e.jsxs("div",{className:"settings-empty-state",children:[e.jsx(X,{size:32,className:"text-muted"}),e.jsx("p",{children:"No plugins installed."}),e.jsx("p",{className:"text-muted",children:"Install a plugin to get started."})]}):e.jsx("div",{className:"plugin-list",children:N.map(s=>e.jsxs("div",{className:"plugin-item",children:[e.jsxs("div",{className:"plugin-info",children:[e.jsx("span",{className:"plugin-name",children:s.name}),e.jsxs("span",{className:"plugin-version text-muted",children:["v",s.version]}),e.jsx("span",{className:"plugin-state-badge",style:{color:j[s.state]||j.installed},children:s.state})]}),e.jsxs("div",{className:"plugin-actions",children:[s.state==="started"&&e.jsx("button",{className:"btn-icon",onClick:()=>L(s),disabled:x===s.id,title:"Reload",children:e.jsx(O,{size:14,className:x===s.id?"spin":""})}),e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>s.enabled?z(s):I(s)}),e.jsx("span",{className:"toggle-slider"})]}),e.jsx("button",{className:"btn-icon",onClick:()=>M(s),title:"Settings",children:e.jsx(G,{size:14})}),e.jsx("button",{className:"btn-icon",onClick:()=>q(s),title:"Uninstall",children:e.jsx(A,{size:14})})]})]},s.id))})]})}export{oe as PluginManager,j as STATE_COLORS};
|
|
1
|
+
import{r as o,j as e}from"./vendor-react-K0fH_qHe.js";import{bL as H,s as J,X as k,ai as K,w as D,bM as O,I as A,R as Q,bN as X,ar as G,bO as W,bP as Y,bQ as Z,bR as T,bS as ee,bT as se,bU as te}from"./index-CHoVMPAA.js";import{D as ne}from"./DirectoryPicker-DZ90eSBn.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-J7yPbaCt.js";const j={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function oe({addToast:r,projectId:d}){const[N,x]=o.useState([]),[S,w]=o.useState(!0),[U,f]=o.useState(!1),[h,v]=o.useState(""),[C,P]=o.useState(!1),[b,$]=o.useState(null),[a,y]=o.useState(null),[i,g]=o.useState({}),[V,R]=o.useState(!1),p=o.useCallback(async()=>{try{w(!0);const s=await H(d);x(s)}catch(s){r(`Failed to load plugins: ${s instanceof Error?s.message:String(s)}`,"error")}finally{w(!1)}},[d,r]);o.useEffect(()=>{p()},[p]);const B=o.useRef([]);B.current=N,o.useEffect(()=>{const s=d?`?projectId=${encodeURIComponent(d)}`:"",t=m=>{try{const n=JSON.parse(m.data);if(d&&n.projectId&&n.projectId!==d)return;switch(n.transition){case"installing":case"enabled":case"disabled":case"settings-updated":x(c=>{const u=c.findIndex(l=>l.id===n.pluginId);if(u>=0){const l=[...c];return l[u]={...l[u],enabled:n.enabled,state:n.state,settings:n.settings,error:n.error},l}else return p(),c});break;case"uninstalled":x(c=>c.filter(u=>u.id!==n.pluginId));break;case"error":x(c=>{const u=c.findIndex(l=>l.id===n.pluginId);if(u>=0){const l=[...c];return l[u]={...l[u],state:n.state,error:n.error},l}return c});break}}catch{}};return J(`/api/events${s}`,{events:{"plugin:lifecycle":t},onReconnect:()=>{p()}})},[d,p]);const E=async()=>{if(!h.trim()){r("Please enter a plugin path","error");return}try{P(!0),await se({path:h},d),r("Plugin installed successfully","success"),f(!1),v(""),await p()}catch(s){r(`Failed to install plugin: ${s instanceof Error?s.message:String(s)}`,"error")}finally{P(!1)}},I=async s=>{try{await T(s.id,d),r(`${s.name} enabled`,"success"),await p()}catch(t){r(`Failed to enable plugin: ${t instanceof Error?t.message:String(t)}`,"error")}},z=async s=>{try{await Z(s.id,d),r(`${s.name} disabled`,"success"),await p()}catch(t){r(`Failed to disable plugin: ${t instanceof Error?t.message:String(t)}`,"error")}},L=async s=>{try{$(s.id),await Y(s.id,d),r(`${s.name} reloaded`,"success"),await p()}catch(t){r(`Failed to reload plugin: ${t instanceof Error?t.message:String(t)}`,"error")}finally{$(null)}},q=async s=>{if(confirm(`Are you sure you want to uninstall "${s.name}"?`))try{await ee(s.id,d),r(`${s.name} uninstalled`,"success"),await p(),y(null)}catch(t){r(`Failed to uninstall plugin: ${t instanceof Error?t.message:String(t)}`,"error")}},M=async s=>{y(s);try{R(!0);const t=await te(s.id,d);g(t)}catch{g({})}finally{R(!1)}},_=async()=>{if(a)try{await W(a.id,i,d),r("Settings saved","success")}catch(s){r(`Failed to save settings: ${s instanceof Error?s.message:String(s)}`,"error")}};return a?e.jsxs("div",{className:"plugin-manager-detail","data-testid":"plugin-manager-detail",children:[e.jsxs("div",{className:"plugin-manager-detail-header",children:[e.jsx("button",{className:"btn-icon",onClick:()=>y(null),"aria-label":"Back to plugin list",children:e.jsx(k,{size:16})}),e.jsxs("div",{className:"plugin-detail-title",children:[e.jsx("h3",{children:a.name}),e.jsx("span",{className:"plugin-state-badge",style:{color:j[a.state]||j.installed},children:a.state})]})]}),e.jsxs("div",{className:"plugin-detail-content",children:[e.jsxs("div",{className:"plugin-detail-card",children:[a.description&&e.jsx("p",{className:"plugin-description",children:a.description}),a.author&&e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Author:"}),a.author]}),a.homepage&&e.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[e.jsx("span",{className:"text-muted",children:"Homepage:"}),e.jsxs("a",{href:a.homepage,target:"_blank",rel:"noopener noreferrer",children:[a.homepage,e.jsx(K,{size:12})]})]}),e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Version:"}),a.version]})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h4",{className:"settings-section-heading",children:"Settings"}),V?e.jsx("p",{className:"text-muted",children:"Loading..."}):a.settingsSchema&&Object.keys(a.settingsSchema).length>0?e.jsxs("div",{className:"plugin-settings-form",children:[Object.entries(a.settingsSchema).map(([s,t])=>{const m=`setting-${s}-help`;return e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:`setting-${s}`,children:[t.label||s,t.required&&" *"]}),t.type==="string"&&!t.multiline&&e.jsx("input",{type:"text",id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="string"&&t.multiline&&e.jsx("textarea",{id:`setting-${s}`,rows:4,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="password"&&e.jsx("input",{type:"password",id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="number"&&e.jsx("input",{type:"number",id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:Number(n.target.value)}),"aria-describedby":t.description&&!t.required?m:void 0}),t.type==="boolean"&&e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:i[s]??!1,onChange:n=>g({...i,[s]:n.target.checked})}),t.description]}),t.type==="enum"&&e.jsxs("select",{id:`setting-${s}`,value:i[s]??"",onChange:n=>g({...i,[s]:n.target.value}),"aria-describedby":t.description&&!t.required?m:void 0,children:[e.jsx("option",{value:"",children:"Select..."}),t.enumValues?.map(n=>e.jsx("option",{value:n,children:n},n))]}),t.type==="array"&&e.jsxs("div",{className:"plugin-settings-array",children:[i[s]?.map((n,c)=>e.jsxs("div",{className:"plugin-settings-array-item",children:[e.jsx("input",{type:t.itemType==="number"?"number":"text",value:n??"",onChange:u=>{const l=u.target.value,F=[...i[s]||[]];F[c]=t.itemType==="number"?Number(l):l,g({...i,[s]:F})}}),e.jsx("button",{className:"btn-icon",onClick:()=>{const l=[...i[s]||[]];l.splice(c,1),g({...i,[s]:l})},"aria-label":"Remove item",children:e.jsx(k,{size:14})})]},c)),e.jsxs("button",{className:"btn btn-secondary",onClick:()=>{const n=i[s]||[],c=t.itemType==="number"?0:"";g({...i,[s]:[...n,c]})},children:[e.jsx(D,{size:14})," Add Item"]})]}),t.description&&!t.required&&!t.multiline&&e.jsx("span",{id:m,className:"form-help",children:t.description})]},s)}),e.jsx("button",{className:"btn btn-primary",onClick:_,children:"Save Settings"})]}):e.jsx("p",{className:"text-muted",children:"No configurable settings."})]}),e.jsxs("div",{className:"plugin-detail-actions",children:[a.state==="started"&&e.jsxs("button",{className:"btn btn-secondary",onClick:()=>L(a),disabled:b===a.id,children:[e.jsx(O,{size:14,className:b===a.id?"spin":""}),b===a.id?"Reloading...":"Reload"]}),a.enabled?e.jsx("button",{className:"btn btn-secondary",onClick:()=>z(a),children:"Disable"}):e.jsx("button",{className:"btn btn-primary",onClick:()=>I(a),children:"Enable"}),e.jsxs("button",{className:"btn-danger",onClick:()=>q(a),children:[e.jsx(A,{size:14})," Uninstall"]})]})]})]}):e.jsxs("div",{className:"plugin-manager","data-testid":"plugin-manager",children:[e.jsx("div",{className:"plugin-manager-header",children:e.jsxs("div",{className:"plugin-manager-actions",children:[e.jsx("button",{className:"btn-icon",onClick:p,title:"Refresh",children:e.jsx(Q,{size:16,className:S?"spin":""})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>f(!0),children:[e.jsx(D,{size:14})," Install"]})]})}),U&&e.jsxs("div",{className:"plugin-install-form",children:[e.jsxs("p",{className:"plugin-install-hint",children:["Browse to a plugin package root (contains ",e.jsx("code",{children:"manifest.json"}),") or a built ",e.jsx("code",{children:"dist"})," directory."]}),e.jsx(ne,{value:h,onChange:v,placeholder:"Absolute path to plugin directory or dist folder",onInputKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),E())}}),e.jsxs("div",{className:"plugin-install-actions",children:[e.jsx("button",{className:"btn btn-primary",onClick:E,disabled:C||!h.trim(),children:C?"Installing...":"Install Plugin"}),e.jsx("button",{className:"btn btn-secondary",onClick:()=>{f(!1),v("")},children:"Cancel"})]})]}),S?e.jsx("div",{className:"settings-empty-state",children:"Loading plugins..."}):N.length===0?e.jsxs("div",{className:"settings-empty-state",children:[e.jsx(X,{size:32,className:"text-muted"}),e.jsx("p",{children:"No plugins installed."}),e.jsx("p",{className:"text-muted",children:"Install a plugin to get started."})]}):e.jsx("div",{className:"plugin-list",children:N.map(s=>e.jsxs("div",{className:"plugin-item",children:[e.jsxs("div",{className:"plugin-info",children:[e.jsx("span",{className:"plugin-name",children:s.name}),e.jsxs("span",{className:"plugin-version text-muted",children:["v",s.version]}),e.jsx("span",{className:"plugin-state-badge",style:{color:j[s.state]||j.installed},children:s.state})]}),e.jsxs("div",{className:"plugin-actions",children:[s.state==="started"&&e.jsx("button",{className:"btn-icon",onClick:()=>L(s),disabled:b===s.id,title:"Reload",children:e.jsx(O,{size:14,className:b===s.id?"spin":""})}),e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>s.enabled?z(s):I(s)}),e.jsx("span",{className:"toggle-slider"})]}),e.jsx("button",{className:"btn-icon",onClick:()=>M(s),title:"Settings",children:e.jsx(G,{size:14})}),e.jsx("button",{className:"btn-icon",onClick:()=>q(s),title:"Uninstall",children:e.jsx(A,{size:14})})]})]},s.id))})]})}export{oe as PluginManager,j as STATE_COLORS};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.plugin-manager,.plugin-manager-detail{display:flex;flex-direction:column;gap:var(--space-lg)}.plugin-manager-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-sm);border-bottom:1px solid var(--border)}.plugin-manager-actions{display:flex;gap:var(--space-sm);align-items:center}.plugin-install-form{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.plugin-install-hint{margin:0;font-size:.85rem;color:var(--text-secondary, var(--text-muted));line-height:1.45}.plugin-install-hint code{padding:1px var(--space-xs);border-radius:var(--radius-sm);background:var( --bg-tertiary, color-mix(in srgb, var(--text-muted) 18%, transparent) );font-size:.85em}.plugin-install-actions{display:flex;gap:var(--space-sm);justify-content:flex-end}.plugin-list{display:flex;flex-direction:column;gap:var(--space-sm)}.plugin-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast)}.plugin-item:hover{border-color:var(--text-dim)}.plugin-info{display:flex;align-items:center;gap:var(--space-sm);min-width:0}.plugin-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-version{font-size:.85rem}.plugin-state-badge{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:color-mix(in srgb,currentColor 12%,transparent)}.plugin-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.plugin-manager-detail-header,.plugin-detail-title{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}.plugin-detail-title h3{margin:0}.plugin-detail-content{display:flex;flex-direction:column;gap:var(--space-lg)}.plugin-detail-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.plugin-description{font-size:.95rem;color:var(--text-secondary, var(--text-muted));line-height:1.5}.plugin-detail-meta-row{display:flex;align-items:center;gap:var(--space-xs);font-size:.9rem;color:var(--text-muted)}.plugin-homepage a{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--color-info);font-size:.85rem}.plugin-settings-form .settings-section-heading{margin:0}.plugin-settings-form{display:flex;flex-direction:column;gap:var(--space-lg);margin-top:var(--space-xs)}.plugin-settings-form .form-group{padding:0;margin-bottom:0}.plugin-settings-array{display:flex;flex-direction:column;gap:var(--space-sm)}.plugin-settings-array-item{display:flex;align-items:center;gap:var(--space-sm)}.plugin-settings-array-item input{flex:1}.plugin-detail-actions{display:flex;gap:var(--space-sm);padding-top:var(--space-md);border-top:1px solid var(--border);justify-content:flex-end}.plugin-manager .empty-state,.plugin-manager .loading-state,.plugin-manager .settings-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);text-align:center;color:var(--text-muted)}@media(max-width:768px){.plugin-manager-detail-header{gap:var(--space-sm)}.plugin-detail-title{gap:var(--space-xs)}.plugin-detail-card{padding:var(--space-md);gap:var(--space-sm)}.plugin-list{gap:var(--space-xs)}.plugin-item{padding:var(--space-md)}.plugin-actions{gap:var(--space-xs)}.plugin-detail-actions{flex-wrap:wrap;justify-content:stretch}.plugin-detail-actions button{flex:1 1 auto;min-height:36px}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{c as St,aO as Et,aP as kt,aQ as Ft,aR as Dt,aS as Mt,aT as tt,aU as Rt,aV as It,aW as at,aX as $t,aY as zt,aZ as At,a_ as Ot,a$ as Bt,b0 as Ht,b1 as Gt,b2 as Tt,aG as Pt,w as Ae,b3 as me,X as ae,at as Ee,I as Le,a7 as Lt,ad as ut,as as rt,a4 as Vt,b4 as Ye,b5 as Ut}from"./index-
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{c as St,aO as Et,aP as kt,aQ as Ft,aR as Dt,aS as Mt,aT as tt,aU as Rt,aV as It,aW as at,aX as $t,aY as zt,aZ as At,a_ as Ot,a$ as Bt,b0 as Ht,b1 as Gt,b2 as Tt,aG as Pt,w as Ae,b3 as me,X as ae,at as Ee,I as Le,a7 as Lt,ad as ut,as as rt,a4 as Vt,b4 as Ye,b5 as Ut}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";/**
|
|
2
2
|
* @license lucide-react v1.7.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-K0fH_qHe.js";import{bH as L,av as B,bI as E,bJ as $,bK as _,X as W,ad as G,D as O,C as b,L as Y}from"./index-
|
|
1
|
+
import{r as l,j as e}from"./vendor-react-K0fH_qHe.js";import{bH as L,av as B,bI as E,bJ as $,bK as _,X as W,ad as G,D as O,C as b,L as Y}from"./index-CHoVMPAA.js";import{D as Z}from"./DirectoryPicker-DZ90eSBn.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-J7yPbaCt.js";function f(c){const r=c.split(/[/\\]/).filter(h=>h.length>0);return(r[r.length-1]||"My Project").replace(/[^a-zA-Z0-9-_]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"My Project"}function Q({onProjectRegistered:c,onClose:r}){const j="https://github.com/runfusion/fusion/discussions",[h,k]=l.useState(!0),[s,n]=l.useState({step:"manual",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",isRegistering:!1,error:null}),[x,C]=l.useState(!1),[u,g]=l.useState(""),[m,y]=l.useState(()=>L()),{nodes:N,loading:z}=B(),M=N.find(a=>a.type==="local")?.id,w=l.useCallback(()=>{k(!1),r?.()},[r]),I=l.useCallback(a=>{n(t=>{const d={manualPath:a};return a&&(!t.manualName||t.manualName===f(t.manualPath))&&(d.manualName=f(a)),{...t,...d}})},[]),P=l.useCallback(async()=>{const a=s.manualPath.trim(),t=s.manualName.trim(),d=s.manualCloneUrl.trim();if(!(!a||!t)&&!(s.manualMode==="clone"&&!d)){n(i=>({...i,isRegistering:!0,error:null}));try{const i={name:t,path:a,isolationMode:s.manualIsolationMode,nodeId:s.manualNodeId||void 0,cloneUrl:s.manualMode==="clone"?d:void 0},p=await E(i);c(p),n(D=>({...D,step:"complete",isRegistering:!1}))}catch(i){n(p=>({...p,isRegistering:!1,error:i instanceof Error?i.message:"Failed to register project"}))}}},[s.manualPath,s.manualName,s.manualCloneUrl,s.manualMode,s.manualIsolationMode,s.manualNodeId,c]),S=l.useCallback(()=>{const a=u.trim();a&&($(a),window.location.reload())},[u]),R=l.useCallback(()=>{_(),y(void 0),g(""),window.location.reload()},[]);if(!h)return null;const v=s.manualMode==="existing",o=s.manualMode==="clone",A=s.manualPath.trim().length>0,U=s.manualName.trim().length>0,F=s.manualCloneUrl.trim().length>0,T=s.isRegistering||!A||!U||o&&!F;return e.jsx("div",{className:"modal-overlay open setup-wizard-overlay",role:"dialog","aria-modal":"true","aria-labelledby":"wizard-title",children:e.jsxs("div",{className:"modal setup-wizard-modal",children:[e.jsxs("div",{className:"setup-wizard-header",children:[e.jsxs("div",{className:"setup-wizard-heading",children:[e.jsxs("div",{className:"setup-wizard-brand","aria-label":"Fusion",children:[e.jsxs("svg",{className:"setup-wizard-brand-logo",width:28,height:28,viewBox:"0 0 128 128",fill:"none","aria-label":"Fusion logo",role:"img",children:[e.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),e.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),e.jsx("span",{className:"setup-wizard-brand-name",children:"Fusion"})]}),e.jsxs("h2",{id:"wizard-title",className:"setup-wizard-title",children:[s.step==="manual"&&"Welcome to Fusion",s.step==="complete"&&"Setup Complete!"]})]}),s.step!=="complete"&&e.jsx("button",{className:"modal-close",onClick:w,"aria-label":"Close wizard",children:e.jsx(W,{size:20})})]}),e.jsxs("div",{className:"setup-wizard-content",children:[s.step==="manual"&&e.jsxs("div",{className:"setup-wizard-manual",children:[e.jsx("div",{className:"welcome-icon",children:e.jsx(G,{size:32})}),e.jsx("p",{className:"welcome-text",children:"Let's set up your first project. Register an existing directory or clone a git repository into a destination folder, then register it."}),e.jsxs("fieldset",{className:"setup-wizard-mode-switch","aria-label":"Project setup mode",children:[e.jsx("legend",{children:"Setup Mode"}),e.jsxs("label",{className:`setup-wizard-mode-option${v?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"existing",checked:v,onChange:()=>n(a=>({...a,manualMode:"existing",error:null}))}),e.jsx("span",{children:"Use Existing Directory"})]}),e.jsxs("label",{className:`setup-wizard-mode-option${o?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"clone",checked:o,onChange:()=>n(a=>({...a,manualMode:"clone",error:null}))}),e.jsx("span",{children:"Clone Git Repository"})]})]}),o&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-clone-url",children:"Repository URL"}),e.jsx("input",{id:"project-clone-url",type:"text",value:s.manualCloneUrl,onChange:a=>n(t=>({...t,manualCloneUrl:a.target.value})),placeholder:"https://github.com/owner/repo.git"}),e.jsx("p",{className:"form-hint",children:"Fusion will run git clone into the destination directory, then register that cloned folder."})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:o?"Destination Directory":"Project Directory"}),e.jsx(Z,{value:s.manualPath,onChange:I,nodeId:s.manualNodeId||void 0,localNodeId:M,placeholder:o?"/path/for/new-clone":"/path/to/your/project"}),e.jsx("p",{className:"form-hint",children:o?"Select or type an absolute destination path. Fusion will clone into this directory.":"Select or type the absolute path to your project"})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-name",children:"Project Name"}),e.jsx("input",{id:"project-name",type:"text",value:s.manualName,onChange:a=>n(t=>({...t,manualName:a.target.value})),placeholder:"my-project"}),e.jsx("p",{className:"form-hint",children:o?"By default this follows the destination folder name unless you edit it.":"By default this follows the selected directory name unless you edit it."})]}),e.jsxs("div",{className:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":x,onClick:()=>C(a=>!a),children:[e.jsx(O,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:"Advanced settings"})]}),x&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[e.jsx("div",{className:"form-group",children:e.jsxs("div",{className:"project-node-selector",children:[e.jsx("span",{className:"project-node-selector__label",children:"Runtime Node"}),e.jsxs("select",{value:s.manualNodeId,onChange:a=>n(t=>({...t,manualNodeId:a.target.value})),disabled:z||s.isRegistering,children:[e.jsx("option",{value:"",children:"Local node"}),N.map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.type,")"]},a.id))]})]})}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"Isolation Mode"}),e.jsxs("div",{className:"setup-wizard-isolation-options",children:[e.jsxs("label",{className:`setup-wizard-isolation-option${s.manualIsolationMode==="in-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"in-process",checked:s.manualIsolationMode==="in-process",onChange:()=>n(a=>({...a,manualIsolationMode:"in-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:"In-Process"}),e.jsx("span",{children:"Lower overhead, shared memory. Best for most projects."}),e.jsx("span",{className:"wizard-option-recommended",children:"Recommended"})]})]}),e.jsxs("label",{className:`setup-wizard-isolation-option${s.manualIsolationMode==="child-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"child-process",checked:s.manualIsolationMode==="child-process",onChange:()=>n(a=>({...a,manualIsolationMode:"child-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:"Child-Process"}),e.jsx("span",{children:"Isolated execution with crash containment."})]})]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"setup-auth-token",children:"Browser Auth Token"}),e.jsxs("div",{className:"setup-wizard-auth-token",children:[e.jsx("input",{id:"setup-auth-token",type:"password",value:u,onChange:a=>g(a.target.value),placeholder:m?"Enter a new token to replace the stored one":"Paste the auth token for this browser",autoComplete:"off",spellCheck:!1}),e.jsxs("div",{className:"setup-wizard-auth-token-actions",children:[e.jsx("button",{type:"button",className:"btn",onClick:S,disabled:u.trim().length===0,children:m?"Update token":"Set token"}),m&&e.jsx("button",{type:"button",className:"btn",onClick:R,children:"Reset token"})]})]}),e.jsx("p",{className:"form-hint",children:m?"A token is already stored in this browser. Updating or resetting it will reload the page.":"Store a token in this browser for authenticated dashboard requests, then reload the page."})]})]})]}),s.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:s.error})]}),s.step==="complete"&&e.jsxs("div",{className:"setup-wizard-complete",children:[e.jsxs("div",{className:"setup-wizard-success-streak","aria-hidden":"true",children:[e.jsx("div",{className:"setup-wizard-success-streak-core"}),e.jsx("div",{className:"setup-wizard-success-streak-glow"})]}),e.jsx(b,{size:64,className:"success-icon"}),e.jsx("h3",{children:"All Set!"}),e.jsx("p",{children:"Your project has been registered successfully."}),e.jsx("p",{children:"You can add more projects anytime from the project overview."})]})]}),e.jsxs("div",{className:"setup-wizard-footer",children:[e.jsx("a",{className:"btn setup-wizard-help-link",href:j,target:"_blank",rel:"noreferrer",children:"Need help?"}),s.step==="manual"&&e.jsx("button",{className:"btn btn-primary",onClick:P,disabled:T,children:s.isRegistering?e.jsxs(e.Fragment,{children:[e.jsx(Y,{size:16,className:"animate-spin"}),e.jsx("span",{children:"Registering..."})]}):e.jsx("span",{children:"Register Project"})}),s.step==="complete"&&e.jsxs("button",{className:"btn btn-primary",onClick:w,children:[e.jsx(b,{size:16}),e.jsx("span",{children:"Get Started"})]})]})]})})}export{Q as SetupWizardModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e}from"./vendor-react-K0fH_qHe.js";import{f as B,b6 as G,b7 as H,b8 as J,aN as O,X as $,R as U,K as Y,D as Z,L as _,ae as I}from"./index-
|
|
1
|
+
import{r as i,j as e}from"./vendor-react-K0fH_qHe.js";import{f as B,b6 as G,b7 as H,b8 as J,aN as O,X as $,R as U,K as Y,D as Z,L as _,ae as I}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";function ie({projectId:n,addToast:o,onClose:P}){const[d,u]=i.useState([]),[w,S]=i.useState(!0),[Q,y]=i.useState(!1),[E,N]=i.useState(null),[L,K]=i.useState([]),[h,A]=i.useState(""),[m,g]=i.useState(null),[k,x]=i.useState(null),[V,D]=i.useState(!1),[R,j]=i.useState(null),r=i.useRef(null),[p,M]=i.useState(""),z=h.trim()?d.filter(s=>s.name.toLowerCase().includes(h.toLowerCase())||s.relativePath.toLowerCase().includes(h.toLowerCase())):d,f=i.useCallback(async()=>{S(!0);try{const s=await B(n);u(s)}catch(s){const l=s instanceof Error?s.message:"Failed to load discovered skills";o(l,"error")}finally{S(!1)}},[n,o]),v=i.useCallback(async s=>{y(!0),N(null);try{const l=await G(s,20,n);K(l.entries)}catch(l){const a=l;if(a.error&&a.code)N("Catalog is temporarily unavailable. Please try again later.");else{const c=l instanceof Error?l.message:"Failed to load catalog";N(c)}}finally{y(!1)}},[n]);i.useEffect(()=>{f(),v("")},[f,v]);const T=i.useCallback(s=>{A(s),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{M(s),r.current=null},300)},[]);i.useEffect(()=>()=>{r.current&&(clearTimeout(r.current),r.current=null)},[]),i.useEffect(()=>{v(p)},[p,v]);const W=i.useCallback(async(s,l)=>{const a=!l;u(c=>c.map(t=>t.id===s?{...t,toggling:!0}:t));try{await H(s,a,n),u(c=>c.map(t=>t.id===s?{...t,enabled:a,toggling:!1}:t)),o(`Skill ${a?"enabled":"disabled"}`,"success")}catch(c){u(q=>q.map(C=>C.id===s?{...C,toggling:!1}:C));const t=c instanceof Error?c.message:"Failed to toggle skill";o(`Failed to toggle skill: ${t}`,"error")}},[n,o]),b=i.useCallback(async s=>{D(!0),j(null),x(null);try{const l=await J(s,n);x(l)}catch(l){const a=l instanceof Error?l.message:"Failed to load skill content";j(a)}finally{D(!1)}},[n]),F=i.useCallback((s,l)=>{if(!(l&&l.target.closest(".skills-view-item-toggle"))){if(m===s){g(null),x(null),j(null);return}g(s),b(s)}},[m,b]),X=i.useCallback(s=>{m!==s&&g(s),b(s)},[b,m]);return e.jsxs("div",{className:"skills-view","data-testid":"skills-view",children:[e.jsxs("div",{className:"skills-view-header",children:[e.jsxs("div",{className:"skills-view-title",children:[e.jsxs("h2",{children:[e.jsx(O,{size:20}),"Skills"]}),e.jsxs("span",{className:"skills-view-count","aria-label":`${d.length} discovered skills`,children:[d.length," discovered"]})]}),e.jsxs("div",{className:"skills-view-actions",children:[e.jsx("button",{className:"btn-icon skills-view-close touch-target",onClick:P,"aria-label":"Close skills view",children:e.jsx($,{size:16})}),e.jsxs("button",{className:"btn btn-sm touch-target",onClick:()=>void f(),disabled:w,children:[e.jsx(U,{size:14,className:w?"spin":""}),"Refresh"]})]})]}),e.jsxs("div",{className:"skills-view-content",children:[e.jsx("div",{className:"skills-view-search",children:e.jsx("input",{type:"text",className:"form-input",placeholder:"Search skills...",value:h,onChange:s=>T(s.target.value),"aria-label":"Search skills"})}),e.jsxs("section",{className:"skills-view-section","aria-labelledby":"discovered-skills-title",children:[e.jsx("h3",{id:"discovered-skills-title",className:"skills-view-section-title",children:"Discovered Skills"}),w?e.jsxs("div",{className:"skills-view-loading",children:[e.jsx("span",{className:"spinner"}),"Loading discovered skills..."]}):d.length===0?e.jsx("div",{className:"skills-view-empty",children:e.jsx("p",{children:"No skills discovered in this project."})}):z.length===0?e.jsx("div",{className:"skills-view-empty",children:e.jsx("p",{children:"No discovered skills match your search."})}):e.jsx("div",{className:"skills-view-list",children:z.map(s=>{const l=m===s.id;return e.jsxs("div",{children:[e.jsxs("div",{className:`skills-view-item${l?" skills-view-item--selected":""}`,onClick:a=>F(s.id,a),role:"button",tabIndex:0,onKeyDown:a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),F(s.id))},"aria-expanded":l,"aria-label":`View details for ${s.name}`,children:[e.jsxs("div",{className:"skills-view-item-info",children:[e.jsxs("span",{className:"skills-view-item-name",children:[l?e.jsx(Y,{size:14}):e.jsx(Z,{size:14}),s.name]}),e.jsx("span",{className:"skills-view-item-path",children:s.relativePath}),e.jsx("span",{className:"skills-view-item-source",children:s.metadata.source})]}),e.jsxs("label",{className:"skills-view-item-toggle",onClick:a=>a.stopPropagation(),children:[e.jsx("input",{type:"checkbox",checked:s.enabled,disabled:s.toggling,onChange:()=>void W(s.id,s.enabled),"aria-label":`${s.enabled?"Disable":"Enable"} ${s.name}`}),e.jsx("span",{className:"skills-view-toggle-slider"})]})]}),l&&e.jsxs("div",{className:"skills-view-detail","data-testid":"skill-detail",children:[e.jsxs("div",{className:"skills-view-detail-header",children:[e.jsx("span",{className:"skills-view-detail-title",children:s.name}),e.jsxs("button",{className:"btn btn-sm skills-view-detail-close",onClick:()=>{g(null),x(null),j(null)},"aria-label":"Close skill detail",children:[e.jsx($,{size:14}),"Close"]})]}),V?e.jsxs("div",{className:"skills-view-detail-loading",children:[e.jsx(_,{size:16,className:"spin"}),"Loading skill content..."]}):R?e.jsxs("div",{className:"skills-view-detail-error",children:[e.jsx(I,{size:14}),e.jsx("span",{children:R}),e.jsx("button",{className:"btn btn-sm",onClick:()=>X(s.id),children:"Retry"})]}):k?e.jsxs(e.Fragment,{children:[e.jsx("pre",{className:"skills-view-detail-content",children:k.skillMd||"(No SKILL.md found)"}),k.files.length>0&&e.jsxs("div",{className:"skills-view-detail-files",children:[e.jsx("span",{className:"skills-view-detail-files-label",children:"Files:"}),k.files.map(a=>e.jsxs("span",{className:"badge badge--sm",children:[a.name,a.type==="directory"&&"/"]},a.relativePath))]})]}):null]})]},s.id)})})]}),e.jsxs("section",{className:"skills-view-section","aria-labelledby":"catalog-title",children:[e.jsx("h3",{id:"catalog-title",className:"skills-view-section-title",children:"Skills Catalog"}),E?e.jsxs("div",{className:"skills-view-error",children:[e.jsx("p",{children:E}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void v(p),children:"Try Again"})]}):Q?e.jsxs("div",{className:"skills-view-loading",children:[e.jsx("span",{className:"spinner"}),"Loading catalog..."]}):L.length===0?e.jsx("div",{className:"skills-view-empty",children:h?e.jsx("p",{children:"No skills match your search."}):e.jsx("p",{children:"No skills available in the catalog."})}):e.jsx("div",{className:"skills-view-grid",children:L.map(s=>e.jsxs("div",{className:"skills-view-card",children:[e.jsx("h4",{className:"skills-view-card-title",children:s.name}),s.description&&e.jsx("p",{className:"skills-view-card-description",children:s.description}),s.tags&&s.tags.length>0&&e.jsx("div",{className:"skills-view-card-tags",children:s.tags.map(l=>e.jsx("span",{className:"badge badge--sm",children:l},l))}),s.installs!==void 0&&e.jsxs("span",{className:"skills-view-card-installs",children:[s.installs.toLocaleString()," installs"]})]},s.id))})]})]})]})}export{ie as SkillsView};
|