@runfusion/fusion 0.12.0 → 0.14.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/README.md +13 -0
- package/dist/bin.js +1707 -610
- package/dist/client/assets/AgentDetailView-CBFUveyO.js +18 -0
- package/dist/client/assets/AgentsView-DPezXQ-U.js +522 -0
- package/dist/client/assets/{AgentsView-Bkk-uBij.css → AgentsView-V5GhlBYu.css} +1 -1
- package/dist/client/assets/ChatView-5N4-EuhD.js +1 -0
- package/dist/client/assets/{DevServerView-DQrVLbK5.js → DevServerView-Daft4YFc.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-DVmy6sLM.js → DirectoryPicker-rew1y6qO.js} +1 -1
- package/dist/client/assets/{DocumentsView-DHEv-Q2a.js → DocumentsView-i72qJzwd.js} +1 -1
- package/dist/client/assets/{InsightsView-ByyY7GX7.js → InsightsView-BL5eZJ0a.js} +3 -3
- package/dist/client/assets/{MemoryView-Udiu0u8R.js → MemoryView-pl8Cdg_p.js} +2 -2
- package/dist/client/assets/{NodesView-CupS-GGc.js → NodesView-D6eJ15zc.js} +4 -4
- package/dist/client/assets/PiExtensionsManager-ExInwXWP.js +11 -0
- package/dist/client/assets/PluginManager-CYhtxHun.js +1 -0
- package/dist/client/assets/{ResearchView-BG9Feaeb.js → ResearchView-B_QPUEjB.js} +1 -1
- package/dist/client/assets/{RoadmapsView-BTJtmBnF.js → RoadmapsView-DBNLaEsK.js} +2 -2
- package/dist/client/assets/SettingsModal-1ET586M3.js +31 -0
- package/dist/client/assets/{SettingsModal-eNCZiHa6.js → SettingsModal-CL_gWmOj.js} +1 -1
- package/dist/client/assets/SettingsModal-D_AFkDJa.css +1 -0
- package/dist/client/assets/{SetupWizardModal-yf79TN1L.js → SetupWizardModal-CLkY9HFL.js} +1 -1
- package/dist/client/assets/{SkillMultiselect-DOj5vX4U.js → SkillMultiselect-B0qi32SQ.js} +1 -1
- package/dist/client/assets/{SkillsView-CgnCnikX.js → SkillsView-umVjRq6o.js} +1 -1
- package/dist/client/assets/TodoView-CFifSvrD.js +6 -0
- package/dist/client/assets/TodoView-SeO9o7km.css +1 -0
- package/dist/client/assets/{folder-open-D11gjHGK.js → folder-open-nYPrL1W3.js} +1 -1
- package/dist/client/assets/index-Bc8nfKeH.js +661 -0
- package/dist/client/assets/index-C1prPuSl.css +1 -0
- package/dist/client/assets/{list-checks-CBzPc3GA.js → list-checks-sK8xJeH_.js} +1 -1
- package/dist/client/assets/{star-BWcRk8nt.js → star-BRtXbYkB.js} +1 -1
- package/dist/client/assets/{upload-91TM4ljC.js → upload-BP60eBwN.js} +1 -1
- package/dist/client/assets/{users-BAsI___L.js → users-qSGAX2Pf.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/sw.js +6 -0
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/index.ts +127 -0
- package/dist/droid-cli/package.json +37 -0
- package/dist/droid-cli/src/__tests__/control-handler.test.ts +164 -0
- package/dist/droid-cli/src/__tests__/event-bridge.test.ts +1318 -0
- package/dist/droid-cli/src/__tests__/mcp-config.test.ts +310 -0
- package/dist/droid-cli/src/__tests__/process-manager.test.ts +818 -0
- package/dist/droid-cli/src/__tests__/prompt-builder.test.ts +1206 -0
- package/dist/droid-cli/src/__tests__/provider.test.ts +1894 -0
- package/dist/droid-cli/src/__tests__/setup-test-isolation.test.ts +32 -0
- package/dist/droid-cli/src/__tests__/setup-test-isolation.ts +14 -0
- package/dist/droid-cli/src/__tests__/stream-parser.test.ts +188 -0
- package/dist/droid-cli/src/__tests__/thinking-config.test.ts +141 -0
- package/dist/droid-cli/src/__tests__/tool-mapping.test.ts +253 -0
- package/dist/droid-cli/src/control-handler.ts +82 -0
- package/dist/droid-cli/src/event-bridge.ts +397 -0
- package/dist/droid-cli/src/mcp-config.ts +144 -0
- package/dist/droid-cli/src/mcp-schema-server.cjs +49 -0
- package/dist/droid-cli/src/process-manager.ts +358 -0
- package/dist/droid-cli/src/prompt-builder.ts +629 -0
- package/dist/droid-cli/src/provider.ts +447 -0
- package/dist/droid-cli/src/stream-parser.ts +37 -0
- package/dist/droid-cli/src/thinking-config.ts +83 -0
- package/dist/droid-cli/src/tool-mapping.ts +147 -0
- package/dist/droid-cli/src/types.ts +87 -0
- package/dist/extension.js +542 -141
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/pi-claude-cli/src/__tests__/prompt-builder.test.ts +36 -0
- package/dist/pi-claude-cli/src/prompt-builder.ts +19 -28
- package/package.json +2 -1
- package/dist/client/assets/AgentDetailView-B20ApPe1.js +0 -18
- package/dist/client/assets/AgentsView-ChN1tgQ0.js +0 -522
- package/dist/client/assets/ChatView-oPMFwmoc.js +0 -1
- package/dist/client/assets/PiExtensionsManager-DXs2xI8K.js +0 -11
- package/dist/client/assets/PluginManager-BCpiZf4_.js +0 -1
- package/dist/client/assets/SettingsModal-9HS8MnmW.css +0 -1
- package/dist/client/assets/SettingsModal-DZ_LaEhd.js +0 -31
- package/dist/client/assets/TodoView-67BMyICY.js +0 -6
- package/dist/client/assets/TodoView-C1g65hJo.css +0 -1
- package/dist/client/assets/index-BLn1R7Ob.css +0 -1
- package/dist/client/assets/index-CLAHcGnI.js +0 -656
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./vendor-react-K0fH_qHe.js";import{
|
|
1
|
+
import{r as e}from"./vendor-react-K0fH_qHe.js";import{di as C}from"./index-Bc8nfKeH.js";function L(k={}){const{projectId:d,pollInterval:b=6e4,autoRefresh:p=!1,enabled:t=!0}=k,[S,o]=e.useState(null),[m,l]=e.useState(t),[E,c]=e.useState(null),[R,v]=e.useState(null),r=e.useRef(null),n=e.useRef(null),a=e.useRef(!0),s=e.useCallback(async()=>{if(!t){l(!1),c(null),o(null);return}r.current&&r.current.abort(),r.current=new AbortController,l(!0),c(null),o(null);try{const u=await C(d);if(!a.current)return;o(u),c(null),v(new Date),l(!1)}catch(u){if(u instanceof Error&&u.name==="AbortError"||!a.current)return;const A=u instanceof Error?u.message:"Failed to fetch memory backend status";c(A),l(!1)}},[t,d]);e.useEffect(()=>(a.current=!0,t?(s(),()=>{a.current=!1}):(r.current&&r.current.abort(),o(null),c(null),l(!1),()=>{a.current=!1})),[t,s]),e.useEffect(()=>{if(!(!t||!p))return n.current=setInterval(()=>{s()},b),()=>{n.current&&(clearInterval(n.current),n.current=null)}},[t,p,b,s]),e.useEffect(()=>()=>{a.current=!1,r.current&&r.current.abort(),n.current&&(clearInterval(n.current),n.current=null)},[]);const h=e.useCallback(()=>s(),[s]),f=m?null:S,B=f?.currentBackend??null,i=f?.capabilities??null,y=f?.availableBackends??[],I=i?.readable??!1,g=i?.writable??!1,w=i?.supportsAtomicWrite??!1;return{status:f,currentBackend:B,capabilities:i,availableBackends:y,isReadable:I,isWritable:g,supportsAtomicWrite:w,loading:m,error:E,lastUpdated:R,refresh:h}}export{L as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.cli-binary-panel{display:flex;flex-direction:column;gap:12px;padding:0 var(--space-xl);margin-top:var(--space-lg);border:0;background:transparent}.cli-binary-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.cli-binary-header .settings-section-heading{margin:0}.cli-binary-pill{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.cli-binary-pill--ok{background:#2ea0432e;color:#57c97a;border:1px solid rgba(46,160,67,.4)}.cli-binary-pill--warn{background:#d299222e;color:#e3b341;border:1px solid rgba(210,153,34,.4)}.cli-binary-pill--err{background:#da36332e;color:#f48581;border:1px solid rgba(218,54,51,.4)}.cli-binary-help{color:var(--text-secondary, #98a3b1);line-height:1.4}.cli-binary-help code{background:#ffffff0f;padding:1px 6px;border-radius:4px;font-size:.92em}.cli-binary-status-line{margin:0;color:var(--text-secondary, #98a3b1)}.cli-binary-status-line code{background:#ffffff0f;padding:1px 6px;border-radius:4px}.cli-binary-detail{display:flex;flex-direction:column;gap:12px}.cli-binary-info-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:13px}.cli-binary-info-list li{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.cli-binary-info-list span{color:var(--text-secondary, #98a3b1);min-width:64px}.cli-binary-info-list code{background:#ffffff0f;padding:1px 6px;border-radius:4px;word-break:break-all}.cli-binary-expected{color:var(--text-secondary, #98a3b1);font-size:12px}.cli-binary-actions{display:flex;gap:8px;flex-wrap:wrap}.cli-binary-install-btn,.cli-binary-refresh-btn,.cli-binary-copy-btn{cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px;border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.cli-binary-install-btn{background:var(--accent, #3b82f6);color:#fff}.cli-binary-install-btn:hover:not(:disabled){background:var(--accent-hover, #2563eb)}.cli-binary-install-btn:disabled,.cli-binary-refresh-btn:disabled{opacity:.55;cursor:not-allowed}.cli-binary-refresh-btn,.cli-binary-copy-btn{background:#ffffff0a;color:var(--text-primary, #e6edf3);border-color:#ffffff1f}.cli-binary-refresh-btn:hover:not(:disabled),.cli-binary-copy-btn:hover{background:#ffffff14}.cli-binary-commands{display:flex;flex-direction:column;gap:6px}.cli-binary-commands label{font-size:12px;color:var(--text-secondary, #98a3b1);text-transform:uppercase;letter-spacing:.04em}.cli-binary-command-row{display:flex;align-items:center;gap:8px;background:#00000040;border:1px solid rgba(255,255,255,.06);border-radius:6px;padding:6px 8px 6px 12px}.cli-binary-command-row code{flex:1;font-family:var(--font-mono, ui-monospace, "SFMono-Regular", monospace);font-size:12.5px;color:var(--text-primary, #e6edf3);white-space:nowrap;overflow-x:auto}.cli-binary-install-log{border-top:1px solid rgba(255,255,255,.06);padding-top:10px;font-size:12.5px}.cli-binary-install-log summary{cursor:pointer;color:var(--text-secondary, #98a3b1)}.cli-binary-install-output{margin:6px 0 0;padding:8px 10px;background:#00000059;border-radius:4px;max-height:220px;overflow:auto;white-space:pre-wrap;font-size:12px;line-height:1.4}.cli-binary-install-output--err{color:#f48581}.cli-binary-permissions-hint{margin:6px 0;padding:8px 10px;background:#da36331a;border-left:3px solid rgba(218,54,51,.55);border-radius:0 4px 4px 0;color:#f7c4c2;font-size:12.5px;line-height:1.5}.prompt-manager{display:flex;flex-direction:column;gap:var(--space-md);padding:0 20px;margin-top:var(--space-md)}.prompt-manager-tabs{display:flex;gap:var(--space-xs);border-bottom:1px solid var(--border);padding-bottom:var(--space-sm)}.prompt-manager-tab{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);background:none;border:1px solid transparent;border-radius:var(--radius-md);color:var(--text-muted);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.prompt-manager-tab:hover{color:var(--text);background:var(--surface)}.prompt-manager-tab.active{color:var(--text);background:var(--surface);border-color:var(--border)}.prompt-manager-content{min-height:200px}.prompt-manager-templates-tab,.prompt-manager-assignments-tab,.prompt-manager-overrides-tab{display:flex;flex-direction:column;gap:var(--space-lg)}.prompt-template-section{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-section-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.prompt-template-section-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-template-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-card{padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast)}.prompt-template-card:hover{border-color:var(--text-dim)}.prompt-template-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}.prompt-template-card-info{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm)}.prompt-template-card-name{font-weight:600;color:var(--text);font-size:14px}.prompt-template-badge-built-in,.prompt-template-badge-custom,.prompt-template-badge-override{display:inline-flex;align-items:center;padding:2px 6px;font-size:10px;font-weight:500;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.02em}.prompt-template-badge-built-in{background:var(--surface);color:var(--text-muted);border:1px solid var(--border)}.prompt-template-badge-custom{background:color-mix(in srgb,var(--ws-info) 15%,transparent);color:var(--ws-info)}.prompt-template-badge-override{background:color-mix(in srgb,var(--ws-warning) 15%,transparent);color:var(--ws-warning)}.prompt-template-badge-role{display:inline-flex;align-items:center;padding:2px 6px;font-size:10px;font-weight:500;border-radius:var(--radius-sm)}.prompt-template-card-actions{display:flex;gap:var(--space-xs)}.prompt-template-card-actions .btn-icon{padding:var(--space-xs)}.prompt-template-card-description{font-size:12px;color:var(--text-muted);margin:0 0 var(--space-sm) 0;line-height:1.4}.prompt-template-card-preview{background:var(--surface);border-radius:var(--radius-sm);padding:var(--space-sm);overflow:hidden}.prompt-template-card-preview code{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;display:block;max-height:120px;overflow-y:auto}.prompt-template-empty{padding:var(--space-lg);text-align:center;color:var(--text-muted);font-size:13px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-md)}.prompt-template-add-btn{align-self:flex-start;margin-top:var(--space-sm)}.prompt-template-editor{padding:var(--space-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.prompt-template-editor-title{font-size:14px;font-weight:600;color:var(--text);margin:0 0 var(--space-md) 0}.prompt-template-editor-fields{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-field{display:flex;flex-direction:column;gap:var(--space-xs)}.prompt-template-field label{font-size:12px;font-weight:500;color:var(--text-muted)}.prompt-template-field input,.prompt-template-field select,.prompt-template-prompt-textarea{padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:13px;transition:border-color var(--transition-fast)}.prompt-template-field input:focus,.prompt-template-field select:focus,.prompt-template-prompt-textarea:focus{outline:none;border-color:var(--todo)}.prompt-template-prompt-textarea{font-family:var(--font-mono);font-size:12px;line-height:1.5;resize:vertical;min-height:120px}.prompt-template-error{padding:var(--space-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid var(--color-error);border-radius:var(--radius-sm);color:var(--color-error);font-size:12px}.prompt-template-editor-actions{display:flex;gap:var(--space-sm);justify-content:flex-end;margin-top:var(--space-sm)}.prompt-template-delete-confirm{padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid var(--color-error);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--space-sm)}.prompt-template-delete-confirm p{margin:0;font-size:13px;color:var(--text)}.prompt-template-delete-actions{display:flex;gap:var(--space-sm)}.prompt-assignments-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-role-assignment-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-role-assignment-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md)}.prompt-role-assignment-label{display:flex;align-items:center;gap:var(--space-md)}.prompt-role-badge{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);font-size:12px;font-weight:600;border-radius:var(--radius-sm)}.prompt-role-assignment-status{font-size:12px;color:var(--text-muted)}.prompt-role-select{min-width:200px;padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:13px;cursor:pointer}.prompt-role-select:focus{outline:none;border-color:var(--todo)}.prompt-assignments-note{margin-top:var(--space-md);padding:var(--space-md);background:var(--surface);border-radius:var(--radius-md);font-size:12px;color:var(--text-muted);line-height:1.5}.prompt-assignments-note strong{color:var(--text)}.prompt-overrides-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-overrides-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-override-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.prompt-override-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);cursor:pointer;transition:background var(--transition-fast)}.prompt-override-header:hover{background:var(--card-hover)}.prompt-override-info{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm)}.prompt-override-name{font-weight:600;color:var(--text);font-size:13px}.prompt-override-key{font-size:11px;font-family:var(--font-mono);color:var(--text-muted);padding:2px 4px;background:var(--surface);border-radius:var(--radius-sm)}.prompt-override-badge{display:inline-flex;align-items:center;padding:2px 6px;font-size:10px;font-weight:500;background:color-mix(in srgb,var(--ws-warning) 15%,transparent);color:var(--ws-warning);border-radius:var(--radius-sm)}.prompt-override-expand-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.prompt-override-expand-btn:hover{color:var(--text);background:var(--surface)}.prompt-override-description{font-size:12px;color:var(--text-muted);margin:0;padding:0 var(--space-md) var(--space-md);line-height:1.4}.prompt-override-editor{padding:var(--space-md);border-top:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column;gap:var(--space-sm)}.prompt-override-textarea{padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:12px;font-family:var(--font-mono);line-height:1.5;resize:vertical;min-height:80px;transition:border-color var(--transition-fast)}.prompt-override-textarea:focus{outline:none;border-color:var(--todo)}.prompt-override-footer{display:flex;align-items:center;gap:var(--space-md)}.prompt-override-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.prompt-override-header-actions{display:flex;align-items:center;gap:var(--space-xs)}.prompt-override-fullscreen-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.prompt-override-fullscreen-btn:hover{color:var(--text);background:var(--surface)}.prompt-override-fullscreen{position:fixed;inset:0;z-index:10000;background:var(--surface);padding:max(var(--space-lg),env(safe-area-inset-top,0px)) max(var(--space-lg),env(safe-area-inset-right,0px)) max(var(--space-lg),env(safe-area-inset-bottom,0px)) max(var(--space-lg),env(safe-area-inset-left,0px));display:flex;flex-direction:column}.prompt-override-fullscreen-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);flex-shrink:0}.prompt-override-fullscreen-title{font-size:13px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:var(--space-sm)}.prompt-override-fullscreen-close{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:none;border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;font-size:12px;transition:all var(--transition-fast)}.prompt-override-fullscreen-close:hover{color:var(--text);border-color:var(--text-muted)}.prompt-override-fullscreen-close:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.prompt-override-fullscreen textarea{flex:1;min-height:unset;resize:none;border-radius:var(--radius-md);font-size:14px;line-height:1.6}.prompt-template-fullscreen-pre{flex:1;font-family:var(--font-mono);font-size:13px;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-word;overflow-y:auto;padding:var(--space-md);background:var(--bg);border-radius:var(--radius-md);border:1px solid var(--border);margin:0}.prompt-override-fullscreen .prompt-override-footer{flex-shrink:0;padding-top:var(--space-sm)}.prompt-template-prompt-label-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}.prompt-template-prompt-label-row label{display:block}.prompt-template-fullscreen-btn{vertical-align:middle}.prompt-template-prompt-label-row .prompt-template-fullscreen-btn{margin-left:var(--space-xs)}@media(max-width:768px){.prompt-manager{padding:0 14px}.prompt-manager-tabs{flex-wrap:wrap}.prompt-manager-tab{flex:1;justify-content:center;min-width:calc(50% - var(--space-xs))}.prompt-role-assignment-row{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.prompt-role-select{width:100%}.prompt-template-editor-actions{flex-direction:column}.prompt-template-editor-actions .btn{width:100%}.prompt-override-fullscreen{padding:var(--space-md)}.prompt-override-fullscreen textarea{font-size:16px}}.new-task-modal .form-group small{display:block;margin-top:var(--space-sm);font-size:12px;color:var(--text-muted);line-height:1.4}.new-task-modal textarea{min-height:80px;transition:height .1s ease-out}.selected-deps{display:flex;flex-wrap:wrap;gap:6px;margin-top:var(--space-sm);padding:2px 0}.dep-chip{display:inline-flex;align-items:center;gap:var(--space-xs);padding:3px 8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);font-size:12px;color:var(--text);font-family:var(--font-mono);max-width:100%}.dep-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:12px;line-height:1;padding:0;margin-left:2px;border-radius:50%;transition:background .1s,color .1s}.dep-chip-remove:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.model-select-row{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-md)}.model-select-row:last-child{margin-bottom:0}.model-select-label{width:70px;flex-shrink:0;font-size:13px;color:var(--text-muted);text-align:right}@media(max-width:768px){.model-select-row{flex-direction:column;align-items:stretch;gap:var(--space-xs)}.model-select-label{width:auto;text-align:left}}@keyframes custom-provider-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.custom-providers-section .onboarding-disclosure-content{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.custom-provider-list{display:flex;flex-direction:column;gap:var(--space-sm)}.custom-provider-item{display:flex;align-items:center;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),box-shadow var(--transition-fast)}.custom-provider-item:hover{border-color:var(--text-dim)}.custom-provider-item-info{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.custom-provider-item-name{font-weight:600;color:var(--text)}.custom-provider-item-meta{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-provider-item-actions{display:flex;gap:var(--space-xs);flex-shrink:0}.custom-provider-badge{display:inline-flex;align-items:center;padding:var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.custom-provider-empty{color:var(--text-muted);padding:var(--space-sm) 0}.custom-provider-add-btn{margin-top:var(--space-sm)}.custom-provider-form{padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-top:var(--space-sm)}.custom-provider-form-row{margin-bottom:var(--space-sm)}.custom-provider-form-actions{display:flex;gap:var(--space-sm);margin-top:var(--space-md)}.custom-provider-form-error{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-error);margin-top:var(--space-xs);background:color-mix(in srgb,var(--color-error) 10%,transparent);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.custom-provider-item-edit-form{margin-top:var(--space-xs)}.spin{animation:custom-provider-spin calc(var(--transition-slow) * 4) linear infinite}@media(max-width:768px){.custom-provider-item{flex-direction:column;align-items:flex-start;gap:var(--space-xs)}.custom-provider-item-meta{max-width:100%}.custom-provider-form{padding:var(--space-sm)}.custom-provider-item-actions{align-self:flex-end;margin-top:var(--space-xs)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-K0fH_qHe.js";import{
|
|
1
|
+
import{r as l,j as e}from"./vendor-react-K0fH_qHe.js";import{c8 as B,aJ as E,c9 as L,ca as $,cb as _,X as W,N as G,C as b,L as O}from"./index-Bc8nfKeH.js";import{D as Y}from"./DirectoryPicker-rew1y6qO.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-nYPrL1W3.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 K({onProjectRegistered:c,onClose:r}){const j="https://github.com/runfusion/fusion/discussions",[h,C]=l.useState(!0),[s,n]=l.useState({step:"manual",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",isRegistering:!1,error:null}),[x,k]=l.useState(!1),[u,g]=l.useState(""),[m,y]=l.useState(()=>B()),{nodes:N,loading:z}=E(),M=N.find(a=>a.type==="local")?.id,w=l.useCallback(()=>{C(!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 L(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.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:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:o?"Destination Directory":"Project Directory"}),e.jsx(Y,{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:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":x,onClick:()=>k(a=>!a),children:[e.jsx(G,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:"Advanced settings"})]}),x&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[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.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(O,{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{K as SetupWizardModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-K0fH_qHe.js";import{aW as g}from"./index-Bc8nfKeH.js";function S({value:s,onChange:c,projectId:n,disabled:d=!1,id:t,label:r="Skills"}){const[o,m]=a.useState([]),[p,h]=a.useState(!0);a.useEffect(()=>{let l=!1;return h(!0),g(n).then(i=>{l||m(i)}).catch(()=>{l||m([])}).finally(()=>{l||h(!1)}),()=>{l=!0}},[n]);const f=l=>{s.includes(l)||c([...s,l])},x=l=>{c(s.filter(i=>i!==l))},k=l=>o.find(j=>j.id===l)?.name??l,u=o.filter(l=>!s.includes(l.id));return e.jsxs("div",{className:"skill-multiselect","data-testid":"skill-multiselect",children:[r&&e.jsx("label",{htmlFor:t?`${t}-select`:void 0,className:"skill-multiselect-label",children:r}),s.length>0&&e.jsx("div",{className:"skill-multiselect-chips","data-testid":"skill-chips",children:s.map(l=>e.jsxs("span",{className:"skill-chip","data-testid":`skill-chip-${l}`,children:[e.jsx("span",{className:"skill-chip-name",children:k(l)}),e.jsx("button",{type:"button",className:"skill-chip-remove",onClick:()=>x(l),disabled:d,"aria-label":`Remove ${k(l)}`,"data-testid":`remove-skill-${l}`,children:"×"})]},l))}),e.jsx("div",{className:"skill-multiselect-add",children:p?e.jsx("span",{className:"skill-multiselect-loading","data-testid":"skills-loading",children:"Loading skills…"}):u.length===0?e.jsx("span",{className:"skill-multiselect-empty","data-testid":"skills-empty",children:s.length===0?"No skills discovered":"All skills selected"}):e.jsxs("select",{id:t?`${t}-select`:void 0,className:"select skill-multiselect-dropdown",value:"",onChange:l=>{l.target.value&&(f(l.target.value),l.target.value="")},disabled:d,"data-testid":"skill-dropdown",children:[e.jsx("option",{value:"",children:"Add a skill…"}),u.map(l=>e.jsx("option",{value:l.id,children:l.name},l.id))]})})]})}export{S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e}from"./vendor-react-K0fH_qHe.js";import{
|
|
1
|
+
import{r as i,j as e}from"./vendor-react-K0fH_qHe.js";import{aW as X,bo as _,bp as B,bq as G,b3 as H,X as P,R as J,W as O,N as Y,L as Z,ak as I}from"./index-Bc8nfKeH.js";import"./vendor-xterm-DzcZoU0P.js";function ie({projectId:c,addToast:o,onClose:Q}){const[d,v]=i.useState([]),[f,y]=i.useState(!0),[W,E]=i.useState(!1),[L,p]=i.useState(null),[D,A]=i.useState([]),[h,K]=i.useState(""),[m,g]=i.useState(null),[k,x]=i.useState(null),[V,R]=i.useState(!1),[z,j]=i.useState(null),r=i.useRef(null),[N,q]=i.useState(""),F=h.trim()?d.filter(s=>s.name.toLowerCase().includes(h.toLowerCase())||s.relativePath.toLowerCase().includes(h.toLowerCase())):d,C=i.useCallback(async()=>{y(!0);try{const s=await X(c);v(s)}catch(s){const a=s instanceof Error?s.message:"Failed to load discovered skills";o(a,"error")}finally{y(!1)}},[c,o]),u=i.useCallback(async s=>{const a=l=>{if(!l||typeof l!="object")return!1;const t=l;if(typeof t.status=="number"&&t.status>=500)return!0;if(t.details&&typeof t.details=="object"){const w=t.details;if(typeof w.code=="string"&&w.code.startsWith("upstream_"))return!0}const n=l;return typeof n.error=="string"&&typeof n.code=="string"};E(!0),p(null);try{const l=await _(s,20,c);A(l.entries)}catch(l){if(a(l))p("Catalog is temporarily unavailable. Please try again later.");else{const t=l instanceof Error?l.message:"Failed to load catalog";p(t)}}finally{E(!1)}},[c]);i.useEffect(()=>{C(),u("")},[C,u]);const M=i.useCallback(s=>{K(s),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{q(s),r.current=null},300)},[]);i.useEffect(()=>()=>{r.current&&(clearTimeout(r.current),r.current=null)},[]),i.useEffect(()=>{u(N)},[N,u]);const T=i.useCallback(async(s,a)=>{const l=!a;v(t=>t.map(n=>n.id===s?{...n,toggling:!0}:n));try{await B(s,l,c),v(t=>t.map(n=>n.id===s?{...n,enabled:l,toggling:!1}:n)),o(`Skill ${l?"enabled":"disabled"}`,"success")}catch(t){v(w=>w.map(S=>S.id===s?{...S,toggling:!1}:S));const n=t instanceof Error?t.message:"Failed to toggle skill";o(`Failed to toggle skill: ${n}`,"error")}},[c,o]),b=i.useCallback(async s=>{R(!0),j(null),x(null);try{const a=await G(s,c);x(a)}catch(a){const l=a instanceof Error?a.message:"Failed to load skill content";j(l)}finally{R(!1)}},[c]),$=i.useCallback((s,a)=>{if(!(a&&a.target.closest(".skills-view-item-toggle"))){if(m===s){g(null),x(null),j(null);return}g(s),b(s)}},[m,b]),U=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(H,{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:Q,"aria-label":"Close skills view",children:e.jsx(P,{size:16})}),e.jsxs("button",{className:"btn btn-sm touch-target",onClick:()=>void C(),disabled:f,children:[e.jsx(J,{size:14,className:f?"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=>M(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"}),f?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."})}):F.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:F.map(s=>{const a=m===s.id;return e.jsxs("div",{children:[e.jsxs("div",{className:`skills-view-item${a?" skills-view-item--selected":""}`,onClick:l=>$(s.id,l),role:"button",tabIndex:0,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),$(s.id))},"aria-expanded":a,"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:[a?e.jsx(O,{size:14}):e.jsx(Y,{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:l=>l.stopPropagation(),children:[e.jsx("input",{type:"checkbox",checked:s.enabled,disabled:s.toggling,onChange:()=>void T(s.id,s.enabled),"aria-label":`${s.enabled?"Disable":"Enable"} ${s.name}`}),e.jsx("span",{className:"skills-view-toggle-slider"})]})]}),a&&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(P,{size:14}),"Close"]})]}),V?e.jsxs("div",{className:"skills-view-detail-loading",children:[e.jsx(Z,{size:16,className:"spin"}),"Loading skill content..."]}):z?e.jsxs("div",{className:"skills-view-detail-error",children:[e.jsx(I,{size:14}),e.jsx("span",{children:z}),e.jsx("button",{className:"btn btn-sm",onClick:()=>U(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(l=>e.jsxs("span",{className:"badge badge--sm",children:[l.name,l.type==="directory"&&"/"]},l.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"}),L?e.jsxs("div",{className:"skills-view-error",children:[e.jsx("p",{children:L}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void u(N),children:"Try Again"})]}):W?e.jsxs("div",{className:"skills-view-loading",children:[e.jsx("span",{className:"spinner"}),"Loading catalog..."]}):D.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:D.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(a=>e.jsx("span",{className:"badge badge--sm",children:a},a))}),s.installs!==void 0&&e.jsxs("span",{className:"skills-view-card-installs",children:[s.installs.toLocaleString()," installs"]})]},s.id))})]})]})]})}export{ie as SkillsView};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as d,j as e}from"./vendor-react-K0fH_qHe.js";import{c as It,b$ as Nt,c0 as wt,c1 as Ct,c2 as St,c3 as At,c4 as $t,c5 as Et,c6 as Dt,w as Ft,i as Tt,z as q,c7 as ct,L as Mt,J as Ot,bl as G,X as Q,aH as lt,V as ut,ad as Rt,W as Pt,am as Ut,B as mt}from"./index-Bc8nfKeH.js";import{L as bt}from"./list-checks-sK8xJeH_.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 _t=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]],Kt=It("circle-plus",_t);function Bt(L){const{items:l,...f}=L;return f}function pt(L){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`${L}-${crypto.randomUUID()}`:`${L}-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Vt(L={}){const{projectId:l,addToast:f}=L,[I,N]=d.useState([]),[k,y]=d.useState([]),[S,_]=d.useState(!0),[H,g]=d.useState(null),[$,E]=d.useState(null),[v,h]=d.useState([]),C=d.useRef($);C.current=$,d.useEffect(()=>{let s=!1;async function c(){_(!0),g(null);try{const r=await Dt(l);if(s)return;h(r),N(r.map(Bt));const u=C.current&&r.some(a=>a.id===C.current)?C.current:r[0]?.id??null;E(u),y(u?r.find(a=>a.id===u)?.items??[]:[])}catch(r){if(s)return;h([]),N([]),y([]),E(null),g(r instanceof Error?r.message:"Failed to load todo lists")}finally{s||_(!1)}}return c(),()=>{s=!0}},[l]),d.useEffect(()=>{if(!$){y([]);return}const s=v.find(c=>c.id===$);y(s?.items??[])},[v,$]);const J=d.useCallback(async s=>{const c=I,r=v,u=new Date().toISOString(),a={id:pt("temp-list"),projectId:l??"",title:s,createdAt:u,updatedAt:u};g(null),N(n=>[...n,a]),h(n=>[...n,{...a,items:[]}]);try{const n=await Nt(s,l);N(i=>i.map(o=>o.id===a.id?n:o)),h(i=>i.map(o=>o.id===a.id?{...n,items:[]}:o)),C.current||E(n.id)}catch(n){N(c),h(r),g(n instanceof Error?n.message:"Failed to create list"),f?.("Failed to create todo list","error")}},[f,v,I,l]),T=d.useCallback(async(s,c)=>{const r=I,u=v;g(null),N(a=>a.map(n=>n.id===s?{...n,title:c}:n)),h(a=>a.map(n=>n.id===s?{...n,title:c}:n));try{const a=await wt(s,c,l);N(n=>n.map(i=>i.id===s?a:i)),h(n=>n.map(i=>i.id===s?{...a,items:i.items}:i))}catch(a){N(r),h(u),g(a instanceof Error?a.message:"Failed to rename list"),f?.("Failed to rename todo list","error")}},[f,v,I,l]),A=d.useCallback(async s=>{const c=I,r=v,u=C.current,a=u===s?I.find(n=>n.id!==s)?.id??null:u;g(null),N(n=>n.filter(i=>i.id!==s)),h(n=>n.filter(i=>i.id!==s)),u===s&&E(a);try{await Ct(s,l)}catch(n){N(c),h(r),E(u),g(n instanceof Error?n.message:"Failed to delete list"),f?.("Failed to delete todo list","error")}},[f,v,I,l]),K=d.useCallback(async s=>{const c=C.current;if(!c)return;const r=k,u=v,a=new Date().toISOString(),n=k.reduce((o,b)=>Math.max(o,b.sortOrder),-1),i={id:pt("temp-item"),listId:c,text:s,completed:!1,completedAt:null,createdAt:a,updatedAt:a,sortOrder:n+1};g(null),y(o=>[...o,i]),h(o=>o.map(b=>b.id===c?{...b,items:[...b.items,i]}:b));try{const o=await St(c,s,l);y(b=>b.map(x=>x.id===i.id?o:x)),h(b=>b.map(x=>x.id===c?{...x,items:x.items.map(F=>F.id===i.id?o:F)}:x))}catch(o){y(r),h(u),g(o instanceof Error?o.message:"Failed to create item"),f?.("Failed to create todo item","error")}},[f,k,v,l]),w=d.useCallback(async(s,c)=>{const r=k.find(o=>o.id===s);if(!r)return;const u=k,a=v,n=c.completed??r.completed,i={...r,...c,completed:n,completedAt:n?r.completedAt??new Date().toISOString():null,updatedAt:new Date().toISOString()};g(null),y(o=>o.map(b=>b.id===s?i:b)),h(o=>o.map(b=>b.id===i.listId?{...b,items:b.items.map(x=>x.id===s?i:x)}:b));try{const o=await At(s,c,l);y(b=>b.map(x=>x.id===s?o:x)),h(b=>b.map(x=>x.id===o.listId?{...x,items:x.items.map(F=>F.id===s?o:F)}:x))}catch(o){y(u),h(a),g(o instanceof Error?o.message:"Failed to update item"),f?.("Failed to update todo item","error")}},[f,k,v,l]),M=d.useCallback(async s=>{const c=k.find(r=>r.id===s);c&&await w(s,{completed:!c.completed})},[k,w]),D=d.useCallback(async s=>{const c=k,r=v;g(null),y(u=>u.filter(a=>a.id!==s)),h(u=>u.map(a=>({...a,items:a.items.filter(n=>n.id!==s)})));try{await $t(s,l)}catch(u){y(c),h(r),g(u instanceof Error?u.message:"Failed to delete item"),f?.("Failed to delete todo item","error")}},[f,k,v,l]),B=d.useCallback(async s=>{const c=C.current;if(!c)return;const r=k,u=v,a=new Map(k.map(i=>[i.id,i])),n=s.map((i,o)=>{const b=a.get(i);return b?{...b,sortOrder:o}:null}).filter(i=>i!==null);g(null),y(n),h(i=>i.map(o=>o.id===c?{...o,items:n}:o));try{await Et(c,s,l)}catch(i){y(r),h(u),g(i instanceof Error?i.message:"Failed to reorder items"),f?.("Failed to reorder todo items","error")}},[f,k,v,l]);return{lists:I,items:k,loading:S,error:H,selectedListId:$,setSelectedListId:E,createList:J,renameList:T,deleteList:A,createItem:K,updateItem:w,toggleItem:M,deleteItem:D,reorderItems:B}}function zt(L){return[...L].sort((l,f)=>l.sortOrder-f.sortOrder)}function qt({projectId:L,addToast:l,onPlanningMode:f}){const{lists:I,items:N,loading:k,error:y,selectedListId:S,setSelectedListId:_,createList:H,renameList:g,deleteList:$,createItem:E,updateItem:v,toggleItem:h,deleteItem:C,reorderItems:J}=Vt({projectId:L,addToast:(t,p)=>{if(p==="success"||p==="error"||p==="info"||p===void 0){l(t,p);return}l(t,"info")}}),[T,A]=d.useState(null),[K,w]=d.useState(""),[M,D]=d.useState(null),[B,s]=d.useState(""),[c,r]=d.useState(""),[u,a]=d.useState(!1),[n,i]=d.useState(""),[o,b]=d.useState([]),[x,F]=d.useState(!1),[W,O]=d.useState(!1),[Y,R]=d.useState(null),X=d.useRef(null),{confirm:ht}=Ft(),Z=d.useMemo(()=>I.find(t=>t.id===S)??null,[I,S]),V=d.useMemo(()=>zt(N.filter(t=>t.listId===S)),[N,S]);function tt(){A(null),w(""),r(""),a(!1)}function z(){D(null),s(""),i("")}function ft(t){tt(),z(),_(t)}const xt=d.useCallback(async()=>{F(!0);try{const t=await Tt(void 0,L);b(t),O(!0)}catch(t){l(`Failed to load agents: ${q(t)}`,"error"),O(!1),R(null)}finally{F(!1)}},[L,l]);d.useEffect(()=>{A(null),w(""),r(""),a(!1),D(null),s(""),i(""),O(!1),R(null)},[S]),d.useEffect(()=>{if(!W)return;const t=p=>{X.current&&!X.current.contains(p.target)&&(O(!1),R(null))};return document.addEventListener("mousedown",t),()=>{document.removeEventListener("mousedown",t)}},[W]);function gt(t){z(),A(t.id),w(t.title),a(!1)}async function et(){if(!T)return;const t=K.trim();if(!t){A(null),w("");return}await g(T,t),A(null),w("")}function st(){A(null),w("")}function nt(t){tt(),D(t.id),s(t.text)}async function at(){if(!M)return;const t=B.trim();if(!t){D(null),s("");return}await v(M,{text:t}),D(null),s("")}function it(){D(null),s("")}async function ot(){const t=c.trim();t&&(await H(t),r(""),a(!1))}async function dt(){if(!S)return;const t=n.trim();t&&(await E(t),i(""))}async function vt(t){await ht({title:"Delete List",message:"Delete this list and all its items?",danger:!0})&&await $(t)}async function jt(t){await C(t)}async function rt(t,p){const j=V.map(U=>U.id),m=j.findIndex(U=>U===t);if(m<0)return;const P=p==="up"?m-1:m+1;P<0||P>=j.length||([j[m],j[P]]=[j[P],j[m]],await J(j))}const yt=d.useCallback(async t=>{try{const p={description:t.text,column:"triage",source:{sourceType:"dashboard_ui"}},j=await ct(p,L);l(`Created ${j.id} from todo`,"success")}catch(p){l(`Failed to create task: ${q(p)}`,"error")}},[L,l]),Lt=d.useCallback(async(t,p)=>{try{const j={description:t.text,column:"triage",assignedAgentId:p,source:{sourceType:"dashboard_ui"}},m=await ct(j,L),U=o.find(kt=>kt.id===p)?.name??p;l(`Created ${m.id} and assigned to ${U}`,"success"),O(!1),R(null)}catch(j){l(`Failed to create and assign task: ${q(j)}`,"error")}},[L,l,o]);return k?e.jsx("div",{className:"todo-view",children:e.jsxs("div",{className:"todo-loading",children:[e.jsx(Mt,{className:"todo-loading-icon","aria-hidden":"true"}),e.jsx("p",{children:"Loading todos..."})]})}):e.jsxs("div",{className:"todo-view",children:[e.jsx("div",{className:"todo-view-header",children:e.jsxs("div",{children:[e.jsx("h2",{children:"Todos"}),e.jsx("p",{className:"todo-view-description",children:"Manage reusable todo lists for your project."})]})}),e.jsxs("div",{className:"todo-view-layout",children:[e.jsxs("aside",{className:"todo-view-sidebar","aria-label":"Todo lists sidebar",children:[e.jsxs("div",{className:"todo-sidebar-header",children:[e.jsx("h3",{className:"todo-sidebar-title",children:"Lists"}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-add-list-btn",onClick:()=>{z(),a(!0),A(null)},"aria-label":"Add list","data-testid":"add-list-button",children:e.jsx(Ot,{})})]}),u&&e.jsxs("div",{className:"todo-list-item",children:[e.jsx("input",{className:"input todo-inline-edit-input",placeholder:"New list title",value:c,onChange:t=>r(t.target.value),onKeyDown:t=>{t.key==="Enter"&&ot(),t.key==="Escape"&&(r(""),a(!1))},autoFocus:!0,"data-testid":"new-list-input"}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{ot()},"aria-label":"Save list",children:e.jsx(G,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{r(""),a(!1)},"aria-label":"Cancel list",children:e.jsx(Q,{})})]}),I.length===0&&!u?e.jsxs("div",{className:"todo-empty-state",children:[e.jsx(bt,{"aria-hidden":"true"}),e.jsx("p",{children:"No todo lists yet. Create one to get started."}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{z(),a(!0)},children:"Create List"})]}):e.jsx("div",{className:"todo-list-items",role:"list","aria-label":"Todo lists",children:I.map(t=>{const p=t.id===S,j=t.id===T;return e.jsx("div",{className:`todo-list-item${p?" todo-list-item--active":""}`,role:"listitem",children:j?e.jsxs(e.Fragment,{children:[e.jsx("input",{className:"input todo-inline-edit-input",value:K,onChange:m=>w(m.target.value),onKeyDown:m=>{m.key==="Enter"&&et(),m.key==="Escape"&&st()},autoFocus:!0,"data-testid":`rename-list-input-${t.id}`}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{et()},"aria-label":"Save list rename",children:e.jsx(G,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:st,"aria-label":"Cancel list rename",children:e.jsx(Q,{})})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"todo-list-select-btn",onClick:()=>ft(t.id),"aria-label":`Select list ${t.title}`,"aria-current":p?"true":void 0,"data-testid":`todo-list-${t.id}`,children:e.jsx("span",{className:"todo-list-item-name",children:t.title})}),e.jsxs("div",{className:"todo-list-item-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{gt(t)},"aria-label":`Rename ${t.title}`,"data-testid":`rename-list-button-${t.id}`,children:e.jsx(lt,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon btn-danger todo-icon-btn",onClick:()=>{vt(t.id)},"aria-label":`Delete ${t.title}`,"data-testid":`delete-list-button-${t.id}`,children:e.jsx(ut,{})})]})]})},t.id)})})]}),e.jsxs("section",{className:"todo-view-main","aria-label":"Todo items",children:[y&&e.jsxs("div",{className:"todo-error-banner",role:"alert",children:[e.jsx("span",{className:"todo-error-message",children:y}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>window.location.reload(),children:"Retry"})]}),Z?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"todo-items-header",children:e.jsx("h3",{children:Z.title})}),e.jsxs("div",{className:"todo-add-item-row",children:[e.jsx("input",{className:"input",placeholder:"Add a todo item",value:n,onChange:t=>i(t.target.value),onKeyDown:t=>{t.key==="Enter"&&dt(),t.key==="Escape"&&i("")},"data-testid":"new-item-input"}),e.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>{dt()},children:"Add"})]}),V.length===0?e.jsx("div",{className:"todo-empty-state",children:e.jsx("p",{children:"No items in this list. Add one above."})}):e.jsx("div",{className:"todo-items-list",children:V.map((t,p)=>{const j=t.id===M;return e.jsxs("div",{className:"todo-item","data-testid":`todo-item-${t.id}`,children:[e.jsxs("div",{className:"todo-item-main-row",children:[e.jsx("input",{type:"checkbox",checked:t.completed,onChange:()=>{h(t.id)},className:"todo-item-checkbox","aria-label":`Toggle ${t.text}`,"data-testid":`toggle-item-${t.id}`}),j?e.jsx("input",{className:"input todo-inline-edit-input",value:B,onChange:m=>s(m.target.value),onKeyDown:m=>{m.key==="Enter"&&at(),m.key==="Escape"&&it()},autoFocus:!0,"data-testid":`edit-item-input-${t.id}`}):e.jsx("button",{type:"button",className:`todo-item-text${t.completed?" todo-item-text--completed":""}`,onClick:()=>nt(t),children:t.text})]}),e.jsx("div",{className:"todo-item-actions","data-testid":`todo-item-actions-${t.id}`,children:j?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{at()},"aria-label":"Save item edit",children:e.jsx(G,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:it,"aria-label":"Cancel item edit",children:e.jsx(Q,{})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"todo-item-reorder-btns",children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-item-reorder-btn",onClick:()=>{rt(t.id,"up")},disabled:p===0,"aria-label":`Move ${t.text} up`,"data-testid":`move-up-${t.id}`,children:e.jsx(Rt,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-item-reorder-btn",onClick:()=>{rt(t.id,"down")},disabled:p===V.length-1,"aria-label":`Move ${t.text} down`,"data-testid":`move-down-${t.id}`,children:e.jsx(Pt,{})})]}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{f?.(t.text)},"aria-label":`Start planning from ${t.text}`,"data-testid":`planning-from-${t.id}`,children:e.jsx(Ut,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{yt(t)},"aria-label":`Create task from ${t.text}`,"data-testid":`create-task-from-${t.id}`,children:e.jsx(Kt,{})}),e.jsxs("div",{className:"todo-agent-picker-trigger",ref:Y===t.id?X:void 0,children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>{R(t.id),xt()},"aria-label":`Assign ${t.text} to agent`,"data-testid":`assign-agent-for-${t.id}`,children:e.jsx(mt,{})}),W&&Y===t.id&&e.jsx("div",{className:"todo-agent-picker-dropdown",onMouseDown:m=>{m.preventDefault()},children:x?e.jsx("div",{className:"todo-agent-picker-loading",children:"Loading agents..."}):o.filter(m=>m.state!=="terminated").length>0?o.filter(m=>m.state!=="terminated").map(m=>e.jsxs("button",{type:"button",className:"todo-agent-picker-item",onClick:()=>{Lt(t,m.id)},children:[e.jsx(mt,{}),e.jsx("span",{children:m.name}),e.jsx("span",{className:"todo-agent-picker-role",children:m.role})]},m.id)):e.jsx("div",{className:"todo-agent-picker-empty",children:"No agents available"})})]}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon todo-icon-btn",onClick:()=>nt(t),"aria-label":`Edit ${t.text}`,"data-testid":`edit-item-${t.id}`,children:e.jsx(lt,{})}),e.jsx("button",{type:"button",className:"btn btn-sm btn-icon btn-danger todo-icon-btn",onClick:()=>{jt(t.id)},"aria-label":`Delete ${t.text}`,"data-testid":`delete-item-${t.id}`,children:e.jsx(ut,{})})]})})]},t.id)})})]}):e.jsxs("div",{className:"todo-empty-state",children:[e.jsx(bt,{"aria-hidden":"true"}),e.jsx("p",{children:"Select a list from the sidebar"})]})]})]})]})}export{qt as TodoView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.todo-view{display:flex;flex-direction:column;height:100%;overflow:hidden}.todo-view-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:var(--space-lg) var(--space-xl);border-bottom:1px solid var(--border);background:var(--surface);gap:var(--space-md);flex-shrink:0}.todo-view-header h2{font-size:1rem;font-weight:600;color:var(--text);margin:0;display:flex;align-items:center;gap:var(--space-sm)}.todo-view-description{color:var(--text-muted);font-size:.8125rem;margin:2px 0 0}.todo-view-layout{display:flex;flex-direction:row;flex:1;overflow:hidden;gap:var(--space-lg);padding:var(--space-lg)}.todo-view-sidebar{width:calc(var(--space-2xl) * 7 + var(--space-sm));border-right:calc(var(--space-xs) / 4) solid var(--border);padding-right:var(--space-lg);overflow-y:auto;flex-shrink:0;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text-muted) 45%,transparent) transparent}.todo-view-main{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-width:0;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text-muted) 45%,transparent) transparent}.todo-view-sidebar::-webkit-scrollbar,.todo-view-main::-webkit-scrollbar{width:var(--space-sm);height:var(--space-sm)}.todo-view-sidebar::-webkit-scrollbar-thumb,.todo-view-main::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-muted) 45%,transparent);border-radius:var(--radius-pill)}.todo-view-sidebar::-webkit-scrollbar-track,.todo-view-main::-webkit-scrollbar-track{background:transparent}.todo-sidebar-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.todo-sidebar-title{font-size:calc(var(--space-md) + (var(--space-xs) / 4));color:var(--text-muted);text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8);margin:0}.todo-add-list-btn{min-height:calc(var(--space-2xl) + var(--space-xs));min-width:calc(var(--space-2xl) + var(--space-xs))}.todo-list-items{display:flex;flex-direction:column;gap:var(--space-xs)}.todo-list-item{display:flex;flex-direction:row;align-items:center;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);gap:var(--space-sm);color:var(--text-muted);transition:background var(--transition-fast),color var(--transition-fast)}.todo-list-item:hover{background:var(--card-hover);color:var(--text)}.todo-list-select-btn{flex:1;min-width:0;border:0;background:none;color:inherit;text-align:left;cursor:pointer;padding:0}.todo-list-select-btn:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:var(--focus-ring)}.todo-list-item--active{background:var(--surface);color:var(--text);font-weight:500}.todo-list-item-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:calc(var(--space-md) + (var(--space-xs) / 4))}.todo-list-item-actions{display:flex;flex-direction:row;gap:var(--space-xs);opacity:0;transition:opacity var(--transition-fast)}.todo-list-item:hover .todo-list-item-actions,.todo-list-item:focus-within .todo-list-item-actions,.todo-list-item--active .todo-list-item-actions{opacity:1}.todo-icon-btn{min-height:calc(var(--space-lg) + var(--space-sm));min-width:calc(var(--space-lg) + var(--space-sm))}.todo-inline-edit-input{flex:1;font-size:calc(var(--space-md) + (var(--space-xs) / 4))}.todo-items-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-bottom:var(--space-md);gap:var(--space-sm)}.todo-items-header h3{margin:0;font-size:calc(var(--space-md) + (var(--space-xs) / 2));font-weight:500;color:var(--text)}.todo-add-item-row{display:flex;flex-direction:row;gap:var(--space-sm);margin-bottom:var(--space-lg)}.todo-add-item-row .input{flex:1}.todo-items-list{display:flex;flex-direction:column}.todo-item{position:relative;display:flex;flex-direction:column;align-items:stretch;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);gap:var(--space-sm);border-bottom:calc(var(--space-xs) / 4) solid var(--border);transition:background var(--transition-fast)}.todo-item:hover{background:var(--card-hover)}.todo-item-main-row{display:flex;align-items:flex-start;gap:var(--space-sm);min-width:0}.todo-item-checkbox{margin:0;width:var(--space-lg);height:var(--space-lg);accent-color:var(--todo);cursor:pointer;flex-shrink:0}.todo-item-text{flex:1;font-size:calc(var(--space-md) + (var(--space-xs) / 4));color:var(--text);cursor:pointer;word-break:break-word;background:none;border:0;padding:0;text-align:left}.todo-item-text:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:var(--focus-ring-strong)}.todo-item-text--completed{text-decoration:line-through;color:var(--text-muted)}.todo-item-actions{display:flex;flex-wrap:wrap;flex-direction:row;align-items:center;gap:var(--space-xs);opacity:1;transition:opacity var(--transition-fast);margin-left:calc(var(--space-lg) + var(--space-sm))}.todo-item-reorder-btns{display:flex;flex-direction:row;gap:0}.todo-item-reorder-btn{min-height:var(--space-xl);min-width:var(--space-xl)}.todo-agent-picker-trigger{position:relative}.todo-agent-picker-dropdown{position:absolute;right:0;top:100%;z-index:50;display:flex;flex-direction:column;gap:var(--space-xs);margin-top:var(--space-xs);min-width:calc(var(--space-2xl) * 6 + var(--space-md));max-height:calc(var(--space-2xl) * 7 + var(--space-md));overflow-y:auto;padding:var(--space-xs);border:calc(var(--space-xs) / 4) solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-lg)}.todo-agent-picker-item{width:100%;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text);padding:var(--space-sm);display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-sm);text-align:left;cursor:pointer;transition:background var(--transition-fast)}.todo-agent-picker-item:hover{background:var(--card-hover)}.todo-agent-picker-item:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.todo-agent-picker-role{color:var(--text-muted);font-size:calc(var(--space-md) - (var(--space-xs) / 4));text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8)}.todo-agent-picker-loading,.todo-agent-picker-empty{color:var(--text-muted);padding:var(--space-sm);font-size:calc(var(--space-md) + (var(--space-xs) / 8))}.todo-error-banner{border:calc(var(--space-xs) / 4) solid color-mix(in srgb,var(--color-error) 35%,transparent);background:color-mix(in srgb,var(--color-error) 10%,transparent);color:var(--color-error);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md);display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.todo-error-message{font-size:calc(var(--space-md) + (var(--space-xs) / 4))}.todo-empty-state,.todo-loading{color:var(--text-muted);padding:var(--space-2xl);text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);flex:1}.todo-loading-icon{animation:spin calc(var(--transition-slow) * 4) linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(max-width:768px){.todo-view{padding:var(--space-md)}.todo-view-layout{flex-direction:column}.todo-view-sidebar{width:100%;border-right:none;border-bottom:calc(var(--space-xs) / 4) solid var(--border);padding-right:0;padding-bottom:var(--space-md);max-height:calc(var(--space-2xl) * 6 + var(--space-sm))}.todo-view-main{width:100%}.todo-list-item,.todo-list-select-btn,.todo-add-list-btn,.todo-icon-btn,.todo-item,.todo-item-reorder-btn,.todo-add-item-row .btn{min-height:calc(var(--space-2xl) + var(--space-xs))}.todo-add-item-row{flex-wrap:wrap}.todo-add-item-row .btn{width:100%}.todo-list-item-actions,.todo-item-actions{opacity:1}.todo-item-main-row{align-items:center}.todo-item-actions{margin-left:0}.todo-item-checkbox{width:calc(var(--space-2xl) + var(--space-xs));height:calc(var(--space-2xl) + var(--space-xs))}.todo-agent-picker-trigger{position:static}.todo-agent-picker-dropdown{left:0;right:0;min-width:100%;max-height:calc(var(--space-2xl) * 8)}.todo-agent-picker-item{min-height:calc(var(--space-2xl) + var(--space-xs))}}
|