@runfusion/fusion 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +6767 -5200
- package/dist/client/assets/AgentDetailView-B20ApPe1.js +18 -0
- package/dist/client/assets/AgentDetailView-B5tq9ius.css +1 -0
- package/dist/client/assets/AgentsView-Bkk-uBij.css +1 -0
- package/dist/client/assets/AgentsView-ChN1tgQ0.js +522 -0
- package/dist/client/assets/ChatView-oPMFwmoc.js +1 -0
- package/dist/client/assets/{DevServerView-UkgjEw9-.js → DevServerView-DQrVLbK5.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-Cls4HWxP.js → DirectoryPicker-DVmy6sLM.js} +1 -1
- package/dist/client/assets/{DocumentsView-BRBUPFVA.js → DocumentsView-DHEv-Q2a.js} +1 -1
- package/dist/client/assets/{InsightsView-BRDqHCLb.js → InsightsView-ByyY7GX7.js} +2 -2
- package/dist/client/assets/{MemoryView-DvTrwFnQ.js → MemoryView-Udiu0u8R.js} +2 -2
- package/dist/client/assets/{NodesView-C4Ffl_o0.js → NodesView-CupS-GGc.js} +4 -4
- package/dist/client/assets/{PiExtensionsManager-CeI1syeZ.js → PiExtensionsManager-DXs2xI8K.js} +3 -3
- package/dist/client/assets/{PluginManager-BgeoYhLk.js → PluginManager-BCpiZf4_.js} +1 -1
- package/dist/client/assets/ResearchView-BG9Feaeb.js +1 -0
- package/dist/client/assets/ResearchView-BzRdUzNq.css +1 -0
- package/dist/client/assets/{RoadmapsView-DNb4x75S.js → RoadmapsView-BTJtmBnF.js} +2 -2
- package/dist/client/assets/SettingsModal-DZ_LaEhd.js +31 -0
- package/dist/client/assets/{SettingsModal-CDPDmHhd.css → SettingsModal-DcGFm6NR.css} +1 -1
- package/dist/client/assets/{SettingsModal-CRMr4tL6.js → SettingsModal-eNCZiHa6.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-tF8B_aG_.js → SetupWizardModal-yf79TN1L.js} +1 -1
- package/dist/client/assets/SkillMultiselect-DDHJnrkn.css +1 -0
- package/dist/client/assets/SkillMultiselect-DOj5vX4U.js +1 -0
- package/dist/client/assets/SkillsView-CgnCnikX.js +1 -0
- package/dist/client/assets/{TodoView-CbzDtV53.js → TodoView-67BMyICY.js} +2 -2
- package/dist/client/assets/{folder-open-DPpmGJ-v.js → folder-open-D11gjHGK.js} +1 -1
- package/dist/client/assets/index-BLn1R7Ob.css +1 -0
- package/dist/client/assets/index-CLAHcGnI.js +656 -0
- package/dist/client/assets/{list-checks-D62pw1I8.js → list-checks-CBzPc3GA.js} +1 -1
- package/dist/client/assets/{star-B8EbxNgI.js → star-BWcRk8nt.js} +1 -1
- package/dist/client/assets/{upload-CpnLno9z.js → upload-91TM4ljC.js} +1 -1
- package/dist/client/assets/{users-B_C_0qzA.js → users-BAsI___L.js} +1 -1
- package/dist/client/fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
- package/dist/client/index.html +16 -2
- package/dist/client/theme-data.css +1 -1
- package/dist/client/version.json +1 -1
- package/dist/extension.js +20614 -19502
- package/dist/pi-claude-cli/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +2 -0
- package/skill/fusion/references/cli-commands.md +14 -0
- package/skill/fusion/references/engine-tools.md +5 -0
- package/skill/fusion/references/extension-tools.md +76 -0
- package/skill/fusion/references/fusion-capabilities.md +8 -0
- package/dist/client/assets/AgentDetailView-BtpZ4jxh.js +0 -18
- package/dist/client/assets/AgentDetailView-DIBOY8V-.css +0 -1
- package/dist/client/assets/AgentsView-Dxdtt0Bm.js +0 -522
- package/dist/client/assets/AgentsView-MotzGhZJ.css +0 -1
- package/dist/client/assets/ChatView-Bra9fNAG.js +0 -1
- package/dist/client/assets/ResearchView-BVJFgfat.css +0 -1
- package/dist/client/assets/ResearchView-fmEOm4A2.js +0 -1
- package/dist/client/assets/SettingsModal-D1xq0WZm.js +0 -31
- package/dist/client/assets/SkillsView-uyl47gSf.js +0 -1
- package/dist/client/assets/index-BqK6TvSa.css +0 -1
- package/dist/client/assets/index-DyXZm9QN.js +0 -656
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.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-pulse{width:8px;height:8px;background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.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}}.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)}}.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-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:13px}.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-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}@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-footer{flex-wrap:wrap;gap:var(--space-xs)}.agent-dialog-footer>.btn{flex:1 1 auto;min-width:0}}.skill-multiselect{display:flex;flex-direction:column;gap:var(--space-sm)}.skill-multiselect-label{font-size:13px;font-weight:500;color:var(--text-secondary)}.skill-multiselect-chips{display:flex;flex-wrap:wrap;gap:4px}.skill-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:4px;font-size:12px;line-height:1.4}.skill-chip-name{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;padding:0;background:transparent;border:none;border-radius:2px;color:var(--text-muted);font-size:14px;line-height:1;cursor:pointer;transition:color .15s,background .15s}.skill-chip-remove:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}.skill-chip-remove:disabled{opacity:.5;cursor:not-allowed}.skill-multiselect-add{min-height:32px}.skill-multiselect-loading,.skill-multiselect-empty{font-size:13px;color:var(--text-muted);padding:4px 0}.skill-multiselect-dropdown{width:100%;font-size:13px}.agent-dialog-skills-hint{margin-top:4px;font-size:12px}.skill-badge-row{display:flex;flex-wrap:wrap;gap:4px}.skill-badge{display:inline-block;padding:2px 6px;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:4px;font-size:11px;line-height:1.4}.badge-skill{background:var(--bg-tertiary);color:var(--text-secondary)}.agent-board-skills{display:flex;flex-wrap:wrap;gap:4px;padding:4px 8px}.skill-badge-sm{display:inline-block;padding:1px 5px;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:3px;font-size:10px;line-height:1.4}.skill-badge-extra{background:var(--bg-secondary)}.agent-tree__skill{display:inline-block;padding:1px 5px;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:3px;font-size:10px;line-height:1.4;margin-left:6px}.org-chart-node__skill{display:inline-block;padding:1px 5px;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:3px;font-size:10px;line-height:1.4}.divider{color:var(--border)}.text-muted{color:var(--text-muted)}.link{display:inline-flex;align-items:center;gap:4px;color:var(--todo);text-decoration:none}.link:hover{text-decoration:underline}.text-secondary{color:var(--text-muted)}.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 e}from"./vendor-react-K0fH_qHe.js";import{j as _e,aG as Mt,g as Tt,aH as At,a as $t,aI as Rt,aJ as Dt,aK as Pt,aL as Et,aM as Ft,aN as Lt,s as _t,aO as It,aP as Ot,aQ as Ut,h as zt,a7 as et,a8 as tt,S as Ht,N as Ke,D as Je,ak as Vt,aR as Bt,B as Ae,a4 as st,a5 as nt,aS as Gt,aT as qt,aU as Kt,aV as Jt,aW as Wt,aX as Qt,aY as Yt,aZ as We,i as Xt,u as Qe,l as Zt}from"./index-DyXZm9QN.js";import"./vendor-xterm-DzcZoU0P.js";const Le="kb-chat-active-session";function es(a){const i=a?.toolCalls;if(!Array.isArray(i))return;const r=i.map(l=>{if(!l||typeof l!="object")return null;const c=l,N=typeof c.toolName=="string"?c.toolName:"";if(!N)return null;const j=c.args;return{toolName:N,...j&&typeof j=="object"?{args:j}:{},isError:!!c.isError,result:c.result,status:"completed"}}).filter(l=>l!==null);return r.length>0?r:void 0}function Ye(a){return{id:a.id,sessionId:a.sessionId,role:a.role,content:a.content,thinkingOutput:a.thinkingOutput,toolCalls:es(a.metadata),attachments:a.attachments,createdAt:a.createdAt}}function ts(a){const[i,r]=s.useState([]),[l,c]=s.useState(null),[N,j]=s.useState(!0),[$,w]=s.useState([]),[D,z]=s.useState(!1),[p,F]=s.useState(!1),[C,M]=s.useState(""),[f,x]=s.useState(""),[T,k]=s.useState([]),[H,L]=s.useState(""),[ee,K]=s.useState(""),[_,X]=s.useState(!0),[h,y]=s.useState(new Map),v=s.useRef(null),I=s.useRef(!1),V=s.useRef(""),oe=s.useRef(null),de=s.useRef(i),pe=s.useRef(l),xe=s.useRef(p);de.current=i,pe.current=l,xe.current=p,s.useEffect(()=>{V.current=H},[H]);const ve=s.useRef(new Set),ue=s.useRef(0),Ne=s.useRef(a);Ne.current!==a&&(Ne.current=a,ue.current++),s.useEffect(()=>{const u=ue.current;_e(void 0,a).then(g=>{if(ue.current!==u)return;const m=new Map;for(const R of g)m.set(R.id,R);y(m)}).catch(()=>{})},[a]);const J=s.useCallback(async()=>{j(!0);try{const g=[...(await Mt(a)).sessions].sort((m,R)=>new Date(R.updatedAt).getTime()-new Date(m.updatedAt).getTime());r(g)}catch{}finally{j(!1)}},[a]);s.useEffect(()=>{J()},[J]);const se=s.useRef(()=>{});s.useEffect(()=>{if(N)return;const u=Tt(Le,a);u&&i.find(m=>m.id===u)&&se.current(u)},[N,i,a]);const re=s.useCallback(async(u,g)=>{z(!0);try{const m=await At(u,{limit:50,...g},a),R=m.messages.map(Ye);g?.offset&&g.offset>0?w(O=>[...R,...O]):w(R),X(m.messages.length>=50)}catch{}finally{z(!1)}},[a]),ne=s.useCallback((u,g)=>{v.current&&(v.current.close(),v.current=null);const m=g??i.find(R=>R.id===u);c(m||null),M(""),x(""),k([]),F(!1),X(!0),u?re(u):w([]),u?$t(Le,u,a):Rt(Le,a)},[i,re,a]);se.current=ne;const Se=s.useCallback(async u=>{const g=await Dt(u,a);v.current&&(v.current.close(),v.current=null);const m={id:g.session.id,title:g.session.title,agentId:g.session.agentId,status:g.session.status,modelProvider:g.session.modelProvider,modelId:g.session.modelId,createdAt:g.session.createdAt,updatedAt:g.session.updatedAt};return r(R=>R.some(O=>O.id===m.id)?R:[m,...R]),ne(m.id,m),w([]),m},[a,ne]),he=s.useCallback(async u=>{await Pt(u,{status:"archived"},a),r(g=>g.filter(m=>m.id!==u)),l?.id===u&&(c(null),w([]))},[l,a]),be=s.useCallback(async u=>{l?.id===u&&v.current&&(v.current.close(),v.current=null),await Et(u,a),r(g=>g.filter(m=>m.id!==u)),l?.id===u&&(c(null),w([]))},[l,a]),le=s.useCallback(async()=>{!l||!_||await re(l.id,{offset:$.length})},[l,_,re,$.length]),te=s.useCallback(()=>{l&&(I.current=!0,oe.current?.(),oe.current=null,v.current?.close(),v.current=null,Ft(l.id,a).catch(()=>{}),F(!1),M(""),x(""),k([]))},[l,a]),ce=s.useCallback(()=>{V.current="",L("")},[]),me=s.useCallback((u,g)=>{if(!l)return;if(p){V.current=u,L(u);return}I.current=!1,v.current&&(v.current.close(),v.current=null);const m=`temp-${Date.now()}`,R={id:m,sessionId:l.id,role:"user",content:u,createdAt:new Date().toISOString()};w(S=>[...S,R]),M(""),x(""),k([]),F(!0);let O="",ae="",B=[],W=null,G=null;const q=()=>{W=null,M(O)},P=()=>{G=null,x(ae)},d=()=>{W!==null&&(cancelAnimationFrame(W),W=null),G!==null&&(cancelAnimationFrame(G),G=null)};oe.current=d;const U={onThinking:S=>{ae+=S,G===null&&(G=requestAnimationFrame(P))},onText:S=>{O+=S,W===null&&(W=requestAnimationFrame(q))},onToolStart:S=>{B=[...B,{toolName:S.toolName,args:S.args,isError:!1,status:"running"}],k(B)},onToolEnd:S=>{const b=[...B];for(let Q=b.length-1;Q>=0;Q--){const A=b[Q];if(A?.toolName===S.toolName&&A.status==="running"){b[Q]={...A,status:"completed",isError:S.isError,result:S.result},B=b,k(b);return}}B=[...b,{toolName:S.toolName,isError:S.isError,result:S.result,status:"completed"}],k(B)},onDone:S=>{d();const b={id:S.messageId||`msg-${Date.now()}`,sessionId:l.id,role:"assistant",content:O,thinkingOutput:ae,toolCalls:B.length>0?B:void 0,createdAt:new Date().toISOString()};ve.current.add(b.id),w(A=>[...A,b]),M(""),x(""),k([]),F(!1),v.current=null,setTimeout(()=>{ve.current.delete(b.id)},1e3),J();const Q=V.current.trim();Q&&(V.current="",L(""),me(Q))},onError:S=>{if(d(),w(b=>b.filter(Q=>Q.id!==m)),M(""),x(""),k([]),F(!1),v.current=null,console.error("[useChat] Stream error:",S),!I.current){const b=V.current.trim();b&&(V.current="",L(""),me(b))}}};v.current=Lt(l.id,u,U,g,a)},[l,p,a,J]),we=ee?i.filter(u=>u.title?.toLowerCase().includes(ee.toLowerCase())||u.agentId.toLowerCase().includes(ee.toLowerCase())):i;return s.useEffect(()=>{const u=ue.current,g=a?`?projectId=${encodeURIComponent(a)}`:"",m=()=>ue.current!==u,R=q=>{if(m())return;const P=JSON.parse(q.data);r(d=>d.some(U=>U.id===P.id)?d:[P,...d])},O=q=>{if(m())return;const P=JSON.parse(q.data);r(d=>[...d.map(S=>S.id===P.id?P:S)]),pe.current?.id===P.id&&c(P)},ae=q=>{if(m())return;const{id:P}=JSON.parse(q.data);r(d=>d.filter(U=>U.id!==P)),pe.current?.id===P&&(c(null),w([]))},B=q=>{if(m())return;const P=JSON.parse(q.data),d=Ye(P);ve.current.has(d.id)||pe.current?.id===d.sessionId&&!xe.current&&w(U=>U.some(S=>S.id===d.id)?U:[...U,d])},W=q=>{if(m())return;const{id:P}=JSON.parse(q.data);w(d=>d.filter(U=>U.id!==P))};return _t(`/api/events${g}`,{events:{"chat:session:created":R,"chat:session:updated":O,"chat:session:deleted":ae,"chat:message:added":B,"chat:message:deleted":W}})},[a]),s.useEffect(()=>()=>{v.current&&(v.current.close(),v.current=null)},[]),{sessions:i,activeSession:l,sessionsLoading:N,messages:$,messagesLoading:D,isStreaming:p,streamingText:C,streamingThinking:f,streamingToolCalls:T,pendingMessage:H,selectSession:ne,createSession:Se,archiveSession:he,deleteSession:be,sendMessage:me,stopStreaming:te,clearPendingMessage:ce,loadMoreMessages:le,hasMoreMessages:_,searchQuery:ee,setSearchQuery:K,filteredSessions:we,refreshSessions:J,agentsMap:h}}function at(a){const i=new Date(a),l=new Date().getTime()-i.getTime(),c=Math.floor(l/1e3),N=Math.floor(c/60),j=Math.floor(N/60),$=Math.floor(j/24);return c<60?"just now":N<60?`${N}m ago`:j<24?`${j}h ago`:$<7?`${$}d ago`:i.toLocaleDateString()}function Xe(a,i){if(!a||!i)return null;const r=i.toLowerCase();if(r.includes("claude")){let c=i.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return c=c.replace(/\s+/g," "),c.length>30?c.slice(0,30)+"…":c}if(r.includes("gpt")||r.includes("openai")){const c=i.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return c.length>30?c.slice(0,30)+"…":c}if(r.includes("gemini")){const c=i.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return c.length>30?c.slice(0,30)+"…":c}const l=i.replace(/-/g," ").replace(/^\w/,c=>c.toUpperCase()).replace(/\s+/g," ").trim();return l.length>30?l.slice(0,30)+"…":l}function Me(a,i){return a.length<=i?a:`${a.slice(0,i)}…`}function ss(a){if(!a)return null;const i=Object.entries(a);return i.length===0?null:i.map(([r,l])=>{const c=typeof l=="string"?l:(()=>{try{return JSON.stringify(l)}catch{return String(l)}})();return`${r}=${Me(c,50)}`}).join(", ")}function ns(a){if(a===void 0)return null;if(typeof a=="string")return Me(a,200);try{return Me(JSON.stringify(a),200)}catch{return Me(String(a),200)}}function it(a){if(!a||a.length===0)return null;const i=(p,F)=>{const C=p.status==="running",M=p.status==="completed"&&p.isError,f=ss(p.args),x=ns(p.result),T=C?f:x?`result: ${x}`:f?`args: ${f}`:null,k=C?"running":M?"error":"completed";return e.jsxs("details",{className:`chat-tool-call${C?" chat-tool-call--running":""}${M?" chat-tool-call--error":""}`,open:C,children:[e.jsxs("summary",{children:[e.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),e.jsx("span",{className:"chat-tool-call-name",children:p.toolName}),T&&e.jsx("span",{className:"chat-tool-call-preview",title:T,children:T}),e.jsx("span",{className:"chat-tool-call-status-text",children:k})]}),e.jsxs("div",{className:"chat-tool-call-content",children:[f&&e.jsxs("div",{className:"chat-tool-call-row",children:[e.jsx("span",{className:"chat-tool-call-label",children:"args"}),e.jsx("span",{className:"chat-tool-call-value",children:f})]}),x&&e.jsxs("div",{className:`chat-tool-call-row${M?" chat-tool-call-row--error":""}`,children:[e.jsx("span",{className:"chat-tool-call-label",children:"result"}),e.jsx("span",{className:"chat-tool-call-value",children:x})]})]})]},`${p.toolName}-${F}`)},r="chat-tool-calls";if(a.length===1)return e.jsxs("div",{className:r,"data-testid":"chat-tool-calls",children:[e.jsxs("div",{className:"chat-tool-calls-header",children:[e.jsx(We,{size:12,"aria-hidden":"true"}),e.jsx("span",{children:"Tool calls"})]}),i(a[0],0)]});const l=a.filter(p=>p.status==="running").length,c=a.filter(p=>p.status==="completed"&&p.isError).length,N=l>0,j=Array.from(new Set(a.map(p=>p.toolName))),$=j.slice(0,5),w=Math.max(0,j.length-$.length),D=w>0?`${$.join(", ")}, +${w} more`:$.join(", "),z=N?`(${l} running)`:c>0?`(${c} ${c===1?"error":"errors"})`:null;return e.jsx("div",{className:r,"data-testid":"chat-tool-calls",children:e.jsxs("details",{className:"chat-tool-calls-group","data-testid":"chat-tool-calls-group",open:N,children:[e.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[e.jsx(We,{size:12,"aria-hidden":"true"}),e.jsxs("span",{children:[a.length," tool calls"]}),e.jsx("span",{className:"chat-tool-calls-names",title:D,children:D}),z&&e.jsx("span",{className:"chat-tool-calls-group-status",children:z})]}),a.map((p,F)=>i(p,F))]})})}const rt={pre:({children:a,...i})=>e.jsx("pre",{...i,className:"chat-markdown-pre",children:a}),table:({children:a,...i})=>e.jsx("table",{...i,className:"chat-markdown-table",children:a})},Te="__fn_agent__",as=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function Ze(a){const i=/(^|[\s])\/([^\s]*)$/.exec(a);if(!i)return null;const r=i[1]??"",l=i[2]??"",c=i.index+r.length;return{filter:l,start:c,end:a.length}}function is(a,i){const r=a.slice(0,i),l=/(^|[\s\n])@([\w-]*)$/.exec(r);if(!l)return null;const c=l[2]??"",N=r.length-c.length-1;return{filter:c,start:N,end:i}}function rs({projectId:a,onClose:i,onCreate:r}){const[l,c]=s.useState("agent"),[N,j]=s.useState([]),[$,w]=s.useState(!0),[D,z]=s.useState(""),[p,F]=s.useState([]),[C,M]=s.useState(!0),[f,x]=s.useState(""),[T,k]=s.useState([]),[H,L]=s.useState([]);s.useEffect(()=>{let h=!1;return w(!0),_e(void 0,a).then(y=>{h||j(y)}).catch(()=>{h||j([])}).finally(()=>{h||w(!1)}),()=>{h=!0}},[a]),s.useEffect(()=>{M(!0),Xt().then(h=>{F(h.models),k(h.favoriteProviders),L(h.favoriteModels)}).catch(()=>{F([]),k([]),L([])}).finally(()=>{M(!1)})},[]);const ee=s.useCallback(async h=>{const y=T,I=y.includes(h)?y.filter(V=>V!==h):[h,...y];k(I);try{await Qe({favoriteProviders:I,favoriteModels:H})}catch{k(y)}},[T,H]),K=s.useCallback(async h=>{const y=H,I=y.includes(h)?y.filter(V=>V!==h):[h,...y];L(I);try{await Qe({favoriteProviders:T,favoriteModels:I})}catch{L(y)}},[H,T]),_=h=>{if(h.preventDefault(),l==="agent"){if(!D)return;r({agentId:D});return}if(!f)return;const y=f.indexOf("/");if(y<=0)return;const v=f.slice(0,y),I=f.slice(y+1);r({agentId:Te,modelProvider:v,modelId:I})},X=l==="agent"?!D:!f;return e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:i,role:"dialog","aria-modal":"true",children:e.jsxs("div",{className:"chat-new-dialog",onClick:h=>h.stopPropagation(),children:[e.jsx("h3",{children:"New Chat"}),e.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{c("agent"),x("")},children:"Agent"}),e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{c("model"),z("")},children:"Model"})]}),e.jsxs("form",{onSubmit:_,children:[l==="agent"&&e.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",$?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):N.length===0?e.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):e.jsx("div",{className:"chat-new-dialog-agent-list",children:N.map(h=>e.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${D===h.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>z(h.id),"data-testid":`agent-option-${h.id}`,children:[e.jsx(Ae,{size:16}),e.jsx("span",{className:"chat-new-dialog-agent-name",children:h.name}),e.jsx("span",{className:"chat-new-dialog-agent-role",children:h.role})]},h.id))})]}),l==="model"&&e.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:C?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):e.jsx(Zt,{models:p,value:f,onChange:x,label:"Model",placeholder:"Select a model",favoriteProviders:T,onToggleFavorite:ee,favoriteModels:H,onToggleModelFavorite:K})}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:i,children:"Cancel"}),e.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:X,children:"Create"})]})]})]})})}const ls=s.memo(function({message:i,forcePlain:r,agentName:l,showAssistantModelTag:c,activeModelTag:N,activeSessionId:j,mentionAgentsByName:$,onToggleRender:w}){const D=i.role==="assistant",z=s.useMemo(()=>{if(D)return null;const C=i.content,M=/@([\w-]+)/g,f=[];let x=0,T=M.exec(C);for(;T;){const[k,H=""]=T,L=T.index;L>x&&f.push(C.slice(x,L));const ee=H.replace(/_/g," ").toLowerCase(),K=$.get(ee);K?f.push(e.jsxs("span",{className:"chat-mention-chip",children:["@",K.name.replace(/\s+/g,"_")]},`${K.id}-${L}`)):f.push(k),x=L+k.length,T=M.exec(C)}return x<C.length&&f.push(C.slice(x)),f.length===0?C:f},[D,i.content,$]),p=s.useMemo(()=>{const C=i.attachments;if(!C||C.length===0||!j)return null;const M=`/api/chat/sessions/${encodeURIComponent(j)}/attachments/`;return e.jsx("div",{className:"chat-message-attachments",children:C.map(f=>{const x=f.mimeType.startsWith("image/"),T=f.id||f.filename,k=`${M}${encodeURIComponent(f.filename)}`;return x?e.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:k,target:"_blank",rel:"noopener noreferrer",children:e.jsx("img",{className:"chat-message-attachment",src:k,alt:f.originalName})},T):e.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:k,target:"_blank",rel:"noopener noreferrer",children:[e.jsx(Yt,{size:14}),e.jsx("span",{children:f.originalName})]},T)})})},[i.attachments,j]),F=s.useMemo(()=>D?r?e.jsx("div",{className:"chat-message-content chat-message-content--plain",children:i.content}):e.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:e.jsx(et,{remarkPlugins:[tt],components:rt,children:i.content})}):null,[D,r,i.content]);return e.jsxs("div",{className:`chat-message chat-message--${i.role}`,"data-testid":`chat-message-${i.id}`,children:[D&&e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Ae,{size:14}),e.jsx("span",{children:l}),c&&N&&e.jsx("span",{className:"chat-model-tag",children:N}),e.jsx("button",{type:"button",className:`chat-message-render-toggle${r?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":r?"Show rendered markdown":"Show plain text",onClick:()=>w(i.id),children:r?e.jsx(st,{size:14}):e.jsx(nt,{size:14})})]}),D?F:e.jsx("div",{className:"chat-message-content",children:z}),it(i.toolCalls),i.thinkingOutput&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:i.thinkingOutput})]}),p,e.jsx("div",{className:"chat-message-time",children:at(i.createdAt)})]})});function ms({projectId:a,addToast:i}){const{activeSession:r,sessionsLoading:l,messages:c,messagesLoading:N,isStreaming:j,streamingText:$,streamingThinking:w,streamingToolCalls:D,selectSession:z,createSession:p,archiveSession:F,deleteSession:C,sendMessage:M,stopStreaming:f,pendingMessage:x,clearPendingMessage:T,searchQuery:k,setSearchQuery:H,filteredSessions:L}=ts(a),[ee,K]=s.useState(!1),[_,X]=s.useState(""),[h,y]=s.useState(null),[v,I]=s.useState(null),[V,oe]=s.useState(!0),[de,pe]=s.useState(new Map),[xe,ve]=s.useState([]),[ue,Ne]=s.useState(!0),[J,se]=s.useState(!1),[re,ne]=s.useState(""),[Se,he]=s.useState(0),[be,le]=s.useState(""),[te,ce]=s.useState(!1),[me,we]=s.useState(0),[u,g]=s.useState(-1),[m,R]=s.useState(()=>new Set),[O,ae]=s.useState([]),[B,W]=s.useState(!1),[,G]=s.useState(!1),[q,P]=s.useState({top:0,left:0}),d=It({projectId:a}),U=s.useCallback(t=>{if(!t||!d.mentionActive)return;const n=t.getBoundingClientRect();P({top:n.top-260,left:n.left+8})},[d.mentionActive]),S=s.useRef(null),b=s.useRef(null),Q=s.useRef(null),A=s.useRef(null),Ie=s.useRef(null),Oe=s.useRef([]),je=s.useRef(0),ge=Ot()==="mobile",{keyboardOverlap:$e,viewportHeight:Ue,keyboardOpen:lt}=Ut({enabled:ge&&!!r}),ct=lt?{"--keyboard-overlap":`${$e}px`,...Ue!==null?{"--vv-height":`${Ue}px`}:{}}:{},Z=s.useMemo(()=>{const t=re.trim().toLowerCase();return(t?xe.filter(o=>o.name.toLowerCase().includes(t)):xe).slice(0,10)},[xe,re]),ke=s.useMemo(()=>Array.from(de.values()),[de]),fe=s.useMemo(()=>{const t=be.trim().toLowerCase();return t?ke.filter(n=>n.name.toLowerCase().includes(t)):ke},[ke,be]),ot=s.useMemo(()=>{const t=new Map;for(const n of ke)t.set(n.name.toLowerCase(),n);return t},[ke]);s.useEffect(()=>{he(0)},[Z]),s.useEffect(()=>{we(0)},[be,te]),s.useEffect(()=>()=>{b.current!==null&&window.clearTimeout(b.current)},[]),s.useEffect(()=>{S.current?.scrollIntoView({behavior:"smooth"})},[c,$]),s.useEffect(()=>{if($e<=0)return;const t=Q.current;t&&(t.scrollTop=t.scrollHeight)},[$e]),s.useEffect(()=>{const t=()=>y(null);if(h)return document.addEventListener("click",t),()=>document.removeEventListener("click",t)},[h]),s.useEffect(()=>{let t=!1;const n=a;return _e(void 0,a).then(o=>{if(t||n!==a)return;const E=new Map;for(const Y of o)E.set(Y.id,Y);pe(E)}).catch(()=>{}),()=>{t=!0}},[a]),s.useEffect(()=>{let t=!1;return Ne(!0),zt(a).then(n=>{t||ve(n)}).catch(()=>{t||ve([])}).finally(()=>{t||Ne(!1)}),()=>{t=!0}},[a]),s.useEffect(()=>{Oe.current=O},[O]),s.useEffect(()=>()=>{for(const t of Oe.current)t.previewUrl&&URL.revokeObjectURL(t.previewUrl)},[]);const ye=s.useCallback(t=>{if(!t||t.length===0)return;const n=[];for(const o of Array.from(t)){if(!as.includes(o.type))continue;const E=o.type.startsWith("image/");n.push({file:o,previewUrl:E?URL.createObjectURL(o):""})}n.length>0&&ae(o=>[...o,...n])},[]),dt=s.useCallback(t=>{ae(n=>{const o=n[t];return o?.previewUrl&&URL.revokeObjectURL(o.previewUrl),n.filter((E,Y)=>Y!==t)})},[]),ut=s.useCallback(t=>{const n=t.clipboardData?.files;if(!n||n.length===0)return;const o=Array.from(n).filter(E=>E.type.startsWith("image/"));o.length!==0&&ye(o)},[ye]),ht=s.useCallback(async t=>{try{await p(t),K(!1),ge&&oe(!1)}catch{i("Failed to create chat session","error")}},[p,i,ge]),Re=s.useCallback(()=>{const t=_.trim(),n=O.map(o=>o.file);!t&&n.length===0||!r||(X(""),se(!1),ne(""),ce(!1),le(""),g(-1),M(t,n),ae(o=>{for(const E of o)E.previewUrl&&URL.revokeObjectURL(E.previewUrl);return[]}))},[_,O,r,M]),De=s.useCallback(t=>{X(n=>{const o=Ze(n);if(!o)return n;const E=`/skill:${t.name} `,Y=n.slice(0,o.start)+E+n.slice(o.end);return window.requestAnimationFrame(()=>{A.current&&(A.current.style.height="auto",A.current.style.height=`${Math.min(A.current.scrollHeight,120)}px`,A.current.focus())}),Y}),se(!1),ne(""),he(0)},[]),Pe=s.useCallback(t=>{const n=A.current;if(!n||u<0)return;const o=n.selectionStart??je.current,E=n.selectionEnd??o,Y=Math.max(o,E),Be=Math.min(u,Y),Ge=`${`@${t.name.replace(/\s+/g,"_")}`} `,Ct=_.slice(0,Be)+Ge+_.slice(Y),qe=Be+Ge.length;X(Ct),ce(!1),le(""),we(0),g(-1),window.requestAnimationFrame(()=>{A.current&&(A.current.style.height="auto",A.current.style.height=`${Math.min(A.current.scrollHeight,120)}px`,A.current.focus(),A.current.setSelectionRange(qe,qe))})},[u,_]),mt=s.useCallback(t=>{if(je.current=t.currentTarget.selectionStart??je.current,d.mentionActive&&d.files.length>0){if(d.handleKeyDown(t,_),t.key==="Enter"||t.key==="Tab"){const n=d.files[d.selectedIndex];if(n){const o=d.selectFile(n,_);X(o),d.dismissMention(),G(!1)}}return}if(te&&t.key==="ArrowDown"){t.preventDefault(),fe.length>0&&we(n=>(n+1)%fe.length);return}if(te&&t.key==="ArrowUp"){t.preventDefault(),fe.length>0&&we(n=>n===0?fe.length-1:n-1);return}if(te&&t.key==="Enter"){t.preventDefault();const n=fe[me]??fe[0];n&&Pe(n);return}if(te&&t.key==="Escape"){t.preventDefault(),ce(!1),le(""),g(-1);return}if(J&&t.key==="ArrowDown"){t.preventDefault(),Z.length>0&&he(n=>(n+1)%Z.length);return}if(J&&t.key==="ArrowUp"){t.preventDefault(),Z.length>0&&he(n=>n===0?Z.length-1:n-1);return}if(J&&(t.key==="Enter"||t.key==="Tab")&&Z.length>0){t.preventDefault();const n=Z[Se]??Z[0];n&&De(n);return}if(J&&t.key==="Escape"){t.preventDefault(),se(!1);return}t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),Re())},[te,fe,me,Pe,J,Z,Se,De,Re,d,_]),Ce=s.useCallback((t,n)=>{const o=is(t,n);if(o){ce(!0),le(o.filter),g(o.start);return}ce(!1),le(""),g(-1)},[]),gt=s.useCallback(t=>{const n=t.target,o=n.value,E=n.selectionStart??o.length;je.current=E,X(o);const Y=Ze(o);Y?(se(!0),ne(Y.filter)):(se(!1),ne("")),Ce(o,E),d.detectMention(o,E),G(d.mentionActive),d.mentionActive&&U(n),n.style.height="auto",n.style.height=`${Math.min(n.scrollHeight,120)}px`},[Ce]),Ee=s.useCallback(t=>{const n=t.currentTarget,o=n.selectionStart??n.value.length;je.current=o,Ce(n.value,o),d.detectMention(n.value,o),G(d.mentionActive),d.mentionActive&&U(n)},[Ce,d,U]),ft=s.useCallback(t=>{t.key!=="Escape"&&Ee(t)},[Ee]),pt=s.useCallback(()=>{b.current!==null&&window.clearTimeout(b.current),b.current=window.setTimeout(()=>{se(!1),ce(!1),le(""),g(-1),G(!1),d.dismissMention(),b.current=null},120)},[d]),xt=s.useCallback(()=>{b.current!==null&&(window.clearTimeout(b.current),b.current=null)},[]),vt=s.useCallback(async t=>{y(null);try{await F(t),i("Conversation archived","success")}catch{i("Failed to archive conversation","error")}},[F,i]),St=s.useCallback(async t=>{I(null),y(null);try{await C(t),i("Conversation deleted","success")}catch{i("Failed to delete conversation","error")}},[C,i]),bt=s.useCallback(t=>{z(t),ge&&oe(!1)},[z,ge]),wt=s.useCallback(()=>{z(""),oe(!0)},[z]),kt=()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(Qt,{size:48,strokeWidth:1.5}),e.jsx("h2",{children:"Start a new conversation"}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>K(!0),children:[e.jsx(Je,{size:16}),"New Chat"]})]}),ie=Xe(r?.modelProvider,r?.modelId),ze=r?.agentId===Te?ie??"Fusion":r?.title||de.get(r?.agentId??"")?.name||r?.agentId||"Chat",Nt=!!(ie&&ie!==ze),Fe=de.get(r?.agentId??"")?.name||(r?.agentId===Te?ie??"Fusion":r?.agentId?.slice(0,30)??"Fusion"),He=!!(ie&&ie!==Fe),jt=x.length>50?`${x.slice(0,50)}…`:x,Ve=s.useCallback(t=>{R(n=>{const o=new Set(n);return o.has(t)?o.delete(t):o.add(t),o})},[]),yt=s.useCallback((t,n=!1)=>n?e.jsx("div",{className:"chat-message-content chat-message-content--plain",children:t}):e.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:e.jsx(et,{remarkPlugins:[tt],components:rt,children:t})}),[]);return e.jsxs("div",{className:"chat-view",children:[e.jsxs("div",{className:`chat-sidebar${V?"":" chat-sidebar--hidden"}`,children:[e.jsx("div",{className:"chat-sidebar-search",children:e.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[e.jsx(Ht,{size:14,className:"chat-sidebar-search-icon"}),e.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:k,onChange:t=>H(t.target.value),"data-testid":"chat-search-input"})]})}),e.jsx("div",{className:"chat-session-list chat-sidebar-list",children:l?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"Loading..."}):L.length===0?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):L.map(t=>e.jsxs("div",{className:`chat-session-item${r?.id===t.id?" chat-session-item--active":""}`,onClick:()=>bt(t.id),onContextMenu:n=>{n.preventDefault(),y({sessionId:t.id,x:n.clientX,y:n.clientY})},"data-testid":`chat-session-${t.id}`,children:[e.jsx("button",{className:"chat-session-delete-btn",onClick:n=>{n.stopPropagation(),I(t.id)},"data-testid":"chat-session-delete-btn","aria-label":"Delete conversation",children:e.jsx(Ke,{size:14})}),e.jsx("div",{className:"chat-session-title",children:t.title||"Untitled"}),e.jsx("div",{className:"chat-session-preview",children:t.lastMessagePreview||"No messages"}),e.jsxs("div",{className:"chat-session-meta",children:[e.jsx("span",{children:de.get(t.agentId)?.name||(t.agentId===Te?Xe(t.modelProvider,t.modelId)??"Fusion":t.agentId.slice(0,30))}),e.jsx("span",{children:t.updatedAt?at(t.updatedAt):""})]})]},t.id))}),e.jsx("div",{className:"chat-sidebar-footer",children:e.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>K(!0),"data-testid":"chat-new-btn",children:[e.jsx(Je,{size:14}),"New Chat"]})})]}),h&&e.jsxs("div",{className:"chat-session-context-menu",style:{top:h.y,left:h.x},onClick:t=>t.stopPropagation(),children:[e.jsxs("button",{onClick:()=>vt(h.sessionId),"data-testid":"chat-context-archive",children:[e.jsx(Vt,{size:14}),"Archive"]}),e.jsxs("button",{onClick:()=>{y(null),I(h.sessionId)},"data-testid":"chat-context-delete",children:[e.jsx(Ke,{size:14}),"Delete"]})]}),v&&e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:()=>I(null),children:e.jsxs("div",{className:"chat-new-dialog",onClick:t=>t.stopPropagation(),children:[e.jsx("h3",{children:"Delete Conversation?"}),e.jsx("p",{style:{fontSize:"14px",color:"var(--text-secondary)",marginBottom:"16px"},children:"This action cannot be undone. All messages in this conversation will be permanently deleted."}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{className:"btn btn-sm",onClick:()=>I(null),children:"Cancel"}),e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void St(v),children:"Delete"})]})]})}),e.jsxs("div",{className:"chat-thread",style:ct,children:[(r||!ge)&&e.jsxs("div",{className:"chat-thread-header",children:[ge&&r&&e.jsx("button",{className:"btn-icon",onClick:wt,"data-testid":"chat-back-btn",children:e.jsx(Bt,{size:16})}),e.jsx(Ae,{size:16}),e.jsx("span",{className:"chat-thread-header-title",children:ze}),Nt&&e.jsx("span",{className:"chat-model-tag",children:ie})]}),e.jsxs("div",{className:"chat-messages",ref:Q,children:[N?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):c.length===0&&!r?kt():c.length===0&&r?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):e.jsxs(e.Fragment,{children:[c.map(t=>e.jsx(ls,{message:t,forcePlain:m.has(t.id),agentName:Fe,showAssistantModelTag:He,activeModelTag:ie,activeSessionId:r?.id??null,mentionAgentsByName:ot,onToggleRender:Ve},t.id)),j&&e.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Ae,{size:14}),e.jsx("span",{children:Fe}),He&&e.jsx("span",{className:"chat-model-tag",children:ie}),e.jsx("button",{type:"button",className:`chat-message-render-toggle${m.has("__streaming__")?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":m.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>Ve("__streaming__"),children:m.has("__streaming__")?e.jsx(st,{size:14}):e.jsx(nt,{size:14})})]}),$?yt($,m.has("__streaming__")):e.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:w?"Thinking…":"Connecting…"}),it(D),w&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:w})]}),e.jsxs("div",{className:"chat-typing-indicator",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]})]})]}),e.jsx("div",{ref:S})]}),r&&e.jsxs("div",{className:"chat-input-area",children:[e.jsx("input",{ref:Ie,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:t=>{ye(t.target.files),t.target.value=""}}),J&&e.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:ue?e.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):Z.length===0?e.jsx("div",{className:"chat-skill-menu-empty",children:re?"No skills found":"No skills available"}):Z.map((t,n)=>e.jsxs("button",{type:"button",role:"option","aria-selected":n===Se,className:`chat-skill-menu-item${n===Se?" chat-skill-menu-item--highlighted":""}`,onMouseDown:o=>o.preventDefault(),onMouseEnter:()=>he(n),onClick:()=>De(t),children:[e.jsx("span",{className:"chat-skill-menu-item-name",children:t.name}),e.jsx("span",{className:"chat-skill-menu-item-description",title:t.relativePath,children:t.relativePath})]},t.id))}),O.length>0&&e.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:O.map((t,n)=>e.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${n}`,children:[t.previewUrl?e.jsx("img",{src:t.previewUrl,alt:t.file.name}):e.jsx("span",{className:"chat-attachment-preview-name",children:t.file.name}),e.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>dt(n),"data-testid":`chat-attachment-remove-${n}`,"aria-label":`Remove ${t.file.name}`,children:"×"})]},t.previewUrl||`${t.file.name}-${n}`))}),e.jsxs("div",{className:"chat-input-row",children:[e.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":"Attach files",onClick:()=>Ie.current?.click(),children:e.jsx(Gt,{size:16})}),e.jsxs("div",{className:`chat-input-wrapper${B?" chat-input-wrapper--dragover":""}`,onDragOver:t=>{t.preventDefault(),W(!0)},onDragLeave:()=>W(!1),onDrop:t=>{t.preventDefault(),W(!1),ye(t.dataTransfer.files)},children:[e.jsx("textarea",{ref:A,className:"chat-input-textarea",placeholder:"Type a message...",value:_,onChange:gt,onKeyDown:mt,onKeyUp:ft,onClick:Ee,onBlur:pt,onFocus:xt,onPaste:ut,rows:1,"data-testid":"chat-input"}),e.jsx(qt,{agents:ke,filter:be,highlightedIndex:me,visible:te,onSelect:Pe,position:"below"}),e.jsx(Kt,{visible:d.mentionActive&&!te,position:q,files:d.files,selectedIndex:d.selectedIndex,onSelect:t=>{const n=d.selectFile(t,_);X(n),d.dismissMention(),G(!1),A.current?.focus()},loading:d.loading}),x&&e.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[e.jsx("span",{children:`Queued: ${jt}`}),e.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:T,children:"×"})]})]}),j?e.jsx("button",{className:"chat-input-stop",onClick:f,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:e.jsx(Jt,{size:14})}):e.jsx("button",{className:"chat-input-send",onClick:()=>void Re(),disabled:!_.trim()&&O.length===0,"data-testid":"chat-send-btn",children:e.jsx(Wt,{size:16})})]})]})]}),ee&&e.jsx(rs,{projectId:a,onClose:()=>K(!1),onCreate:ht})]})}export{ms as ChatView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.research-view{display:flex;flex-direction:column;gap:var(--space-md);height:100%;min-height:0;padding:var(--space-lg)}.research-view__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}.research-view__title{margin:0}.research-view__subtitle{margin:var(--space-xs) 0 0;color:var(--text-muted)}.research-view__layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:var(--space-md);min-height:0;flex:1}.research-view__sidebar,.research-view__reader{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md);min-height:0}.research-view__form{display:flex;flex-direction:column;gap:var(--space-sm)}.research-view__form .form-group,.research-view__history-header.form-group,.research-view__actions .form-group{margin:0;padding:0}.research-view__textarea{min-height:calc(var(--space-2xl) * 3);resize:vertical}.research-view__providers{display:grid;gap:var(--space-xs)}.research-view__history-header{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-xs)}.research-view__history-search-row{display:flex;align-items:center;gap:var(--space-xs)}.research-view__history{display:flex;flex-direction:column;gap:var(--space-xs);overflow:auto}.research-view__history-item{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);text-align:left;padding:var(--space-sm);min-height:calc(var(--space-lg) * 2 + var(--space-xs));display:flex;flex-direction:column;justify-content:center;gap:var(--space-xs);transition:border-color var(--transition-fast),box-shadow var(--transition-fast),background-color var(--transition-fast)}.research-view__history-item:hover{background:var(--card-hover);border-color:var(--todo)}.research-view__history-item:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.research-view__history-item--active{border-color:var(--todo);box-shadow:var(--focus-ring)}.research-view__status-row{display:flex;align-items:center;gap:var(--space-xs);text-transform:capitalize}.research-view__run-title,.research-view__run-query,.research-view__run-summary{margin:0}.research-view__run-query{color:var(--text-muted)}.research-view__actions{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-top:var(--space-sm)}.research-view__citations{margin:var(--space-sm) 0 0;padding-left:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-xs)}.research-view__citations a{color:var(--text)}.research-view__error{color:var(--color-error)}.research-view__findings{display:flex;flex-direction:column;gap:var(--space-sm)}.research-view__finding{padding:var(--space-sm)}.research-view__finding h4,.research-view__finding p{margin:0}.research-view__events{margin:var(--space-sm) 0 0;padding-left:var(--space-lg)}.research-view__stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm)}.research-view__stat-card{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-sm);padding:var(--space-sm);background:var(--surface)}.research-view__stat-label{color:var(--text-muted);text-transform:uppercase;font-size:.75rem}.research-view__stat-value{font-family:var(--font-mono);font-size:1rem}.research-view__state--error{border-color:var(--color-error)}@media(max-width:768px){.research-view{padding:var(--space-md)}.research-view__layout{grid-template-columns:minmax(0,1fr)}.research-view__header{flex-direction:column}.research-view__stats{grid-template-columns:minmax(0,1fr)}.research-view__history-item{min-height:calc(var(--space-lg) * 2 + var(--space-sm))}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as c,j as e}from"./vendor-react-K0fH_qHe.js";import{am as $,an as B,s as H,ao as z,ap as G,aq as J,ar as W,as as K,at as X,L as Y,S as Z}from"./index-DyXZm9QN.js";import"./vendor-xterm-DzcZoU0P.js";const ee=300,se=4e3;function re(A){const a=A?.projectId,[_,r]=c.useState([]),[i,w]=c.useState(null),[p,m]=c.useState(null),[R,S]=c.useState({available:!0}),[T,C]=c.useState(!0),[F,E]=c.useState(null),[x,q]=c.useState(""),f=c.useRef(0),j=c.useRef(0),y=c.useRef(a);c.useEffect(()=>{y.current!==a&&(y.current=a,j.current++)},[a]);const o=c.useCallback(async(t=x)=>{const n=++f.current,h=a;E(null);try{const u=await $({q:t||void 0,limit:100},h);if(n!==f.current||h!==a)return;r(u.runs),S(u.availability),i&&!u.runs.some(l=>l.id===i)&&(w(null),m(null))}catch(u){if(n!==f.current||h!==a)return;E(u instanceof Error?u.message:"Failed to load research runs")}finally{n===f.current&&C(!1)}},[a,x,i]),b=c.useCallback(async t=>{const n=await B(t,a);return m(n.run),S(n.availability),n.run},[a]);return c.useEffect(()=>{C(!0);const t=window.setTimeout(()=>{o(x)},ee);return()=>window.clearTimeout(t)},[o,x]),c.useEffect(()=>{if(!i){m(null);return}b(i)},[b,i]),c.useEffect(()=>{const t=j.current,n=()=>j.current!==t,h=a?`?projectId=${encodeURIComponent(a)}`:"";let u=!0;const l=()=>{!u||n()||(o(),i&&b(i))},P=H(`/api/events${h}`,{events:{"research:run:created":l,"research:run:updated":l,"research:run:completed":l,"research:run:failed":l,"research:run:cancelled":l},onReconnect:l}),v=window.setInterval(l,se);return()=>{u=!1,P(),window.clearInterval(v)}},[a,o,i,b]),{runs:_,selectedRun:p,selectedRunId:i,setSelectedRunId:w,availability:R,loading:T,error:F,searchQuery:x,setSearchQuery:q,refresh:o,createRun:t=>X(t,a),cancelRun:async t=>{const n=await K(t,a);return i===t&&m(n.run),await o(),n},retryRun:async t=>{const n=await W(t,a);return i===t&&m(n.run),await o(),n},exportRun:(t,n)=>J(t,n,a),createTaskFromRun:(t,n)=>G(t,{title:n},a),attachRunToTask:(t,n,h)=>z(t,{taskId:n,mode:h},a),statusCounts:_.reduce((t,n)=>(t[n.status]+=1,t),{pending:0,running:0,completed:0,failed:0,cancelled:0})}}const te=["web-search","page-fetch","github","local-docs","llm-synthesis"],ae={"web-search":"Web Search","page-fetch":"Page Fetch",github:"GitHub","local-docs":"Local Docs","llm-synthesis":"LLM Synthesis"};function le({projectId:A,addToast:a}){const{runs:_,selectedRun:r,selectedRunId:i,setSelectedRunId:w,availability:p,loading:m,error:R,searchQuery:S,setSearchQuery:T,createRun:C,cancelRun:F,retryRun:E,exportRun:x,createTaskFromRun:q,attachRunToTask:f,statusCounts:j,refresh:y}=re({projectId:A}),[o,b]=c.useState(""),[t,n]=c.useState(!1),[h,u]=c.useState(["web-search","llm-synthesis"]),[l,P]=c.useState(""),[v,L]=c.useState(null),V=p.supportedProviders??te,M=c.useMemo(()=>r?r.status:"No run selected",[r]),U=c.useMemo(()=>r?r.status==="pending"?"status-dot status-dot--pending":r.status==="running"?"status-dot status-dot--connecting":r.status==="completed"?"status-dot status-dot--online":r.status==="failed"||r.status==="cancelled"?"status-dot status-dot--error":"status-dot":"status-dot",[r]),D=p.supportedExportFormats??["markdown","json","html"],I=async(s,d,N)=>{L(s);try{await d(),a?.(N,"success"),await y()}catch(g){a?.(g instanceof Error?g.message:"Action failed","error")}finally{L(null)}},O=async s=>{if(r){L(`export-${s}`);try{const d=await x(r.id,s),N=new Blob([d.content],{type:"text/plain;charset=utf-8"}),g=URL.createObjectURL(N),k=document.createElement("a");k.href=g,k.download=d.filename,document.body.appendChild(k),k.click(),k.remove(),URL.revokeObjectURL(g),a?.(`Exported ${d.filename}`,"success")}catch(d){a?.(d instanceof Error?d.message:"Export failed","error")}finally{L(null)}}},Q=async()=>{if(o.trim()){n(!0);try{const s=await C({query:o.trim(),providers:h});w(s.run.id),b(""),a?.("Research run created","success"),await y()}catch(s){a?.(s instanceof Error?s.message:"Failed to create run","error")}finally{n(!1)}}};return e.jsxs("section",{className:"research-view","aria-label":"Research view",children:[e.jsxs("header",{className:"research-view__header",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"research-view__title",children:"Research"}),e.jsx("p",{className:"research-view__subtitle",children:"Create and track research runs with cited findings."})]}),e.jsx("button",{className:"btn",type:"button",onClick:()=>void y(),children:"Refresh"})]}),p.available?e.jsxs("div",{className:"research-view__layout",children:[e.jsxs("aside",{className:"research-view__sidebar card",children:[e.jsxs("div",{className:"research-view__form",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"research-query",children:"Query"}),e.jsx("textarea",{id:"research-query",className:"input research-view__textarea",value:o,onChange:s=>b(s.target.value)})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"Providers"}),e.jsx("div",{className:"research-view__providers",children:V.map(s=>e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:h.includes(s),onChange:()=>{u(d=>d.includes(s)?d.filter(N=>N!==s):[...d,s])}}),e.jsx("span",{children:ae[s]??s})]},s))})]}),e.jsxs("button",{className:"btn btn-primary",type:"button",disabled:!o.trim()||t,onClick:()=>void Q(),children:[t?e.jsx(Y,{className:"animate-spin",size:14}):null,"Create Run"]})]}),e.jsxs("div",{className:"research-view__history-header form-group",children:[e.jsx("label",{htmlFor:"research-run-search",children:"Search"}),e.jsxs("div",{className:"research-view__history-search-row",children:[e.jsx(Z,{size:14}),e.jsx("input",{id:"research-run-search",className:"input",placeholder:"Search runs",value:S,onChange:s=>T(s.target.value)})]})]}),e.jsx("div",{className:"research-view__history","data-testid":"research-state-running",children:_.map(s=>e.jsxs("button",{className:`research-view__history-item${i===s.id?" research-view__history-item--active":""}`,onClick:()=>w(s.id),children:[e.jsx("span",{className:"card-id",children:s.id}),e.jsx("span",{children:s.title})]},s.id))})]}),e.jsxs("div",{className:"research-view__reader card",children:[m&&e.jsx("p",{"data-testid":"research-state-loading",children:"Loading research runs…"}),!m&&R&&e.jsx("p",{"data-testid":"research-state-error",children:R}),!m&&!R&&_.length===0&&e.jsx("p",{"data-testid":"research-state-empty",children:"No research runs yet"}),r&&e.jsxs("div",{children:[e.jsxs("div",{className:"research-view__status-row",children:[e.jsx("span",{className:U}),e.jsx("strong",{children:M})]}),e.jsx("h3",{className:"research-view__run-title",children:r.title}),e.jsx("p",{className:"research-view__run-query",children:r.query}),e.jsx("p",{className:"research-view__run-summary","data-testid":"research-state-results",children:r.results?.summary??"No summary yet."}),e.jsxs("div",{className:"research-view__actions",children:[e.jsx("button",{className:"btn",type:"button",disabled:v==="cancel",onClick:()=>void I("cancel",()=>F(r.id),"Run cancelled"),children:"Cancel"}),e.jsx("button",{className:"btn",type:"button",disabled:v==="retry",onClick:()=>void I("retry",()=>E(r.id),"Run retried"),children:"Retry"}),D.includes("markdown")&&e.jsx("button",{className:"btn",type:"button",disabled:v==="export-markdown",onClick:()=>void O("markdown"),children:"Export MD"}),D.includes("json")&&e.jsx("button",{className:"btn",type:"button",disabled:v==="export-json",onClick:()=>void O("json"),children:"Export JSON"}),D.includes("html")&&e.jsx("button",{className:"btn",type:"button",disabled:v==="export-html",onClick:()=>void O("html"),children:"Export HTML"})]}),e.jsxs("div",{className:"research-view__actions",children:[e.jsx("button",{className:"btn btn-primary",type:"button",disabled:v==="create-task",onClick:()=>void I("create-task",()=>q(r.id,`Research: ${r.title}`),"Task created from research"),children:"Create Task"}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"research-task-id",children:"Task ID"}),e.jsx("input",{id:"research-task-id",className:"input",placeholder:"Task ID",value:l,onChange:s=>P(s.target.value)})]}),e.jsx("button",{className:"btn",type:"button",disabled:!l.trim()||v==="attach-task",onClick:()=>void I("attach-task",()=>f(r.id,l.trim(),"document"),"Attached to task"),children:"Attach to Task"})]}),r.error&&e.jsx("p",{className:"research-view__error",children:r.error}),Array.isArray(r.results?.findings)&&r.results.findings.length>0&&e.jsx("div",{className:"research-view__findings",children:r.results.findings.map(s=>e.jsxs("article",{className:"research-view__finding card",children:[e.jsx("h4",{children:s.heading}),e.jsx("p",{children:s.content})]},s.heading))}),Array.isArray(r.results?.citations)&&r.results.citations.length>0&&e.jsx("ul",{className:"research-view__citations",children:r.results.citations.map(s=>e.jsx("li",{children:e.jsx("a",{href:s,target:"_blank",rel:"noreferrer",children:s})},s))}),r.events.length>0&&e.jsxs("details",{children:[e.jsx("summary",{children:"Run history"}),e.jsx("ul",{className:"research-view__events",children:r.events.map(s=>e.jsx("li",{children:s.message},s.id))})]})]}),!r&&_.length>0&&e.jsx("p",{children:"Select a run to view details."}),e.jsxs("div",{className:"research-view__stats",children:[e.jsxs("div",{className:"research-view__stat-card",children:[e.jsx("div",{className:"research-view__stat-label",children:"Running"}),e.jsx("div",{className:"research-view__stat-value",children:j.running})]}),e.jsxs("div",{className:"research-view__stat-card",children:[e.jsx("div",{className:"research-view__stat-label",children:"Completed"}),e.jsx("div",{className:"research-view__stat-value",children:j.completed})]}),e.jsxs("div",{className:"research-view__stat-card",children:[e.jsx("div",{className:"research-view__stat-label",children:"Failed"}),e.jsx("div",{className:"research-view__stat-value",children:j.failed})]})]})]})]}):e.jsxs("div",{className:"research-view__state research-view__state--error card","data-testid":"research-state-unavailable",children:[e.jsx("p",{children:p.reason??"Research is unavailable for this project."}),p.setupInstructions&&e.jsx("p",{children:p.setupInstructions})]})]})}export{le as ResearchView};
|