@runfusion/fusion 0.22.0 → 0.23.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.
Files changed (53) hide show
  1. package/dist/bin.js +4546 -1223
  2. package/dist/client/assets/AgentDetailView-C1XceMgi.js +18 -0
  3. package/dist/client/assets/AgentsView-DSGQWObq.css +1 -0
  4. package/dist/client/assets/AgentsView-Deh125ss.js +527 -0
  5. package/dist/client/assets/ChatView-7D_RQDqT.js +1 -0
  6. package/dist/client/assets/{DevServerView-l8RCyL2k.js → DevServerView-C9lzHrcT.js} +1 -1
  7. package/dist/client/assets/{DirectoryPicker-CS1dwqcC.js → DirectoryPicker-aVdFaV37.js} +1 -1
  8. package/dist/client/assets/{DocumentsView-DmthQWDZ.js → DocumentsView-DIpg3NSP.js} +1 -1
  9. package/dist/client/assets/{InsightsView-DvXpMKmH.js → InsightsView-jKjEFAx_.js} +1 -1
  10. package/dist/client/assets/{MemoryView-CPwlKnUI.js → MemoryView-nXlTqebk.js} +1 -1
  11. package/dist/client/assets/{NodesView-BLlfUfsy.js → NodesView-Di2SvOhg.js} +1 -1
  12. package/dist/client/assets/{PiExtensionsManager-j8rPXqmB.js → PiExtensionsManager-Buopv-jb.js} +1 -1
  13. package/dist/client/assets/PluginManager-B9-NbQ8f.js +1 -0
  14. package/dist/client/assets/PluginManager-C1DbPaar.css +1 -0
  15. package/dist/client/assets/{ResearchView-D9DNJYDq.js → ResearchView-_BHXUv2j.js} +1 -1
  16. package/dist/client/assets/{RoadmapsView-Djc_X35v.js → RoadmapsView-DHWjUoc8.js} +1 -1
  17. package/dist/client/assets/{SettingsModal-fxvTFLtR.js → SettingsModal-C89Ikhfm.js} +1 -1
  18. package/dist/client/assets/SettingsModal-DHitIpsa.css +1 -0
  19. package/dist/client/assets/SettingsModal-DR_yirvK.js +31 -0
  20. package/dist/client/assets/{SetupWizardModal-tG_MF_nA.js → SetupWizardModal-BtDMY9pa.js} +1 -1
  21. package/dist/client/assets/{SkillsView-Ddf0YL8z.js → SkillsView-hDpTBdFT.js} +1 -1
  22. package/dist/client/assets/{agentSkills-EwIwBlG8.js → agentSkills-B-w5wFHh.js} +1 -1
  23. package/dist/client/assets/{folder-open-BiJpmnaT.js → folder-open-usZkXdq2.js} +1 -1
  24. package/dist/client/assets/index-Bc6ZdGMz.css +1 -0
  25. package/dist/client/assets/index-D__RMku8.js +694 -0
  26. package/dist/client/assets/{star-BwRZmiuZ.js → star-BAT_ObKE.js} +1 -1
  27. package/dist/client/assets/{upload-D4NwZhPp.js → upload-BC2YKNEV.js} +1 -1
  28. package/dist/client/assets/{users-DNISDtI1.js → users-Dkd4rtrN.js} +1 -1
  29. package/dist/client/index.html +2 -2
  30. package/dist/client/version.json +1 -1
  31. package/dist/droid-cli/package.json +1 -1
  32. package/dist/extension.js +3266 -540
  33. package/dist/pi-claude-cli/package.json +1 -1
  34. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  35. package/dist/plugins/fusion-plugin-dependency-graph/src/DependencyGraphView.css +12 -3
  36. package/dist/plugins/fusion-plugin-dependency-graph/src/__tests__/storage.test.ts +12 -2
  37. package/dist/plugins/fusion-plugin-dependency-graph/src/storage.ts +6 -7
  38. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +176 -7
  39. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  40. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  41. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  42. package/package.json +1 -1
  43. package/skill/fusion/references/engine-tools.md +5 -2
  44. package/dist/client/assets/AgentDetailView-BKKpbp1S.js +0 -18
  45. package/dist/client/assets/AgentsView-BRXFmrcJ.js +0 -527
  46. package/dist/client/assets/AgentsView-Bs03ptrd.css +0 -1
  47. package/dist/client/assets/ChatView-D7L2e_qu.js +0 -1
  48. package/dist/client/assets/PluginManager-DA_T0GHn.css +0 -1
  49. package/dist/client/assets/PluginManager-pW6RMz5z.js +0 -1
  50. package/dist/client/assets/SettingsModal-BWe0KrGY.css +0 -1
  51. package/dist/client/assets/SettingsModal-WGCF_pk8.js +0 -31
  52. package/dist/client/assets/index-D6ebxTPF.css +0 -1
  53. package/dist/client/assets/index-DYDLmOcK.js +0 -694
@@ -1 +0,0 @@
1
- .agent-token-stats-panel{margin-bottom:var(--space-lg);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);box-shadow:var(--shadow-sm)}.agent-token-stats-panel__header{margin-bottom:var(--space-md)}.agent-token-stats-panel__title{margin:0;font-size:calc(var(--space-md) + var(--space-xs));font-weight:600;color:var(--text)}.agent-token-stats-panel__totals{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(var(--space-2xl) * 4),1fr));gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-token-stats-panel__total-card{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.agent-token-stats-panel__total-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8)}.agent-token-stats-panel__total-value{color:var(--text);font-size:calc(var(--space-lg) + var(--space-xs));line-height:1.2;font-family:var(--font-mono);font-weight:700}.agent-token-stats-panel__table-wrapper{overflow-x:auto}.agent-token-stats-panel__table{width:100%;border-collapse:collapse}.agent-token-stats-panel__table th,.agent-token-stats-panel__table td{padding:var(--space-sm);border-bottom:1px solid var(--border);color:var(--text);text-align:right;font-size:calc(var(--space-sm) + var(--space-xs))}.agent-token-stats-panel__table thead th{text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8);color:var(--text-muted);font-weight:600}.agent-token-stats-panel__table th:first-child,.agent-token-stats-panel__table td:first-child{text-align:left}.agent-token-stats-panel__agent-cell{display:flex;flex-direction:column;gap:calc(var(--space-xs) * .5)}.agent-token-stats-panel__agent-name{color:var(--text)}.agent-token-stats-panel__agent-id{color:var(--text-muted);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs) * .75);text-transform:none;letter-spacing:normal}.agent-token-stats-panel__total-cell{font-family:var(--font-mono);font-weight:700}.agent-token-stats-panel__empty{padding:var(--space-md);border:1px dashed var(--border);border-radius:var(--radius-sm);color:var(--text-muted);background:color-mix(in srgb,var(--surface) 85%,transparent);font-size:calc(var(--space-sm) + var(--space-xs))}@media(max-width:768px){.agent-token-stats-panel{padding:var(--space-sm)}.agent-token-stats-panel__totals{grid-template-columns:1fr}.agent-token-stats-panel__table th,.agent-token-stats-panel__table td{padding:var(--space-xs) var(--space-sm)}}.active-agents-panel{margin-top:var(--space-xl);margin-bottom:var(--space-lg)}.active-agents-panel-header{display:flex;align-items:center;gap:var(--space-sm);font-size:13px;font-weight:600;color:var(--text-muted);margin-bottom:var(--space-md)}.active-agents-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-md)}.live-agent-card{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:background .15s,border-color .15s}.live-agent-card:hover{background:var(--bg-hover);border-color:var(--border-strong, var(--border))}.live-agent-card:focus-visible{outline:2px solid var(--accent, var(--color-primary));outline-offset:2px}.live-agent-card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.live-agent-card-name{display:flex;align-items:center;gap:var(--space-sm);font-weight:600;font-size:13px}.live-agent-task{font-family:var(--font-mono)}.live-agent-card-transcript{font-family:var(--font-mono);font-size:11px;line-height:1.5;color:var(--text-muted);max-height:120px;overflow-y:auto}.live-agent-card-empty{display:flex;flex-direction:column;gap:var(--space-xs)}.live-agent-card-status{font-style:normal;font-weight:500;color:var(--text-primary);opacity:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-status-sub{font-style:italic;opacity:.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-footer{display:flex;align-items:center;justify-content:space-between;font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding-top:var(--space-sm);border-top:1px solid var(--border)}.live-agent-streaming-dot{color:var(--color-success);animation:pulse 1.5s infinite}.live-agent-card-footer-actions{display:flex;align-items:center;gap:var(--space-sm)}.live-agent-card-footer-meta{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;min-width:0}.live-agent-card-next-heartbeat{color:var(--text-muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-logs-btn{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);font-size:11px;color:var(--text-secondary);background:transparent;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.live-agent-card-logs-btn:hover{background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-strong, var(--border))}@media(max-width:768px){.active-agents-grid{grid-template-columns:1fr}.live-agent-card{min-width:0;overflow:hidden}}.agents-overview-bar{border-bottom:1px solid var(--border);background:var(--surface);padding:var(--space-md) var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.agents-overview-bar__toggle{width:100%;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text);padding:var(--space-sm) var(--space-md);display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.agents-overview-bar__toggle:hover{background:var(--card-hover)}.agents-overview-bar__toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.agents-overview-bar__title-wrap{display:inline-flex;align-items:center;gap:var(--space-xs)}.agents-overview-bar__title{font-weight:600}.agents-overview-bar__meta{font-size:calc(var(--space-sm) + var(--space-xs))}.agents-overview-bar__content{display:flex;flex-direction:column;gap:var(--space-md)}.agents-overview-bar__metrics{margin-bottom:0}.agents-overview-bar__active-panel{margin-top:0;margin-bottom:0}@media(max-width:768px){.agents-overview-bar{padding:var(--space-sm) var(--space-md)}.agents-overview-bar__toggle{min-height:calc(var(--space-2xl) + var(--space-sm))}}.agent-dialog-overlay{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(var(--space-xs));display:flex;align-items:center;justify-content:center;z-index:100;padding:calc(var(--space-lg) + var(--space-xs))}.agent-dialog{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:calc(var(--space-xl) * 21 + var(--space-md));max-height:calc(100vh - (var(--space-xl) + var(--space-lg)));max-height:calc(100dvh - (var(--space-xl) + var(--space-lg)));display:flex;flex-direction:column;overflow:hidden;box-shadow:var(--shadow-lg)}.agent-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg) calc(var(--space-lg) + var(--space-xs));border-bottom:1px solid var(--border)}.agent-dialog-header-title{font-weight:600;font-size:calc(var(--space-md) + var(--space-xs) * .75)}.agent-dialog-body{flex:1;overflow-y:auto;padding:calc(var(--space-lg) + var(--space-xs))}.agent-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);padding:var(--space-lg) calc(var(--space-lg) + var(--space-xs));border-top:1px solid var(--border)}.agent-dialog-steps{display:flex;gap:calc(var(--space-sm) - var(--space-xs) * .5);padding:var(--space-md) calc(var(--space-lg) + var(--space-xs));justify-content:center}.agent-dialog-step{width:calc(var(--space-2xl) + var(--space-sm));height:var(--space-xs);border-radius:calc(var(--space-xs) * .5);background:var(--border);transition:background var(--transition-fast)}.agent-dialog-step.active{background:var(--todo)}.agent-dialog-step.completed{background:var(--color-success)}.agent-dialog-field{margin-bottom:var(--space-lg)}.agent-dialog-field label{display:block;font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:500;margin-bottom:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-dialog-field .input,.agent-dialog-field .select{width:100%;box-sizing:border-box}.agent-dialog-field--title .input{font-size:calc(var(--space-md) + var(--space-xs) * .25);line-height:var(--space-lg)}.agent-dialog-section{margin-bottom:var(--space-lg)}.agent-dialog-section-header{font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin-bottom:var(--space-md);padding-bottom:var(--space-xs);border-bottom:1px solid var(--border)}.agent-dialog-tabs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-lg)}.agent-dialog-tab{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text-muted);padding:var(--space-sm) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast)}.agent-dialog-tab:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.agent-dialog-tab:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-dialog-tab.active{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-dialog-tab-panel{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-runtime-mode-toggle{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.agent-runtime-mode-option{position:relative;margin:0}.agent-runtime-mode-option input{position:absolute;opacity:0;pointer-events:none}.agent-runtime-mode-option span{display:flex;align-items:center;justify-content:center;min-height:calc(var(--space-xl) + var(--space-lg));border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;padding:var(--space-sm) var(--space-md);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast)}.agent-runtime-mode-option span:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.agent-runtime-mode-option input:focus-visible+span{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-runtime-mode-option--active span{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-xl) * 3 + var(--space-sm)),1fr));gap:var(--space-sm)}.agent-role-option{display:flex;flex-direction:column;align-items:center;padding:var(--space-md) var(--space-sm);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast);font-family:var(--font-primary);color:var(--text)}.agent-role-option:hover{border-color:var(--text-muted);background:var(--card-hover)}.agent-role-option:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-role-option.selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent);box-shadow:var(--focus-ring)}.agent-role-option-icon{font-size:calc(var(--space-lg) + var(--space-xs));line-height:1}.agent-role-option-label{font-size:calc(var(--space-sm) + var(--space-xs));margin-top:var(--space-xs)}.agent-dialog-icon-prefix{margin-right:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-dialog-ai-generate{margin-top:var(--space-sm);border-top:1px solid var(--border);padding-top:var(--space-md)}.btn--ai-generate{width:100%;display:flex;align-items:center;justify-content:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);background:var(--cta-bg, var(--todo));color:var(--cta-text, var(--text));font-weight:600;border:1px solid transparent}.btn--ai-generate:hover{opacity:.9;filter:brightness(1.1)}.agent-dialog-ai-hint{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75);text-align:center;margin:calc(var(--space-sm) - var(--space-xs) * .5) 0 0}.agent-dialog-summary{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-dialog-summary-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) 0;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent)}.agent-dialog-summary-row:last-child{border-bottom:none}.agent-dialog-summary-row-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.agent-dialog-summary-row-label--fixed{flex:0 0 calc(var(--space-xl) * 4 - var(--space-xs) * 1.5)}.agent-dialog-summary-row-value{font-weight:600}.agent-dialog-summary-row-value--body{font-weight:400}.agent-dialog-summary--spaced{margin-bottom:var(--space-md)}.agent-dialog-summary-row-value--muted{font-style:italic;color:var(--text-muted)}.agent-dialog-summary-row-value--capitalize{text-transform:capitalize}.agent-dialog-summary-row--editable{flex-direction:column;align-items:stretch;gap:var(--space-xs)}.agent-dialog-summary-row--editable .agent-dialog-summary-row-label{margin-bottom:0}.agent-dialog-summary-row--title .input{font-size:calc(var(--space-md) + var(--space-xs) * .25);line-height:var(--space-lg)}.agent-presets{margin-bottom:var(--space-lg)}.agent-presets-header{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:600;color:var(--text-muted);margin-bottom:var(--space-md);display:flex;align-items:center;gap:var(--space-sm)}.agent-presets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-xl) * 5 + var(--space-lg) + var(--space-xs)),1fr));gap:var(--space-sm);margin-bottom:var(--space-lg);max-height:calc(var(--space-xl) * 16 + var(--space-lg));overflow-y:auto}.agent-preset-card{display:flex;flex-direction:column;align-items:center;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);background:var(--bg-secondary);font-family:var(--font-primary);color:var(--text)}.agent-preset-card:hover{border-color:var(--todo);background:var(--bg-tertiary)}.agent-preset-card:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-preset-card.selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-preset-icon{font-size:var(--space-xl);margin-bottom:var(--space-xs)}.agent-preset-name{font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:500;text-align:center;margin-bottom:var(--space-xs)}.agent-preset-role{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);text-transform:capitalize}.agent-preset-description{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-top:calc(var(--space-xs) * .5)}.agent-dialog-header-sparkle{margin-right:var(--space-sm)}.agent-dialog-error-banner{color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) * .25);padding:var(--space-sm) var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border-radius:var(--radius-md);margin-bottom:var(--space-md)}.agent-dialog-textarea{resize:vertical}.agent-dialog-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);margin-top:var(--space-xs);display:flex;justify-content:space-between;gap:var(--space-sm)}.agent-dialog-loading-center{display:flex;flex-direction:column;align-items:center;padding:var(--space-2xl) var(--space-lg);gap:var(--space-md)}.agent-dialog-spinner{width:var(--space-2xl);height:var(--space-2xl);border:calc(var(--space-xs) * .75) solid var(--border);border-top-color:var(--todo);border-radius:50%}.agent-dialog-loading-text{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin:0}.agent-dialog-expand-btn{background:none;border:none;color:var(--todo);cursor:pointer;font-size:calc(var(--space-sm) + var(--space-xs));margin-left:var(--space-sm);padding:0}.agent-dialog-expand-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.agent-generation-prompt-box{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));font-family:var(--font-mono);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow:auto;position:relative}.agent-generation-prompt-box--collapsed{max-height:calc(var(--space-xl) * 6 + var(--space-sm) + var(--space-xs) * .5);overflow:hidden}.agent-generation-prompt-fade{position:absolute;bottom:0;left:0;right:0;height:calc(var(--space-lg) + var(--space-xl));background:linear-gradient(transparent,var(--bg-secondary));pointer-events:none}.agent-dialog-required{color:var(--color-error)}.agent-dialog-optional{color:var(--text-muted);font-weight:400}.agent-dialog-error{color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin-top:var(--space-md)}.agent-dialog-info{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin-top:0;margin-bottom:var(--space-md)}.agent-dialog-loading{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);padding:var(--space-sm) 0}.agent-dialog-field-hint{margin-top:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs) * .75)}@media(max-width:768px){.agent-dialog-overlay{padding:0;align-items:stretch;justify-content:stretch}.agent-dialog{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border-radius:0;border-left:0;border-right:0}.agent-dialog-header{padding:calc(var(--space-md) + env(safe-area-inset-top)) var(--space-md) var(--space-md)}.agent-dialog-footer{padding:var(--space-md) var(--space-md) calc(var(--space-md) + env(safe-area-inset-bottom))}.agent-dialog-steps{padding:var(--space-sm) var(--space-md);overflow-x:auto;flex-wrap:nowrap;flex-shrink:0}.agent-dialog-header,.agent-dialog-footer{flex-shrink:0}.agent-dialog-body{padding:var(--space-md);flex:1 1 auto;min-height:0;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.agent-dialog-summary-row--editable .input{min-height:calc(var(--space-lg) + var(--space-xl))}.agent-dialog-footer{flex-wrap:wrap;gap:var(--space-xs)}.agent-dialog-footer>.btn{flex:1 1 auto;min-width:0}}.experimental-agent-onboarding-modal__textarea{min-height:calc(var(--space-2xl) * 4)}.experimental-agent-onboarding-modal__summary{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-lg)}@media(max-width:768px){.experimental-agent-onboarding-modal__textarea{min-height:calc(var(--space-2xl) * 3)}}.agent-import-skills-section{margin-top:var(--space-lg)}.agent-import-skill-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-2xl) * 6);overflow-y:auto}.agent-import-skill-item{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border)}.agent-import-skill-icon{flex-shrink:0}.agent-import-skill-details{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.agent-import-skill-name{font-weight:500;color:var(--text)}.agent-import-skill-description{color:var(--text-muted)}.agent-import-empty{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);text-align:center;padding:var(--space-lg)}.agent-import-result{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-sm)}.agent-import-result-icon{color:var(--color-success);margin-bottom:var(--space-xs)}.agent-import-result-title{margin:0;font-size:calc(var(--space-md) + var(--space-xs));font-weight:600}.agent-import-result-company{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin:0 0 var(--space-md) 0}.agent-import-result-stats{display:flex;gap:var(--space-lg);margin-bottom:var(--space-md);padding:var(--space-md);background:var(--bg-secondary);border-radius:var(--radius-md)}.agent-import-result-stat{display:flex;align-items:center;gap:var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);padding:var(--space-xs) var(--space-sm)}.agent-import-result-stat--success{color:var(--color-success)}.agent-import-result-stat--skipped{color:var(--color-warning)}.agent-import-result-stat--error{color:var(--color-error)}.agent-import-result-stat--success:before,.agent-import-result-stat--skipped:before,.agent-import-result-stat--error:before{content:"";width:var(--space-sm);height:var(--space-sm);border-radius:50%;flex-shrink:0}.agent-import-result-stat--success:before{background:var(--color-success)}.agent-import-result-stat--skipped:before{background:var(--color-warning)}.agent-import-result-stat--error:before{background:var(--color-error)}.agent-import-result-agents{display:flex;flex-direction:column;gap:var(--space-xs);width:100%;text-align:left}.agent-import-result-agent{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);color:var(--color-success);padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--color-success) 8%,transparent);border-radius:var(--radius-sm)}.agent-import-result-errors{display:flex;flex-direction:column;gap:var(--space-xs);width:100%;text-align:left;margin-top:var(--space-sm)}.agent-import-result-error{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--color-error);padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--color-error) 8%,transparent);border-radius:var(--radius-sm)}.agent-import-result-divider{align-self:stretch;height:1px;background:var(--border);margin:var(--space-md) 0}.agent-import-result-section-title{font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin:0 0 var(--space-sm) 0}.agent-import-browse{margin-bottom:var(--space-md)}.agent-import-browse-header{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-import-browse-search{position:relative;display:flex;align-items:center}.agent-import-browse-search-icon{position:absolute;left:var(--space-sm);color:var(--text-muted);pointer-events:none}.agent-import-browse-search-input{width:100%;padding:var(--space-sm) var(--space-sm) var(--space-sm) calc(var(--space-sm) + var(--space-lg));border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-size:calc(var(--space-md) + var(--space-xs) * .5)}.agent-import-browse-search-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.agent-import-browse-selected{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);background:color-mix(in srgb,var(--todo) 10%,transparent);border:1px solid color-mix(in srgb,var(--todo) 30%,transparent);border-radius:var(--radius-md)}.agent-import-browse-selected-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-browse-selected-name{flex:1;font-weight:500;color:var(--todo)}.agent-import-browse-loading{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl) 0;color:var(--text-muted)}.agent-import-browse-error{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 8%,transparent);border-radius:var(--radius-md);color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) * .25)}.agent-import-browse-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-import-browse-item{display:flex;flex-direction:column;gap:calc(var(--space-xs) * .5);padding:var(--space-sm);cursor:pointer;border-bottom:1px solid var(--border);transition:background-color var(--transition-fast)}.agent-import-browse-item:last-child{border-bottom:none}.agent-import-browse-item:hover{background:var(--surface-hover)}.agent-import-browse-item:focus-visible{outline:none;background:var(--surface-hover);box-shadow:var(--focus-ring)}.agent-import-browse-item--selected{background:color-mix(in srgb,var(--todo) 10%,transparent);border-color:var(--todo)}.agent-import-browse-item-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-import-browse-item-name{font-weight:500;color:var(--text)}.agent-import-browse-item-installs{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);white-space:nowrap}.agent-import-browse-item-tagline{font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted);line-height:1.4}.agent-import-browse-item-repo{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-family:var(--font-mono)}.agent-import-browse-empty{padding:var(--space-lg);text-align:center;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25)}.agent-controls-actions{display:flex;gap:var(--space-sm)}.agent-global-controls{display:flex;align-items:center;padding:var(--space-md) var(--space-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.heartbeat-multiplier-label{font-weight:500;color:var(--text);white-space:nowrap}.agent-import-dialog{max-width:calc(var(--space-xl) * 23 + var(--space-sm))}.agent-import-description{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);margin:0 0 var(--space-md) 0;line-height:1.5}.agent-import-description code{background:var(--surface-hover);padding:calc(var(--space-xs) * .25) var(--space-xs);border-radius:calc(var(--radius-sm) - var(--space-xs) * .25);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-file-upload{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-import-file-input{display:none}.agent-import-upload-btn{display:inline-flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-import-file-hint{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-divider{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-md);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-divider:before,.agent-import-divider:after{content:"";flex:1;height:1px;background:var(--border)}.agent-import-textarea{width:100%;min-height:calc(var(--space-xl) * 5);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));line-height:1.5;resize:vertical}.agent-import-textarea:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.agent-import-company{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-import-company-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));text-transform:uppercase;letter-spacing:.04em}.agent-import-company-name{font-weight:600;font-size:calc(var(--space-md) + var(--space-xs) * .5)}.agent-import-count{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);margin-bottom:var(--space-md)}.agent-import-selection-controls{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-md)}.agent-import-agent-list{display:flex;flex-direction:column;gap:calc(var(--space-sm) - var(--space-xs) * .5);max-height:calc(var(--space-xl) * 11 + var(--space-lg));overflow-y:auto}.agent-import-agent-item{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-import-agent-icon{font-size:calc(var(--space-md) + var(--space-xs) * 1.5);line-height:1;flex-shrink:0}.agent-import-agent-details{display:flex;flex-direction:column;min-width:0}.agent-import-agent-name{font-weight:500;font-size:calc(var(--space-sm) + var(--space-xs) * 1.25)}.agent-import-agent-meta{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.agent-import-agent-title{color:var(--text-muted)}.agent-import-agent-role{text-transform:capitalize}.agent-import-agent-model{color:var(--text-muted)}
@@ -1 +0,0 @@
1
- import{r as s,j as t}from"./vendor-react-K0fH_qHe.js";import{i as at,b1 as ht,z as Vt,b2 as Kt,E as qt,b3 as Xt,b4 as Jt,b5 as Yt,b6 as Qt,b7 as Zt,b8 as es,b9 as ts,s as ss,ba as ns,x as as,bb as rs,u as is,bc as ls,ag as wt,ah as St,S as cs,a1 as mt,P as Oe,Q as tt,ar as os,bd as ds,B as He,ad as us,ae as hs,be as ms,bf as fs,bg as gs,aR as ps,bh as xs,bi as vs,bj as ft,bk as bs,h as ws,j as gt,m as Ss}from"./index-DYDLmOcK.js";import"./vendor-xterm-DzcZoU0P.js";const st="kb-chat-active-session";function ks(a){const r=typeof a=="string"?a.trim():"",l=r.indexOf("/");return!r||l<=0||l>=r.length-1?{}:{modelProvider:r.slice(0,l),modelId:r.slice(l+1)}}function ys(a){const r=a?.toolCalls;if(!Array.isArray(r))return;const l=r.map(d=>{if(!d||typeof d!="object")return null;const i=d,v=typeof i.toolName=="string"?i.toolName:"";if(!v)return null;const y=i.args;return{toolName:v,...y&&typeof y=="object"?{args:y}:{},isError:!!i.isError,result:i.result,status:"completed"}}).filter(d=>d!==null);return l.length>0?l:void 0}function js(a){const r=a?.fallback;if(!r||typeof r!="object")return;const l=r,d=typeof l.primaryModel=="string"?l.primaryModel:"",i=typeof l.fallbackModel=="string"?l.fallbackModel:"",v=l.triggerPoint;if(!(!d||!i||v!=="session-creation"&&v!=="prompt-time"))return{primaryModel:d,fallbackModel:i,triggerPoint:v}}function nt(a){return{id:a.id,sessionId:a.sessionId,role:a.role,content:a.content,thinkingOutput:a.thinkingOutput,toolCalls:ys(a.metadata),fallbackInfo:js(a.metadata),attachments:a.attachments,createdAt:a.createdAt}}function Cs(a,r){const[l,d]=s.useState([]),[i,v]=s.useState(null),[y,E]=s.useState(!0),[I,k]=s.useState([]),[D,b]=s.useState(!1),[R,P]=s.useState(!1),[N,p]=s.useState(""),[w,x]=s.useState(""),[F,j]=s.useState([]),[q,G]=s.useState(""),[V,$]=s.useState(""),[Y,h]=s.useState(!0),[C,ce]=s.useState(new Map),f=s.useRef(null),se=s.useRef(!1),Q=s.useRef(""),Z=s.useRef(null),je=s.useRef(l),z=s.useRef(i),ve=s.useRef(R);je.current=l,z.current=i,ve.current=R,s.useEffect(()=>{Q.current=q},[q]);const fe=s.useRef(new Set),oe=s.useRef(0),Re=s.useRef(a);Re.current!==a&&(Re.current=a,oe.current++),s.useEffect(()=>{const o=oe.current;at(void 0,a).then(m=>{if(oe.current!==o)return;const g=new Map;for(const S of m)g.set(S.id,S);ce(g)}).catch(()=>{})},[a]);const de=s.useCallback(async()=>{E(!0);try{const m=[...(await ht(a)).sessions].sort((g,S)=>new Date(S.updatedAt).getTime()-new Date(g.updatedAt).getTime());d(m)}catch{}finally{E(!1)}},[a]);s.useEffect(()=>{de()},[de]);const re=s.useRef(()=>{}),ee=s.useRef(!1);s.useEffect(()=>{ee.current=!1},[a]),s.useEffect(()=>{if(y||ee.current||z.current)return;const o=Vt(st,a);if(!o){ee.current=!0;return}const m=l.find(g=>g.id===o);if(m){ee.current=!0,re.current(o,m);return}ee.current=!0},[y,l,a]);const ne=s.useCallback(async(o,m)=>{b(!0);try{const g=await Kt(o,{limit:50,...m},a),S=g.messages.map(nt);m?.offset&&m.offset>0?k(X=>[...S,...X]):k(S),h(g.messages.length>=50)}catch{}finally{b(!1)}},[a]),ie=s.useCallback(()=>{Z.current?.(),Z.current=null,Q.current="",G(""),p(""),x(""),j([]),P(!1)},[]),le=s.useCallback((o,m)=>{const g=z.current?.id??null;if(o&&g===o&&!m)return;f.current&&(f.current.close(),f.current=null);const S=m??l.find(X=>X.id===o);v(S||null),ie(),h(!0),o?ne(o):k([]),S?.isGenerating&&(P(!0),p("")),o?qt(st,o,a):Xt(st,a)},[l,ne,a,ie]);re.current=le;const ge=s.useCallback(async o=>{const m=await Jt(o,a);f.current&&(f.current.close(),f.current=null);const g={id:m.session.id,title:m.session.title,agentId:m.session.agentId,status:m.session.status,modelProvider:m.session.modelProvider,modelId:m.session.modelId,createdAt:m.session.createdAt,updatedAt:m.session.updatedAt};return d(S=>S.some(X=>X.id===g.id)?S:[g,...S]),ie(),le(g.id,g),k([]),g},[a,ie,le]),be=s.useCallback(async o=>{await Yt(o,{status:"archived"},a),d(m=>m.filter(g=>g.id!==o)),i?.id===o&&(v(null),k([]))},[i,a]),ue=s.useCallback(async o=>{i?.id===o&&f.current&&(f.current.close(),f.current=null),await Qt(o,a),d(m=>m.filter(g=>g.id!==o)),i?.id===o&&(v(null),k([]))},[i,a]),ae=s.useCallback(async()=>{!i||!Y||await ne(i.id,{offset:I.length})},[i,Y,ne,I.length]),he=s.useCallback(()=>{i&&(se.current=!0,Z.current?.(),Z.current=null,f.current?.close(),f.current=null,Zt(i.id,a).catch(()=>{}),P(!1),p(""),x(""),j([]))},[i,a]),Ce=s.useCallback(()=>{Q.current="",G("")},[]),me=s.useCallback((o,m)=>{if(!i)return;if(R){Q.current=o,G(o);return}se.current=!1,f.current&&(f.current.close(),f.current=null);const g=`temp-${Date.now()}`,S={id:g,sessionId:i.id,role:"user",content:o,createdAt:new Date().toISOString()};k(K=>[...K,S]),p(""),x(""),j([]),P(!0);const{handlers:X}=es({sessionId:i.id,tempUserMessageId:g,setStreamingText:p,setStreamingThinking:x,setStreamingToolCalls:j,cancelStreamingFlushesRef:Z,addToast:r,onFallbackSession:(K,J)=>{const A=ks(K.fallbackModel);d(_=>_.map(L=>L.id===J?{...L,...A}:L)),v(_=>_&&_.id===J?{..._,...A}:_)},onDone:({messageId:K,message:J,accumulated:A})=>{const _=J?nt(J):{id:K||`msg-${Date.now()}`,sessionId:i.id,role:"assistant",content:A.text,thinkingOutput:A.thinking,toolCalls:A.toolCalls.length>0?A.toolCalls:void 0,fallbackInfo:A.fallbackInfo,createdAt:new Date().toISOString()};fe.current.add(_.id),k(u=>[...u,_]),p(""),x(""),j([]),P(!1),f.current=null,setTimeout(()=>{fe.current.delete(_.id)},1e3),de();const L=Q.current.trim();L&&(Q.current="",G(""),me(L))},onError:(K,J)=>{if(k(A=>A.filter(_=>_.id!==J)),p(""),x(""),j([]),P(!1),f.current=null,console.error("[useChat] Stream error:",K),r?.(typeof K=="string"&&K.trim()?K:"Failed to get response","error"),!se.current){const A=Q.current.trim();A&&(Q.current="",G(""),me(A))}}});f.current=ts(i.id,o,X,m,a)},[i,R,a,de,r]),Ne=V?l.filter(o=>o.title?.toLowerCase().includes(V.toLowerCase())||o.agentId.toLowerCase().includes(V.toLowerCase())):l;return s.useEffect(()=>{if(!R||f.current||!z.current)return;const o=setInterval(async()=>{if(!ve.current||f.current||!z.current){clearInterval(o);return}try{(await ht(a)).sessions.find(S=>S.id===z.current?.id)?.isGenerating||(clearInterval(o),await ne(z.current.id),p(""),x(""),j([]),P(!1))}catch{}},3e3);return()=>clearInterval(o)},[R,ne,a]),s.useEffect(()=>{const o=oe.current,m=a?`?projectId=${encodeURIComponent(a)}`:"",g=()=>oe.current!==o,S=L=>{if(g())return;const u=JSON.parse(L.data);d(M=>M.some(U=>U.id===u.id)?M:[u,...M])},X=L=>{if(g())return;const u=JSON.parse(L.data);d(M=>[...M.map(O=>O.id===u.id?u:O)]),z.current?.id===u.id&&v(u)},K=L=>{if(g())return;const{id:u}=JSON.parse(L.data);d(M=>M.filter(U=>U.id!==u)),z.current?.id===u&&(v(null),k([]))},J=L=>{if(g())return;const u=JSON.parse(L.data),M=nt(u);if(!fe.current.has(M.id)){if(z.current?.id===M.sessionId&&ve.current&&!f.current&&M.role==="assistant"){k(U=>U.some(O=>O.id===M.id)?U:[...U,M]),p(""),x(""),j([]),P(!1);return}z.current?.id===M.sessionId&&!ve.current&&k(U=>U.some(O=>O.id===M.id)?U:[...U,M])}},A=L=>{if(g())return;const{id:u}=JSON.parse(L.data);k(M=>M.filter(U=>U.id!==u))};return ss(`/api/events${m}`,{events:{"chat:session:created":S,"chat:session:updated":X,"chat:session:deleted":K,"chat:message:added":J,"chat:message:deleted":A}})},[a]),s.useEffect(()=>()=>{f.current&&(f.current.close(),f.current=null)},[]),{sessions:l,activeSession:i,sessionsLoading:y,messages:I,messagesLoading:D,isStreaming:R,streamingText:N,streamingThinking:w,streamingToolCalls:F,pendingMessage:q,selectSession:le,createSession:ge,archiveSession:be,deleteSession:ue,sendMessage:me,stopStreaming:he,clearPendingMessage:Ce,loadMoreMessages:ae,hasMoreMessages:Y,searchQuery:V,setSearchQuery:$,filteredSessions:Ne,refreshSessions:de,agentsMap:C}}function kt(a){const r=new Date(a),d=new Date().getTime()-r.getTime(),i=Math.floor(d/1e3),v=Math.floor(i/60),y=Math.floor(v/60),E=Math.floor(y/24);return i<60?"just now":v<60?`${v}m ago`:y<24?`${y}h ago`:E<7?`${E}d ago`:r.toLocaleDateString()}function pt(a,r){if(!a||!r)return null;const l=r.toLowerCase();if(l.includes("claude")){let i=r.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return i=i.replace(/\s+/g," "),i.length>30?i.slice(0,30)+"…":i}if(l.includes("gpt")||l.includes("openai")){const i=r.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return i.length>30?i.slice(0,30)+"…":i}if(l.includes("gemini")){const i=r.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return i.length>30?i.slice(0,30)+"…":i}const d=r.replace(/-/g," ").replace(/^\w/,i=>i.toUpperCase()).replace(/\s+/g," ").trim();return d.length>30?d.slice(0,30)+"…":d}function _e(a,r){return a.length<=r?a:`${a.slice(0,r)}…`}function Ns(a){if(!a)return null;const r=Object.entries(a);return r.length===0?null:r.map(([l,d])=>{const i=typeof d=="string"?d:(()=>{try{return JSON.stringify(d)}catch{return String(d)}})();return`${l}=${_e(i,50)}`}).join(", ")}function Ms(a){if(a===void 0)return null;if(typeof a=="string")return _e(a,200);try{return _e(JSON.stringify(a),200)}catch{return _e(String(a),200)}}function yt(a){if(!a||a.length===0)return null;const r=(b,R)=>{const P=b.status==="running",N=b.status==="completed"&&b.isError,p=Ns(b.args),w=Ms(b.result),x=P?p:w?`result: ${w}`:p?`args: ${p}`:null,F=P?"running":N?"error":"completed";return t.jsxs("details",{className:`chat-tool-call${P?" chat-tool-call--running":""}${N?" chat-tool-call--error":""}`,open:P,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",children:b.toolName}),x&&t.jsx("span",{className:"chat-tool-call-preview",title:x,children:x}),t.jsx("span",{className:"chat-tool-call-status-text",children:F})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[p&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:"args"}),t.jsx("span",{className:"chat-tool-call-value",children:p})]}),w&&t.jsxs("div",{className:`chat-tool-call-row${N?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:"result"}),t.jsx("span",{className:"chat-tool-call-value",children:w})]})]})]},`${b.toolName}-${R}`)},l="chat-tool-calls";if(a.length===1)return t.jsxs("div",{className:l,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(ft,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:"Tool calls"})]}),r(a[0],0)]});const d=a.filter(b=>b.status==="running").length,i=a.filter(b=>b.status==="completed"&&b.isError).length,v=d>0,y=Array.from(new Set(a.map(b=>b.toolName))),E=y.slice(0,5),I=Math.max(0,y.length-E.length),k=I>0?`${E.join(", ")}, +${I} more`:E.join(", "),D=v?`(${d} running)`:i>0?`(${i} ${i===1?"error":"errors"})`:null;return t.jsx("div",{className:l,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:"chat-tool-calls-group","data-testid":"chat-tool-calls-group",open:v,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(ft,{size:12,"aria-hidden":"true"}),t.jsxs("span",{children:[a.length," tool calls"]}),t.jsx("span",{className:"chat-tool-calls-names",title:k,children:k}),D&&t.jsx("span",{className:"chat-tool-calls-group-status",children:D})]}),a.map((b,R)=>r(b,R))]})})}const jt={pre:({children:a,...r})=>t.jsx("pre",{...r,className:"chat-markdown-pre",children:a}),table:({children:a,...r})=>t.jsx("table",{...r,className:"chat-markdown-table",children:a})},De="__fn_agent__",As=280,ze=180,Ue=500,xt="fusion:chat-sidebar-width",Ts=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function vt(a){const r=/(^|[\s])\/([^\s]*)$/.exec(a);if(!r)return null;const l=r[1]??"",d=r[2]??"",i=r.index+l.length;return{filter:d,start:i,end:a.length}}function Ps(a,r){const l=a.slice(0,r),d=/(^|[\s\n])@([\w-]*)$/.exec(l);if(!d)return null;const i=d[2]??"",v=l.length-i.length-1;return{filter:i,start:v,end:r}}function Ds({projectId:a,onClose:r,onCreate:l}){const[d,i]=s.useState("agent"),[v,y]=s.useState([]),[E,I]=s.useState(!0),[k,D]=s.useState(""),[b,R]=s.useState([]),[P,N]=s.useState(!0),[p,w]=s.useState(""),[x,F]=s.useState([]),[j,q]=s.useState([]);s.useEffect(()=>{let h=!1;return I(!0),at(void 0,a).then(C=>{h||y(C)}).catch(()=>{h||y([])}).finally(()=>{h||I(!1)}),()=>{h=!0}},[a]),s.useEffect(()=>{N(!0),ws().then(h=>{R(h.models),F(h.favoriteProviders),q(h.favoriteModels)}).catch(()=>{R([]),F([]),q([])}).finally(()=>{N(!1)})},[]);const G=s.useCallback(async h=>{const C=x,f=C.includes(h)?C.filter(se=>se!==h):[h,...C];F(f);try{await gt({favoriteProviders:f,favoriteModels:j})}catch{F(C)}},[x,j]),V=s.useCallback(async h=>{const C=j,f=C.includes(h)?C.filter(se=>se!==h):[h,...C];q(f);try{await gt({favoriteProviders:x,favoriteModels:f})}catch{q(C)}},[j,x]),$=h=>{if(h.preventDefault(),d==="agent"){if(!k)return;l({agentId:k});return}if(!p)return;const C=p.indexOf("/");if(C<=0)return;const ce=p.slice(0,C),f=p.slice(C+1);l({agentId:De,modelProvider:ce,modelId:f})},Y=d==="agent"?!k:!p;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:r,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:h=>h.stopPropagation(),children:[t.jsx("h3",{children:"New Chat"}),t.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${d==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{i("agent"),w("")},children:"Agent"}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${d==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{i("model"),D("")},children:"Model"})]}),t.jsxs("form",{onSubmit:$,children:[d==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",E?t.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):v.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:v.map(h=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${k===h.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>D(h.id),"data-testid":`agent-option-${h.id}`,children:[t.jsx(He,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:h.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:h.role})]},h.id))})]}),d==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:P?t.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):t.jsx(Ss,{models:b,value:p,onChange:w,label:"Model",placeholder:"Select a model",favoriteProviders:x,onToggleFavorite:G,favoriteModels:j,onToggleModelFavorite:V})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:r,children:"Cancel"}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:Y,children:"Create"})]})]})]})})}const bt=s.memo(function({message:r,forcePlain:l,agentName:d,hideAssistantIdentity:i,showAssistantModelTag:v,activeModelTag:y,activeModelProvider:E,activeSessionId:I,mentionAgentsByName:k}){const D=r.role==="assistant",b=s.useMemo(()=>{if(D)return null;const N=r.content,p=/@([\w-]+)/g,w=[];let x=0,F=p.exec(N);for(;F;){const[j,q=""]=F,G=F.index;G>x&&w.push(N.slice(x,G));const V=q.replace(/_/g," ").toLowerCase(),$=k.get(V);$?w.push(t.jsxs("span",{className:"chat-mention-chip",children:["@",$.name.replace(/\s+/g,"_")]},`${$.id}-${G}`)):w.push(j),x=G+j.length,F=p.exec(N)}return x<N.length&&w.push(N.slice(x)),w.length===0?N:w},[D,r.content,k]),R=s.useMemo(()=>{const N=r.attachments;if(!N||N.length===0||!I)return null;const p=`/api/chat/sessions/${encodeURIComponent(I)}/attachments/`;return t.jsx("div",{className:"chat-message-attachments",children:N.map(w=>{const x=w.mimeType.startsWith("image/"),F=w.id||w.filename,j=`${p}${encodeURIComponent(w.filename)}`;return x?t.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:j,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{className:"chat-message-attachment",src:j,alt:w.originalName})},F):t.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:j,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(vs,{size:14}),t.jsx("span",{children:w.originalName})]},F)})})},[r.attachments,I]),P=s.useMemo(()=>D?l?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:r.content}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(wt,{remarkPlugins:[St],components:jt,children:r.content})}):null,[D,l,r.content]);return t.jsxs("div",{className:`chat-message chat-message--${r.role}`,"data-testid":`chat-message-${r.id}`,children:[D&&!i&&t.jsxs("div",{className:"chat-message-avatar",children:[E?t.jsx(Oe,{provider:E,size:"sm"}):t.jsx(He,{size:14}),t.jsx("span",{children:d}),v&&y&&t.jsx("span",{className:"chat-model-tag",children:y})]}),D?P:t.jsx("div",{className:"chat-message-content",children:b}),yt(r.toolCalls),r.thinkingOutput&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:"Thinking"}),t.jsx("pre",{className:"chat-message-thinking-content",children:r.thinkingOutput})]}),R,t.jsx("div",{className:"chat-message-time",children:kt(r.createdAt)})]})});function Fs({projectId:a,addToast:r}){const{activeSession:l,sessionsLoading:d,messages:i,messagesLoading:v,isStreaming:y,streamingText:E,streamingThinking:I,streamingToolCalls:k,selectSession:D,createSession:b,archiveSession:R,deleteSession:P,sendMessage:N,stopStreaming:p,pendingMessage:w,clearPendingMessage:x,searchQuery:F,setSearchQuery:j,filteredSessions:q}=Cs(a,r),[G,V]=s.useState(!1),[$,Y]=s.useState(""),[h,C]=s.useState(null),[ce,f]=s.useState(null),[se,Q]=s.useState(!0),[Z,je]=s.useState(As),[z,ve]=s.useState(new Map),[fe,oe]=s.useState([]),[Re,de]=s.useState(!0),[re,ee]=s.useState(!1),[ne,ie]=s.useState(""),[le,ge]=s.useState(0),[be,ue]=s.useState(""),[ae,he]=s.useState(!1),[Ce,me]=s.useState(0),[Ne,o]=s.useState(-1),[m,g]=s.useState(!1),[S,X]=s.useState([]),[K,J]=s.useState(!1),[,A]=s.useState(!1),[_,L]=s.useState({top:0,left:0}),u=ns({projectId:a}),M=s.useCallback(e=>{if(!e||!u.mentionActive)return;const n=e.getBoundingClientRect();L({top:n.top-260,left:n.left+8})},[u.mentionActive]),U=s.useRef(null),O=s.useRef(null),We=s.useRef(null),H=s.useRef(null),$e=s.useRef(!1),Ee=s.useRef(!1),rt=s.useRef(null),it=s.useRef([]),Me=s.useRef(0),W=as()==="mobile";s.useEffect(()=>{try{const e=localStorage.getItem(xt);if(!e)return;const n=Number.parseInt(e,10);if(Number.isNaN(n))return;const c=Math.max(ze,Math.min(Ue,n));je(c)}catch{}},[]);const{keyboardOverlap:Be,viewportHeight:lt,viewportOffsetTop:Ct,keyboardOpen:ct}=rs({enabled:W&&!!l}),Nt=ct?{"--keyboard-overlap":`${Be}px`,"--vv-offset-top":`${Ct}px`,...lt!==null?{"--vv-height":`${lt}px`}:{}}:{},te=s.useMemo(()=>{const e=ne.trim().toLowerCase();return(e?fe.filter(c=>c.name.toLowerCase().includes(e)):fe).slice(0,10)},[fe,ne]),we=s.useMemo(()=>Array.from(z.values()),[z]),pe=s.useMemo(()=>{const e=be.trim().toLowerCase();return e?we.filter(n=>n.name.toLowerCase().includes(e)):we},[we,be]),ot=s.useMemo(()=>{const e=new Map;for(const n of we)e.set(n.name.toLowerCase(),n);return e},[we]);s.useEffect(()=>{ge(0)},[te]),s.useEffect(()=>{me(0)},[be,ae]),s.useEffect(()=>()=>{O.current!==null&&window.clearTimeout(O.current)},[]),s.useEffect(()=>{const e=We.current;e&&(e.scrollTop=e.scrollHeight)},[i,E,I,y]),s.useEffect(()=>{if(Be<=0)return;const e=We.current;e&&(e.scrollTop=e.scrollHeight)},[Be]),is(W&&ct),s.useEffect(()=>{const e=()=>C(null);if(h)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[h]),s.useEffect(()=>{let e=!1;const n=a;return at(void 0,a).then(c=>{if(e||n!==a)return;const T=new Map;for(const B of c)T.set(B.id,B);ve(T)}).catch(()=>{}),()=>{e=!0}},[a]),s.useEffect(()=>{let e=!1;return de(!0),ls(a).then(n=>{e||oe(n)}).catch(()=>{e||oe([])}).finally(()=>{e||de(!1)}),()=>{e=!0}},[a]),s.useEffect(()=>{it.current=S},[S]),s.useEffect(()=>()=>{for(const e of it.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl)},[]);const Ie=s.useCallback(e=>{if(!e||e.length===0)return;const n=[];for(const c of Array.from(e)){if(!Ts.includes(c.type))continue;const T=c.type.startsWith("image/");n.push({file:c,previewUrl:T?URL.createObjectURL(c):""})}n.length>0&&X(c=>[...c,...n])},[]),Mt=s.useCallback(e=>{X(n=>{const c=n[e];return c?.previewUrl&&URL.revokeObjectURL(c.previewUrl),n.filter((T,B)=>B!==e)})},[]),At=s.useCallback(e=>{const n=e.clipboardData?.files;if(!n||n.length===0)return;const c=Array.from(n).filter(T=>T.type.startsWith("image/"));c.length!==0&&Ie(c)},[Ie]),Tt=s.useCallback(async e=>{try{await b(e),V(!1),W&&Q(!1)}catch{r("Failed to create chat session","error")}},[b,r,W]),Ge=s.useCallback(()=>{Y(""),ee(!1),ie(""),he(!1),ue(""),o(-1),X(e=>{for(const n of e)n.previewUrl&&URL.revokeObjectURL(n.previewUrl);return[]})},[]),Ae=s.useCallback(()=>{const e=$.trim(),n=S.map(c=>c.file);if(!(!e&&n.length===0||!l)){if(e==="/clear"){Ge(),p(),x(),b({agentId:l.agentId,modelProvider:l.modelProvider??void 0,modelId:l.modelId??void 0}).catch(()=>{r("Failed to clear conversation","error")});return}Ge(),N(e,n)}},[$,S,l,Ge,p,x,b,r,N]),Fe=s.useCallback(()=>{if(typeof window>"u"||window.innerWidth>768)return;const e=H.current;if(!e||e.disabled)return;const n=window.scrollX,c=window.scrollY;e.focus({preventScroll:!0}),window.requestAnimationFrame(()=>{(window.scrollX!==n||window.scrollY!==c)&&window.scrollTo(n,c)})},[]),dt=s.useCallback(()=>{typeof window>"u"||window.innerWidth>768||($e.current=!0)},[]),Ve=s.useCallback(e=>{Y(n=>{const c=vt(n);if(!c)return n;const T=`/skill:${e.name} `,B=n.slice(0,c.start)+T+n.slice(c.end);return window.requestAnimationFrame(()=>{H.current&&(H.current.style.height="auto",H.current.style.height=`${Math.min(H.current.scrollHeight,120)}px`,H.current.focus())}),B}),ee(!1),ie(""),ge(0)},[]),Ke=s.useCallback(e=>{const n=H.current;if(!n||Ne<0)return;const c=n.selectionStart??Me.current,T=n.selectionEnd??c,B=Math.max(c,T),Pe=Math.min(Ne,B),ke=`${`@${e.name.replace(/\s+/g,"_")}`} `,et=$.slice(0,Pe)+ke+$.slice(B),ye=Pe+ke.length;Y(et),he(!1),ue(""),me(0),o(-1),window.requestAnimationFrame(()=>{H.current&&(H.current.style.height="auto",H.current.style.height=`${Math.min(H.current.scrollHeight,120)}px`,H.current.focus(),H.current.setSelectionRange(ye,ye))})},[Ne,$]),Pt=s.useCallback(e=>{if(Me.current=e.currentTarget.selectionStart??Me.current,u.mentionActive&&u.files.length>0){if(u.handleKeyDown(e,$),e.key==="Enter"||e.key==="Tab"){const n=u.files[u.selectedIndex];if(n){const c=u.selectFile(n,$);Y(c),u.dismissMention(),A(!1)}}return}if(ae&&e.key==="ArrowDown"){e.preventDefault(),pe.length>0&&me(n=>(n+1)%pe.length);return}if(ae&&e.key==="ArrowUp"){e.preventDefault(),pe.length>0&&me(n=>n===0?pe.length-1:n-1);return}if(ae&&e.key==="Enter"){e.preventDefault();const n=pe[Ce]??pe[0];n&&Ke(n);return}if(ae&&e.key==="Escape"){e.preventDefault(),he(!1),ue(""),o(-1);return}if(re&&e.key==="ArrowDown"){e.preventDefault(),te.length>0&&ge(n=>(n+1)%te.length);return}if(re&&e.key==="ArrowUp"){e.preventDefault(),te.length>0&&ge(n=>n===0?te.length-1:n-1);return}if(re&&(e.key==="Enter"||e.key==="Tab")&&te.length>0){e.preventDefault();const n=te[le]??te[0];n&&Ve(n);return}if(re&&e.key==="Escape"){e.preventDefault(),ee(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Ae())},[ae,pe,Ce,Ke,re,te,le,Ve,Ae,u,$]),Le=s.useCallback((e,n)=>{const c=Ps(e,n);if(c){he(!0),ue(c.filter),o(c.start);return}he(!1),ue(""),o(-1)},[]),Dt=s.useCallback(e=>{const n=e.target,c=n.value,T=n.selectionStart??c.length;Me.current=T,Y(c);const B=vt(c);B?(ee(!0),ie(B.filter)):(ee(!1),ie("")),Le(c,T),u.detectMention(c,T),A(u.mentionActive),u.mentionActive&&M(n),n.style.height="auto",n.style.height=`${Math.min(n.scrollHeight,120)}px`},[Le]),qe=s.useCallback(e=>{const n=e.currentTarget,c=n.selectionStart??n.value.length;Me.current=c,Le(n.value,c),u.detectMention(n.value,c),A(u.mentionActive),u.mentionActive&&M(n)},[Le,u,M]),Rt=s.useCallback(e=>{e.key!=="Escape"&&qe(e)},[qe]),$t=s.useCallback(()=>{if($e.current){window.requestAnimationFrame(()=>{Fe()});return}O.current!==null&&window.clearTimeout(O.current),O.current=window.setTimeout(()=>{ee(!1),he(!1),ue(""),o(-1),A(!1),u.dismissMention(),O.current=null},120)},[u,Fe]),Et=s.useCallback(()=>{O.current!==null&&(window.clearTimeout(O.current),O.current=null)},[]),It=s.useCallback(async e=>{C(null);try{await R(e),r("Conversation archived","success")}catch{r("Failed to archive conversation","error")}},[R,r]),Ft=s.useCallback(async e=>{f(null),C(null);try{await P(e),r("Conversation deleted","success")}catch{r("Failed to delete conversation","error")}},[P,r]),Te=s.useCallback(e=>{try{localStorage.setItem(xt,String(e))}catch{}},[]),Lt=s.useCallback(e=>{if(W)return;e.preventDefault(),e.stopPropagation();const n=e.currentTarget;typeof n.setPointerCapture=="function"&&n.setPointerCapture(e.pointerId);const c=e.clientX,T=Z;let B=T;document.body.style.userSelect="none";const Pe=ke=>{const et=ke.clientX-c,ye=Math.max(ze,Math.min(Ue,T+et));B=ye,je(ye),Te(ye)},Ze=ke=>{typeof n.releasePointerCapture=="function"&&n.releasePointerCapture(ke.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",Pe),document.removeEventListener("pointerup",Ze),Te(B)};document.addEventListener("pointermove",Pe),document.addEventListener("pointerup",Ze)},[W,Te,Z]),zt=s.useCallback(e=>{if(W||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const n=e.shiftKey?50:10,c=e.key==="ArrowLeft"?-n:n,T=Math.max(ze,Math.min(Ue,Z+c));je(T),Te(T)},[W,Te,Z]),Ut=s.useCallback(e=>{D(e),W&&Q(!1)},[D,W]),Ot=s.useCallback(()=>{D(""),Q(!0)},[D]),_t=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(bs,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:"Start a new conversation"}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>V(!0),children:[t.jsx(tt,{size:16}),"New Chat"]})]}),xe=pt(l?.modelProvider,l?.modelId),Se=l?.modelProvider??null,Xe=!!(l||y||i.length>0),ut=l?.agentId===De?xe??"Fusion":l?.title||z.get(l?.agentId??"")?.name||l?.agentId||"Chat",Ht=!!(xe&&xe!==ut),Je=z.get(l?.agentId??"")?.name||(l?.agentId===De?xe??"Fusion":l?.agentId?.slice(0,30)??"Fusion"),Ye=!1,Qe=l?.agentId===De,Wt=w.length>50?`${w.slice(0,50)}…`:w,Bt=s.useCallback(()=>{g(e=>!e)},[]),Gt=s.useCallback((e,n=!1)=>n?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:e}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(wt,{remarkPlugins:[St],components:jt,children:e})}),[]);return t.jsxs("div",{className:"chat-view",children:[t.jsxs("div",{className:`chat-sidebar${se?"":" chat-sidebar--hidden"}`,style:W?void 0:{width:`${Z}px`},children:[t.jsx("div",{className:"chat-sidebar-search",children:t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx(cs,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:F,onChange:e=>j(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:d?t.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"Loading..."}):q.length===0?t.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):q.map(e=>t.jsxs("div",{className:`chat-session-item${l?.id===e.id?" chat-session-item--active":""}`,onClick:()=>Ut(e.id),onContextMenu:n=>{n.preventDefault(),C({sessionId:e.id,x:n.clientX,y:n.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsx("button",{className:"chat-session-delete-btn",onClick:n=>{n.stopPropagation(),f(e.id)},"data-testid":"chat-session-delete-btn","aria-label":"Delete conversation",children:t.jsx(mt,{size:14})}),t.jsx("div",{className:"chat-session-title",children:e.title||"Untitled"}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||"No messages"}),t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[e.modelProvider&&t.jsx(Oe,{provider:e.modelProvider,size:"sm"}),t.jsx("span",{children:z.get(e.agentId)?.name||(e.agentId===De?pt(e.modelProvider,e.modelId)??"Fusion":e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?kt(e.updatedAt):""})]})]},e.id))}),t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>V(!0),"data-testid":"chat-new-btn",children:[t.jsx(tt,{size:14}),"New Chat"]})})]}),!W&&se&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":ze,"aria-valuemax":Ue,"aria-valuenow":Z,"aria-label":"Resize chat sidebar",tabIndex:0,onPointerDown:Lt,onKeyDown:zt}),h&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:h.y,left:h.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>It(h.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(os,{size:14}),"Archive"]}),t.jsxs("button",{onClick:()=>{C(null),f(h.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(mt,{size:14}),"Delete"]})]}),ce&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>f(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:"Delete Conversation?"}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:"This action cannot be undone. All messages in this conversation will be permanently deleted."}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>f(null),children:"Cancel"}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Ft(ce),children:"Delete"})]})]})}),t.jsxs("div",{className:"chat-thread",style:Nt,children:[(Xe||!W)&&t.jsxs("div",{className:"chat-thread-header",children:[W&&Xe&&t.jsx("button",{className:"btn-icon",onClick:Ot,"data-testid":"chat-back-btn",children:t.jsx(ds,{size:16})}),Se?t.jsx(Oe,{provider:Se,size:"md"}):t.jsx(He,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:ut}),Ht&&t.jsx("span",{className:"chat-model-tag",children:xe}),Xe&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${m?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":m?"Show all messages as rendered Markdown":"Show all messages as plain text",onClick:Bt,children:m?t.jsx(us,{size:14}):t.jsx(hs,{size:14})}),!W&&t.jsxs("button",{className:"btn btn-sm btn-primary chat-thread-header-new-chat",onClick:()=>V(!0),"data-testid":"chat-thread-new-chat-btn",children:[t.jsx(tt,{size:14}),"New Chat"]})]}),t.jsxs("div",{className:"chat-messages",ref:We,children:[y?t.jsxs(t.Fragment,{children:[i.map(e=>t.jsx(bt,{message:e,forcePlain:m,agentName:Je,hideAssistantIdentity:Qe,showAssistantModelTag:Ye,activeModelTag:xe,activeModelProvider:Se,activeSessionId:l?.id??null,mentionAgentsByName:ot},e.id)),t.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[!Qe&&t.jsxs("div",{className:"chat-message-avatar",children:[Se?t.jsx(Oe,{provider:Se,size:"sm"}):t.jsx(He,{size:14}),t.jsx("span",{children:Je}),Ye]}),E?Gt(E,m):t.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:I?"Thinking…":"Connecting…"}),yt(k),I&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:"Thinking"}),t.jsx("pre",{className:"chat-message-thinking-content",children:I})]}),t.jsxs("div",{className:"chat-typing-indicator",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})]})]}):v?t.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):i.length===0&&!l?_t():i.length===0&&l?t.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):t.jsx(t.Fragment,{children:i.map(e=>t.jsx(bt,{message:e,forcePlain:m,agentName:Je,hideAssistantIdentity:Qe,showAssistantModelTag:Ye,activeModelTag:xe,activeModelProvider:Se,activeSessionId:l?.id??null,mentionAgentsByName:ot},e.id))}),t.jsx("div",{ref:U})]}),l&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:rt,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{Ie(e.target.files),e.target.value=""}}),re&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Re?t.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):te.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:ne?"No skills found":"No skills available"}):te.map((e,n)=>t.jsxs("button",{type:"button",role:"option","aria-selected":n===le,className:`chat-skill-menu-item${n===le?" chat-skill-menu-item--highlighted":""}`,onMouseDown:c=>c.preventDefault(),onMouseEnter:()=>ge(n),onClick:()=>Ve(e),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.relativePath,children:e.relativePath})]},e.id))}),S.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:S.map((e,n)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${n}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Mt(n),"data-testid":`chat-attachment-remove-${n}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${n}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":"Attach files",onClick:()=>rt.current?.click(),children:t.jsx(ms,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${K?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),J(!0)},onDragLeave:()=>J(!1),onDrop:e=>{e.preventDefault(),J(!1),Ie(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:H,className:"chat-input-textarea",placeholder:"Type a message...",value:$,onChange:Dt,onKeyDown:Pt,onKeyUp:Rt,onClick:qe,onBlur:$t,onFocus:Et,onPaste:At,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||document.activeElement!==e.currentTarget&&(e.preventDefault(),e.currentTarget.focus({preventScroll:!0}))},rows:1,"data-testid":"chat-input"}),t.jsx(fs,{agents:we,filter:be,highlightedIndex:Ce,visible:ae,onSelect:Ke,position:"below"}),t.jsx(gs,{visible:u.mentionActive&&!ae,position:_,files:u.files,selectedIndex:u.selectedIndex,onSelect:e=>{const n=u.selectFile(e,$);Y(n),u.dismissMention(),A(!1),H.current?.focus()},loading:u.loading}),w&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:`Queued: ${Wt}`}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:x,children:"×"})]})]}),y?t.jsx("button",{className:"chat-input-stop",onClick:p,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:t.jsx(ps,{size:14})}):t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{typeof window>"u"||window.innerWidth>768||(e.preventDefault(),e.pointerType&&e.pointerType!=="mouse"&&(Ee.current=!0,dt(),Fe(),Ae(),window.setTimeout(()=>{$e.current=!1},1500)))},onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||(e.preventDefault(),Ee.current=!0,dt(),Fe(),Ae(),window.setTimeout(()=>{$e.current=!1},1500))},onMouseDown:e=>{typeof window>"u"||window.innerWidth>768||e.preventDefault()},onClick:()=>{if(Ee.current){Ee.current=!1;return}Ae()},disabled:!$.trim()&&S.length===0,"data-testid":"chat-send-btn",children:t.jsx(xs,{size:16})})]})]})]}),G&&t.jsx(Ds,{projectId:a,onClose:()=>V(!1),onCreate:Tt})]})}export{Fs as ChatView};
@@ -1 +0,0 @@
1
- .plugin-manager,.plugin-manager-detail{display:flex;flex-direction:column;gap:var(--space-lg);padding-inline:var(--space-xl);padding-block:var(--space-md)}.plugin-manager-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-sm);border-bottom:var(--btn-border-width) solid var(--border);gap:var(--space-sm)}.plugin-manager-header-title{font-size:13px;font-weight:600;color:var(--text);flex:1}.plugin-manager-actions{display:flex;gap:var(--space-sm);align-items:center}.plugin-install-form{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-lg);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.plugin-install-hint{margin:0;font-size:.85rem;color:var(--text-secondary, var(--text-muted));line-height:1.45}.plugin-install-hint code{padding:var(--btn-border-width) var(--space-xs);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--text-muted) 12%,transparent);font-size:.85em}.plugin-install-actions{display:flex;gap:var(--space-sm);justify-content:flex-end}.plugin-list{display:flex;flex-direction:column;gap:var(--space-sm)}.plugin-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);background:var(--surface);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast)}.plugin-item:hover{border-color:var(--text-dim)}.plugin-info{display:flex;align-items:center;gap:var(--space-sm);min-width:0}.plugin-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-version{font-size:.85rem}.plugin-state-badge{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:color-mix(in srgb,currentColor 12%,transparent)}.plugin-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.plugin-manager-detail-header,.plugin-detail-title{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}.plugin-detail-name{margin:0}.plugin-detail-content{display:flex;flex-direction:column;gap:var(--space-lg)}.plugin-detail-card{background:var(--surface);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.plugin-description{font-size:.95rem;color:var(--text-secondary, var(--text-muted));line-height:1.5}.plugin-detail-meta-row{display:flex;align-items:center;gap:var(--space-xs);font-size:.9rem;color:var(--text-muted)}.plugin-homepage{flex-wrap:wrap;align-items:flex-start}.plugin-homepage a{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--color-info);font-size:.85rem;flex-wrap:wrap;overflow-wrap:anywhere}.plugin-detail-section-heading{margin:0;padding:0;border:0;font-size:.95rem}.plugin-settings-form{display:flex;flex-direction:column;gap:var(--space-lg);margin-top:var(--space-xs)}.plugin-settings-form .form-group{padding:0;margin:0}.plugin-settings-array{display:flex;flex-direction:column;gap:var(--space-sm)}.plugin-settings-array-item{display:flex;align-items:center;gap:var(--space-sm)}.plugin-settings-array-item input{flex:1}.plugin-detail-actions{display:flex;gap:var(--space-sm);padding-top:var(--space-md);border-top:var(--btn-border-width) solid var(--border);justify-content:flex-end}.plugin-manager .empty-state,.plugin-manager .loading-state,.plugin-manager .settings-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);text-align:center;color:var(--text-muted)}.plugin-bundled-runtime-list{width:100%;display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.plugin-bundled-runtime-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.plugin-bundled-runtime-meta{display:flex;align-items:center;gap:var(--space-sm);row-gap:var(--space-xs);flex-wrap:wrap;min-width:0}.plugin-bundled-runtime-name{color:var(--text);font-size:.9rem;font-weight:500}.plugin-bundled-runtime-badge{display:inline-flex;align-items:center;padding:var(--btn-border-width) var(--space-xs);border-radius:var(--radius-pill);background:var(--status-in-review-bg);color:var(--in-review);font-size:.75rem;font-weight:600;text-transform:uppercase}.plugin-bundled-runtime-section{display:flex;flex-direction:column;gap:var(--space-sm)}.plugin-bundled-runtime-header{display:flex;flex-direction:column;gap:var(--space-xs)}.plugin-bundled-runtime-heading{margin:0;font-size:.95rem}.plugin-bundled-runtime-description{margin:0;font-size:.85rem;color:var(--text-muted)}.plugin-bundled-runtime-status{display:inline-flex;align-items:center;padding:var(--btn-border-width) var(--space-xs);border-radius:var(--radius-pill);font-size:.75rem;font-weight:600;text-transform:uppercase}@media(min-width:769px){.plugin-bundled-runtime-status{margin-left:auto}}.plugin-bundled-runtime-status--installed{background:var(--status-done-bg);color:var(--done)}.plugin-bundled-runtime-status--available{background:var(--status-todo-bg);color:var(--todo)}@media(max-width:768px){.plugin-manager,.plugin-manager-detail{padding-inline:var(--space-sm)}.plugin-manager-detail-header{gap:var(--space-sm)}.plugin-detail-title{gap:var(--space-xs)}.plugin-detail-card{padding:var(--space-md);gap:var(--space-sm)}.plugin-list{gap:var(--space-xs)}.plugin-item{padding:var(--space-md);flex-direction:column;align-items:stretch;gap:var(--space-sm)}.plugin-info{width:100%;flex-wrap:wrap;row-gap:var(--space-xs)}.plugin-name{flex:1 1 100%;white-space:normal}.plugin-actions{width:100%;justify-content:flex-end;flex-wrap:wrap;gap:var(--space-sm)}.plugin-actions .btn-icon,.plugin-actions .toggle-switch{min-width:36px;min-height:36px}.plugin-actions .toggle-switch{display:inline-flex;align-items:center;justify-content:center}.plugin-detail-actions{flex-wrap:wrap;justify-content:flex-start}.plugin-detail-actions button{flex:1 1 auto;min-height:36px}.plugin-bundled-runtime-item{flex-direction:column;align-items:stretch}.plugin-bundled-runtime-item .btn{min-height:36px}}
@@ -1 +0,0 @@
1
- import{r as o,j as n}from"./vendor-react-K0fH_qHe.js";import{D as T,e0 as ee,s as ne,X as A,av as se,Q as O,aW as M,a1 as V,R as te,e1 as ie,aQ as ae,cn as le,e2 as re,e3 as ce,e4 as de,e5 as ue,e6 as _,ck as oe}from"./index-DYDLmOcK.js";import{D as ge}from"./DirectoryPicker-CS1dwqcC.js";import"./vendor-xterm-DzcZoU0P.js";import"./folder-open-BiJpmnaT.js";const me=[{id:"fusion-plugin-agent-browser-runtime",name:"Agent Browser Runtime",path:"./plugins/fusion-plugin-agent-browser-runtime",experimental:!0},{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},{id:"fusion-plugin-droid-runtime",name:"Droid Runtime",path:"./plugins/fusion-plugin-droid-runtime",experimental:!0},{id:"fusion-plugin-dependency-graph",name:"Dependency Graph",path:"./plugins/fusion-plugin-dependency-graph"}],N={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function fe({addToast:l,projectId:c}){const[x,b]=o.useState([]),[S,w]=o.useState(!0),[G,f]=o.useState(!1),[j,v]=o.useState(""),[C,P]=o.useState(!1),[h,$]=o.useState(null),[i,y]=o.useState(null),[a,p]=o.useState({}),[H,I]=o.useState(!1),[R,E]=o.useState(null),{confirm:Q}=T(),g=o.useCallback(async()=>{try{w(!0);const e=await ee(c);b(e)}catch(e){l(`Failed to load plugins: ${e instanceof Error?e.message:String(e)}`,"error")}finally{w(!1)}},[c,l]);o.useEffect(()=>{g()},[g]);const J=o.useRef([]);J.current=x,o.useEffect(()=>{const e=c?`?projectId=${encodeURIComponent(c)}`:"",s=d=>{try{const t=JSON.parse(d.data);if(c&&t.projectId&&t.projectId!==c)return;switch(t.transition){case"installing":case"enabled":case"disabled":case"settings-updated":b(u=>{const m=u.findIndex(r=>r.id===t.pluginId);if(m>=0){const r=[...u];return r[m]={...r[m],enabled:t.enabled,state:t.state,settings:t.settings,error:t.error},r}else return g(),u});break;case"uninstalled":b(u=>u.filter(m=>m.id!==t.pluginId));break;case"error":b(u=>{const m=u.findIndex(r=>r.id===t.pluginId);if(m>=0){const r=[...u];return r[m]={...r[m],state:t.state,error:t.error},r}return u});break}}catch{}};return ne(`/api/events${e}`,{events:{"plugin:lifecycle":s},onReconnect:()=>{g()}})},[c,g]);const z=async()=>{if(!j.trim()){l("Please enter a plugin path","error");return}try{P(!0),await _({path:j},c),l("Plugin installed successfully","success"),f(!1),v(""),await g()}catch(e){l(`Failed to install plugin: ${e instanceof Error?e.message:String(e)}`,"error")}finally{P(!1)}},K=async e=>{try{E(e.id),await _({path:e.path},c),l(`${e.name} installed successfully`,"success"),await g()}catch(s){l(`Failed to install ${e.name}: ${s instanceof Error?s.message:String(s)}`,"error")}finally{E(null)}},B=async e=>{try{await de(e.id,c),l(`${e.name} enabled`,"success"),await g()}catch(s){l(`Failed to enable plugin: ${s instanceof Error?s.message:String(s)}`,"error")}},D=async e=>{try{await ce(e.id,c),l(`${e.name} disabled`,"success"),await g()}catch(s){l(`Failed to disable plugin: ${s instanceof Error?s.message:String(s)}`,"error")}},F=async e=>{try{$(e.id),await re(e.id,c),l(`${e.name} reloaded`,"success"),await g()}catch(s){l(`Failed to reload plugin: ${s instanceof Error?s.message:String(s)}`,"error")}finally{$(null)}},L=async e=>{if(await Q({title:"Uninstall Plugin",message:`Are you sure you want to uninstall "${e.name}"?`,danger:!0}))try{await ue(e.id,c),l(`${e.name} uninstalled`,"success"),await g(),y(null)}catch(d){l(`Failed to uninstall plugin: ${d instanceof Error?d.message:String(d)}`,"error")}},U=async e=>{y(e);try{I(!0);const s=await oe(e.id,c);p(s)}catch{p({})}finally{I(!1)}},W=async()=>{if(i)try{await le(i.id,a,c),l("Settings saved","success")}catch(e){l(`Failed to save settings: ${e instanceof Error?e.message:String(e)}`,"error")}};if(i)return n.jsxs("div",{className:"plugin-manager-detail","data-testid":"plugin-manager-detail",children:[n.jsxs("div",{className:"plugin-manager-detail-header",children:[n.jsx("button",{className:"btn-icon",onClick:()=>y(null),"aria-label":"Back to plugin list",children:n.jsx(A,{size:16})}),n.jsxs("div",{className:"plugin-detail-title",children:[n.jsx("h4",{className:"plugin-detail-name",children:i.name}),n.jsx("span",{className:"plugin-state-badge",style:{color:N[i.state]||N.installed},children:i.state})]})]}),n.jsxs("div",{className:"plugin-detail-content",children:[n.jsxs("div",{className:"plugin-detail-card",children:[i.description&&n.jsx("p",{className:"plugin-description",children:i.description}),i.author&&n.jsxs("p",{className:"plugin-detail-meta-row",children:[n.jsx("span",{className:"text-muted",children:"Author:"}),i.author]}),i.homepage&&n.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[n.jsx("span",{className:"text-muted",children:"Homepage:"}),n.jsxs("a",{href:i.homepage,target:"_blank",rel:"noopener noreferrer",children:[i.homepage,n.jsx(se,{size:12})]})]}),n.jsxs("p",{className:"plugin-detail-meta-row",children:[n.jsx("span",{className:"text-muted",children:"Version:"}),i.version]})]}),n.jsxs("div",{className:"plugin-detail-card",children:[n.jsx("h5",{className:"plugin-detail-section-heading",children:"Settings"}),H?n.jsx("p",{className:"text-muted",children:"Loading..."}):i.settingsSchema&&Object.keys(i.settingsSchema).length>0?n.jsxs("div",{className:"plugin-settings-form",children:[Object.entries(i.settingsSchema).map(([e,s])=>{const d=`setting-${e}-help`;return n.jsxs("div",{className:"form-group",children:[n.jsxs("label",{htmlFor:`setting-${e}`,children:[s.label||e,s.required&&" *"]}),s.type==="string"&&!s.multiline&&n.jsx("input",{className:"input",type:"text",id:`setting-${e}`,value:a[e]??"",onChange:t=>p({...a,[e]:t.target.value}),placeholder:s.description,"aria-describedby":s.description&&!s.required?d:void 0}),s.type==="string"&&s.multiline&&n.jsx("textarea",{className:"input",id:`setting-${e}`,rows:4,value:a[e]??"",onChange:t=>p({...a,[e]:t.target.value}),placeholder:s.description,"aria-describedby":s.description&&!s.required?d:void 0}),s.type==="password"&&n.jsx("input",{className:"input",type:"password",id:`setting-${e}`,value:a[e]??"",onChange:t=>p({...a,[e]:t.target.value}),placeholder:s.description,"aria-describedby":s.description&&!s.required?d:void 0}),s.type==="number"&&n.jsx("input",{className:"input",type:"number",id:`setting-${e}`,value:a[e]??"",onChange:t=>p({...a,[e]:Number(t.target.value)}),"aria-describedby":s.description&&!s.required?d:void 0}),s.type==="boolean"&&n.jsxs("label",{className:"checkbox-label",children:[n.jsx("input",{type:"checkbox",checked:a[e]??!1,onChange:t=>p({...a,[e]:t.target.checked})}),s.description]}),s.type==="enum"&&n.jsxs("select",{className:"select",id:`setting-${e}`,value:a[e]??"",onChange:t=>p({...a,[e]:t.target.value}),"aria-describedby":s.description&&!s.required?d:void 0,children:[n.jsx("option",{value:"",children:"Select..."}),s.enumValues?.map(t=>n.jsx("option",{value:t,children:t},t))]}),s.type==="array"&&n.jsxs("div",{className:"plugin-settings-array",children:[a[e]?.map((t,u)=>n.jsxs("div",{className:"plugin-settings-array-item",children:[n.jsx("input",{className:"input",type:s.itemType==="number"?"number":"text",value:t??"",onChange:m=>{const r=m.target.value,q=[...a[e]||[]];q[u]=s.itemType==="number"?Number(r):r,p({...a,[e]:q})}}),n.jsx("button",{className:"btn-icon",onClick:()=>{const r=[...a[e]||[]];r.splice(u,1),p({...a,[e]:r})},"aria-label":"Remove item",children:n.jsx(A,{size:14})})]},u)),n.jsxs("button",{className:"btn btn-secondary",onClick:()=>{const t=a[e]||[],u=s.itemType==="number"?0:"";p({...a,[e]:[...t,u]})},children:[n.jsx(O,{size:14})," Add Item"]})]}),s.description&&!s.required&&!s.multiline&&n.jsx("span",{id:d,className:"form-help",children:s.description})]},e)}),n.jsx("button",{className:"btn btn-primary",onClick:W,children:"Save Settings"})]}):n.jsx("p",{className:"text-muted",children:"No configurable settings."})]}),n.jsxs("div",{className:"plugin-detail-actions",children:[i.state==="started"&&n.jsxs("button",{className:"btn btn-secondary",onClick:()=>F(i),disabled:h===i.id,children:[n.jsx(M,{size:14,className:h===i.id?"spin":""}),h===i.id?"Reloading...":"Reload"]}),i.enabled?n.jsx("button",{className:"btn btn-secondary",onClick:()=>D(i),children:"Disable"}):n.jsx("button",{className:"btn btn-primary",onClick:()=>B(i),children:"Enable"}),n.jsxs("button",{className:"btn btn-danger",onClick:()=>L(i),children:[n.jsx(V,{size:14})," Uninstall"]})]})]})]});const X=new Set(x.map(e=>e.id)),Y=new Map(x.map(e=>[e.id,e])),k=x,Z=()=>n.jsxs("section",{className:"plugin-bundled-runtime-section","aria-label":"Bundled Plugins",children:[n.jsxs("div",{className:"plugin-bundled-runtime-header",children:[n.jsx("h4",{className:"plugin-bundled-runtime-heading",children:"Bundled Plugins"}),n.jsx("p",{className:"plugin-bundled-runtime-description",children:"Install Fusion's bundled plugins directly from this screen."})]}),n.jsx("div",{className:"plugin-bundled-runtime-list","aria-label":"Bundled plugin recommendations",children:me.map(e=>{const s=X.has(e.id);return n.jsxs("div",{className:"plugin-bundled-runtime-item",children:[n.jsxs("div",{className:"plugin-bundled-runtime-meta",children:[n.jsx("span",{className:"plugin-bundled-runtime-name",children:e.name}),e.experimental&&n.jsx("span",{className:"plugin-bundled-runtime-badge",children:"Experimental"}),n.jsx("span",{className:`plugin-bundled-runtime-status ${s?"plugin-bundled-runtime-status--installed":"plugin-bundled-runtime-status--available"}`,children:s?"Installed":"Not installed"})]}),n.jsx("button",{className:`btn ${s?"btn-secondary":"btn-primary"} btn-sm`,onClick:()=>{if(s){const d=Y.get(e.id);d&&U(d);return}K(e)},disabled:R===e.id,children:s?"Manage":R===e.id?"Installing...":`Install ${e.name}`})]},e.id)})})]});return n.jsxs("div",{className:"plugin-manager","data-testid":"plugin-manager",children:[n.jsxs("div",{className:"plugin-manager-header",children:[n.jsx("span",{className:"plugin-manager-header-title",children:"Installed Plugins"}),n.jsxs("div",{className:"plugin-manager-actions",children:[n.jsxs("button",{className:"btn btn-sm",onClick:g,title:"Refresh","aria-label":"Refresh plugin list",children:[n.jsx(te,{size:14,className:S?"spin":""}),"Refresh"]}),n.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>f(!0),children:[n.jsx(O,{size:14})," Install"]})]})]}),G&&n.jsxs("div",{className:"plugin-install-form",children:[n.jsxs("p",{className:"plugin-install-hint",children:["Browse to a plugin package root (contains ",n.jsx("code",{children:"manifest.json"}),") or a built ",n.jsx("code",{children:"dist"})," directory."]}),n.jsx(ge,{value:j,onChange:v,placeholder:"Absolute path to plugin directory or dist folder",onInputKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),z())}}),n.jsxs("div",{className:"plugin-install-actions",children:[n.jsx("button",{className:"btn btn-primary",onClick:z,disabled:C||!j.trim(),children:C?"Installing...":"Install Plugin"}),n.jsx("button",{className:"btn btn-secondary",onClick:()=>{f(!1),v("")},children:"Cancel"})]})]}),S?n.jsx("div",{className:"settings-empty-state",children:"Loading plugins..."}):n.jsxs(n.Fragment,{children:[k.length===0?n.jsxs("div",{className:"settings-empty-state",children:[n.jsx(ie,{size:32,className:"text-muted"}),n.jsx("p",{children:"No plugins installed."}),n.jsx("p",{className:"text-muted",children:"Install a plugin to get started, or use a bundled plugin below."})]}):n.jsx("div",{className:"plugin-list",children:k.map(e=>n.jsxs("div",{className:"plugin-item",children:[n.jsxs("div",{className:"plugin-info",children:[n.jsx("span",{className:"plugin-name",children:e.name}),n.jsxs("span",{className:"plugin-version text-muted",children:["v",e.version]}),n.jsx("span",{className:"plugin-state-badge",style:{color:N[e.state]||N.installed},children:e.state})]}),n.jsxs("div",{className:"plugin-actions",children:[e.state==="started"&&n.jsx("button",{className:"btn-icon",onClick:()=>F(e),disabled:h===e.id,title:"Reload",children:n.jsx(M,{size:14,className:h===e.id?"spin":""})}),n.jsxs("label",{className:"toggle-switch",children:[n.jsx("input",{type:"checkbox",checked:e.enabled,onChange:()=>e.enabled?D(e):B(e)}),n.jsx("span",{className:"toggle-slider"})]}),n.jsx("button",{className:"btn-icon",onClick:()=>U(e),title:"Settings",children:n.jsx(ae,{size:14})}),n.jsx("button",{className:"btn-icon",onClick:()=>L(e),title:"Uninstall",children:n.jsx(V,{size:14})})]})]},e.id))}),Z()]})]})}export{fe as PluginManager,N as STATE_COLORS};
@@ -1 +0,0 @@
1
- .settings-header-actions{display:flex;align-items:stretch;gap:var(--space-xs);margin-left:auto;margin-right:var(--space-sm)}.settings-header-actions>.settings-github-star-btn,.settings-header-actions>.btn{height:calc(var(--space-md) * 2 + var(--space-xs) / 2);box-sizing:border-box}@media(max-width:768px){.settings-header-actions>.btn-icon{min-height:calc(var(--space-md) * 3);min-width:calc(var(--space-md) * 3)}}.settings-github-star-btn{display:inline-flex;align-items:stretch;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--card);color:var(--text);font-size:12px;font-weight:500;text-decoration:none;overflow:hidden;transition:border-color var(--transition-fast),background var(--transition-fast)}.settings-github-star-btn:hover{border-color:var(--text-muted);background:var(--card-hover)}.settings-github-star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-color:var(--todo)}.settings-github-star-btn__action{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 2)}.settings-github-star-btn__count{display:inline-flex;align-items:center;padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 4);border-left:var(--btn-border-width) solid var(--border);background:color-mix(in srgb,var(--surface) 60%,var(--card));color:var(--text-muted);font-variant-numeric:tabular-nums}.settings-modal{width:min(95vw,1100px);max-width:95vw;min-width:520px;height:80vh;min-height:480px;max-height:calc(100dvh - var(--overlay-padding-top, 10vh) - 16px);overflow:hidden;resize:both}@media(max-width:768px){.modal-overlay.settings-modal-overlay,.modal-overlay:has(.settings-modal){padding:0;inset:0;align-items:stretch;justify-content:stretch}.modal.settings-modal{width:100vw;min-width:0;max-width:100vw;height:100dvh;min-height:100dvh;max-height:100dvh;margin:0;border:none;border-radius:0;resize:none;flex:1 1 auto}.modal.settings-modal[style*=--keyboard-overlap]{height:var(--vv-height, 100dvh);min-height:var(--vv-height, 100dvh);max-height:var(--vv-height, 100dvh);transform:translateY(var(--vv-offset-top, 0px));will-change:transform}}.settings-modal-heading{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-modal-heading h3{margin:0}.settings-modal-version{margin:0;font-size:.85rem;color:var(--text-muted);font-weight:500}.settings-update-check{display:flex;align-items:center;gap:var(--space-sm)}.settings-version-check-btn{--settings-inline-touch-target: calc(var(--space-lg) + var(--space-lg) + var(--space-xs));display:inline-flex;align-items:center;gap:var(--space-xs);margin:0;min-height:var(--settings-inline-touch-target);padding:var(--space-xs) var(--space-sm);border:none;background:transparent;color:var(--text-muted);cursor:pointer;transition:opacity var(--transition-fast),box-shadow var(--transition-fast)}.settings-version-check-btn:hover:not(:disabled){opacity:.85}.settings-version-check-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.settings-version-check-btn:disabled{cursor:default;opacity:.7}.settings-version-check-btn svg{color:var(--text-muted)}.settings-version-check-btn svg.spinning{animation:settings-update-spin 1s linear infinite}.settings-update-result{font-size:.85rem;font-weight:500}.settings-update-result--up-to-date{color:var(--color-success)}.settings-update-result--available{color:var(--color-info)}.settings-update-result--error{color:var(--text-muted)}.settings-update-result-link{color:var(--color-info);text-decoration:underline;transition:color var(--transition-fast),box-shadow var(--transition-fast)}.settings-update-result-link:hover{color:color-mix(in srgb,var(--color-info) 80%,var(--text))}.settings-update-result-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}@keyframes settings-update-spin{to{transform:rotate(360deg)}}.settings-layout{display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.settings-mobile-section-picker{display:none}.settings-sidebar{width:170px;min-width:170px;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;padding:10px 8px;gap:2px;background:color-mix(in srgb,var(--text) 10%,transparent);scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-sidebar::-webkit-scrollbar{width:6px}.settings-sidebar::-webkit-scrollbar-track{background:transparent}.settings-sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-sidebar::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-research-source-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}@media(max-width:768px){.settings-research-source-grid{grid-template-columns:1fr}}.settings-nav-item{display:block;width:100%;padding:var(--space-sm) var(--space-md);font-size:13px;font-weight:500;color:var(--text-muted);background:none;border:none;border-left:3px solid transparent;border-radius:0 var(--radius-md) var(--radius-md) 0;cursor:pointer;text-align:left;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.settings-nav-item:hover{background:var(--bg);color:var(--text);border-left-color:var(--border)}.settings-nav-item:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}.settings-nav-item.active{background:var(--bg);color:var(--todo);font-weight:600;border-left-color:var(--todo)}.settings-group-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);padding:var(--space-md) var(--space-md) var(--space-xs);margin-top:var(--space-sm);user-select:none}.settings-group-header:first-child{margin-top:0}.settings-content{flex:1;overflow-x:hidden;overflow-y:auto;padding:4px 0 12px;scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-content::-webkit-scrollbar{width:6px}.settings-content::-webkit-scrollbar-track{background:transparent}.settings-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-content::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-content>*{animation:settingsFadeIn var(--transition-normal)}@keyframes settingsFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.settings-section-heading{font-size:14px;font-weight:600;padding:var(--space-lg) var(--space-xl) var(--space-md);margin:0 0 var(--space-md);color:var(--text);border-bottom:1px solid var(--border)}.settings-content>.settings-section-heading:first-child,.settings-modal-section>.settings-section-heading:first-child{padding-top:var(--space-md)}.settings-section-heading--spaced{margin-top:var(--space-lg)}.settings-section-description{margin:0;padding:0 var(--space-xl);margin-bottom:var(--space-sm);color:var(--text-muted);font-size:13px;line-height:1.5}.settings-plugins-subsection-toggle{display:inline-flex;gap:var(--space-xs);padding:0 var(--space-xl);margin:var(--space-md) 0}.settings-plugins-subsection-btn{display:inline-flex;align-items:center;justify-content:center;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--surface);color:var(--text-muted);font-size:.85rem;font-weight:600;padding:var(--space-xs) var(--space-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.settings-plugins-subsection-btn:hover{background:var(--surface-hover, color-mix(in srgb, var(--text) 6%, transparent));color:var(--text)}.settings-plugins-subsection-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.settings-plugins-subsection-btn.active{background:color-mix(in srgb,var(--todo) 14%,transparent);border-color:color-mix(in srgb,var(--todo) 45%,var(--border));color:var(--todo)}.settings-plugins-subsection-panel{padding-bottom:var(--space-md)}.settings-scope-icon{margin-right:6px;display:inline-flex;vertical-align:middle;color:var(--text-muted)}.settings-scope-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xl);margin:0 var(--space-xl) var(--space-xs);font-size:12px;border-radius:var(--radius-md);color:var(--text-muted)}.settings-scope-global{background:color-mix(in srgb,var(--color-info) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-info) 40%,transparent)}.settings-scope-project{background:color-mix(in srgb,var(--color-success) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-success) 40%,transparent)}.settings-scope-mixed{background:color-mix(in srgb,var(--triage) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--triage) 40%,transparent)}.settings-note{display:block;padding:0 var(--space-xl);margin-top:var(--space-xs);font-size:12px;color:var(--text-muted)}.settings-overlap-ignore-group code{font-family:var(--font-mono);font-size:.9em}.settings-button-row{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}.settings-raw-output{margin:var(--space-sm) 0 0;padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);max-height:calc(var(--space-2xl) * 7);overflow:auto;font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs))}.settings-url-output{display:block;margin-top:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));overflow-wrap:anywhere;word-break:break-word;overflow-x:auto;max-width:100%}.settings-qr-preview{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.settings-qr-preview-label{margin:0;font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.settings-qr-preview-image-wrap{width:fit-content;max-width:100%;padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card)}.settings-qr-preview-image{display:block;width:min(calc(var(--space-2xl) * 6),100%);height:auto;aspect-ratio:1 / 1}.remote-provider-selector{display:flex;gap:var(--space-xs);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-xs);background:var(--surface)}.remote-provider-option{position:relative;flex:1;cursor:pointer}.remote-provider-option input{position:absolute;opacity:0;width:0;height:0}.remote-provider-option span{display:block;padding:var(--space-sm) var(--space-md);text-align:center;border-radius:var(--radius-sm);border:var(--btn-border-width) solid transparent;color:var(--text-muted);transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.remote-provider-option input:checked+span{background:var(--card);color:var(--text);border-color:var(--border)}.remote-provider-option input:focus-visible+span{box-shadow:var(--focus-ring-strong)}.remote-status-bar{--status-color: var(--text-muted);display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:0 var(--space-xl) var(--space-md);background:color-mix(in srgb,var(--status-color) 10%,transparent)}.remote-status-bar--running{--status-color: var(--color-success)}.remote-status-bar--starting{--status-color: var(--color-warning)}.remote-status-bar--error{--status-color: var(--color-error)}.remote-status-bar--stopped{--status-color: var(--text-muted)}.remote-share-block{display:flex;flex-direction:column;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--text-muted) 5%,transparent)}.remote-share-row{display:flex;flex-direction:column;gap:var(--space-xs)}.remote-share-row .settings-qr-preview-image{margin-top:var(--space-xs)}.remote-status-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;display:inline-block;flex-shrink:0}.remote-status-dot--running{background:var(--color-success)}.remote-status-dot--starting{background:var(--color-warning)}.remote-status-dot--error{background:var(--color-error)}.remote-status-dot--stopped{background:var(--text-muted)}.remote-status-url{margin-left:auto;font-family:var(--font-mono);overflow-wrap:anywhere;word-break:break-word;user-select:all}.remote-provider-settings{display:flex;flex-direction:column;gap:var(--space-sm)}.remote-cli-detection{display:flex;align-items:flex-start;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm)}.remote-cli-detection--available{background:color-mix(in srgb,var(--color-success) 10%,transparent);color:var(--color-success)}.remote-cli-detection--missing{background:color-mix(in srgb,var(--color-warning) 10%,transparent);color:var(--color-warning)}.remote-cli-detection-content{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text)}.remote-cli-detection .btn{align-self:flex-start}.remote-cli-install-error{color:var(--color-error)}.remote-cli-manual{color:var(--text-dim)}.remote-external-tunnel-panel{display:flex;flex-direction:column;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-info) 10%,transparent)}.remote-external-tunnel-header{display:flex;align-items:center;gap:var(--space-sm);color:var(--color-info)}.remote-external-tunnel-qr{display:flex;flex-direction:column;gap:var(--space-xs)}.remote-external-tunnel-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.remote-advanced-details{margin:var(--space-lg) var(--space-xl) 0;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);background:var(--surface)}.remote-advanced-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.remote-advanced-details>summary::-webkit-details-marker{display:none}.remote-advanced-details>summary:before{content:"▸";margin-right:var(--space-xs)}.remote-advanced-details[open]>summary:before{content:"▾"}.settings-option-details{margin-top:var(--space-xs)}.settings-option-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.settings-option-details>summary::-webkit-details-marker{display:none}.settings-option-details>summary:before{content:"▸";margin-right:var(--space-xs)}.settings-option-details[open]>summary:before{content:"▾"}.remote-cf-advanced-details{margin-top:var(--space-xs)}.remote-cf-advanced-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.remote-cf-advanced-details>summary::-webkit-details-marker{display:none}.remote-cf-advanced-details>summary:before{content:"▸";margin-right:var(--space-xs)}.remote-cf-advanced-details[open]>summary:before{content:"▾"}.remote-cf-advanced-fields{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.remote-tunnel-actions{margin-top:var(--space-md)}.remote-tunnel-actions .btn{width:100%}.settings-overlap-ignore-list{display:flex;flex-direction:column;gap:var(--space-sm);margin:var(--space-sm) 0}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-sm);align-items:center}.settings-overlap-path-picker-modal{max-width:min(960px,calc(100vw - var(--space-2xl)))}.settings-overlap-path-picker-body{display:flex;flex-direction:column;gap:var(--space-sm);max-height:min(70vh,720px)}.settings-overlap-path-picker-note{margin:0;font-size:12px;color:var(--text-muted)}.settings-section-divider{border-top:1px solid var(--border);margin:var(--space-lg) var(--space-xl)}@media(max-width:768px){.settings-note{padding:0 var(--space-lg)}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{grid-template-columns:minmax(0,1fr)}.settings-overlap-ignore-row>.btn{justify-self:start}.settings-overlap-path-picker-modal{max-width:calc(100vw - var(--space-md))}.remote-provider-selector{flex-direction:column}.remote-status-bar{flex-wrap:wrap;margin:0 var(--space-lg) var(--space-md)}.remote-share-block{margin:0 var(--space-lg) var(--space-md)}.remote-status-url{width:100%;margin-left:0;font-size:.8em}.remote-provider-option,.remote-tunnel-actions .btn{min-height:36px}.remote-cli-detection,.remote-external-tunnel-panel{margin:0 var(--space-lg) var(--space-md)}}.ntfy-advanced-disclosure{margin-top:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.ntfy-advanced-disclosure>summary{cursor:pointer;list-style:none;padding:var(--space-sm) var(--space-md);font-size:12px;font-weight:600;color:var(--text)}.ntfy-advanced-disclosure>summary::-webkit-details-marker{display:none}.ntfy-advanced-content{padding:0 var(--space-md) var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.settings-inline-link{color:var(--todo);text-decoration:none;transition:text-decoration var(--transition-fast)}.settings-inline-link:hover{text-decoration:underline}.settings-inline-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.notification-provider-card{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-lg);background:var(--surface);margin:0 var(--space-xl) var(--space-lg);overflow:hidden}.notification-provider-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border)}.notification-provider-body{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.notification-provider-actions{display:flex;gap:var(--space-sm);padding-top:var(--space-md);border-top:var(--btn-border-width) solid var(--border);margin-top:var(--space-md)}.memory-status-message{display:flex;gap:var(--space-md);align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.memory-status-message span{min-width:0}.memory-retrieval-test{margin-top:var(--space-lg)}.memory-test-result{margin:0 var(--space-xl) var(--space-lg);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-test-result strong,.memory-test-result span{color:var(--text);font-size:12px}.memory-test-result small{display:block;margin-top:var(--space-xs);color:var(--text-muted);font-size:12px}.memory-test-result ul{margin:var(--space-md) 0 0;padding:0;list-style:none}.memory-test-result li{padding-top:var(--space-sm);border-top:var(--btn-border-width) solid var(--border)}.memory-test-result li+li{margin-top:var(--space-sm)}.memory-test-result p{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.memory-editor-section{margin-top:var(--space-lg)}.memory-file-summary{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-xs) var(--space-md);align-items:center;margin:0 var(--space-xl) var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-file-summary span{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent);font-size:11px;font-weight:600}.memory-file-summary strong{min-width:0;overflow-wrap:anywhere;color:var(--text);font-family:var(--font-mono);font-size:12px}.memory-file-summary small{grid-column:2;color:var(--text-muted);font-size:12px}.memory-editor-frame{min-height:50vh;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column}.auth-panel-body{padding-inline:var(--space-md)}.auth-section-hint{padding:var(--space-md) var(--space-lg);margin-bottom:12px;background:var(--bg-tertiary);border-radius:var(--radius-md);font-size:13px;color:var(--text-muted);border-left:3px solid var(--text-muted)}.auth-provider-group{margin-bottom:10px}.auth-group-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:4px;padding:0 4px}.auth-provider-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:4px;overflow:hidden;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.auth-provider-card:hover{border-color:var(--text-dim)}.auth-provider-card--authenticated{border-color:color-mix(in srgb,var(--color-success) 40%,var(--border));background:color-mix(in srgb,var(--color-success) 5%,var(--surface))}.auth-provider-card--authenticated:hover{border-color:color-mix(in srgb,var(--color-success) 60%,var(--border))}.auth-provider-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:12px}.auth-provider-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.auth-provider-info strong{font-weight:500;color:var(--text)}.auth-provider-icon-slot{display:inline-flex;align-items:center;justify-content:center;inline-size:calc(var(--space-md) + var(--space-xs) * 2);block-size:calc(var(--space-md) + var(--space-xs) * 2);flex-shrink:0}.auth-provider-icon-slot .provider-icon{display:inline-flex}.auth-hint{display:block;padding:12px 4px 0;font-size:12px;color:var(--text-muted);border-top:1px solid var(--border);margin-top:8px}.auth-apikey-section{display:flex;flex-direction:column;gap:4px;align-items:flex-end;flex-shrink:0}.auth-apikey-input-row{display:flex;gap:6px;align-items:center}.auth-apikey-input{background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:6px 10px;font-size:13px;width:180px;font-family:monospace}.auth-apikey-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.auth-apikey-input:disabled{opacity:.6}.auth-apikey-progress{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding-right:4px}.auth-apikey-error{font-size:11px;color:var(--color-error);padding-right:4px}.auth-provider-actions-row{display:inline-flex;align-items:center;gap:var(--space-sm)}.auth-key-hint{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);display:inline-block;margin-top:var(--space-xs);user-select:none}.settings-lane-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500;white-space:nowrap}.settings-lane-badge--override{background-color:color-mix(in srgb,var(--color-accent) 20%,transparent);color:var(--color-accent)}.settings-lane-badge--inherited{background-color:color-mix(in srgb,var(--color-text-muted) 15%,transparent);color:var(--text-muted)}.settings-description{font-size:13px;color:var(--text-secondary);padding-inline:var(--space-xl);margin-block:0 var(--space-md);line-height:1.5}.settings-token-cap-row{display:flex;align-items:center;gap:var(--space-sm)}.settings-model-lane-label-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}.settings-model-lane-control-row{display:flex;align-items:center;gap:var(--space-sm)}.settings-model-lane-control-main{flex:1}.settings-summarization-actions{justify-content:flex-start}.settings-model-presets{display:flex;flex-direction:column;gap:var(--space-md)}.settings-preset-list{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-item{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.settings-preset-item-meta{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.settings-preset-item-meta strong{color:var(--text);overflow-wrap:anywhere}.settings-preset-summary{font-size:12px;overflow-wrap:anywhere}.settings-preset-item-actions{display:flex;gap:var(--space-xs);flex-wrap:wrap;justify-content:flex-end}.settings-preset-actions{display:flex;justify-content:flex-start}.settings-preset-editor{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,var(--card))}.settings-preset-editor-fields{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-editor .form-group{padding:0}.settings-preset-editor-actions{justify-content:flex-start;margin-top:0;padding:0}.settings-preset-auto-select{margin-top:var(--space-sm)}.settings-preset-size-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm)}.settings-preset-size-row{padding:0}@media(max-width:768px){.settings-layout{flex-direction:column;min-height:0}.settings-mobile-section-picker{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border);background:var(--surface)}.settings-mobile-section-picker label{color:var(--text-muted);font-weight:600;text-transform:uppercase}.settings-mobile-section-picker select{width:100%}.settings-mobile-section-picker select:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.settings-sidebar{display:none}.settings-nav-item{display:flex;align-items:center;justify-content:center;gap:4px;border-left:none;border-bottom:2px solid transparent;border-radius:var(--radius-md) var(--radius-md) 0 0;padding:6px 12px;white-space:nowrap}.settings-nav-item:hover{border-left-color:transparent;border-bottom-color:var(--border)}.settings-nav-item.active{border-left-color:transparent;border-bottom-color:var(--todo)}.settings-group-header{display:none}.notification-provider-card{margin:0 var(--space-lg) var(--space-md)}.notification-provider-header{padding:var(--space-sm) var(--space-md)}.notification-provider-body{padding:var(--space-md)}.settings-scope-icon{margin-right:0}.settings-content{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto}.settings-content .form-group small{overflow-wrap:break-word;word-break:break-all}.settings-content input,.settings-content select,.settings-content textarea{font-size:16px}.settings-section-heading{padding:var(--space-lg) var(--space-lg) var(--space-md);margin:0 0 var(--space-md)}.settings-plugins-subsection-toggle{display:flex;width:100%;padding:0 var(--space-lg)}.settings-plugins-subsection-btn{flex:1;min-height:36px}.settings-plugins-subsection-panel{padding-left:var(--space-lg);padding-right:var(--space-lg)}.form-group{padding:0 14px}.settings-scope-banner{padding:var(--space-sm) var(--space-lg)}.memory-editor-frame{min-height:45vh}.memory-file-summary{grid-template-columns:1fr;margin:0 var(--space-lg) var(--space-md)}.memory-status-message{align-items:stretch;flex-direction:column}.memory-file-summary span{justify-content:flex-start}.memory-file-summary small{grid-column:auto}.settings-description{padding:0 var(--space-lg)}.settings-content .btn,.settings-preset-item-actions .btn{min-height:36px}.auth-provider-row{flex-wrap:wrap;padding:var(--space-md) calc(var(--space-md) + var(--space-xs) / 2);gap:var(--space-sm)}.auth-section-hint{margin:0 14px 12px;padding:10px 14px}.auth-provider-group{margin-bottom:12px}.auth-group-label{padding:0 14px}.auth-provider-card{margin:0 14px 8px}.auth-provider-header{flex-wrap:wrap;padding:10px 14px;gap:10px}.auth-provider-header>div:not(.auth-provider-info):not(.auth-apikey-section){margin-left:auto}.auth-provider-actions-row{width:100%;justify-content:flex-end}.auth-provider-info{width:100%;flex-basis:100%}.auth-apikey-section{width:100%;flex-basis:100%;align-items:flex-end}.auth-apikey-input-row{width:100%;flex-wrap:wrap;justify-content:flex-end}.auth-apikey-input{flex:1;min-width:120px;width:auto}.auth-apikey-input-row .btn{flex-shrink:0;margin-left:auto}.auth-hint{padding:12px 14px 0}.settings-model-presets{gap:var(--space-sm)}.settings-preset-item{flex-direction:column;align-items:stretch;padding:var(--space-sm) var(--space-md)}.settings-preset-item-actions{justify-content:flex-start}.settings-preset-editor{padding:var(--space-sm) var(--space-md)}.settings-preset-editor-actions{flex-wrap:wrap}.settings-preset-size-grid{grid-template-columns:1fr;gap:var(--space-xs)}.settings-node-routing-note{padding:var(--space-sm) var(--space-md);font-size:12px}}.settings-node-routing-note{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);margin-top:var(--space-sm);color:var(--text-muted);font-size:13px;line-height:1.5}.settings-node-status{display:inline-flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);font-size:12px;color:var(--text-muted)}.auth-advanced-disclosure{margin-top:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.auth-advanced-disclosure>summary{cursor:pointer;padding:var(--space-sm) var(--space-md)}.auth-advanced-content{display:flex;flex-direction:column;gap:var(--space-sm);padding:0 var(--space-md) var(--space-md)}.auth-custom-provider-item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm)}.auth-custom-provider-actions{display:flex;gap:var(--space-sm)}@media(max-width:768px){.auth-custom-provider-item{flex-direction:column;align-items:flex-start}}