@runfusion/fusion 0.5.0 → 0.6.0
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 +799 -430
- package/dist/client/assets/{AgentDetailView-CnedHKqd.js → AgentDetailView-PYfYi6rl.js} +1 -1
- package/dist/client/assets/{AgentsView-TCAMvB-N.js → AgentsView-CjqSko8c.js} +3 -3
- package/dist/client/assets/{ChatView-B7djAFGF.js → ChatView-CY7Mdd3y.js} +1 -1
- package/dist/client/assets/{DevServerView-B_zgnvEn.js → DevServerView-Jt4PTXWB.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-B3ejJOl0.js → DirectoryPicker-Bcoh2_ft.js} +1 -1
- package/dist/client/assets/{DocumentsView-DzmbEKrl.js → DocumentsView-B2YRSmIS.js} +1 -1
- package/dist/client/assets/{InsightsView-CoRsf8DC.js → InsightsView-C4-vGe-H.js} +1 -1
- package/dist/client/assets/{MemoryView-oFUIaoM5.js → MemoryView-Ch7agzuP.js} +1 -1
- package/dist/client/assets/{NodesView-BXUaViVf.js → NodesView-D9rm5-_6.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DJRC5zRv.js → PiExtensionsManager-hpV1-dOB.js} +1 -1
- package/dist/client/assets/{PluginManager-OQhiY2zP.js → PluginManager-DHHM1Xeg.js} +1 -1
- package/dist/client/assets/{RoadmapsView-DwdewIMm.js → RoadmapsView-BpqARpKn.js} +1 -1
- package/dist/client/assets/{SettingsModal-Bmz_YrW5.js → SettingsModal-B8Q5r_TT.js} +3 -3
- package/dist/client/assets/{SettingsModal-CMRJwSFd.js → SettingsModal-DFitE2kE.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-BnPgyQho.js → SetupWizardModal-CjUbb4VZ.js} +1 -1
- package/dist/client/assets/{SkillsView-pHEyP-vg.js → SkillsView-CaQNaA67.js} +1 -1
- package/dist/client/assets/{TodoView-Cg-xDGeH.js → TodoView-Bj0DcDdf.js} +1 -1
- package/dist/client/assets/{folder-open-DJxjQmf1.js → folder-open-DDanUhRq.js} +1 -1
- package/dist/client/assets/{index-Cf4wCcWp.js → index-BRTEq_-7.js} +5 -5
- package/dist/client/assets/index-w9ci2GQ7.css +1 -0
- package/dist/client/assets/{list-checks-NjVTpQgK.js → list-checks-eKLuZO4Y.js} +1 -1
- package/dist/client/assets/{upload-BQA5FG0G.js → upload-DDJr7Sat.js} +1 -1
- package/dist/client/assets/{users-p7CqLoIz.js → users-zMb4VibZ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/extension.js +352 -154
- package/dist/pi-claude-cli/package.json +1 -1
- package/package.json +5 -5
- package/dist/client/assets/index-B7TDbn3p.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o,j as e}from"./vendor-react-K0fH_qHe.js";import{cW as Y,s as Z,X as k,ah as Q,w as U,cX as O,I as A,R as T,cY as ee,aq as se,cZ as ne,c_ as te,c$ as ie,d0 as ae,d1 as le,d2 as _,d3 as re}from"./index-Cf4wCcWp.js";import{D as ce}from"./DirectoryPicker-B3ejJOl0.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-DJxjQmf1.js";const de=[{id:"fusion-plugin-hermes-runtime",name:"Hermes Runtime",path:"./plugins/fusion-plugin-hermes-runtime",experimental:!0},{id:"fusion-plugin-paperclip-runtime",name:"Paperclip Runtime",path:"./plugins/fusion-plugin-paperclip-runtime"},{id:"fusion-plugin-openclaw-runtime",name:"OpenClaw Runtime",path:"./plugins/fusion-plugin-openclaw-runtime",experimental:!0}],N={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function xe({addToast:l,projectId:c}){const[x,b]=o.useState([]),[S,w]=o.useState(!0),[V,f]=o.useState(!1),[j,v]=o.useState(""),[C,$]=o.useState(!1),[h,P]=o.useState(null),[i,y]=o.useState(null),[a,g]=o.useState({}),[H,I]=o.useState(!1),[R,E]=o.useState(null),u=o.useCallback(async()=>{try{w(!0);const s=await Y(c);b(s)}catch(s){l(`Failed to load plugins: ${s instanceof Error?s.message:String(s)}`,"error")}finally{w(!1)}},[c,l]);o.useEffect(()=>{u()},[u]);const M=o.useRef([]);M.current=x,o.useEffect(()=>{const s=c?`?projectId=${encodeURIComponent(c)}`:"",n=p=>{try{const t=JSON.parse(p.data);if(c&&t.projectId&&t.projectId!==c)return;switch(t.transition){case"installing":case"enabled":case"disabled":case"settings-updated":b(d=>{const m=d.findIndex(r=>r.id===t.pluginId);if(m>=0){const r=[...d];return r[m]={...r[m],enabled:t.enabled,state:t.state,settings:t.settings,error:t.error},r}else return u(),d});break;case"uninstalled":b(d=>d.filter(m=>m.id!==t.pluginId));break;case"error":b(d=>{const m=d.findIndex(r=>r.id===t.pluginId);if(m>=0){const r=[...d];return r[m]={...r[m],state:t.state,error:t.error},r}return d});break}}catch{}};return Z(`/api/events${s}`,{events:{"plugin:lifecycle":n},onReconnect:()=>{u()}})},[c,u]);const z=async()=>{if(!j.trim()){l("Please enter a plugin path","error");return}try{$(!0),await _({path:j},c),l("Plugin installed successfully","success"),f(!1),v(""),await u()}catch(s){l(`Failed to install plugin: ${s instanceof Error?s.message:String(s)}`,"error")}finally{$(!1)}},X=async s=>{try{E(s.id),await _({path:s.path},c),l(`${s.name} installed successfully`,"success"),await u()}catch(n){l(`Failed to install ${s.name}: ${n instanceof Error?n.message:String(n)}`,"error")}finally{E(null)}},F=async s=>{try{await ae(s.id,c),l(`${s.name} enabled`,"success"),await u()}catch(n){l(`Failed to enable plugin: ${n instanceof Error?n.message:String(n)}`,"error")}},B=async s=>{try{await ie(s.id,c),l(`${s.name} disabled`,"success"),await u()}catch(n){l(`Failed to disable plugin: ${n instanceof Error?n.message:String(n)}`,"error")}},L=async s=>{try{P(s.id),await te(s.id,c),l(`${s.name} reloaded`,"success"),await u()}catch(n){l(`Failed to reload plugin: ${n instanceof Error?n.message:String(n)}`,"error")}finally{P(null)}},q=async s=>{if(confirm(`Are you sure you want to uninstall "${s.name}"?`))try{await le(s.id,c),l(`${s.name} uninstalled`,"success"),await u(),y(null)}catch(n){l(`Failed to uninstall plugin: ${n instanceof Error?n.message:String(n)}`,"error")}},G=async s=>{y(s);try{I(!0);const n=await re(s.id,c);g(n)}catch{g({})}finally{I(!1)}},J=async()=>{if(i)try{await ne(i.id,a,c),l("Settings saved","success")}catch(s){l(`Failed to save settings: ${s instanceof Error?s.message:String(s)}`,"error")}};if(i)return 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("h4",{className:"plugin-detail-name",children:i.name}),e.jsx("span",{className:"plugin-state-badge",style:{color:N[i.state]||N.installed},children:i.state})]})]}),e.jsxs("div",{className:"plugin-detail-content",children:[e.jsxs("div",{className:"plugin-detail-card",children:[i.description&&e.jsx("p",{className:"plugin-description",children:i.description}),i.author&&e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Author:"}),i.author]}),i.homepage&&e.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[e.jsx("span",{className:"text-muted",children:"Homepage:"}),e.jsxs("a",{href:i.homepage,target:"_blank",rel:"noopener noreferrer",children:[i.homepage,e.jsx(Q,{size:12})]})]}),e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Version:"}),i.version]})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h5",{className:"plugin-detail-section-heading",children:"Settings"}),H?e.jsx("p",{className:"text-muted",children:"Loading..."}):i.settingsSchema&&Object.keys(i.settingsSchema).length>0?e.jsxs("div",{className:"plugin-settings-form",children:[Object.entries(i.settingsSchema).map(([s,n])=>{const p=`setting-${s}-help`;return e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:`setting-${s}`,children:[n.label||s,n.required&&" *"]}),n.type==="string"&&!n.multiline&&e.jsx("input",{type:"text",id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),placeholder:n.description,"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="string"&&n.multiline&&e.jsx("textarea",{id:`setting-${s}`,rows:4,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),placeholder:n.description,"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="password"&&e.jsx("input",{type:"password",id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),placeholder:n.description,"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="number"&&e.jsx("input",{type:"number",id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:Number(t.target.value)}),"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="boolean"&&e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:a[s]??!1,onChange:t=>g({...a,[s]:t.target.checked})}),n.description]}),n.type==="enum"&&e.jsxs("select",{id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),"aria-describedby":n.description&&!n.required?p:void 0,children:[e.jsx("option",{value:"",children:"Select..."}),n.enumValues?.map(t=>e.jsx("option",{value:t,children:t},t))]}),n.type==="array"&&e.jsxs("div",{className:"plugin-settings-array",children:[a[s]?.map((t,d)=>e.jsxs("div",{className:"plugin-settings-array-item",children:[e.jsx("input",{type:n.itemType==="number"?"number":"text",value:t??"",onChange:m=>{const r=m.target.value,D=[...a[s]||[]];D[d]=n.itemType==="number"?Number(r):r,g({...a,[s]:D})}}),e.jsx("button",{className:"btn-icon",onClick:()=>{const r=[...a[s]||[]];r.splice(d,1),g({...a,[s]:r})},"aria-label":"Remove item",children:e.jsx(k,{size:14})})]},d)),e.jsxs("button",{className:"btn btn-secondary",onClick:()=>{const t=a[s]||[],d=n.itemType==="number"?0:"";g({...a,[s]:[...t,d]})},children:[e.jsx(U,{size:14})," Add Item"]})]}),n.description&&!n.required&&!n.multiline&&e.jsx("span",{id:p,className:"form-help",children:n.description})]},s)}),e.jsx("button",{className:"btn btn-primary",onClick:J,children:"Save Settings"})]}):e.jsx("p",{className:"text-muted",children:"No configurable settings."})]}),e.jsxs("div",{className:"plugin-detail-actions",children:[i.state==="started"&&e.jsxs("button",{className:"btn btn-secondary",onClick:()=>L(i),disabled:h===i.id,children:[e.jsx(O,{size:14,className:h===i.id?"spin":""}),h===i.id?"Reloading...":"Reload"]}),i.enabled?e.jsx("button",{className:"btn btn-secondary",onClick:()=>B(i),children:"Disable"}):e.jsx("button",{className:"btn btn-primary",onClick:()=>F(i),children:"Enable"}),e.jsxs("button",{className:"btn btn-danger",onClick:()=>q(i),children:[e.jsx(A,{size:14})," Uninstall"]})]})]})]});const K=new Set(x.map(s=>s.id)),W=()=>e.jsxs("section",{className:"plugin-bundled-runtime-section","aria-label":"Bundled Runtime Plugins",children:[e.jsxs("div",{className:"plugin-bundled-runtime-header",children:[e.jsx("h4",{className:"plugin-bundled-runtime-heading",children:"Bundled Runtime Plugins"}),e.jsx("p",{className:"plugin-bundled-runtime-description",children:"Install Fusion's bundled runtimes directly from this screen."})]}),e.jsx("div",{className:"plugin-bundled-runtime-list","aria-label":"Bundled runtime plugin recommendations",children:de.map(s=>{const n=K.has(s.id);return e.jsxs("div",{className:"plugin-bundled-runtime-item",children:[e.jsxs("div",{className:"plugin-bundled-runtime-meta",children:[e.jsx("span",{className:"plugin-bundled-runtime-name",children:s.name}),s.experimental&&e.jsx("span",{className:"plugin-bundled-runtime-badge",children:"Experimental"}),e.jsx("span",{className:`plugin-bundled-runtime-status ${n?"plugin-bundled-runtime-status--installed":"plugin-bundled-runtime-status--available"}`,children:n?"Installed":"Not installed"})]}),e.jsx("button",{className:`btn ${n?"btn-secondary":"btn-primary"} btn-sm`,onClick:()=>X(s),disabled:n||R===s.id,children:n?"Installed":R===s.id?"Installing...":`Install ${s.name}`})]},s.id)})})]});return 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:u,title:"Refresh",children:e.jsx(T,{size:16,className:S?"spin":""})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>f(!0),children:[e.jsx(U,{size:14})," Install"]})]})}),V&&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(ce,{value:j,onChange:v,placeholder:"Absolute path to plugin directory or dist folder",onInputKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),z())}}),e.jsxs("div",{className:"plugin-install-actions",children:[e.jsx("button",{className:"btn btn-primary",onClick:z,disabled:C||!j.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..."}):e.jsxs(e.Fragment,{children:[x.length===0?e.jsxs("div",{className:"settings-empty-state",children:[e.jsx(ee,{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, or use a bundled runtime below."})]}):e.jsx("div",{className:"plugin-list",children:x.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:N[s.state]||N.installed},children:s.state})]}),e.jsxs("div",{className:"plugin-actions",children:[s.state==="started"&&e.jsx("button",{className:"btn-icon",onClick:()=>L(s),disabled:h===s.id,title:"Reload",children:e.jsx(O,{size:14,className:h===s.id?"spin":""})}),e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>s.enabled?B(s):F(s)}),e.jsx("span",{className:"toggle-slider"})]}),e.jsx("button",{className:"btn-icon",onClick:()=>G(s),title:"Settings",children:e.jsx(se,{size:14})}),e.jsx("button",{className:"btn-icon",onClick:()=>q(s),title:"Uninstall",children:e.jsx(A,{size:14})})]})]},s.id))}),W()]})]})}export{xe as PluginManager,N as STATE_COLORS};
|
|
1
|
+
import{r as o,j as e}from"./vendor-react-K0fH_qHe.js";import{cW as Y,s as Z,X as k,ah as Q,w as U,cX as O,I as A,R as T,cY as ee,aq as se,cZ as ne,c_ as te,c$ as ie,d0 as ae,d1 as le,d2 as _,d3 as re}from"./index-BRTEq_-7.js";import{D as ce}from"./DirectoryPicker-Bcoh2_ft.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-DDanUhRq.js";const de=[{id:"fusion-plugin-hermes-runtime",name:"Hermes Runtime",path:"./plugins/fusion-plugin-hermes-runtime",experimental:!0},{id:"fusion-plugin-paperclip-runtime",name:"Paperclip Runtime",path:"./plugins/fusion-plugin-paperclip-runtime"},{id:"fusion-plugin-openclaw-runtime",name:"OpenClaw Runtime",path:"./plugins/fusion-plugin-openclaw-runtime",experimental:!0}],N={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function xe({addToast:l,projectId:c}){const[x,b]=o.useState([]),[S,w]=o.useState(!0),[V,f]=o.useState(!1),[j,v]=o.useState(""),[C,$]=o.useState(!1),[h,P]=o.useState(null),[i,y]=o.useState(null),[a,g]=o.useState({}),[H,I]=o.useState(!1),[R,E]=o.useState(null),u=o.useCallback(async()=>{try{w(!0);const s=await Y(c);b(s)}catch(s){l(`Failed to load plugins: ${s instanceof Error?s.message:String(s)}`,"error")}finally{w(!1)}},[c,l]);o.useEffect(()=>{u()},[u]);const M=o.useRef([]);M.current=x,o.useEffect(()=>{const s=c?`?projectId=${encodeURIComponent(c)}`:"",n=p=>{try{const t=JSON.parse(p.data);if(c&&t.projectId&&t.projectId!==c)return;switch(t.transition){case"installing":case"enabled":case"disabled":case"settings-updated":b(d=>{const m=d.findIndex(r=>r.id===t.pluginId);if(m>=0){const r=[...d];return r[m]={...r[m],enabled:t.enabled,state:t.state,settings:t.settings,error:t.error},r}else return u(),d});break;case"uninstalled":b(d=>d.filter(m=>m.id!==t.pluginId));break;case"error":b(d=>{const m=d.findIndex(r=>r.id===t.pluginId);if(m>=0){const r=[...d];return r[m]={...r[m],state:t.state,error:t.error},r}return d});break}}catch{}};return Z(`/api/events${s}`,{events:{"plugin:lifecycle":n},onReconnect:()=>{u()}})},[c,u]);const z=async()=>{if(!j.trim()){l("Please enter a plugin path","error");return}try{$(!0),await _({path:j},c),l("Plugin installed successfully","success"),f(!1),v(""),await u()}catch(s){l(`Failed to install plugin: ${s instanceof Error?s.message:String(s)}`,"error")}finally{$(!1)}},X=async s=>{try{E(s.id),await _({path:s.path},c),l(`${s.name} installed successfully`,"success"),await u()}catch(n){l(`Failed to install ${s.name}: ${n instanceof Error?n.message:String(n)}`,"error")}finally{E(null)}},F=async s=>{try{await ae(s.id,c),l(`${s.name} enabled`,"success"),await u()}catch(n){l(`Failed to enable plugin: ${n instanceof Error?n.message:String(n)}`,"error")}},B=async s=>{try{await ie(s.id,c),l(`${s.name} disabled`,"success"),await u()}catch(n){l(`Failed to disable plugin: ${n instanceof Error?n.message:String(n)}`,"error")}},L=async s=>{try{P(s.id),await te(s.id,c),l(`${s.name} reloaded`,"success"),await u()}catch(n){l(`Failed to reload plugin: ${n instanceof Error?n.message:String(n)}`,"error")}finally{P(null)}},q=async s=>{if(confirm(`Are you sure you want to uninstall "${s.name}"?`))try{await le(s.id,c),l(`${s.name} uninstalled`,"success"),await u(),y(null)}catch(n){l(`Failed to uninstall plugin: ${n instanceof Error?n.message:String(n)}`,"error")}},G=async s=>{y(s);try{I(!0);const n=await re(s.id,c);g(n)}catch{g({})}finally{I(!1)}},J=async()=>{if(i)try{await ne(i.id,a,c),l("Settings saved","success")}catch(s){l(`Failed to save settings: ${s instanceof Error?s.message:String(s)}`,"error")}};if(i)return 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("h4",{className:"plugin-detail-name",children:i.name}),e.jsx("span",{className:"plugin-state-badge",style:{color:N[i.state]||N.installed},children:i.state})]})]}),e.jsxs("div",{className:"plugin-detail-content",children:[e.jsxs("div",{className:"plugin-detail-card",children:[i.description&&e.jsx("p",{className:"plugin-description",children:i.description}),i.author&&e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Author:"}),i.author]}),i.homepage&&e.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[e.jsx("span",{className:"text-muted",children:"Homepage:"}),e.jsxs("a",{href:i.homepage,target:"_blank",rel:"noopener noreferrer",children:[i.homepage,e.jsx(Q,{size:12})]})]}),e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:"Version:"}),i.version]})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h5",{className:"plugin-detail-section-heading",children:"Settings"}),H?e.jsx("p",{className:"text-muted",children:"Loading..."}):i.settingsSchema&&Object.keys(i.settingsSchema).length>0?e.jsxs("div",{className:"plugin-settings-form",children:[Object.entries(i.settingsSchema).map(([s,n])=>{const p=`setting-${s}-help`;return e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:`setting-${s}`,children:[n.label||s,n.required&&" *"]}),n.type==="string"&&!n.multiline&&e.jsx("input",{type:"text",id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),placeholder:n.description,"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="string"&&n.multiline&&e.jsx("textarea",{id:`setting-${s}`,rows:4,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),placeholder:n.description,"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="password"&&e.jsx("input",{type:"password",id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),placeholder:n.description,"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="number"&&e.jsx("input",{type:"number",id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:Number(t.target.value)}),"aria-describedby":n.description&&!n.required?p:void 0}),n.type==="boolean"&&e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:a[s]??!1,onChange:t=>g({...a,[s]:t.target.checked})}),n.description]}),n.type==="enum"&&e.jsxs("select",{id:`setting-${s}`,value:a[s]??"",onChange:t=>g({...a,[s]:t.target.value}),"aria-describedby":n.description&&!n.required?p:void 0,children:[e.jsx("option",{value:"",children:"Select..."}),n.enumValues?.map(t=>e.jsx("option",{value:t,children:t},t))]}),n.type==="array"&&e.jsxs("div",{className:"plugin-settings-array",children:[a[s]?.map((t,d)=>e.jsxs("div",{className:"plugin-settings-array-item",children:[e.jsx("input",{type:n.itemType==="number"?"number":"text",value:t??"",onChange:m=>{const r=m.target.value,D=[...a[s]||[]];D[d]=n.itemType==="number"?Number(r):r,g({...a,[s]:D})}}),e.jsx("button",{className:"btn-icon",onClick:()=>{const r=[...a[s]||[]];r.splice(d,1),g({...a,[s]:r})},"aria-label":"Remove item",children:e.jsx(k,{size:14})})]},d)),e.jsxs("button",{className:"btn btn-secondary",onClick:()=>{const t=a[s]||[],d=n.itemType==="number"?0:"";g({...a,[s]:[...t,d]})},children:[e.jsx(U,{size:14})," Add Item"]})]}),n.description&&!n.required&&!n.multiline&&e.jsx("span",{id:p,className:"form-help",children:n.description})]},s)}),e.jsx("button",{className:"btn btn-primary",onClick:J,children:"Save Settings"})]}):e.jsx("p",{className:"text-muted",children:"No configurable settings."})]}),e.jsxs("div",{className:"plugin-detail-actions",children:[i.state==="started"&&e.jsxs("button",{className:"btn btn-secondary",onClick:()=>L(i),disabled:h===i.id,children:[e.jsx(O,{size:14,className:h===i.id?"spin":""}),h===i.id?"Reloading...":"Reload"]}),i.enabled?e.jsx("button",{className:"btn btn-secondary",onClick:()=>B(i),children:"Disable"}):e.jsx("button",{className:"btn btn-primary",onClick:()=>F(i),children:"Enable"}),e.jsxs("button",{className:"btn btn-danger",onClick:()=>q(i),children:[e.jsx(A,{size:14})," Uninstall"]})]})]})]});const K=new Set(x.map(s=>s.id)),W=()=>e.jsxs("section",{className:"plugin-bundled-runtime-section","aria-label":"Bundled Runtime Plugins",children:[e.jsxs("div",{className:"plugin-bundled-runtime-header",children:[e.jsx("h4",{className:"plugin-bundled-runtime-heading",children:"Bundled Runtime Plugins"}),e.jsx("p",{className:"plugin-bundled-runtime-description",children:"Install Fusion's bundled runtimes directly from this screen."})]}),e.jsx("div",{className:"plugin-bundled-runtime-list","aria-label":"Bundled runtime plugin recommendations",children:de.map(s=>{const n=K.has(s.id);return e.jsxs("div",{className:"plugin-bundled-runtime-item",children:[e.jsxs("div",{className:"plugin-bundled-runtime-meta",children:[e.jsx("span",{className:"plugin-bundled-runtime-name",children:s.name}),s.experimental&&e.jsx("span",{className:"plugin-bundled-runtime-badge",children:"Experimental"}),e.jsx("span",{className:`plugin-bundled-runtime-status ${n?"plugin-bundled-runtime-status--installed":"plugin-bundled-runtime-status--available"}`,children:n?"Installed":"Not installed"})]}),e.jsx("button",{className:`btn ${n?"btn-secondary":"btn-primary"} btn-sm`,onClick:()=>X(s),disabled:n||R===s.id,children:n?"Installed":R===s.id?"Installing...":`Install ${s.name}`})]},s.id)})})]});return 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:u,title:"Refresh",children:e.jsx(T,{size:16,className:S?"spin":""})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>f(!0),children:[e.jsx(U,{size:14})," Install"]})]})}),V&&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(ce,{value:j,onChange:v,placeholder:"Absolute path to plugin directory or dist folder",onInputKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),z())}}),e.jsxs("div",{className:"plugin-install-actions",children:[e.jsx("button",{className:"btn btn-primary",onClick:z,disabled:C||!j.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..."}):e.jsxs(e.Fragment,{children:[x.length===0?e.jsxs("div",{className:"settings-empty-state",children:[e.jsx(ee,{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, or use a bundled runtime below."})]}):e.jsx("div",{className:"plugin-list",children:x.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:N[s.state]||N.installed},children:s.state})]}),e.jsxs("div",{className:"plugin-actions",children:[s.state==="started"&&e.jsx("button",{className:"btn-icon",onClick:()=>L(s),disabled:h===s.id,title:"Reload",children:e.jsx(O,{size:14,className:h===s.id?"spin":""})}),e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>s.enabled?B(s):F(s)}),e.jsx("span",{className:"toggle-slider"})]}),e.jsx("button",{className:"btn-icon",onClick:()=>G(s),title:"Settings",children:e.jsx(se,{size:14})}),e.jsx("button",{className:"btn-icon",onClick:()=>q(s),title:"Uninstall",children:e.jsx(A,{size:14})})]})]},s.id))}),W()]})]})}export{xe as PluginManager,N as STATE_COLORS};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{c as St,aN as Et,aO as kt,aP as Ft,aQ as Dt,aR as Mt,aS as tt,aT as Rt,aU as It,aV as at,aW as $t,aX as zt,aY as At,aZ as Ot,a_ as Bt,a$ as Ht,b0 as Tt,b1 as Gt,aF as Pt,w as Ae,b2 as me,X as ae,as as Ee,I as Le,a7 as Lt,ad as ut,ar as rt,a4 as Vt,b3 as Ye,b4 as Ut}from"./index-
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{c as St,aN as Et,aO as kt,aP as Ft,aQ as Dt,aR as Mt,aS as tt,aT as Rt,aU as It,aV as at,aW as $t,aX as zt,aY as At,aZ as Ot,a_ as Bt,a$ as Ht,b0 as Tt,b1 as Gt,aF as Pt,w as Ae,b2 as me,X as ae,as as Ee,I as Le,a7 as Lt,ad as ut,ar as rt,a4 as Vt,b3 as Ye,b4 as Ut}from"./index-BRTEq_-7.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.
|