@runfusion/fusion 0.7.1 → 0.8.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 (48) hide show
  1. package/dist/bin.js +2932 -844
  2. package/dist/client/assets/{AgentDetailView-DyzuiJas.js → AgentDetailView-C3Xcrxnp.js} +3 -3
  3. package/dist/client/assets/{AgentDetailView-C1_lTTET.css → AgentDetailView-DIBOY8V-.css} +1 -1
  4. package/dist/client/assets/{AgentsView-CgweOTe6.js → AgentsView-EjE4y4rM.js} +3 -3
  5. package/dist/client/assets/{ChatView-DrY8FMIt.js → ChatView-DQLvKCYj.js} +1 -1
  6. package/dist/client/assets/DevServerView-CX7paFRQ.js +1 -0
  7. package/dist/client/assets/{DirectoryPicker-D5KQ-im_.js → DirectoryPicker-_cBPx6Nx.js} +1 -1
  8. package/dist/client/assets/{DocumentsView-D2wK7FYJ.js → DocumentsView-Wz33aYqp.js} +1 -1
  9. package/dist/client/assets/{InsightsView-DfY3sa1j.js → InsightsView-C7YPnS92.js} +1 -1
  10. package/dist/client/assets/MemoryView-DKQtFzFQ.js +2 -0
  11. package/dist/client/assets/{NodesView-g26-j7rg.js → NodesView-CI4rUQC4.js} +1 -1
  12. package/dist/client/assets/{NodesView-BYVG2yY-.css → NodesView-DCoS6iYh.css} +1 -1
  13. package/dist/client/assets/{PiExtensionsManager-DfMr3Gls.js → PiExtensionsManager-BFmdKgHZ.js} +3 -3
  14. package/dist/client/assets/{PluginManager-DiMOD-Kj.js → PluginManager-BGQU1IIw.js} +1 -1
  15. package/dist/client/assets/{RoadmapsView-DJC4F4CD.js → RoadmapsView-Cts3hoIS.js} +1 -1
  16. package/dist/client/assets/SettingsModal-D5hLoLXp.css +1 -0
  17. package/dist/client/assets/{SettingsModal-Cx3iMWDs.js → SettingsModal-DXvBGZHf.js} +1 -1
  18. package/dist/client/assets/SettingsModal-DvRd0ZOE.js +31 -0
  19. package/dist/client/assets/SetupWizardModal-DRF5fOoR.css +1 -0
  20. package/dist/client/assets/{SetupWizardModal-Cow6woq6.js → SetupWizardModal-Y2ewEE8Y.js} +1 -1
  21. package/dist/client/assets/{SkillsView-DTB2cmXQ.js → SkillsView-BXvrHzEZ.js} +1 -1
  22. package/dist/client/assets/{TodoView-CyxdHUdz.js → TodoView-NZHkv9YQ.js} +2 -2
  23. package/dist/client/assets/{folder-open-C3zB1vmh.js → folder-open-Kh0ScTc5.js} +1 -1
  24. package/dist/client/assets/index-CWz44REw.css +1 -0
  25. package/dist/client/assets/index-D1gavMG-.js +656 -0
  26. package/dist/client/assets/{list-checks-CK3_6p5e.js → list-checks-CvoT0bwU.js} +1 -1
  27. package/dist/client/assets/{star-BQhDgM9V.js → star-BdfwSLBU.js} +1 -1
  28. package/dist/client/assets/{upload-DDdZveEJ.js → upload-Bx8Yk_7Q.js} +1 -1
  29. package/dist/client/assets/{users-DWWgd19M.js → users-DgVaFEsz.js} +1 -1
  30. package/dist/client/index.html +2 -2
  31. package/dist/client/version.json +1 -1
  32. package/dist/extension.js +2219 -433
  33. package/dist/pi-claude-cli/index.ts +27 -0
  34. package/dist/pi-claude-cli/package.json +1 -5
  35. package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +31 -9
  36. package/dist/pi-claude-cli/src/__tests__/provider.test.ts +122 -8
  37. package/dist/pi-claude-cli/src/process-manager.ts +25 -7
  38. package/dist/pi-claude-cli/src/provider.ts +31 -7
  39. package/dist/pi-claude-cli/src/types/cross-spawn.d.ts +7 -0
  40. package/package.json +2 -6
  41. package/skill/fusion/references/extension-tools.md +1 -0
  42. package/dist/client/assets/DevServerView-fvjo36sF.js +0 -6
  43. package/dist/client/assets/MemoryView-CyAQgXwO.js +0 -2
  44. package/dist/client/assets/SettingsModal-BnekMOV2.css +0 -1
  45. package/dist/client/assets/SettingsModal-DjVE27r5.js +0 -31
  46. package/dist/client/assets/SetupWizardModal-BMa6p24b.css +0 -1
  47. package/dist/client/assets/index-Belw0PQt.css +0 -1
  48. package/dist/client/assets/index-DJDWSrju.js +0 -646
@@ -1 +1 @@
1
- .agent-detail-overlay{position:fixed;inset:0;background:#0009;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.agent-detail-modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;min-width:480px;max-width:calc(100vw - 40px);min-height:320px;max-height:calc(100dvh - 40px);display:flex;flex-direction:column;overflow:hidden;resize:both;box-shadow:0 20px 60px #0000004d}.agent-detail-modal:not([style*=width]){width:min(900px,calc(100vw - 40px))}.agent-detail-modal:not([style*=height]){height:min(85vh,calc(100dvh - 40px))}.agent-detail-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:60px;color:var(--text-muted)}.agent-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:12px 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.agent-detail-identity{display:flex;align-items:center;gap:var(--space-md);flex-shrink:0;min-width:0}.agent-detail-icon{width:36px;height:36px;border-radius:var(--radius-md);background:var(--todo);display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.agent-detail-info{min-width:0}.agent-detail-info h2{font-size:16px;font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{display:flex;gap:var(--space-xs);margin-top:2px}.agent-detail-controls{display:flex;align-items:center;gap:6px;flex-shrink:0}.btn--compact{padding:5px 10px;font-size:12px;gap:4px}.agent-detail-utility-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.agent-detail-title{display:flex;align-items:center;gap:var(--space-lg)}.agent-detail-actions{display:flex;align-items:center;gap:var(--space-sm)}.agent-detail-tabs{display:flex;gap:4px;padding:0 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.agent-detail-tab{display:flex;align-items:center;gap:var(--space-xs);padding:10px 12px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.agent-detail-tab:hover{color:var(--text);background:var(--card-hover)}.agent-detail-tab.active{color:var(--todo);border-bottom-color:var(--todo)}.agent-detail-content{flex:1;overflow-y:auto;padding:24px}.agent-detail-footer{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) 24px;border-top:1px solid var(--border);background:var(--bg-secondary);font-size:12px;color:var(--text-muted)}.agent-detail-id{font-family:var(--font-mono);cursor:pointer}.agent-detail-id:hover{color:var(--text)}.dashboard-tab{display:flex;flex-direction:column;gap:24px}.dashboard-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:20px}.dashboard-section h3{font-size:14px;font-weight:600;margin:0 0 var(--space-lg) 0;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--space-lg)}.info-item{display:flex;flex-direction:column;gap:4px}.info-label{font-size:12px;color:var(--text-muted)}.info-value{font-size:14px;font-weight:500}.inline-badge{display:inline-block;padding:2px var(--space-sm);border-radius:var(--radius-sm);font-size:12px;text-transform:capitalize}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-lg)}.stat-card{background:var(--surface);border-radius:var(--radius-md);padding:var(--space-lg);text-align:center}.stat-value{font-size:28px;font-weight:700;color:var(--todo)}.stat-label{font-size:12px;color:var(--text-muted);margin-top:4px}.current-task{display:flex;align-items:center;gap:var(--space-md)}.task-badge{font-family:var(--font-mono);background:var(--surface);padding:6px var(--space-md);border-radius:var(--radius-sm);font-size:14px}.metadata-json{background:var(--surface);padding:var(--space-md);border-radius:var(--radius-sm);font-size:12px;overflow-x:auto;margin:0}.logs-tab{display:flex;flex-direction:column;height:100%}.logs-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--border)}.logs-count{font-size:12px;color:var(--text-muted)}.streaming-indicator{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--color-success)}.streaming-dot{width:8px;height:8px;background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.logs-container{flex:1;overflow-y:auto;font-family:var(--font-mono);font-size:13px;line-height:1.6;max-height:400px}.logs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:var(--text-muted);text-align:center}.logs-empty p{margin:var(--space-sm) 0 0 0}.log-entry{display:flex;gap:var(--space-sm);padding:4px var(--space-sm);margin:2px 0;border-radius:var(--radius-sm)}.log-timestamp{color:var(--text-muted);font-size:11px;flex-shrink:0}.log-agent{color:var(--text-muted);font-size:11px;font-weight:600;text-transform:uppercase;flex-shrink:0}.log-icon{flex-shrink:0}.log-text{word-break:break-word}.log-detail{color:var(--text-muted);font-size:12px}.runs-tab{display:flex;flex-direction:column;gap:var(--space-md)}.runs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:var(--text-muted);text-align:center}.runs-empty p{margin:var(--space-sm) 0 0 0}.run-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.run-card--active{border-color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 5%,transparent)}.run-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.run-live-indicator{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--in-progress)}.live-dot{width:8px;height:8px;background:var(--in-progress);border-radius:50%;animation:pulse 1.5s infinite}.run-id{font-family:var(--font-mono);font-size:13px;color:var(--text-muted)}.run-status{display:flex;align-items:center;gap:6px;font-size:13px;text-transform:capitalize}.run-status.active{color:var(--in-progress)}.run-status.completed{color:var(--color-success)}.run-status.failed{color:var(--color-error)}.run-status.terminated{color:var(--text-muted)}.run-details{display:flex;gap:var(--space-sm);font-size:12px;color:var(--text-muted)}.agent-tasks-list{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-task-item{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-secondary);text-decoration:none;transition:background var(--transition-fast),border-color var(--transition-fast)}.agent-task-item:hover{background:var(--card-hover);border-color:var(--text-dim)}.agent-task-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-task-id{font-family:var(--font-mono);font-size:12px;font-weight:600;color:var(--todo)}.agent-task-title{font-size:14px;font-weight:500;color:var(--text);line-height:1.4}.agent-task-status{font-size:12px;color:var(--text-muted)}.agent-task-column{display:inline-flex;align-items:center;padding:2px 8px;border-radius:9999px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}.agent-task-column.column-triage{color:var(--triage, #1f6feb);background:color-mix(in srgb,var(--triage, #1f6feb) 18%,transparent)}.agent-task-column.column-todo{color:var(--todo, #58a6ff);background:color-mix(in srgb,var(--todo, #58a6ff) 18%,transparent)}.agent-task-column.column-in-progress{color:var(--in-progress, #bc8cff);background:color-mix(in srgb,var(--in-progress, #bc8cff) 18%,transparent)}.agent-task-column.column-in-review{color:var(--in-review, #f2cc60);background:color-mix(in srgb,var(--in-review, #f2cc60) 18%,transparent)}.agent-task-column.column-done{color:var(--done, #3fb950);background:color-mix(in srgb,var(--done, #3fb950) 18%,transparent)}.agent-task-column.column-archived{color:var(--text-muted);background:color-mix(in srgb,var(--text-muted) 18%,transparent)}.agent-tasks-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:48px;color:var(--text-muted);text-align:center}.agent-tasks-empty p{margin:0}.config-tab{display:flex;flex-direction:column;gap:24px}.config-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:20px}.config-section h3{font-size:16px;font-weight:600;margin:0 0 var(--space-sm) 0}.config-section--danger{border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent)}.config-danger-note{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.agent-content-toolbar{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}.agent-content-mode-toggle{display:flex;align-items:center;gap:var(--space-xs)}.agent-content-mode-toggle .btn{display:inline-flex;align-items:center;gap:6px}.agent-content-preview{overflow-y:auto;padding:var(--space-lg);min-height:150px}.agent-content-placeholder{color:var(--text-muted);text-align:center;padding:var(--space-xl);min-height:150px;display:flex;align-items:center;justify-content:center}.config-description{font-size:14px;color:var(--text-muted);margin:0 0 20px}.config-fields{display:flex;flex-direction:column;gap:var(--space-lg)}.config-field{display:flex;flex-direction:column;gap:6px}.config-field label{font-size:13px;font-weight:500}.config-runtime-tabs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-md)}.config-runtime-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)}.config-runtime-tab:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.config-runtime-tab:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.config-runtime-tab.active{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.config-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-style:italic}.config-error{font-size:11px;color:var(--color-error)}.input--error{border-color:var(--color-error)!important}.config-actions{display:flex;align-items:center;gap:var(--space-md);margin-top:20px;padding-top:var(--space-lg);border-top:1px solid var(--border)}.config-saved-indicator{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--color-success)}.rating-summary-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:20px;display:flex;flex-direction:column;gap:12px}.rating-score-display{display:flex;align-items:center;gap:12px}.rating-average{font-size:32px;font-weight:700;line-height:1}.rating-stats{display:flex;align-items:center;gap:12px}.rating-count{font-size:14px;color:var(--text-muted)}.rating-trend-badge{font-size:12px;padding:4px 10px;border-radius:12px;font-weight:500}.trend-improving{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.trend-declining{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.trend-stable{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.trend-insufficient{background:var(--bg-tertiary);color:var(--text-muted)}.category-breakdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.category-breakdown h4{margin:0 0 var(--space-md) 0;font-size:.875rem;font-weight:600}.category-breakdown .category-item{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.category-breakdown .category-item:last-child{border-bottom:none}.category-name{text-transform:capitalize;font-size:.875rem}.category-score{font-weight:600;font-size:.875rem}.add-rating-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.add-rating-form h4{margin:0;font-size:.875rem;font-weight:600}.star-selector{display:flex;gap:var(--space-xs)}.star-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;border-radius:var(--radius-sm);color:var(--text-muted);transition:background-color var(--transition-fast),color var(--transition-fast)}.star-btn:hover{background:var(--card-hover)}.star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.rating-stars{display:inline-flex;gap:var(--space-xs)}.rating-stars .star-filled{color:var(--color-warning)}.rating-stars .star-empty{color:var(--text-muted)}.add-rating-form .add-rating-category-select,.add-rating-form .add-rating-comment-input{width:100%}.add-rating-form .add-rating-comment-input{resize:vertical;min-height:calc(var(--space-xl) + var(--space-2xl))}.rating-history{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto}.rating-history h4{margin:0 0 var(--space-md) 0;font-size:.875rem;font-weight:600}.rating-history .no-ratings{color:var(--text-muted);font-size:.875rem;text-align:center;padding:var(--space-lg)}.rating-history-item{padding:var(--space-md) 0;border-bottom:1px solid var(--border)}.rating-history-item:last-child{border-bottom:none}.rating-item-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.rating-category-badge{font-size:.75rem;padding:calc(var(--space-xs) * .5) var(--space-sm);background:var(--card-hover);border-radius:var(--radius-pill);text-transform:capitalize}.rating-time{font-size:.75rem;color:var(--text-muted);margin-left:auto}.rating-delete-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;color:var(--text-muted);border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.rating-delete-btn:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.rating-comment{margin:var(--space-sm) 0 0 0;font-size:.8125rem;color:var(--text-secondary);line-height:1.4}@media(max-width:768px){.config-runtime-tabs{grid-template-columns:1fr}.agent-detail-overlay{padding:0;align-items:stretch}.agent-detail-modal{width:100vw!important;height:100vh!important;height:100dvh!important;max-width:100%;max-height:100vh;max-height:100dvh;border-radius:0;border:none;resize:none}.agent-detail-header{flex-wrap:wrap;gap:var(--space-sm);padding:12px;padding-top:max(12px,env(safe-area-inset-top,0))}.agent-detail-identity{flex:1 1 auto;min-width:0;gap:var(--space-sm)}.agent-detail-icon{width:32px;height:32px;flex-shrink:0}.agent-detail-icon svg{width:16px;height:16px}.agent-detail-info h2{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{flex-wrap:wrap}.agent-detail-controls{flex:1 1 100%;flex-wrap:wrap;gap:6px;order:3}.agent-detail-controls .btn--compact{padding:6px 10px;font-size:12px;min-height:36px}.agent-detail-controls .btn--compact svg{width:14px;height:14px}.agent-detail-utility-actions{flex-shrink:0}.agent-detail-utility-actions .btn-icon{min-height:36px;min-width:36px}.agent-detail-title{flex:1 1 auto;min-width:0;gap:var(--space-md)}.agent-detail-actions{flex:1 1 100%;flex-wrap:wrap;gap:6px}.agent-detail-actions .btn{padding:6px 10px;font-size:13px;min-height:36px}.agent-detail-actions .btn svg{width:14px;height:14px}.agent-detail-actions .btn-icon{min-height:36px;min-width:36px}.agent-detail-tabs{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.agent-detail-tabs::-webkit-scrollbar{display:none}.agent-detail-tab{padding:12px 14px;font-size:13px;white-space:nowrap;min-height:36px}.agent-detail-content{padding:16px}.agent-detail-footer{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-sm) 16px;padding-bottom:max(var(--space-sm),env(safe-area-inset-bottom,0));font-size:11px}.agent-detail-id{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-tab{gap:16px}.dashboard-section{padding:16px}.info-grid{grid-template-columns:repeat(2,1fr);gap:var(--space-md)}.stats-grid{grid-template-columns:repeat(3,1fr);gap:var(--space-md)}.stat-value{font-size:22px}.logs-container{max-height:50vh}.logs-empty{padding:32px 16px}.log-entry{padding:4px 2px;font-size:12px}.log-text{min-width:0;overflow-wrap:anywhere}.run-card{padding:var(--space-md)}.run-header{flex-wrap:wrap;gap:6px}.run-details{flex-wrap:wrap}.run-details .text-muted{min-width:0;overflow-wrap:anywhere}.config-tab{gap:16px}.config-section{padding:16px}.config-section .input,.config-section .select,.config-section textarea{font-size:16px;min-height:36px}.config-actions{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.config-actions .btn{width:100%;justify-content:center}}@media(max-width:480px){.info-grid,.stats-grid{grid-template-columns:1fr}.agent-detail-actions{flex-direction:column;width:100%}.agent-detail-actions .btn{width:100%;justify-content:center}.agent-detail-actions .btn-icon{align-self:flex-end}.agent-detail-footer .divider,.agent-detail-footer .text-muted,.agent-detail-footer .link{display:none}}@media(max-width:768px){.agent-dialog-overlay{padding:0;align-items:stretch}.agent-dialog{width:100vw!important;height:100vh;height:100dvh;max-width:100%!important;max-height:100vh;max-height:100dvh;border-radius:0;border:none}.agent-dialog-header{padding:max(var(--space-md),env(safe-area-inset-top,0px)) var(--space-lg) var(--space-md) var(--space-lg);flex-shrink:0}.agent-dialog-body{padding:var(--space-lg);-webkit-overflow-scrolling:touch}.agent-dialog-footer{padding:var(--space-md) var(--space-lg);padding-bottom:max(var(--space-md),env(safe-area-inset-bottom,0px));flex-wrap:wrap;gap:var(--space-sm)}.agent-dialog-field .input,.agent-dialog-field .select,.agent-dialog-field textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.agent-dialog-summary-row{flex-direction:column;gap:calc(var(--space-xs) * .5)}.agent-dialog-summary-row>span:first-child,.agent-dialog-summary-row-label{width:auto}.agent-dialog-steps{padding:var(--space-sm) var(--space-lg)}.agent-dialog-step{flex:1;width:auto;height:calc(var(--space-xs) - var(--space-xs) * .25)}.agent-dialog-tabs{grid-template-columns:1fr;gap:calc(var(--space-sm) - var(--space-xs) * .5);margin-bottom:var(--space-md)}.agent-dialog-tab{min-height:calc(var(--space-lg) * 2 + var(--space-xs));text-align:left}.agent-import-file-upload{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.agent-import-textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-xl) * 4 + var(--space-xs))}.agent-import-agent-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-result-stats{flex-direction:column;gap:var(--space-sm);align-items:center}.agent-import-browse-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-skill-list{max-height:calc(100dvh - (var(--space-xl) * 15 + var(--space-md)))}}@media(max-width:480px){.agent-dialog-body{padding:var(--space-md)}.agent-dialog-footer{flex-direction:column}.agent-dialog-footer .btn{width:100%;justify-content:center}}.reflections-tab{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.reflections-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.reflections-header h3{display:flex;align-items:center;gap:var(--space-sm);font-size:1rem;font-weight:600;color:var(--text)}.reflections-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-md)}.reflections-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);text-align:center}.reflections-stat-card .stat-value{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);font-size:1.5rem;font-weight:700;color:var(--text);margin-bottom:var(--space-xs)}.reflections-stat-card .stat-label{font-size:.75rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.reflections-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-secondary);text-align:center}.reflections-list{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-loading-indicator{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-lg)}.reflections-ratings-section{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-ratings-section>h4,.reflections-list h4{font-size:.875rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-cards{display:flex;flex-direction:column;gap:var(--space-sm)}.reflection-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);cursor:pointer;transition:border-color .15s,background-color .15s}.reflection-card:hover{border-color:var(--border-active);background:var(--card-hover)}.reflection-card:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.reflection-card--expanded{border-color:var(--color-primary)}.reflection-card-header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.reflection-trigger-badge{font-size:.7rem;font-weight:600;padding:2px 6px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.05em}.reflection-trigger-periodic{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.reflection-trigger-post-task{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.reflection-trigger-manual{background:color-mix(in srgb,var(--color-primary) 15%,transparent);color:var(--color-primary)}.reflection-trigger-user-requested{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.reflection-timestamp{font-size:.75rem;color:var(--text-muted);flex:1}.reflection-chevron{color:var(--text-muted)}.reflection-summary{font-size:.875rem;color:var(--text);line-height:1.5}.reflection-details{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--border);display:flex;flex-direction:column;gap:var(--space-md)}.reflection-insights h5,.reflection-suggestions h5{display:flex;align-items:center;gap:var(--space-xs);font-size:.8rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-insights ul,.reflection-suggestions ul{list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.reflection-insights li,.reflection-suggestions li{font-size:.8rem;color:var(--text-secondary);padding-left:var(--space-md);position:relative}.reflection-insights li:before{content:"•";position:absolute;left:4px;color:var(--color-success)}.reflection-suggestions li:before{content:"→";position:absolute;left:0;color:var(--color-primary)}.reflection-metrics{background:var(--bg);border-radius:var(--radius-sm);padding:var(--space-sm)}.reflection-metrics h5{font-size:.75rem;font-weight:600;color:var(--text-muted);margin-bottom:var(--space-xs)}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--space-sm)}.metric{display:flex;flex-direction:column;gap:2px}.metric-label{font-size:.7rem;color:var(--text-muted)}.metric-value{font-size:.875rem;font-weight:600;color:var(--text)}.reflection-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);color:var(--text-secondary);text-align:center}.reflection-empty p{font-size:.875rem}@media(max-width:768px){.reflections-header{flex-wrap:wrap;align-items:flex-start}.reflections-header .btn{width:100%;justify-content:center}}.budget-progress-container{margin-top:4px}.budget-progress-bar{width:100%;height:8px;background:var(--bg-secondary, #161b22);border-radius:4px;overflow:hidden;margin-top:4px}.budget-progress-bar__fill{height:100%;border-radius:4px;transition:width .3s ease,background-color .3s ease}.budget-progress-bar__fill--green{background:var(--state-active-text, #3fb950)}.budget-progress-bar__fill--amber{background:var(--state-paused-text, #e3b541)}.budget-progress-bar__fill--red{background:var(--state-error-text, #f85149)}.budget-progress-label{font-size:.75rem;color:var(--text-secondary, #8b949e);margin-top:4px;display:block}.budget-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:12px;font-size:.75rem;font-weight:500}.budget-warning-banner{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:6px;background:var(--state-error-bg, rgba(248,81,73,.15));color:var(--state-error-text, #f85149);border:1px solid var(--state-error-border, #f85149);font-size:.875rem;margin-bottom:12px}.btn-reset-budget{margin-top:8px}.chat-sidebar-footer{display:none}@media(max-width:768px){.chat-view{flex-direction:column}.chat-sidebar{width:100%;min-width:100%;height:100%;max-height:none;border-right:none;border-bottom:1px solid var(--border);flex-direction:column}.chat-sidebar-header,.chat-sidebar-search{display:none}.chat-sidebar-list{flex:1;min-height:0;overflow-y:auto}.chat-sidebar-footer{display:flex;padding:var(--space-md);border-top:1px solid var(--border);background:var(--bg-secondary)}.chat-sidebar-footer-btn{flex:1;justify-content:center}.chat-sidebar--hidden{display:none}.chat-message{max-width:90%}.chat-new-dialog{width:95vw;margin:16px}.chat-thread-header{padding:8px 12px}.chat-skill-menu{left:var(--space-md);right:calc(var(--space-md) + var(--mobile-nav-height));min-width:0;max-width:none}}@media(max-width:768px){.file-mention-popup{max-height:200px}.file-mention-popup-item{min-height:36px;padding:10px 12px}.agent-mention-popup{max-width:280px;min-width:200px}}
1
+ .agent-detail-overlay{position:fixed;inset:0;background:#0009;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.agent-detail-modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;min-width:480px;max-width:calc(100vw - 40px);min-height:320px;max-height:calc(100dvh - 40px);display:flex;flex-direction:column;overflow:hidden;resize:both;box-shadow:0 20px 60px #0000004d}.agent-detail-modal:not([style*=width]){width:min(900px,calc(100vw - 40px))}.agent-detail-modal:not([style*=height]){height:min(85vh,calc(100dvh - 40px))}.agent-detail-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:60px;color:var(--text-muted)}.agent-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:12px 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.agent-detail-identity{display:flex;align-items:center;gap:var(--space-md);flex-shrink:0;min-width:0}.agent-detail-icon{width:36px;height:36px;border-radius:var(--radius-md);background:var(--todo);display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.agent-detail-info{min-width:0}.agent-detail-info h2{font-size:16px;font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{display:flex;gap:var(--space-xs);margin-top:2px}.agent-detail-controls{display:flex;align-items:center;gap:6px;flex-shrink:0}.btn--compact{padding:5px 10px;font-size:12px;gap:4px}.agent-detail-utility-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.agent-detail-title{display:flex;align-items:center;gap:var(--space-lg)}.agent-detail-actions{display:flex;align-items:center;gap:var(--space-sm)}.agent-detail-tabs{display:flex;gap:4px;padding:0 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.agent-detail-tab{display:flex;align-items:center;gap:var(--space-xs);padding:10px 12px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.agent-detail-tab:hover{color:var(--text);background:var(--card-hover)}.agent-detail-tab.active{color:var(--todo);border-bottom-color:var(--todo)}.agent-detail-content{flex:1;overflow-y:auto;padding:24px}.agent-detail-footer{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) 24px;border-top:1px solid var(--border);background:var(--bg-secondary);font-size:12px;color:var(--text-muted)}.agent-detail-id{font-family:var(--font-mono);cursor:pointer}.agent-detail-id:hover{color:var(--text)}.dashboard-tab{display:flex;flex-direction:column;gap:24px}.dashboard-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:20px}.dashboard-section h3{font-size:14px;font-weight:600;margin:0 0 var(--space-lg) 0;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--space-lg)}.info-item{display:flex;flex-direction:column;gap:4px}.info-label{font-size:12px;color:var(--text-muted)}.info-value{font-size:14px;font-weight:500}.inline-badge{display:inline-block;padding:2px var(--space-sm);border-radius:var(--radius-sm);font-size:12px;text-transform:capitalize}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-lg)}.stat-card{background:var(--surface);border-radius:var(--radius-md);padding:var(--space-lg);text-align:center}.stat-value{font-size:28px;font-weight:700;color:var(--todo)}.stat-label{font-size:12px;color:var(--text-muted);margin-top:4px}.current-task{display:flex;align-items:center;gap:var(--space-md)}.task-badge{font-family:var(--font-mono);background:var(--surface);padding:6px var(--space-md);border-radius:var(--radius-sm);font-size:14px}.metadata-json{background:var(--surface);padding:var(--space-md);border-radius:var(--radius-sm);font-size:12px;overflow-x:auto;margin:0}.logs-tab{display:flex;flex-direction:column;height:100%}.logs-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--border)}.logs-count{font-size:12px;color:var(--text-muted)}.streaming-indicator{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--color-success)}.streaming-dot{width:8px;height:8px;background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.logs-container{flex:1;overflow-y:auto;font-family:var(--font-mono);font-size:13px;line-height:1.6;max-height:400px}.logs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:var(--text-muted);text-align:center}.logs-empty p{margin:var(--space-sm) 0 0 0}.log-entry{display:flex;gap:var(--space-sm);padding:4px var(--space-sm);margin:2px 0;border-radius:var(--radius-sm)}.log-timestamp{color:var(--text-muted);font-size:11px;flex-shrink:0}.log-agent{color:var(--text-muted);font-size:11px;font-weight:600;text-transform:uppercase;flex-shrink:0}.log-icon{flex-shrink:0}.log-text{word-break:break-word}.log-detail{color:var(--text-muted);font-size:12px}.runs-tab{display:flex;flex-direction:column;gap:var(--space-md)}.runs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:var(--text-muted);text-align:center}.runs-empty p{margin:var(--space-sm) 0 0 0}.run-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.run-card--active{border-color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 5%,transparent)}.run-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.run-live-indicator{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--in-progress)}.live-dot{width:8px;height:8px;background:var(--in-progress);border-radius:50%;animation:pulse 1.5s infinite}.run-id{font-family:var(--font-mono);font-size:13px;color:var(--text-muted)}.run-status{display:flex;align-items:center;gap:6px;font-size:13px;text-transform:capitalize}.run-status.active{color:var(--in-progress)}.run-status.completed{color:var(--color-success)}.run-status.failed{color:var(--color-error)}.run-status.terminated{color:var(--text-muted)}.run-details{display:flex;gap:var(--space-sm);font-size:12px;color:var(--text-muted)}.agent-tasks-list{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-task-item{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-secondary);text-decoration:none;transition:background var(--transition-fast),border-color var(--transition-fast)}.agent-task-item:hover{background:var(--card-hover);border-color:var(--text-dim)}.agent-task-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-task-id{font-family:var(--font-mono);font-size:12px;font-weight:600;color:var(--todo)}.agent-task-title{font-size:14px;font-weight:500;color:var(--text);line-height:1.4}.agent-task-status{font-size:12px;color:var(--text-muted)}.agent-task-column{display:inline-flex;align-items:center;padding:2px 8px;border-radius:9999px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}.agent-task-column.column-triage{color:var(--triage, #1f6feb);background:color-mix(in srgb,var(--triage, #1f6feb) 18%,transparent)}.agent-task-column.column-todo{color:var(--todo, #58a6ff);background:color-mix(in srgb,var(--todo, #58a6ff) 18%,transparent)}.agent-task-column.column-in-progress{color:var(--in-progress, #bc8cff);background:color-mix(in srgb,var(--in-progress, #bc8cff) 18%,transparent)}.agent-task-column.column-in-review{color:var(--in-review, #f2cc60);background:color-mix(in srgb,var(--in-review, #f2cc60) 18%,transparent)}.agent-task-column.column-done{color:var(--done, #3fb950);background:color-mix(in srgb,var(--done, #3fb950) 18%,transparent)}.agent-task-column.column-archived{color:var(--text-muted);background:color-mix(in srgb,var(--text-muted) 18%,transparent)}.agent-tasks-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:48px;color:var(--text-muted);text-align:center}.agent-tasks-empty p{margin:0}.config-tab{display:flex;flex-direction:column;gap:24px}.config-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:20px}.config-section h3{font-size:16px;font-weight:600;margin:0 0 var(--space-sm) 0}.config-section--danger{border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent)}.config-danger-note{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.agent-content-toolbar{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}.agent-content-mode-toggle{display:flex;align-items:center;gap:var(--space-xs)}.agent-content-mode-toggle .btn{display:inline-flex;align-items:center;gap:6px}.agent-content-preview{overflow-y:auto;padding:var(--space-lg);min-height:150px}.agent-content-placeholder{color:var(--text-muted);text-align:center;padding:var(--space-xl);min-height:150px;display:flex;align-items:center;justify-content:center}.config-description{font-size:14px;color:var(--text-muted);margin:0 0 20px}.config-fields{display:flex;flex-direction:column;gap:var(--space-lg)}.config-field{display:flex;flex-direction:column;gap:6px}.config-field label{font-size:13px;font-weight:500}.config-runtime-tabs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-md)}.config-runtime-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)}.config-runtime-tab:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.config-runtime-tab:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.config-runtime-tab.active{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.config-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-style:italic}.config-error{font-size:11px;color:var(--color-error)}.input--error{border-color:var(--color-error)!important}.config-actions{display:flex;align-items:center;gap:var(--space-md);margin-top:20px;padding-top:var(--space-lg);border-top:1px solid var(--border)}.config-saved-indicator{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--color-success)}.rating-summary-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:20px;display:flex;flex-direction:column;gap:12px}.rating-score-display{display:flex;align-items:center;gap:12px}.rating-average{font-size:32px;font-weight:700;line-height:1}.rating-stats{display:flex;align-items:center;gap:12px}.rating-count{font-size:14px;color:var(--text-muted)}.rating-trend-badge{font-size:12px;padding:4px 10px;border-radius:12px;font-weight:500}.trend-improving{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.trend-declining{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.trend-stable{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.trend-insufficient{background:var(--bg-tertiary);color:var(--text-muted)}.category-breakdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.category-breakdown h4{margin:0 0 var(--space-md) 0;font-size:.875rem;font-weight:600}.category-breakdown .category-item{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.category-breakdown .category-item:last-child{border-bottom:none}.category-name{text-transform:capitalize;font-size:.875rem}.category-score{font-weight:600;font-size:.875rem}.add-rating-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.add-rating-form h4{margin:0;font-size:.875rem;font-weight:600}.star-selector{display:flex;gap:var(--space-xs)}.star-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;border-radius:var(--radius-sm);color:var(--text-muted);transition:background-color var(--transition-fast),color var(--transition-fast)}.star-btn:hover{background:var(--card-hover)}.star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.rating-stars{display:inline-flex;gap:var(--space-xs)}.rating-stars .star-filled{color:var(--color-warning)}.rating-stars .star-empty{color:var(--text-muted)}.add-rating-form .add-rating-category-select,.add-rating-form .add-rating-comment-input{width:100%}.add-rating-form .add-rating-comment-input{resize:vertical;min-height:calc(var(--space-xl) + var(--space-2xl))}.rating-history{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto}.rating-history h4{margin:0 0 var(--space-md) 0;font-size:.875rem;font-weight:600}.rating-history .no-ratings{color:var(--text-muted);font-size:.875rem;text-align:center;padding:var(--space-lg)}.rating-history-item{padding:var(--space-md) 0;border-bottom:1px solid var(--border)}.rating-history-item:last-child{border-bottom:none}.rating-item-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.rating-category-badge{font-size:.75rem;padding:calc(var(--space-xs) * .5) var(--space-sm);background:var(--card-hover);border-radius:var(--radius-pill);text-transform:capitalize}.rating-time{font-size:.75rem;color:var(--text-muted);margin-left:auto}.rating-delete-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;color:var(--text-muted);border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.rating-delete-btn:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.rating-comment{margin:var(--space-sm) 0 0 0;font-size:.8125rem;color:var(--text-secondary);line-height:1.4}@media(max-width:768px){.config-runtime-tabs{grid-template-columns:1fr}.agent-detail-overlay{padding:0;align-items:stretch}.agent-detail-modal{min-width:0!important;min-height:0!important;width:100vw!important;height:100vh!important;height:100dvh!important;max-width:100vw!important;max-height:100vh;max-height:100dvh;margin:0;border-radius:0;border:none;resize:none}.agent-detail-header{flex-wrap:wrap;gap:var(--space-sm);padding:12px;padding-top:max(12px,env(safe-area-inset-top,0))}.agent-detail-identity{flex:1 1 auto;min-width:0;gap:var(--space-sm)}.agent-detail-icon{width:32px;height:32px;flex-shrink:0}.agent-detail-icon svg{width:16px;height:16px}.agent-detail-info h2{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{flex-wrap:wrap}.agent-detail-controls{flex:1 1 100%;flex-wrap:wrap;gap:6px;order:3}.agent-detail-controls .btn--compact{padding:6px 10px;font-size:12px;min-height:36px}.agent-detail-controls .btn--compact svg{width:14px;height:14px}.agent-detail-utility-actions{flex-shrink:0}.agent-detail-utility-actions .btn-icon{min-height:36px;min-width:36px}.agent-detail-title{flex:1 1 auto;min-width:0;gap:var(--space-md)}.agent-detail-actions{flex:1 1 100%;flex-wrap:wrap;gap:6px}.agent-detail-actions .btn{padding:6px 10px;font-size:13px;min-height:36px}.agent-detail-actions .btn svg{width:14px;height:14px}.agent-detail-actions .btn-icon{min-height:36px;min-width:36px}.agent-detail-tabs{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.agent-detail-tabs::-webkit-scrollbar{display:none}.agent-detail-tab{padding:12px 14px;font-size:13px;white-space:nowrap;min-height:36px}.agent-detail-content{padding:16px}.agent-detail-footer{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-sm) 16px;padding-bottom:max(var(--space-sm),env(safe-area-inset-bottom,0));font-size:11px}.agent-detail-id{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-tab{gap:16px}.dashboard-section{padding:16px}.info-grid{grid-template-columns:repeat(2,1fr);gap:var(--space-md)}.stats-grid{grid-template-columns:repeat(3,1fr);gap:var(--space-md)}.stat-value{font-size:22px}.logs-container{max-height:50vh}.logs-empty{padding:32px 16px}.log-entry{padding:4px 2px;font-size:12px}.log-text{min-width:0;overflow-wrap:anywhere}.run-card{padding:var(--space-md)}.run-header{flex-wrap:wrap;gap:6px}.run-details{flex-wrap:wrap}.run-details .text-muted{min-width:0;overflow-wrap:anywhere}.config-tab{gap:16px}.config-section{padding:16px}.config-section .input,.config-section .select,.config-section textarea{font-size:16px;min-height:36px}.config-actions{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.config-actions .btn{width:100%;justify-content:center}}@media(max-width:480px){.info-grid,.stats-grid{grid-template-columns:1fr}.agent-detail-actions{flex-direction:column;width:100%}.agent-detail-actions .btn{width:100%;justify-content:center}.agent-detail-actions .btn-icon{align-self:flex-end}.agent-detail-footer .divider,.agent-detail-footer .text-muted,.agent-detail-footer .link{display:none}}@media(max-width:768px){.agent-dialog-overlay{padding:0;align-items:stretch}.agent-dialog{width:100vw!important;height:100vh;height:100dvh;max-width:100%!important;max-height:100vh;max-height:100dvh;border-radius:0;border:none}.agent-dialog-header{padding:max(var(--space-md),env(safe-area-inset-top,0px)) var(--space-lg) var(--space-md) var(--space-lg);flex-shrink:0}.agent-dialog-body{padding:var(--space-lg);-webkit-overflow-scrolling:touch}.agent-dialog-footer{padding:var(--space-md) var(--space-lg);padding-bottom:max(var(--space-md),env(safe-area-inset-bottom,0px));flex-wrap:wrap;gap:var(--space-sm)}.agent-dialog-field .input,.agent-dialog-field .select,.agent-dialog-field textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.agent-dialog-summary-row{flex-direction:column;gap:calc(var(--space-xs) * .5)}.agent-dialog-summary-row>span:first-child,.agent-dialog-summary-row-label{width:auto}.agent-dialog-steps{padding:var(--space-sm) var(--space-lg)}.agent-dialog-step{flex:1;width:auto;height:calc(var(--space-xs) - var(--space-xs) * .25)}.agent-dialog-tabs{grid-template-columns:1fr;gap:calc(var(--space-sm) - var(--space-xs) * .5);margin-bottom:var(--space-md)}.agent-dialog-tab{min-height:calc(var(--space-lg) * 2 + var(--space-xs));text-align:left}.agent-import-file-upload{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.agent-import-textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-xl) * 4 + var(--space-xs))}.agent-import-agent-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-result-stats{flex-direction:column;gap:var(--space-sm);align-items:center}.agent-import-browse-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-skill-list{max-height:calc(100dvh - (var(--space-xl) * 15 + var(--space-md)))}}@media(max-width:480px){.agent-dialog-body{padding:var(--space-md)}.agent-dialog-footer{flex-direction:column}.agent-dialog-footer .btn{width:100%;justify-content:center}}.reflections-tab{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.reflections-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.reflections-header h3{display:flex;align-items:center;gap:var(--space-sm);font-size:1rem;font-weight:600;color:var(--text)}.reflections-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-md)}.reflections-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);text-align:center}.reflections-stat-card .stat-value{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);font-size:1.5rem;font-weight:700;color:var(--text);margin-bottom:var(--space-xs)}.reflections-stat-card .stat-label{font-size:.75rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.reflections-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-secondary);text-align:center}.reflections-list{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-loading-indicator{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-lg)}.reflections-ratings-section{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-ratings-section>h4,.reflections-list h4{font-size:.875rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-cards{display:flex;flex-direction:column;gap:var(--space-sm)}.reflection-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);cursor:pointer;transition:border-color .15s,background-color .15s}.reflection-card:hover{border-color:var(--border-active);background:var(--card-hover)}.reflection-card:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.reflection-card--expanded{border-color:var(--color-primary)}.reflection-card-header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.reflection-trigger-badge{font-size:.7rem;font-weight:600;padding:2px 6px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.05em}.reflection-trigger-periodic{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.reflection-trigger-post-task{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.reflection-trigger-manual{background:color-mix(in srgb,var(--color-primary) 15%,transparent);color:var(--color-primary)}.reflection-trigger-user-requested{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.reflection-timestamp{font-size:.75rem;color:var(--text-muted);flex:1}.reflection-chevron{color:var(--text-muted)}.reflection-summary{font-size:.875rem;color:var(--text);line-height:1.5}.reflection-details{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--border);display:flex;flex-direction:column;gap:var(--space-md)}.reflection-insights h5,.reflection-suggestions h5{display:flex;align-items:center;gap:var(--space-xs);font-size:.8rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-insights ul,.reflection-suggestions ul{list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.reflection-insights li,.reflection-suggestions li{font-size:.8rem;color:var(--text-secondary);padding-left:var(--space-md);position:relative}.reflection-insights li:before{content:"•";position:absolute;left:4px;color:var(--color-success)}.reflection-suggestions li:before{content:"→";position:absolute;left:0;color:var(--color-primary)}.reflection-metrics{background:var(--bg);border-radius:var(--radius-sm);padding:var(--space-sm)}.reflection-metrics h5{font-size:.75rem;font-weight:600;color:var(--text-muted);margin-bottom:var(--space-xs)}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--space-sm)}.metric{display:flex;flex-direction:column;gap:2px}.metric-label{font-size:.7rem;color:var(--text-muted)}.metric-value{font-size:.875rem;font-weight:600;color:var(--text)}.reflection-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);color:var(--text-secondary);text-align:center}.reflection-empty p{font-size:.875rem}@media(max-width:768px){.reflections-header{flex-wrap:wrap;align-items:flex-start}.reflections-header .btn{width:100%;justify-content:center}}.budget-progress-container{margin-top:4px}.budget-progress-bar{width:100%;height:8px;background:var(--bg-secondary, #161b22);border-radius:4px;overflow:hidden;margin-top:4px}.budget-progress-bar__fill{height:100%;border-radius:4px;transition:width .3s ease,background-color .3s ease}.budget-progress-bar__fill--green{background:var(--state-active-text, #3fb950)}.budget-progress-bar__fill--amber{background:var(--state-paused-text, #e3b541)}.budget-progress-bar__fill--red{background:var(--state-error-text, #f85149)}.budget-progress-label{font-size:.75rem;color:var(--text-secondary, #8b949e);margin-top:4px;display:block}.budget-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:12px;font-size:.75rem;font-weight:500}.budget-warning-banner{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:6px;background:var(--state-error-bg, rgba(248,81,73,.15));color:var(--state-error-text, #f85149);border:1px solid var(--state-error-border, #f85149);font-size:.875rem;margin-bottom:12px}.btn-reset-budget{margin-top:8px}.chat-sidebar-footer{display:none}@media(max-width:768px){.chat-view{flex-direction:column}.chat-sidebar{width:100%;min-width:100%;height:100%;max-height:none;border-right:none;border-bottom:1px solid var(--border);flex-direction:column}.chat-sidebar-header,.chat-sidebar-search{display:none}.chat-sidebar-list{flex:1;min-height:0;overflow-y:auto}.chat-sidebar-footer{display:flex;padding:var(--space-md);border-top:1px solid var(--border);background:var(--bg-secondary)}.chat-sidebar-footer-btn{flex:1;justify-content:center}.chat-sidebar--hidden{display:none}.chat-message{max-width:90%}.chat-new-dialog{width:95vw;margin:16px}.chat-thread-header{padding:8px 12px}.chat-skill-menu{left:var(--space-md);right:calc(var(--space-md) + var(--mobile-nav-height));min-width:0;max-width:none}}@media(max-width:768px){.file-mention-popup{max-height:200px}.file-mention-popup-item{min-height:36px;padding:10px 12px}.agent-mention-popup{max-width:280px;min-width:200px}}
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-DyzuiJas.js","assets/vendor-react-K0fH_qHe.js","assets/index-DJDWSrju.js","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/index-Belw0PQt.css","assets/star-BQhDgM9V.js","assets/list-checks-CK3_6p5e.js","assets/upload-DDdZveEJ.js","assets/folder-open-C3zB1vmh.js","assets/AgentDetailView-C1_lTTET.css"])))=>i.map(i=>d[i]);
2
- import{c as He,s as dt,A as Ie,C as Re,Z as ut,B as Ve,g as qe,a as at,b as $e,d as mt,e as ht,f as gt,h as pt,i as ft,u as Ke,P as vt,j as bt,k as xt,l as yt,m as Ue,G as wt,S as jt,L as Fe,T as De,R as _e,F as Be,X as Ge,n as kt,o as Nt,p as It,q as Ct,r as fe,t as Le,v as St,w as Et,x as At,y as Tt,z as Mt,D as Qe,E as Rt,H as it,I as _t,J as Ee,K as Je,M as Pt,N as $t,O as Ft,Q as Ae,U as Dt,V as Xe,W as Lt,Y as zt,_ as Ot,$ as qt}from"./index-DJDWSrju.js";import{r as n,j as e,a as Ht}from"./vendor-react-K0fH_qHe.js";import{U as rt}from"./upload-DDdZveEJ.js";import{F as Vt}from"./folder-open-C3zB1vmh.js";/**
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-C3Xcrxnp.js","assets/vendor-react-K0fH_qHe.js","assets/index-D1gavMG-.js","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/index-CWz44REw.css","assets/star-BdfwSLBU.js","assets/list-checks-CvoT0bwU.js","assets/upload-Bx8Yk_7Q.js","assets/folder-open-Kh0ScTc5.js","assets/AgentDetailView-DIBOY8V-.css"])))=>i.map(i=>d[i]);
2
+ import{c as He,s as dt,A as Ie,C as Re,Z as ut,B as Ve,g as qe,a as at,b as $e,d as mt,e as ht,f as gt,h as pt,i as ft,u as Ke,P as vt,j as bt,k as xt,l as yt,m as Ue,G as wt,S as jt,L as Fe,T as De,R as _e,F as Be,X as Ge,n as kt,o as Nt,p as It,q as Ct,r as fe,t as Le,v as St,w as Et,x as At,y as Tt,z as Mt,D as Qe,E as Rt,H as it,I as _t,J as Ee,K as Je,M as Pt,N as $t,O as Ft,Q as Ae,U as Dt,V as Xe,W as Lt,Y as zt,_ as Ot,$ as qt}from"./index-D1gavMG-.js";import{r as n,j as e,a as Ht}from"./vendor-react-K0fH_qHe.js";import{U as rt}from"./upload-Bx8Yk_7Q.js";import{F as Vt}from"./folder-open-Kh0ScTc5.js";/**
3
3
  * @license lucide-react v1.7.0 - ISC
4
4
  *
5
5
  * This source code is licensed under the ISC license.
@@ -519,4 +519,4 @@ reportsTo: null
519
519
  skills:
520
520
  - review
521
521
  ---
522
- Agent instructions go here...`,value:c,onChange:i=>{g("paste"),w([]),m(i.target.value),_(null)},rows:8,"aria-label":"Manifest content"})]}),e.jsxs("p",{className:"agent-import-file-hint",children:["Current input: ",r]}),D&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(De,{size:14}),D]})]}),d==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:"Company"}),e.jsx("span",{className:"agent-import-company-name",children:k})]}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Be,{size:14}),e.jsxs("span",{children:[f.length," agent",f.length!==1?"s":""," found"]})]}),f.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S(f.map(i=>i.name)),children:"Select all agents"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S([]),children:"Clear agents"})]}),f.length>0?e.jsx("div",{className:"agent-import-agent-list",children:f.map((i,b)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select agent ${i.name}`,checked:M.includes(i.name),onChange:()=>Ce(i.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:i.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:i.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[i.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[i.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:i.role}),i.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",i.reportsTo]}),i.skills&&i.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",i.skills.join(", ")]})]}),i.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[i.instructionsText.slice(0,100),i.instructionsText.length>100?"...":""]})]})]},b))}):e.jsx("p",{className:"agent-import-empty",children:"No agents found in the manifest."}),E.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Be,{size:14}),e.jsxs("span",{children:[E.length," skill",E.length!==1?"s":""," found"]})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Z(E.map(i=>i.name)),children:"Select all skills"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Z([]),children:"Clear skills"})]}),e.jsx("div",{className:"agent-import-skill-list",children:E.map((i,b)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select skill ${i.name}`,checked:R.includes(i.name),onChange:()=>Se(i.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:i.name}),i.description&&e.jsx("span",{className:"agent-import-skill-description",children:i.description})]})]},`${i.name}-${b}`))})]}),oe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(De,{size:14}),oe]})]}),d==="result"&&N&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Re,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:"Import Complete"}),e.jsxs("p",{className:"agent-import-result-company",children:["From ",e.jsx("strong",{children:N.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[N.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[N.created.length," created"]})}),N.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[N.skipped.length," skipped (already exist)"]})}),N.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[N.errors.length," error",N.errors.length!==1?"s":""]})})]}),N.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:N.created.map((i,b)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Re,{size:12}),e.jsx("span",{children:i.name})]},b))}),N.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:N.errors.map((i,b)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Ge,{size:12}),e.jsxs("span",{children:[i.name,": ",i.error]})]},b))}),N.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:"Skills"}),e.jsxs("div",{className:"agent-import-result-stats",children:[N.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[N.skills.imported.length," skill",N.skills.imported.length!==1?"s":""," imported"]})}),N.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[N.skills.skipped.length," skill",N.skills.skipped.length!==1?"s":""," skipped (already exist)"]})}),N.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[N.skills.errors.length," skill",N.skills.errors.length!==1?"s":""," error",N.skills.errors.length!==1?"s":""]})}),N.skills.imported.length===0&&N.skills.skipped.length===0&&N.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:"No skills in package"})})]}),N.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:N.skills.imported.map((i,b)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Re,{size:12}),e.jsx("span",{children:i.name})]},b))}),N.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:N.skills.errors.map((i,b)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Ge,{size:12}),e.jsxs("span",{children:[i.name,": ",i.error]})]},b))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[d==="preview"&&e.jsx("button",{className:"btn",onClick:()=>u("input"),disabled:le,children:"Back"}),e.jsx("button",{className:"btn",onClick:ae,disabled:le,children:d==="result"?"Close":"Cancel"}),d==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void pe(),disabled:B||(r==="directory"?j.length===0:r==="browse"?!z:!c.trim()),children:B?e.jsxs(e.Fragment,{children:[e.jsx(Fe,{size:14,className:"spin"}),"Parsing..."]}):"Preview"}),d==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void he(),disabled:le||K===0&&V===0,children:le?e.jsxs(e.Fragment,{children:[e.jsx(Fe,{size:14,className:"spin"}),ue]}):`Import ${je}`})]})]})}):null}const Pn=n.lazy(()=>qt(()=>import("./AgentDetailView-DyzuiJas.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(a=>({default:a.AgentDetailView}))),Me=[{value:"triage",label:"Triage",icon:"⊕"},{value:"executor",label:"Executor",icon:"▶"},{value:"reviewer",label:"Reviewer",icon:"⊙"},{value:"merger",label:"Merger",icon:"⊞"},{value:"scheduler",label:"Scheduler",icon:"◷"},{value:"engineer",label:"Engineer",icon:"⎔"},{value:"custom",label:"Custom",icon:"✦"}],Oe=[.1,.25,.5,1,2,3,5,10];function Pe(a){switch(a){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"terminated":return"agent-badge--terminated";case"idle":default:return"agent-badge--idle"}}function st(a,l){switch(l){case"running":return`${a}--running`;case"active":return`${a}--active`;case"paused":return`${a}--paused`;case"error":return`${a}--error`;case"terminated":return`${a}--terminated`;case"idle":default:return`${a}--idle`}}function ot({node:a,onSelect:l,onToggle:p,isExpanded:h,getChildCount:d,getHealthStatus:u,getRoleIcon:r,getSkillBadges:g}){const{agent:c,children:m,depth:j}=a,w=d(c.id),k=h(c.id),A=u(c),f=Pe(c.state);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`agent-tree__node${c.reportsTo?" agent-is-child":""} agent-tree__indent--${Math.min(j,4)}`,children:[e.jsx("button",{className:`agent-tree__toggle${w===0?" agent-tree__toggle--leaf":""}`,onClick:()=>w>0&&p(c.id),title:w>0?k?"Collapse":"Expand":"No employees","aria-label":w>0?k?"Collapse":"Expand":"No employees",children:w>0?k?e.jsx($t,{size:16}):e.jsx(it,{size:16}):e.jsx(Ve,{size:14})}),e.jsxs("div",{className:"agent-tree__content",onClick:()=>l(c.id),role:"button",tabIndex:0,onKeyDown:v=>v.key==="Enter"&&l(c.id),children:[e.jsx("span",{className:"agent-tree__icon",children:r(c.role)}),e.jsx("span",{className:"agent-tree__name",children:c.name}),e.jsx("span",{className:`agent-tree__badge ${f}`,children:c.state}),e.jsx("span",{className:"agent-tree__health",style:{color:A.color},title:A.label,children:A.icon}),w>0&&e.jsxs("span",{className:"agent-tree__count text-secondary",children:["(",w,")"]}),(()=>{const v=g(c);return v.length===0?null:e.jsxs("span",{className:"agent-tree__skill",title:v.join(", "),children:[v[0],v.length>1&&` +${v.length-1}`]})})()]})]}),k&&m.length>0&&e.jsx("div",{className:"agent-tree__children",children:m.map(v=>e.jsx(ot,{node:v,onSelect:l,onToggle:p,isExpanded:h,getChildCount:d,getHealthStatus:u,getRoleIcon:r,getSkillBadges:g},v.agent.id))})]})}function ct({node:a,onSelect:l,getHealthStatus:p,getRoleIcon:h,getSkillBadges:d}){const{agent:u,children:r}=a,g=p(u),c=Pe(u.state);return e.jsxs("div",{className:`org-chart-node${r.length>0?" org-chart-node--has-children":""}`,children:[e.jsxs("div",{className:"org-chart-node-card",onClick:()=>l(u.id),role:"button",tabIndex:0,onKeyDown:m=>m.key==="Enter"&&l(u.id),children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:h(u.role)}),e.jsx("span",{className:"org-chart-node__name",children:u.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${c}`,children:u.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:g.color},title:g.label,children:[g.icon,!g.stateDerived&&e.jsx("span",{className:"text-secondary",children:g.label})]}),(()=>{const m=d(u);if(m.length===0)return null;const j=m.slice(0,2),w=m.length-2;return e.jsxs(e.Fragment,{children:[j.map(k=>e.jsx("span",{className:"org-chart-node__skill",children:k},k)),w>0&&e.jsxs("span",{className:"org-chart-node__skill",children:["+",w]})]})})()]})]}),r.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":`${u.name} employees`,children:r.map(m=>e.jsx(ct,{node:m,onSelect:l,getHealthStatus:p,getRoleIcon:h,getSkillBadges:d},m.agent.id))})]})}function $n({addToast:a,projectId:l}){const[p,h]=n.useState(!1),[d,u]=n.useState("all"),{agents:r,stats:g,isLoading:c,loadAgents:m}=kt(l,{filterState:d,showSystemAgents:p}),[j,w]=n.useState(!1),[k,A]=n.useState(!1),[f,v]=n.useState(null),[E,H]=n.useState(()=>{if(typeof window>"u")return"list";const t=qe("fn-agent-view",l);return t==="list"||t==="board"||t==="tree"||t==="org"?t:"list"}),[M,S]=n.useState([]),[R,Z]=n.useState(!1),[B,Y]=n.useState(!1),le=n.useRef(null),{confirm:ve}=Nt(),D=n.useRef(null),_=n.useId();n.useEffect(()=>{const t=qe("fn-agent-view",l);if(t==="list"||t==="board"||t==="tree"||t==="org"){H(t);return}H("list")},[l]),n.useEffect(()=>{at("fn-agent-view",E,l)},[E,l]);const[N,ee]=n.useState(null),oe=n.useRef(null),[be,G]=n.useState(null),[xe,te]=n.useState(null),[ce,L]=n.useState({}),[ne,z]=n.useState(1),[de,ge]=n.useState(!1),[O,se]=n.useState(new Set),[q,Q]=n.useState(new Map),me=n.useRef(!0);n.useEffect(()=>(me.current=!0,()=>{me.current=!1}),[]),n.useEffect(()=>{It(l).then(t=>{me.current&&z(t.heartbeatMultiplier??1)}).catch(()=>{})},[l]);const J=n.useCallback(async t=>{const o=Number.isFinite(t)&&t>0?t:1;z(o),ge(!0);try{await Ct({heartbeatMultiplier:o},l),a(`Heartbeat speed set to ×${o.toFixed(1)}`,"success")}catch(x){a(`Failed to save heartbeat multiplier: ${fe(x)}`,"error")}finally{me.current&&ge(!1)}},[l,a]),ae=n.useMemo(()=>q.size===0?r:r.map(t=>{const o=q.get(t.id);return o?{...t,state:o}:t}),[r,q]),ie=rn(ae,l),re=n.useMemo(()=>ae.filter(t=>p||!Le(t)),[ae,p]),ye=n.useMemo(()=>ae.filter(t=>t.state!=="active"&&t.state!=="running"?!1:p||!Le(t)),[ae,p]),pe=n.useMemo(()=>{if(p)return M;const t=o=>Le(o.agent)?null:{...o,children:o.children.map(t).filter(x=>x!==null)};return M.map(t).filter(o=>o!==null)},[M,p]);n.useEffect(()=>{if(E!=="org")return;let t=!1;return Z(!0),St(l,{includeEphemeral:p}).then(o=>{t||S(o)}).catch(o=>{t||(a(`Failed to load org chart: ${fe(o)}`,"error"),S([]))}).finally(()=>{t||Z(!1)}),()=>{t=!0}},[E,l,p,a]),n.useEffect(()=>{const t=setInterval(()=>{m()},3e4);return()=>{clearInterval(t)}},[m]),n.useEffect(()=>{if(!B)return;const t=x=>{const I=x.target;I&&(le.current?.contains(I)||D.current?.contains(I)||Y(!1))},o=x=>{x.key==="Escape"&&(Y(!1),D.current?.focus())};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",o)}},[B]);const he=async(t,o)=>{if(!O.has(t)){se(x=>new Set(x).add(t)),Q(x=>{const I=new Map(x);return I.set(t,o),I});try{await Lt(t,o,l),a(`Agent state updated to ${o}`,"success"),await m(),Q(x=>{const I=new Map(x);return I.delete(t),I})}catch(x){Q(I=>{const F=new Map(I);return F.delete(t),F}),a(`Failed to update state: ${fe(x)}`,"error")}finally{se(x=>{const I=new Set(x);return I.delete(t),I})}}},K=async(t,o)=>{if(await ve({title:"Delete Agent",message:`Delete agent "${o}"? This cannot be undone.`,danger:!0}))try{await Ot(t,l),a(`Agent "${o}" deleted`,"success"),m()}catch(I){a(`Failed to delete agent: ${fe(I)}`,"error")}},V=async(t,o)=>{const x=r.find(I=>I.id===t);if(x){if(x.role===o){ee(null);return}try{await Ae(t,{role:o},l),a(`Agent role updated to ${Me.find(I=>I.value===o)?.label??o}`,"success"),ee(null),m()}catch(I){a(`Failed to update role: ${fe(I)}`,"error")}}},we=(t,o)=>{t.key==="Escape"&&ee(null)},ke=async(t,o)=>{xe===t.id&&(te(null),L(x=>{const I={...x};return delete I[t.id],I})),G(t.id);try{await Ae(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:o}},l),a(`Heartbeat interval updated to ${Xe(o)} for ${t.name}`,"success"),m()}catch(x){a(`Failed to update heartbeat interval: ${fe(x)}`,"error")}finally{G(null)}},je=async t=>{const o=ce[t.id]??"";if(o.trim()===""){a("Please enter a heartbeat interval in minutes","error");return}const x=Number(o);if(isNaN(x)){a("Heartbeat interval must be a valid number","error");return}if(x<=0){a("Heartbeat interval must be greater than 0","error");return}if(x>=1&&x<5){G(t.id);try{await Ae(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Dt}},l),a(`Heartbeat interval set to 5 minutes (minimum). ${x} minute${x!==1?"s":""} was below the 5-minute minimum.`,"success"),te(null),L(F=>{const s={...F};return delete s[t.id],s}),m()}catch(F){a(`Failed to update heartbeat interval: ${fe(F)}`,"error")}finally{G(null)}return}const I=Math.round(x*6e4);G(t.id);try{await Ae(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:I}},l),a(`Heartbeat interval updated to ${Xe(I)} for ${t.name}`,"success"),te(null),L(F=>{const s={...F};return delete s[t.id],s}),m()}catch(F){a(`Failed to update heartbeat interval: ${fe(F)}`,"error")}finally{G(null)}},ue=t=>{const o=Qe(t.runtimeConfig?.heartbeatIntervalMs),x=Math.round(o/6e4);te(t.id),L(I=>({...I,[t.id]:String(x)}))},Ce=n.useCallback(()=>{v(null)},[]),Se=n.useCallback(t=>{v(t)},[]),i=async(t,o)=>{try{await zt(t,l,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),a(`Heartbeat run started for ${o}`,"success"),m()}catch(x){a(`Failed to start heartbeat run: ${fe(x)}`,"error")}},b=t=>Me.find(o=>o.value===t)?.label??t,T=t=>Me.find(o=>o.value===t)?.icon??"◆",U=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],P=t=>Ft(t),W=c&&r.length===0;return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(Ve,{size:24}),e.jsx("h2",{children:"Agents"})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${E==="list"?" active":""}`,onClick:()=>H("list"),title:"List view","aria-label":"List view","aria-pressed":E==="list",children:e.jsx(Et,{size:16})}),e.jsx("button",{className:`view-toggle-btn${E==="board"?" active":""}`,onClick:()=>H("board"),title:"Board view","aria-label":"Board view","aria-pressed":E==="board",children:e.jsx(Ie,{size:16})}),e.jsx("button",{className:`view-toggle-btn${E==="tree"?" active":""}`,onClick:()=>H("tree"),title:"Tree view","aria-label":"Tree view","aria-pressed":E==="tree",children:e.jsx(At,{size:16})}),e.jsx("button",{className:`view-toggle-btn${E==="org"?" active":""}`,onClick:()=>H("org"),title:"Org Chart view","aria-label":"Org Chart view","aria-pressed":E==="org",children:e.jsx(Bt,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:D,className:`btn-icon agent-controls-trigger${B?" agent-controls-trigger--active":""}`,onClick:()=>Y(t=>!t),title:"Controls","aria-label":"Controls","aria-haspopup":"dialog","aria-expanded":B,"aria-controls":_,children:e.jsx(Qt,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void m(),title:"Refresh","aria-label":"Refresh",children:e.jsx(_e,{size:16,className:c?"spin":void 0})}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{w(!0),Y(!1)},children:[e.jsx(Tt,{size:16}),"New Agent"]})]})]})]}),B&&e.jsxs("div",{ref:le,id:_,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":"Agent controls","aria-modal":"false",children:[e.jsxs("div",{className:"agent-controls",children:[e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(Mt,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:d,onChange:t=>u(t.target.value),"aria-label":"Filter agents by state",children:[e.jsx("option",{value:"all",children:"All States"}),e.jsx("option",{value:"idle",children:"Idle"}),e.jsx("option",{value:"active",children:"Active"}),e.jsx("option",{value:"running",children:"Running"}),e.jsx("option",{value:"paused",children:"Paused"}),e.jsx("option",{value:"error",children:"Error"}),e.jsx("option",{value:"terminated",children:"Terminated"})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:p,onChange:t=>h(t.target.checked),"aria-label":"Show system agents"}),"Show system agents"]})]}),e.jsx("div",{className:"agent-controls-actions",children:e.jsxs("button",{className:"btn",onClick:()=>{A(!0),Y(!1)},children:[e.jsx(rt,{size:16}),"Import"]})})]}),e.jsx("div",{className:"agent-global-controls",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:"Heartbeat Speed"}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:ne,onChange:t=>{const o=Number(t.target.value);J(Number.isFinite(o)&&o>0?o:1)},disabled:de}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",ne.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Oe.reduce((t,o)=>Math.abs(o-ne)<Math.abs(t-ne)?o:t,Oe[0])),onChange:t=>{const o=Number(t.target.value);J(Number.isFinite(o)&&o>0?o:1)},disabled:de,"aria-label":"Heartbeat speed preset",children:Oe.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:"Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0"})]})}),e.jsx(nn,{agents:re})]}),e.jsxs("div",{className:"agents-view-content",children:[e.jsx(tn,{stats:g}),e.jsx(Mn,{isOpen:j,onClose:()=>w(!1),onCreated:()=>{w(!1),m()},projectId:l}),e.jsx(_n,{isOpen:k,onClose:()=>A(!1),onImported:()=>void m(),projectId:l}),W?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(_e,{size:18,className:"spin"}),e.jsx("span",{children:"Loading agents..."})]}):E==="tree"?e.jsx("div",{className:"agent-tree__view",children:re.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):ie.rootNodes.map(t=>e.jsx(ot,{node:t,onSelect:v,onToggle:ie.toggleExpand,isExpanded:ie.isExpanded,getChildCount:o=>ie.getChildren(o).length,getHealthStatus:P,getRoleIcon:T,getSkillBadges:U},t.agent.id))}):E==="org"?e.jsx("div",{className:"agent-org-chart","data-testid":"agent-org-chart",children:R?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(_e,{size:18,className:"spin"}),e.jsx("span",{children:"Loading org chart..."})]}):pe.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):pe.map(t=>e.jsx(ct,{node:t,onSelect:v,getHealthStatus:P,getRoleIcon:T,getSkillBadges:U},t.agent.id))}):E==="board"?e.jsx("div",{className:"agent-board",children:re.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):re.map(t=>{const o=P(t),x=Pe(t.state),I=st("agent-board-card",t.state);return e.jsx("div",{className:`agent-board-card ${I}`,children:e.jsxs("div",{className:"agent-board-clickable",onClick:()=>v(t.id),role:"button",tabIndex:0,onKeyDown:F=>F.key==="Enter"&&v(t.id),children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:T(t.role)}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:b(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${x}`,children:t.state})]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:o.color},title:o.label,children:[o.icon,!o.stateDerived&&` ${o.label}`]})]})},t.id)})}):e.jsx("div",{className:"agent-list",children:re.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):re.map(t=>{const o=P(t),x=Pe(t.state),I=st("agent-card",t.state),F=Qe(t.runtimeConfig?.heartbeatIntervalMs),s=Rt(F),C=be===t.id;return e.jsxs("div",{className:`agent-card ${I}`,children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info agent-info--clickable",onClick:()=>v(t.id),role:"button",tabIndex:0,onKeyDown:y=>y.key==="Enter"&&v(t.id),children:[N===t.id?e.jsx("select",{ref:oe,className:"select agent-role-select",value:t.role,onChange:y=>void V(t.id,y.target.value),onKeyDown:y=>we(y,t.id),onBlur:()=>ee(null),autoFocus:!0,children:Me.map(y=>e.jsxs("option",{value:y.value,children:[y.icon," ",y.label]},y.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:y=>{y.stopPropagation(),ee(t.id)},title:"Click to change role",role:"button",tabIndex:0,onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.stopPropagation(),ee(t.id))},children:T(t.role)}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(it,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${x}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:o.color},title:o.label,children:[o.icon,!o.stateDerived&&` ${o.label}`]}),e.jsx("span",{className:"badge text-secondary",children:b(t.role)}),(()=>{const y=U(t);if(y.length===0)return null;const $=y.slice(0,2),X=y.length-2;return e.jsxs(e.Fragment,{children:[$.map(We=>e.jsx("span",{className:"badge badge-skill",children:We},We)),X>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",X]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:"Working on:"}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:"Heartbeat:"}),xe===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:ce[t.id]??"",onChange:y=>L($=>({...$,[t.id]:y.target.value})),onKeyDown:y=>{y.key==="Enter"?je(t):y.key==="Escape"&&(te(null),L($=>{const X={...$};return delete X[t.id],X}))},disabled:C,"aria-label":`Custom heartbeat interval in minutes for ${t.name}`}),e.jsx("span",{className:"text-secondary",children:"min"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>void je(t),disabled:C,title:"Save custom interval",children:"Save"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>{te(null),L(y=>{const $={...y};return delete $[t.id],$})},disabled:C,title:"Cancel custom interval",children:"Cancel"})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:F,onChange:y=>{const $=y.target.value;$==="__custom__"?ue(t):ke(t,Number($))},disabled:C,"aria-label":`Set heartbeat interval for ${t.name}`,children:[s.map(y=>e.jsx("option",{value:y.value,children:y.label},y.value)),_t.some(y=>y.value===F)&&e.jsx("option",{value:"__custom__",children:"Custom..."})]})}),C&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:"Saving…"}),t.lastHeartbeatAt&&(()=>{const y=new Date(t.lastHeartbeatAt),$=new Date(y.getTime()+F),X=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"agent-heartbeat-last text-secondary",title:y.toLocaleString(),children:["Last: ",y.toLocaleTimeString()]}),X&&e.jsxs("span",{className:"agent-heartbeat-next text-secondary",title:$.toLocaleString(),children:["Next: ",$.toLocaleTimeString()]})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[t.state==="idle"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Activate",children:[e.jsx(Ee,{size:14})," Start"]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void i(t.id,t.name),disabled:O.has(t.id),title:"Run Now","aria-label":`Run now for ${t.name}`,children:[e.jsx(Ie,{size:14})," Run Now"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"paused"),disabled:O.has(t.id),title:"Pause",children:[e.jsx(Je,{size:14})," Pause"]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Resume",children:[e.jsx(Ee,{size:14})," Resume"]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",disabled:!0,title:"Run in progress","aria-label":`Heartbeat run in progress for ${t.name}`,children:[e.jsx(Ie,{size:14})," Running"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"paused"),disabled:O.has(t.id),title:"Pause",children:[e.jsx(Je,{size:14})," Pause"]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Retry",children:[e.jsx(Ee,{size:14})," Retry"]}),t.state==="terminated"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Start",children:[e.jsx(Ee,{size:14})," Start"]}),e.jsx("button",{className:"btn btn--sm agent-card-details-btn",onClick:()=>v(t.id),title:`View details for ${t.name}`,"aria-label":`View details for ${t.name}`,children:"View Details"}),e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void K(t.id,t.name),title:"Delete",children:[e.jsx(Pt,{size:14})," Delete"]})]})]},t.id)})}),e.jsx(Yt,{agents:ye,projectId:l,onAgentSelect:v})]}),f&&e.jsx(n.Suspense,{fallback:null,children:e.jsx(Pn,{agentId:f,projectId:l,onClose:Ce,addToast:a,onChildClick:Se})})]})}const On=Object.freeze(Object.defineProperty({__proto__:null,AgentsView:$n},Symbol.toStringTag,{value:"Module"}));export{On as A,An as S};
522
+ Agent instructions go here...`,value:c,onChange:i=>{g("paste"),w([]),m(i.target.value),_(null)},rows:8,"aria-label":"Manifest content"})]}),e.jsxs("p",{className:"agent-import-file-hint",children:["Current input: ",r]}),D&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(De,{size:14}),D]})]}),d==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:"Company"}),e.jsx("span",{className:"agent-import-company-name",children:k})]}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Be,{size:14}),e.jsxs("span",{children:[f.length," agent",f.length!==1?"s":""," found"]})]}),f.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S(f.map(i=>i.name)),children:"Select all agents"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S([]),children:"Clear agents"})]}),f.length>0?e.jsx("div",{className:"agent-import-agent-list",children:f.map((i,b)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select agent ${i.name}`,checked:M.includes(i.name),onChange:()=>Ce(i.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:i.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:i.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[i.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[i.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:i.role}),i.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",i.reportsTo]}),i.skills&&i.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",i.skills.join(", ")]})]}),i.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[i.instructionsText.slice(0,100),i.instructionsText.length>100?"...":""]})]})]},b))}):e.jsx("p",{className:"agent-import-empty",children:"No agents found in the manifest."}),E.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Be,{size:14}),e.jsxs("span",{children:[E.length," skill",E.length!==1?"s":""," found"]})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Z(E.map(i=>i.name)),children:"Select all skills"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Z([]),children:"Clear skills"})]}),e.jsx("div",{className:"agent-import-skill-list",children:E.map((i,b)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select skill ${i.name}`,checked:R.includes(i.name),onChange:()=>Se(i.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:i.name}),i.description&&e.jsx("span",{className:"agent-import-skill-description",children:i.description})]})]},`${i.name}-${b}`))})]}),oe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(De,{size:14}),oe]})]}),d==="result"&&N&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Re,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:"Import Complete"}),e.jsxs("p",{className:"agent-import-result-company",children:["From ",e.jsx("strong",{children:N.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[N.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[N.created.length," created"]})}),N.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[N.skipped.length," skipped (already exist)"]})}),N.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[N.errors.length," error",N.errors.length!==1?"s":""]})})]}),N.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:N.created.map((i,b)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Re,{size:12}),e.jsx("span",{children:i.name})]},b))}),N.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:N.errors.map((i,b)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Ge,{size:12}),e.jsxs("span",{children:[i.name,": ",i.error]})]},b))}),N.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:"Skills"}),e.jsxs("div",{className:"agent-import-result-stats",children:[N.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[N.skills.imported.length," skill",N.skills.imported.length!==1?"s":""," imported"]})}),N.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[N.skills.skipped.length," skill",N.skills.skipped.length!==1?"s":""," skipped (already exist)"]})}),N.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[N.skills.errors.length," skill",N.skills.errors.length!==1?"s":""," error",N.skills.errors.length!==1?"s":""]})}),N.skills.imported.length===0&&N.skills.skipped.length===0&&N.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:"No skills in package"})})]}),N.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:N.skills.imported.map((i,b)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Re,{size:12}),e.jsx("span",{children:i.name})]},b))}),N.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:N.skills.errors.map((i,b)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Ge,{size:12}),e.jsxs("span",{children:[i.name,": ",i.error]})]},b))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[d==="preview"&&e.jsx("button",{className:"btn",onClick:()=>u("input"),disabled:le,children:"Back"}),e.jsx("button",{className:"btn",onClick:ae,disabled:le,children:d==="result"?"Close":"Cancel"}),d==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void pe(),disabled:B||(r==="directory"?j.length===0:r==="browse"?!z:!c.trim()),children:B?e.jsxs(e.Fragment,{children:[e.jsx(Fe,{size:14,className:"spin"}),"Parsing..."]}):"Preview"}),d==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void he(),disabled:le||K===0&&V===0,children:le?e.jsxs(e.Fragment,{children:[e.jsx(Fe,{size:14,className:"spin"}),ue]}):`Import ${je}`})]})]})}):null}const Pn=n.lazy(()=>qt(()=>import("./AgentDetailView-C3Xcrxnp.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(a=>({default:a.AgentDetailView}))),Me=[{value:"triage",label:"Triage",icon:"⊕"},{value:"executor",label:"Executor",icon:"▶"},{value:"reviewer",label:"Reviewer",icon:"⊙"},{value:"merger",label:"Merger",icon:"⊞"},{value:"scheduler",label:"Scheduler",icon:"◷"},{value:"engineer",label:"Engineer",icon:"⎔"},{value:"custom",label:"Custom",icon:"✦"}],Oe=[.1,.25,.5,1,2,3,5,10];function Pe(a){switch(a){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"terminated":return"agent-badge--terminated";case"idle":default:return"agent-badge--idle"}}function st(a,l){switch(l){case"running":return`${a}--running`;case"active":return`${a}--active`;case"paused":return`${a}--paused`;case"error":return`${a}--error`;case"terminated":return`${a}--terminated`;case"idle":default:return`${a}--idle`}}function ot({node:a,onSelect:l,onToggle:p,isExpanded:h,getChildCount:d,getHealthStatus:u,getRoleIcon:r,getSkillBadges:g}){const{agent:c,children:m,depth:j}=a,w=d(c.id),k=h(c.id),A=u(c),f=Pe(c.state);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`agent-tree__node${c.reportsTo?" agent-is-child":""} agent-tree__indent--${Math.min(j,4)}`,children:[e.jsx("button",{className:`agent-tree__toggle${w===0?" agent-tree__toggle--leaf":""}`,onClick:()=>w>0&&p(c.id),title:w>0?k?"Collapse":"Expand":"No employees","aria-label":w>0?k?"Collapse":"Expand":"No employees",children:w>0?k?e.jsx($t,{size:16}):e.jsx(it,{size:16}):e.jsx(Ve,{size:14})}),e.jsxs("div",{className:"agent-tree__content",onClick:()=>l(c.id),role:"button",tabIndex:0,onKeyDown:v=>v.key==="Enter"&&l(c.id),children:[e.jsx("span",{className:"agent-tree__icon",children:r(c.role)}),e.jsx("span",{className:"agent-tree__name",children:c.name}),e.jsx("span",{className:`agent-tree__badge ${f}`,children:c.state}),e.jsx("span",{className:"agent-tree__health",style:{color:A.color},title:A.label,children:A.icon}),w>0&&e.jsxs("span",{className:"agent-tree__count text-secondary",children:["(",w,")"]}),(()=>{const v=g(c);return v.length===0?null:e.jsxs("span",{className:"agent-tree__skill",title:v.join(", "),children:[v[0],v.length>1&&` +${v.length-1}`]})})()]})]}),k&&m.length>0&&e.jsx("div",{className:"agent-tree__children",children:m.map(v=>e.jsx(ot,{node:v,onSelect:l,onToggle:p,isExpanded:h,getChildCount:d,getHealthStatus:u,getRoleIcon:r,getSkillBadges:g},v.agent.id))})]})}function ct({node:a,onSelect:l,getHealthStatus:p,getRoleIcon:h,getSkillBadges:d}){const{agent:u,children:r}=a,g=p(u),c=Pe(u.state);return e.jsxs("div",{className:`org-chart-node${r.length>0?" org-chart-node--has-children":""}`,children:[e.jsxs("div",{className:"org-chart-node-card",onClick:()=>l(u.id),role:"button",tabIndex:0,onKeyDown:m=>m.key==="Enter"&&l(u.id),children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:h(u.role)}),e.jsx("span",{className:"org-chart-node__name",children:u.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${c}`,children:u.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:g.color},title:g.label,children:[g.icon,!g.stateDerived&&e.jsx("span",{className:"text-secondary",children:g.label})]}),(()=>{const m=d(u);if(m.length===0)return null;const j=m.slice(0,2),w=m.length-2;return e.jsxs(e.Fragment,{children:[j.map(k=>e.jsx("span",{className:"org-chart-node__skill",children:k},k)),w>0&&e.jsxs("span",{className:"org-chart-node__skill",children:["+",w]})]})})()]})]}),r.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":`${u.name} employees`,children:r.map(m=>e.jsx(ct,{node:m,onSelect:l,getHealthStatus:p,getRoleIcon:h,getSkillBadges:d},m.agent.id))})]})}function $n({addToast:a,projectId:l}){const[p,h]=n.useState(!1),[d,u]=n.useState("all"),{agents:r,stats:g,isLoading:c,loadAgents:m}=kt(l,{filterState:d,showSystemAgents:p}),[j,w]=n.useState(!1),[k,A]=n.useState(!1),[f,v]=n.useState(null),[E,H]=n.useState(()=>{if(typeof window>"u")return"list";const t=qe("fn-agent-view",l);return t==="list"||t==="board"||t==="tree"||t==="org"?t:"list"}),[M,S]=n.useState([]),[R,Z]=n.useState(!1),[B,Y]=n.useState(!1),le=n.useRef(null),{confirm:ve}=Nt(),D=n.useRef(null),_=n.useId();n.useEffect(()=>{const t=qe("fn-agent-view",l);if(t==="list"||t==="board"||t==="tree"||t==="org"){H(t);return}H("list")},[l]),n.useEffect(()=>{at("fn-agent-view",E,l)},[E,l]);const[N,ee]=n.useState(null),oe=n.useRef(null),[be,G]=n.useState(null),[xe,te]=n.useState(null),[ce,L]=n.useState({}),[ne,z]=n.useState(1),[de,ge]=n.useState(!1),[O,se]=n.useState(new Set),[q,Q]=n.useState(new Map),me=n.useRef(!0);n.useEffect(()=>(me.current=!0,()=>{me.current=!1}),[]),n.useEffect(()=>{It(l).then(t=>{me.current&&z(t.heartbeatMultiplier??1)}).catch(()=>{})},[l]);const J=n.useCallback(async t=>{const o=Number.isFinite(t)&&t>0?t:1;z(o),ge(!0);try{await Ct({heartbeatMultiplier:o},l),a(`Heartbeat speed set to ×${o.toFixed(1)}`,"success")}catch(x){a(`Failed to save heartbeat multiplier: ${fe(x)}`,"error")}finally{me.current&&ge(!1)}},[l,a]),ae=n.useMemo(()=>q.size===0?r:r.map(t=>{const o=q.get(t.id);return o?{...t,state:o}:t}),[r,q]),ie=rn(ae,l),re=n.useMemo(()=>ae.filter(t=>p||!Le(t)),[ae,p]),ye=n.useMemo(()=>ae.filter(t=>t.state!=="active"&&t.state!=="running"?!1:p||!Le(t)),[ae,p]),pe=n.useMemo(()=>{if(p)return M;const t=o=>Le(o.agent)?null:{...o,children:o.children.map(t).filter(x=>x!==null)};return M.map(t).filter(o=>o!==null)},[M,p]);n.useEffect(()=>{if(E!=="org")return;let t=!1;return Z(!0),St(l,{includeEphemeral:p}).then(o=>{t||S(o)}).catch(o=>{t||(a(`Failed to load org chart: ${fe(o)}`,"error"),S([]))}).finally(()=>{t||Z(!1)}),()=>{t=!0}},[E,l,p,a]),n.useEffect(()=>{const t=setInterval(()=>{m()},3e4);return()=>{clearInterval(t)}},[m]),n.useEffect(()=>{if(!B)return;const t=x=>{const I=x.target;I&&(le.current?.contains(I)||D.current?.contains(I)||Y(!1))},o=x=>{x.key==="Escape"&&(Y(!1),D.current?.focus())};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",o)}},[B]);const he=async(t,o)=>{if(!O.has(t)){se(x=>new Set(x).add(t)),Q(x=>{const I=new Map(x);return I.set(t,o),I});try{await Lt(t,o,l),a(`Agent state updated to ${o}`,"success"),await m(),Q(x=>{const I=new Map(x);return I.delete(t),I})}catch(x){Q(I=>{const F=new Map(I);return F.delete(t),F}),a(`Failed to update state: ${fe(x)}`,"error")}finally{se(x=>{const I=new Set(x);return I.delete(t),I})}}},K=async(t,o)=>{if(await ve({title:"Delete Agent",message:`Delete agent "${o}"? This cannot be undone.`,danger:!0}))try{await Ot(t,l),a(`Agent "${o}" deleted`,"success"),m()}catch(I){a(`Failed to delete agent: ${fe(I)}`,"error")}},V=async(t,o)=>{const x=r.find(I=>I.id===t);if(x){if(x.role===o){ee(null);return}try{await Ae(t,{role:o},l),a(`Agent role updated to ${Me.find(I=>I.value===o)?.label??o}`,"success"),ee(null),m()}catch(I){a(`Failed to update role: ${fe(I)}`,"error")}}},we=(t,o)=>{t.key==="Escape"&&ee(null)},ke=async(t,o)=>{xe===t.id&&(te(null),L(x=>{const I={...x};return delete I[t.id],I})),G(t.id);try{await Ae(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:o}},l),a(`Heartbeat interval updated to ${Xe(o)} for ${t.name}`,"success"),m()}catch(x){a(`Failed to update heartbeat interval: ${fe(x)}`,"error")}finally{G(null)}},je=async t=>{const o=ce[t.id]??"";if(o.trim()===""){a("Please enter a heartbeat interval in minutes","error");return}const x=Number(o);if(isNaN(x)){a("Heartbeat interval must be a valid number","error");return}if(x<=0){a("Heartbeat interval must be greater than 0","error");return}if(x>=1&&x<5){G(t.id);try{await Ae(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Dt}},l),a(`Heartbeat interval set to 5 minutes (minimum). ${x} minute${x!==1?"s":""} was below the 5-minute minimum.`,"success"),te(null),L(F=>{const s={...F};return delete s[t.id],s}),m()}catch(F){a(`Failed to update heartbeat interval: ${fe(F)}`,"error")}finally{G(null)}return}const I=Math.round(x*6e4);G(t.id);try{await Ae(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:I}},l),a(`Heartbeat interval updated to ${Xe(I)} for ${t.name}`,"success"),te(null),L(F=>{const s={...F};return delete s[t.id],s}),m()}catch(F){a(`Failed to update heartbeat interval: ${fe(F)}`,"error")}finally{G(null)}},ue=t=>{const o=Qe(t.runtimeConfig?.heartbeatIntervalMs),x=Math.round(o/6e4);te(t.id),L(I=>({...I,[t.id]:String(x)}))},Ce=n.useCallback(()=>{v(null)},[]),Se=n.useCallback(t=>{v(t)},[]),i=async(t,o)=>{try{await zt(t,l,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),a(`Heartbeat run started for ${o}`,"success"),m()}catch(x){a(`Failed to start heartbeat run: ${fe(x)}`,"error")}},b=t=>Me.find(o=>o.value===t)?.label??t,T=t=>Me.find(o=>o.value===t)?.icon??"◆",U=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],P=t=>Ft(t),W=c&&r.length===0;return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(Ve,{size:24}),e.jsx("h2",{children:"Agents"})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${E==="list"?" active":""}`,onClick:()=>H("list"),title:"List view","aria-label":"List view","aria-pressed":E==="list",children:e.jsx(Et,{size:16})}),e.jsx("button",{className:`view-toggle-btn${E==="board"?" active":""}`,onClick:()=>H("board"),title:"Board view","aria-label":"Board view","aria-pressed":E==="board",children:e.jsx(Ie,{size:16})}),e.jsx("button",{className:`view-toggle-btn${E==="tree"?" active":""}`,onClick:()=>H("tree"),title:"Tree view","aria-label":"Tree view","aria-pressed":E==="tree",children:e.jsx(At,{size:16})}),e.jsx("button",{className:`view-toggle-btn${E==="org"?" active":""}`,onClick:()=>H("org"),title:"Org Chart view","aria-label":"Org Chart view","aria-pressed":E==="org",children:e.jsx(Bt,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:D,className:`btn-icon agent-controls-trigger${B?" agent-controls-trigger--active":""}`,onClick:()=>Y(t=>!t),title:"Controls","aria-label":"Controls","aria-haspopup":"dialog","aria-expanded":B,"aria-controls":_,children:e.jsx(Qt,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void m(),title:"Refresh","aria-label":"Refresh",children:e.jsx(_e,{size:16,className:c?"spin":void 0})}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{w(!0),Y(!1)},children:[e.jsx(Tt,{size:16}),"New Agent"]})]})]})]}),B&&e.jsxs("div",{ref:le,id:_,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":"Agent controls","aria-modal":"false",children:[e.jsxs("div",{className:"agent-controls",children:[e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(Mt,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:d,onChange:t=>u(t.target.value),"aria-label":"Filter agents by state",children:[e.jsx("option",{value:"all",children:"All States"}),e.jsx("option",{value:"idle",children:"Idle"}),e.jsx("option",{value:"active",children:"Active"}),e.jsx("option",{value:"running",children:"Running"}),e.jsx("option",{value:"paused",children:"Paused"}),e.jsx("option",{value:"error",children:"Error"}),e.jsx("option",{value:"terminated",children:"Terminated"})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:p,onChange:t=>h(t.target.checked),"aria-label":"Show system agents"}),"Show system agents"]})]}),e.jsx("div",{className:"agent-controls-actions",children:e.jsxs("button",{className:"btn",onClick:()=>{A(!0),Y(!1)},children:[e.jsx(rt,{size:16}),"Import"]})})]}),e.jsx("div",{className:"agent-global-controls",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:"Heartbeat Speed"}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:ne,onChange:t=>{const o=Number(t.target.value);J(Number.isFinite(o)&&o>0?o:1)},disabled:de}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",ne.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Oe.reduce((t,o)=>Math.abs(o-ne)<Math.abs(t-ne)?o:t,Oe[0])),onChange:t=>{const o=Number(t.target.value);J(Number.isFinite(o)&&o>0?o:1)},disabled:de,"aria-label":"Heartbeat speed preset",children:Oe.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:"Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0"})]})}),e.jsx(nn,{agents:re})]}),e.jsxs("div",{className:"agents-view-content",children:[e.jsx(tn,{stats:g}),e.jsx(Mn,{isOpen:j,onClose:()=>w(!1),onCreated:()=>{w(!1),m()},projectId:l}),e.jsx(_n,{isOpen:k,onClose:()=>A(!1),onImported:()=>void m(),projectId:l}),W?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(_e,{size:18,className:"spin"}),e.jsx("span",{children:"Loading agents..."})]}):E==="tree"?e.jsx("div",{className:"agent-tree__view",children:re.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):ie.rootNodes.map(t=>e.jsx(ot,{node:t,onSelect:v,onToggle:ie.toggleExpand,isExpanded:ie.isExpanded,getChildCount:o=>ie.getChildren(o).length,getHealthStatus:P,getRoleIcon:T,getSkillBadges:U},t.agent.id))}):E==="org"?e.jsx("div",{className:"agent-org-chart","data-testid":"agent-org-chart",children:R?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(_e,{size:18,className:"spin"}),e.jsx("span",{children:"Loading org chart..."})]}):pe.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):pe.map(t=>e.jsx(ct,{node:t,onSelect:v,getHealthStatus:P,getRoleIcon:T,getSkillBadges:U},t.agent.id))}):E==="board"?e.jsx("div",{className:"agent-board",children:re.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):re.map(t=>{const o=P(t),x=Pe(t.state),I=st("agent-board-card",t.state);return e.jsx("div",{className:`agent-board-card ${I}`,children:e.jsxs("div",{className:"agent-board-clickable",onClick:()=>v(t.id),role:"button",tabIndex:0,onKeyDown:F=>F.key==="Enter"&&v(t.id),children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:T(t.role)}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:b(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${x}`,children:t.state})]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:o.color},title:o.label,children:[o.icon,!o.stateDerived&&` ${o.label}`]})]})},t.id)})}):e.jsx("div",{className:"agent-list",children:re.length===0?e.jsx(Te,{onCtaClick:()=>w(!0)}):re.map(t=>{const o=P(t),x=Pe(t.state),I=st("agent-card",t.state),F=Qe(t.runtimeConfig?.heartbeatIntervalMs),s=Rt(F),C=be===t.id;return e.jsxs("div",{className:`agent-card ${I}`,children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info agent-info--clickable",onClick:()=>v(t.id),role:"button",tabIndex:0,onKeyDown:y=>y.key==="Enter"&&v(t.id),children:[N===t.id?e.jsx("select",{ref:oe,className:"select agent-role-select",value:t.role,onChange:y=>void V(t.id,y.target.value),onKeyDown:y=>we(y,t.id),onBlur:()=>ee(null),autoFocus:!0,children:Me.map(y=>e.jsxs("option",{value:y.value,children:[y.icon," ",y.label]},y.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:y=>{y.stopPropagation(),ee(t.id)},title:"Click to change role",role:"button",tabIndex:0,onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.stopPropagation(),ee(t.id))},children:T(t.role)}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(it,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${x}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:o.color},title:o.label,children:[o.icon,!o.stateDerived&&` ${o.label}`]}),e.jsx("span",{className:"badge text-secondary",children:b(t.role)}),(()=>{const y=U(t);if(y.length===0)return null;const $=y.slice(0,2),X=y.length-2;return e.jsxs(e.Fragment,{children:[$.map(We=>e.jsx("span",{className:"badge badge-skill",children:We},We)),X>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",X]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:"Working on:"}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:"Heartbeat:"}),xe===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:ce[t.id]??"",onChange:y=>L($=>({...$,[t.id]:y.target.value})),onKeyDown:y=>{y.key==="Enter"?je(t):y.key==="Escape"&&(te(null),L($=>{const X={...$};return delete X[t.id],X}))},disabled:C,"aria-label":`Custom heartbeat interval in minutes for ${t.name}`}),e.jsx("span",{className:"text-secondary",children:"min"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>void je(t),disabled:C,title:"Save custom interval",children:"Save"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>{te(null),L(y=>{const $={...y};return delete $[t.id],$})},disabled:C,title:"Cancel custom interval",children:"Cancel"})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:F,onChange:y=>{const $=y.target.value;$==="__custom__"?ue(t):ke(t,Number($))},disabled:C,"aria-label":`Set heartbeat interval for ${t.name}`,children:[s.map(y=>e.jsx("option",{value:y.value,children:y.label},y.value)),_t.some(y=>y.value===F)&&e.jsx("option",{value:"__custom__",children:"Custom..."})]})}),C&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:"Saving…"}),t.lastHeartbeatAt&&(()=>{const y=new Date(t.lastHeartbeatAt),$=new Date(y.getTime()+F),X=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"agent-heartbeat-last text-secondary",title:y.toLocaleString(),children:["Last: ",y.toLocaleTimeString()]}),X&&e.jsxs("span",{className:"agent-heartbeat-next text-secondary",title:$.toLocaleString(),children:["Next: ",$.toLocaleTimeString()]})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[t.state==="idle"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Activate",children:[e.jsx(Ee,{size:14})," Start"]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void i(t.id,t.name),disabled:O.has(t.id),title:"Run Now","aria-label":`Run now for ${t.name}`,children:[e.jsx(Ie,{size:14})," Run Now"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"paused"),disabled:O.has(t.id),title:"Pause",children:[e.jsx(Je,{size:14})," Pause"]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Resume",children:[e.jsx(Ee,{size:14})," Resume"]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",disabled:!0,title:"Run in progress","aria-label":`Heartbeat run in progress for ${t.name}`,children:[e.jsx(Ie,{size:14})," Running"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"paused"),disabled:O.has(t.id),title:"Pause",children:[e.jsx(Je,{size:14})," Pause"]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Retry",children:[e.jsx(Ee,{size:14})," Retry"]}),t.state==="terminated"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void he(t.id,"active"),disabled:O.has(t.id),title:"Start",children:[e.jsx(Ee,{size:14})," Start"]}),e.jsx("button",{className:"btn btn--sm agent-card-details-btn",onClick:()=>v(t.id),title:`View details for ${t.name}`,"aria-label":`View details for ${t.name}`,children:"View Details"}),e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void K(t.id,t.name),title:"Delete",children:[e.jsx(Pt,{size:14})," Delete"]})]})]},t.id)})}),e.jsx(Yt,{agents:ye,projectId:l,onAgentSelect:v})]}),f&&e.jsx(n.Suspense,{fallback:null,children:e.jsx(Pn,{agentId:f,projectId:l,onClose:Ce,addToast:a,onChildClick:Se})})]})}const On=Object.freeze(Object.defineProperty({__proto__:null,AgentsView:$n},Symbol.toStringTag,{value:"Module"}));export{On as A,An as S};
@@ -1 +1 @@
1
- import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{i as ze,ay as gt,g as ft,az as pt,a as xt,aA as St,aB as bt,aC as vt,aD as wt,aE as kt,aF as Nt,s as Ct,aG as Mt,aH as jt,aI as yt,f as Tt,a7 as At,a8 as $t,y as Le,S as Et,M as Ke,ak as Pt,aJ as Dt,B as je,a4 as Ue,a5 as qe,aK as Rt,aL as Lt,aM as _t,aN as zt,aO as It,aP as Ft,h as Ot,k as Ht}from"./index-DJDWSrju.js";import"./vendor-xterm-DzcZoU0P.js";const _e="kb-chat-active-session";function Vt(n){const i=n?.toolCalls;if(!Array.isArray(i))return;const c=i.map(l=>{if(!l||typeof l!="object")return null;const r=l,f=typeof r.toolName=="string"?r.toolName:"";if(!f)return null;const v=r.args;return{toolName:f,...v&&typeof v=="object"?{args:v}:{},isError:!!r.isError,result:r.result,status:"completed"}}).filter(l=>l!==null);return c.length>0?c:void 0}function Je(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Vt(n.metadata),createdAt:n.createdAt}}function Bt(n){const[i,c]=s.useState([]),[l,r]=s.useState(null),[f,v]=s.useState(!0),[j,w]=s.useState([]),[X,I]=s.useState(!1),[F,L]=s.useState(!1),[oe,E]=s.useState(""),[O,T]=s.useState(""),[pe,P]=s.useState([]),[p,D]=s.useState(""),[Z,K]=s.useState(""),[A,H]=s.useState(!0),[U,ne]=s.useState(new Map),N=s.useRef(null),q=s.useRef(!1),J=s.useRef(""),xe=s.useRef(i),V=s.useRef(l),ke=s.useRef(F);xe.current=i,V.current=l,ke.current=F,s.useEffect(()=>{J.current=p},[p]);const ae=s.useRef(new Set),ee=s.useRef(0),Ne=s.useRef(n);Ne.current!==n&&(Ne.current=n,ee.current++),s.useEffect(()=>{const u=ee.current;ze(void 0,n).then(m=>{if(ee.current!==u)return;const h=new Map;for(const k of m)h.set(k.id,k);ne(h)}).catch(()=>{})},[n]);const te=s.useCallback(async()=>{v(!0);try{const m=[...(await gt(n)).sessions].sort((h,k)=>new Date(k.updatedAt).getTime()-new Date(h.updatedAt).getTime());c(m)}catch{}finally{v(!1)}},[n]);s.useEffect(()=>{te()},[te]);const Q=s.useRef(()=>{});s.useEffect(()=>{if(f)return;const u=ft(_e,n);u&&i.find(h=>h.id===u)&&Q.current(u)},[f,i,n]);const _=s.useCallback(async(u,m)=>{I(!0);try{const h=await pt(u,{limit:50,...m},n),k=h.messages.map(Je);m?.offset&&m.offset>0?w(W=>[...k,...W]):w(k),H(h.messages.length>=50)}catch{}finally{I(!1)}},[n]),de=s.useCallback(u=>{N.current&&(N.current.close(),N.current=null);const m=i.find(h=>h.id===u);r(m||null),E(""),T(""),P([]),L(!1),H(!0),u?_(u):w([]),u?xt(_e,u,n):St(_e,n)},[i,_,n]);Q.current=de;const ue=s.useCallback(async u=>{const m=await bt(u,n),h={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 c(k=>[h,...k]),r(h),w([]),E(""),T(""),P([]),L(!1),H(!0),h},[n]),he=s.useCallback(async u=>{await vt(u,{status:"archived"},n),c(m=>m.filter(h=>h.id!==u)),l?.id===u&&(r(null),w([]))},[l,n]),ie=s.useCallback(async u=>{l?.id===u&&N.current&&(N.current.close(),N.current=null),await wt(u,n),c(m=>m.filter(h=>h.id!==u)),l?.id===u&&(r(null),w([]))},[l,n]),me=s.useCallback(async()=>{!l||!A||await _(l.id,{offset:j.length})},[l,A,_,j.length]),se=s.useCallback(()=>{l&&(q.current=!0,N.current?.close(),N.current=null,kt(l.id,n).catch(()=>{}),L(!1),E(""),T(""),P([]))},[l,n]),B=s.useCallback(()=>{J.current="",D("")},[]),G=s.useCallback(u=>{if(!l)return;if(F){J.current=u,D(u);return}q.current=!1,N.current&&(N.current.close(),N.current=null);const m=`temp-${Date.now()}`,h={id:m,sessionId:l.id,role:"user",content:u,createdAt:new Date().toISOString()};w(x=>[...x,h]),E(""),T(""),P([]),L(!0);let k="",W="",M=[];const be={onThinking:x=>{W+=x,T(W)},onText:x=>{k+=x,E(k)},onToolStart:x=>{M=[...M,{toolName:x.toolName,args:x.args,isError:!1,status:"running"}],P(M)},onToolEnd:x=>{const d=[...M];for(let S=d.length-1;S>=0;S--){const b=d[S];if(b?.toolName===x.toolName&&b.status==="running"){d[S]={...b,status:"completed",isError:x.isError,result:x.result},M=d,P(d);return}}M=[...d,{toolName:x.toolName,isError:x.isError,result:x.result,status:"completed"}],P(M)},onDone:x=>{const d={id:x.messageId||`msg-${Date.now()}`,sessionId:l.id,role:"assistant",content:k,thinkingOutput:W,toolCalls:M.length>0?M:void 0,createdAt:new Date().toISOString()};ae.current.add(d.id),w(b=>[...b,d]),E(""),T(""),P([]),L(!1),N.current=null,setTimeout(()=>{ae.current.delete(d.id)},1e3),te();const S=J.current.trim();S&&(J.current="",D(""),G(S))},onError:x=>{if(w(d=>d.filter(S=>S.id!==m)),E(""),T(""),P([]),L(!1),N.current=null,console.error("[useChat] Stream error:",x),!q.current){const d=J.current.trim();d&&(J.current="",D(""),G(d))}}};N.current=Nt(l.id,u,be,n)},[l,F,n,te]),Se=Z?i.filter(u=>u.title?.toLowerCase().includes(Z.toLowerCase())||u.agentId.toLowerCase().includes(Z.toLowerCase())):i;return s.useEffect(()=>{const u=ee.current,m=n?`?projectId=${encodeURIComponent(n)}`:"",h=()=>ee.current!==u,k=S=>{if(h())return;const b=JSON.parse(S.data);c(g=>g.some(R=>R.id===b.id)?g:[b,...g])},W=S=>{if(h())return;const b=JSON.parse(S.data);c(g=>[...g.map(C=>C.id===b.id?b:C)]),V.current?.id===b.id&&r(b)},M=S=>{if(h())return;const{id:b}=JSON.parse(S.data);c(g=>g.filter(R=>R.id!==b)),V.current?.id===b&&(r(null),w([]))},be=S=>{if(h())return;const b=JSON.parse(S.data),g=Je(b);ae.current.has(g.id)||V.current?.id===g.sessionId&&!ke.current&&w(R=>R.some(C=>C.id===g.id)?R:[...R,g])},x=S=>{if(h())return;const{id:b}=JSON.parse(S.data);w(g=>g.filter(R=>R.id!==b))};return Ct(`/api/events${m}`,{events:{"chat:session:created":k,"chat:session:updated":W,"chat:session:deleted":M,"chat:message:added":be,"chat:message:deleted":x}})},[n]),s.useEffect(()=>()=>{N.current&&(N.current.close(),N.current=null)},[]),{sessions:i,activeSession:l,sessionsLoading:f,messages:j,messagesLoading:X,isStreaming:F,streamingText:oe,streamingThinking:O,streamingToolCalls:pe,pendingMessage:p,selectSession:de,createSession:ue,archiveSession:he,deleteSession:ie,sendMessage:G,stopStreaming:se,clearPendingMessage:B,loadMoreMessages:me,hasMoreMessages:A,searchQuery:Z,setSearchQuery:K,filteredSessions:Se,refreshSessions:te,agentsMap:U}}function Qe(n){const i=new Date(n),l=new Date().getTime()-i.getTime(),r=Math.floor(l/1e3),f=Math.floor(r/60),v=Math.floor(f/60),j=Math.floor(v/24);return r<60?"just now":f<60?`${f}m ago`:v<24?`${v}h ago`:j<7?`${j}d ago`:i.toLocaleDateString()}function We(n,i){if(!n||!i)return null;const c=i.toLowerCase();if(c.includes("claude")){let r=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 r=r.replace(/\s+/g," "),r.length>30?r.slice(0,30)+"…":r}if(c.includes("gpt")||c.includes("openai")){const r=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 r.length>30?r.slice(0,30)+"…":r}if(c.includes("gemini")){const r=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 r.length>30?r.slice(0,30)+"…":r}const l=i.replace(/-/g," ").replace(/^\w/,r=>r.toUpperCase()).replace(/\s+/g," ").trim();return l.length>30?l.slice(0,30)+"…":l}function ye(n,i){return n.length>i?`${n.slice(0,i)}…`:n}function Gt(n){if(!n)return null;const i=Object.entries(n);return i.length===0?null:i.map(([c,l])=>{let r="";if(typeof l=="string")r=l;else try{r=JSON.stringify(l)}catch{r=String(l)}return`${c}=${ye(r,50)}`}).join(", ")}function Kt(n){if(n===void 0)return null;if(typeof n=="string")return ye(n,200);try{return ye(JSON.stringify(n),200)}catch{return ye(String(n),200)}}function Ye(n){return!n||n.length===0?null:e.jsxs("div",{className:"chat-tool-calls","data-testid":"chat-tool-calls",children:[e.jsxs("div",{className:"chat-tool-calls-header",children:[e.jsx(Ft,{size:12,"aria-hidden":"true"}),e.jsx("span",{children:"Tool calls"})]}),n.map((i,c)=>{const l=i.status==="running",r=i.status==="completed"&&i.isError,f=Gt(i.args),v=Kt(i.result),j=l?f:v?`result: ${v}`:f?`args: ${f}`:null,w=l?"running":r?"error":"completed";return e.jsxs("details",{className:`chat-tool-call${l?" chat-tool-call--running":""}${r?" chat-tool-call--error":""}`,open:l,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:i.toolName}),j&&e.jsx("span",{className:"chat-tool-call-preview",title:j,children:j}),e.jsx("span",{className:"chat-tool-call-status-text",children:w})]}),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})]}),v&&e.jsxs("div",{className:`chat-tool-call-row${r?" 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:v})]})]})]},`${i.toolName}-${c}`)})]})}const Ut={pre:({children:n,...i})=>e.jsx("pre",{...i,className:"chat-markdown-pre",children:n}),table:({children:n,...i})=>e.jsx("table",{...i,className:"chat-markdown-table",children:n})},Te="__fn_agent__";function Xe(n){const i=/(^|[\s])\/([^\s]*)$/.exec(n);if(!i)return null;const c=i[1]??"",l=i[2]??"",r=i.index+c.length;return{filter:l,start:r,end:n.length}}function qt(n,i){const c=n.slice(0,i),l=/(^|[\s\n])@([\w-]*)$/.exec(c);if(!l)return null;const r=l[2]??"",f=c.length-r.length-1;return{filter:r,start:f,end:i}}function Jt({projectId:n,onClose:i,onCreate:c}){const[l,r]=s.useState("agent"),[f,v]=s.useState([]),[j,w]=s.useState(!0),[X,I]=s.useState(""),[F,L]=s.useState([]),[oe,E]=s.useState(!0),[O,T]=s.useState("");s.useEffect(()=>{let p=!1;return w(!0),ze(void 0,n).then(D=>{p||v(D)}).catch(()=>{p||v([])}).finally(()=>{p||w(!1)}),()=>{p=!0}},[n]),s.useEffect(()=>{E(!0),Ot().then(p=>{L(p.models)}).catch(()=>{L([])}).finally(()=>{E(!1)})},[]);const pe=p=>{if(p.preventDefault(),l==="agent"){if(!X)return;c({agentId:X});return}if(!O)return;const D=O.indexOf("/");if(D<=0)return;const Z=O.slice(0,D),K=O.slice(D+1);c({agentId:Te,modelProvider:Z,modelId:K})},P=l==="agent"?!X:!O;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:p=>p.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:()=>{r("agent"),T("")},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:()=>{r("model"),I("")},children:"Model"})]}),e.jsxs("form",{onSubmit:pe,children:[l==="agent"&&e.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",j?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):f.length===0?e.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):e.jsx("div",{className:"chat-new-dialog-agent-list",children:f.map(p=>e.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${X===p.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>I(p.id),"data-testid":`agent-option-${p.id}`,children:[e.jsx(je,{size:16}),e.jsx("span",{className:"chat-new-dialog-agent-name",children:p.name}),e.jsx("span",{className:"chat-new-dialog-agent-role",children:p.role})]},p.id))})]}),l==="model"&&e.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:oe?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):e.jsx(Ht,{models:F,value:O,onChange:T,label:"Model",placeholder:"Select a model"})}),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:P,children:"Create"})]})]})]})})}function Zt({projectId:n,addToast:i}){const{activeSession:c,sessionsLoading:l,messages:r,messagesLoading:f,isStreaming:v,streamingText:j,streamingThinking:w,streamingToolCalls:X,selectSession:I,createSession:F,archiveSession:L,deleteSession:oe,sendMessage:E,stopStreaming:O,pendingMessage:T,clearPendingMessage:pe,searchQuery:P,setSearchQuery:p,filteredSessions:D}=Bt(n),[Z,K]=s.useState(!1),[A,H]=s.useState(""),[U,ne]=s.useState(null),[N,q]=s.useState(null),[J,xe]=s.useState(!0),[V,ke]=s.useState(new Map),[ae,ee]=s.useState([]),[Ne,te]=s.useState(!0),[Q,_]=s.useState(!1),[de,ue]=s.useState(""),[he,ie]=s.useState(0),[me,se]=s.useState(""),[B,G]=s.useState(!1),[Se,u]=s.useState(0),[m,h]=s.useState(-1),[k,W]=s.useState(()=>new Set),[,M]=s.useState(!1),[be,x]=s.useState({top:0,left:0}),d=Mt({projectId:n}),S=s.useCallback(t=>{if(!t||!d.mentionActive)return;const a=t.getBoundingClientRect();x({top:a.top-260,left:a.left+8})},[d.mentionActive]),b=s.useRef(null),g=s.useRef(null),R=s.useRef(null),C=s.useRef(null),ve=s.useRef(0),le=jt()==="mobile",{keyboardOverlap:Ce,viewportHeight:Ie}=yt({enabled:le&&!!c}),Ze=Ce>0?{"--keyboard-overlap":`${Ce}px`,...Ie!==null?{"--vv-height":`${Ie}px`}:{}}:{},z=s.useMemo(()=>{const t=de.trim().toLowerCase();return(t?ae.filter(o=>o.name.toLowerCase().includes(t)):ae).slice(0,10)},[ae,de]),ge=s.useMemo(()=>Array.from(V.values()),[V]),re=s.useMemo(()=>{const t=me.trim().toLowerCase();return t?ge.filter(a=>a.name.toLowerCase().includes(t)):ge},[ge,me]),Fe=s.useMemo(()=>{const t=new Map;for(const a of ge)t.set(a.name.toLowerCase(),a);return t},[ge]);s.useEffect(()=>{ie(0)},[z]),s.useEffect(()=>{u(0)},[me,B]),s.useEffect(()=>()=>{g.current!==null&&window.clearTimeout(g.current)},[]),s.useEffect(()=>{b.current?.scrollIntoView({behavior:"smooth"})},[r,j]),s.useEffect(()=>{if(Ce<=0)return;const t=R.current;t&&(t.scrollTop=t.scrollHeight)},[Ce]),s.useEffect(()=>{const t=()=>ne(null);if(U)return document.addEventListener("click",t),()=>document.removeEventListener("click",t)},[U]),s.useEffect(()=>{let t=!1;const a=n;return ze(void 0,n).then(o=>{if(t||a!==n)return;const y=new Map;for(const $ of o)y.set($.id,$);ke(y)}).catch(()=>{}),()=>{t=!0}},[n]),s.useEffect(()=>{let t=!1;return te(!0),Tt(n).then(a=>{t||ee(a)}).catch(()=>{t||ee([])}).finally(()=>{t||te(!1)}),()=>{t=!0}},[n]);const et=s.useCallback(async t=>{try{await F(t),K(!1),le&&xe(!1)}catch{i("Failed to create chat session","error")}},[F,i,le]),Ae=s.useCallback(()=>{const t=A.trim();!t||!c||(H(""),_(!1),ue(""),G(!1),se(""),h(-1),E(t))},[A,c,E]),$e=s.useCallback(t=>{H(a=>{const o=Xe(a);if(!o)return a;const y=`/skill:${t.name} `,$=a.slice(0,o.start)+y+a.slice(o.end);return window.requestAnimationFrame(()=>{C.current&&(C.current.style.height="auto",C.current.style.height=`${Math.min(C.current.scrollHeight,120)}px`,C.current.focus())}),$}),_(!1),ue(""),ie(0)},[]),Ee=s.useCallback(t=>{const a=C.current;if(!a||m<0)return;const o=a.selectionStart??ve.current,y=a.selectionEnd??o,$=Math.max(o,y),we=Math.min(m,$),ce=`${`@${t.name.replace(/\s+/g,"_")}`} `,Re=A.slice(0,we)+ce+A.slice($),fe=we+ce.length;H(Re),G(!1),se(""),u(0),h(-1),window.requestAnimationFrame(()=>{C.current&&(C.current.style.height="auto",C.current.style.height=`${Math.min(C.current.scrollHeight,120)}px`,C.current.focus(),C.current.setSelectionRange(fe,fe))})},[m,A]),tt=s.useCallback(t=>{const a=/@([\w-]+)/g,o=[];let y=0,$=a.exec(t);for(;$;){const[we,Ge=""]=$,ce=$.index;ce>y&&o.push(t.slice(y,ce));const Re=Ge.replace(/_/g," ").toLowerCase(),fe=Fe.get(Re);fe?o.push(e.jsxs("span",{className:"chat-mention-chip",children:["@",fe.name.replace(/\s+/g,"_")]},`${fe.id}-${ce}`)):o.push(we),y=ce+we.length,$=a.exec(t)}return y<t.length&&o.push(t.slice(y)),o.length===0?t:o},[Fe]),st=s.useCallback(t=>{if(ve.current=t.currentTarget.selectionStart??ve.current,d.mentionActive&&d.files.length>0){if(d.handleKeyDown(t,A),t.key==="Enter"||t.key==="Tab"){const a=d.files[d.selectedIndex];if(a){const o=d.selectFile(a,A);H(o),d.dismissMention(),M(!1)}}return}if(B&&t.key==="ArrowDown"){t.preventDefault(),re.length>0&&u(a=>(a+1)%re.length);return}if(B&&t.key==="ArrowUp"){t.preventDefault(),re.length>0&&u(a=>a===0?re.length-1:a-1);return}if(B&&t.key==="Enter"){t.preventDefault();const a=re[Se]??re[0];a&&Ee(a);return}if(B&&t.key==="Escape"){t.preventDefault(),G(!1),se(""),h(-1);return}if(Q&&t.key==="ArrowDown"){t.preventDefault(),z.length>0&&ie(a=>(a+1)%z.length);return}if(Q&&t.key==="ArrowUp"){t.preventDefault(),z.length>0&&ie(a=>a===0?z.length-1:a-1);return}if(Q&&(t.key==="Enter"||t.key==="Tab")&&z.length>0){t.preventDefault();const a=z[he]??z[0];a&&$e(a);return}if(Q&&t.key==="Escape"){t.preventDefault(),_(!1);return}t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),Ae())},[B,re,Se,Ee,Q,z,he,$e,Ae,d,A]),Me=s.useCallback((t,a)=>{const o=qt(t,a);if(o){G(!0),se(o.filter),h(o.start);return}G(!1),se(""),h(-1)},[]),nt=s.useCallback(t=>{const a=t.target,o=a.value,y=a.selectionStart??o.length;ve.current=y,H(o);const $=Xe(o);$?(_(!0),ue($.filter)):(_(!1),ue("")),Me(o,y),d.detectMention(o,y),M(d.mentionActive),d.mentionActive&&S(a),a.style.height="auto",a.style.height=`${Math.min(a.scrollHeight,120)}px`},[Me]),Pe=s.useCallback(t=>{const a=t.currentTarget,o=a.selectionStart??a.value.length;ve.current=o,Me(a.value,o),d.detectMention(a.value,o),M(d.mentionActive),d.mentionActive&&S(a)},[Me,d,S]),at=s.useCallback(t=>{t.key!=="Escape"&&Pe(t)},[Pe]),it=s.useCallback(()=>{g.current!==null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{_(!1),G(!1),se(""),h(-1),M(!1),d.dismissMention(),g.current=null},120)},[d]),lt=s.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),rt=s.useCallback(async t=>{ne(null);try{await L(t),i("Conversation archived","success")}catch{i("Failed to archive conversation","error")}},[L,i]),ct=s.useCallback(async t=>{q(null),ne(null);try{await oe(t),i("Conversation deleted","success")}catch{i("Failed to delete conversation","error")}},[oe,i]),ot=s.useCallback(t=>{I(t),le&&xe(!1)},[I,le]),dt=s.useCallback(()=>{I(""),xe(!0)},[I]),ut=()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(It,{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(Le,{size:16}),"New Chat"]})]}),Y=We(c?.modelProvider,c?.modelId),Oe=c?.agentId===Te?Y??"Fusion":c?.title||V.get(c?.agentId??"")?.name||c?.agentId||"Chat",ht=!!(Y&&Y!==Oe),De=V.get(c?.agentId??"")?.name||(c?.agentId===Te?Y??"Fusion":c?.agentId?.slice(0,30)??"Fusion"),He=!!(Y&&Y!==De),mt=T.length>50?`${T.slice(0,50)}…`:T,Ve=s.useCallback(t=>{W(a=>{const o=new Set(a);return o.has(t)?o.delete(t):o.add(t),o})},[]),Be=s.useCallback((t,a=!1)=>a?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(At,{remarkPlugins:[$t],components:Ut,children:t})}),[]);return e.jsxs("div",{className:"chat-view",children:[e.jsxs("div",{className:`chat-sidebar${J?"":" chat-sidebar--hidden"}`,children:[e.jsx("div",{className:"chat-sidebar-header",children:e.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>K(!0),"data-testid":"chat-new-btn",children:[e.jsx(Le,{size:14}),"New Chat"]})}),e.jsx("div",{className:"chat-sidebar-search",children:e.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[e.jsx(Et,{size:14,className:"chat-sidebar-search-icon"}),e.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:P,onChange:t=>p(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..."}):D.length===0?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):D.map(t=>e.jsxs("div",{className:`chat-session-item${c?.id===t.id?" chat-session-item--active":""}`,onClick:()=>ot(t.id),onContextMenu:a=>{a.preventDefault(),ne({sessionId:t.id,x:a.clientX,y:a.clientY})},"data-testid":`chat-session-${t.id}`,children:[e.jsx("button",{className:"chat-session-delete-btn",onClick:a=>{a.stopPropagation(),q(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:V.get(t.agentId)?.name||(t.agentId===Te?We(t.modelProvider,t.modelId)??"Fusion":t.agentId.slice(0,30))}),e.jsx("span",{children:t.updatedAt?Qe(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-mobile",children:[e.jsx(Le,{size:14}),"New Chat"]})})]}),U&&e.jsxs("div",{className:"chat-session-context-menu",style:{top:U.y,left:U.x},onClick:t=>t.stopPropagation(),children:[e.jsxs("button",{onClick:()=>rt(U.sessionId),"data-testid":"chat-context-archive",children:[e.jsx(Pt,{size:14}),"Archive"]}),e.jsxs("button",{onClick:()=>{ne(null),q(U.sessionId)},"data-testid":"chat-context-delete",children:[e.jsx(Ke,{size:14}),"Delete"]})]}),N&&e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:()=>q(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:()=>q(null),children:"Cancel"}),e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void ct(N),children:"Delete"})]})]})}),e.jsxs("div",{className:"chat-thread",style:Ze,children:[(c||!le)&&e.jsxs("div",{className:"chat-thread-header",children:[le&&c&&e.jsx("button",{className:"btn-icon",onClick:dt,"data-testid":"chat-back-btn",children:e.jsx(Dt,{size:16})}),e.jsx(je,{size:16}),e.jsx("span",{className:"chat-thread-header-title",children:Oe}),ht&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),e.jsxs("div",{className:"chat-messages",ref:R,children:[f?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):r.length===0&&!c?ut():r.length===0&&c?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):e.jsxs(e.Fragment,{children:[r.map(t=>{const a=t.role==="assistant",o=k.has(t.id);return e.jsxs("div",{className:`chat-message chat-message--${t.role}`,"data-testid":`chat-message-${t.id}`,children:[a&&e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(je,{size:14}),e.jsx("span",{children:De}),He&&e.jsx("span",{className:"chat-model-tag",children:Y}),e.jsx("button",{type:"button",className:`btn btn-icon chat-message-render-toggle${o?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":o?"Show rendered markdown":"Show plain text",onClick:()=>Ve(t.id),children:o?e.jsx(Ue,{size:14}):e.jsx(qe,{size:14})})]}),a?Be(t.content,o):e.jsx("div",{className:"chat-message-content",children:tt(t.content)}),Ye(t.toolCalls),t.thinkingOutput&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:t.thinkingOutput})]}),e.jsx("div",{className:"chat-message-time",children:Qe(t.createdAt)})]},t.id)}),v&&e.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(je,{size:14}),e.jsx("span",{children:De}),He&&e.jsx("span",{className:"chat-model-tag",children:Y}),e.jsx("button",{type:"button",className:`btn btn-icon chat-message-render-toggle${k.has("__streaming__")?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":k.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>Ve("__streaming__"),children:k.has("__streaming__")?e.jsx(Ue,{size:14}):e.jsx(qe,{size:14})})]}),j?Be(j,k.has("__streaming__")):e.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:w?"Thinking…":"Connecting…"}),Ye(X),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:b})]}),c&&e.jsxs("div",{className:"chat-input-area",children:[Q&&e.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ne?e.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):z.length===0?e.jsx("div",{className:"chat-skill-menu-empty",children:de?"No skills found":"No skills available"}):z.map((t,a)=>e.jsxs("button",{type:"button",role:"option","aria-selected":a===he,className:`chat-skill-menu-item${a===he?" chat-skill-menu-item--highlighted":""}`,onMouseDown:o=>o.preventDefault(),onMouseEnter:()=>ie(a),onClick:()=>$e(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))}),e.jsxs("div",{className:"chat-input-wrapper",children:[e.jsx("textarea",{ref:C,className:"chat-input-textarea",placeholder:"Type a message...",value:A,onChange:nt,onKeyDown:st,onKeyUp:at,onClick:Pe,onBlur:it,onFocus:lt,rows:1,"data-testid":"chat-input"}),e.jsx(Rt,{agents:ge,filter:me,highlightedIndex:Se,visible:B,onSelect:Ee,position:"below"}),e.jsx(Lt,{visible:d.mentionActive&&!B,position:be,files:d.files,selectedIndex:d.selectedIndex,onSelect:t=>{const a=d.selectFile(t,A);H(a),d.dismissMention(),M(!1),C.current?.focus()},loading:d.loading}),T&&e.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[e.jsx("span",{children:`Queued: ${mt}`}),e.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:pe,children:"×"})]})]}),v?e.jsx("button",{className:"chat-input-stop",onClick:O,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:e.jsx(_t,{size:14})}):e.jsx("button",{className:"chat-input-send",onClick:()=>void Ae(),disabled:!A.trim(),"data-testid":"chat-send-btn",children:e.jsx(zt,{size:16})})]})]}),Z&&e.jsx(Jt,{projectId:n,onClose:()=>K(!1),onCreate:et})]})}export{Zt as ChatView};
1
+ import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{i as ze,ay as gt,g as ft,az as pt,a as xt,aA as St,aB as bt,aC as vt,aD as wt,aE as kt,aF as Nt,s as Ct,aG as Mt,aH as jt,aI as yt,f as Tt,a7 as At,a8 as $t,y as Le,S as Et,M as Ke,ak as Pt,aJ as Dt,B as je,a4 as Ue,a5 as qe,aK as Rt,aL as Lt,aM as _t,aN as zt,aO as It,aP as Ft,h as Ot,k as Ht}from"./index-D1gavMG-.js";import"./vendor-xterm-DzcZoU0P.js";const _e="kb-chat-active-session";function Vt(n){const i=n?.toolCalls;if(!Array.isArray(i))return;const c=i.map(l=>{if(!l||typeof l!="object")return null;const r=l,f=typeof r.toolName=="string"?r.toolName:"";if(!f)return null;const v=r.args;return{toolName:f,...v&&typeof v=="object"?{args:v}:{},isError:!!r.isError,result:r.result,status:"completed"}}).filter(l=>l!==null);return c.length>0?c:void 0}function Je(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Vt(n.metadata),createdAt:n.createdAt}}function Bt(n){const[i,c]=s.useState([]),[l,r]=s.useState(null),[f,v]=s.useState(!0),[j,w]=s.useState([]),[X,I]=s.useState(!1),[F,L]=s.useState(!1),[oe,E]=s.useState(""),[O,T]=s.useState(""),[pe,P]=s.useState([]),[p,D]=s.useState(""),[Z,K]=s.useState(""),[A,H]=s.useState(!0),[U,ne]=s.useState(new Map),N=s.useRef(null),q=s.useRef(!1),J=s.useRef(""),xe=s.useRef(i),V=s.useRef(l),ke=s.useRef(F);xe.current=i,V.current=l,ke.current=F,s.useEffect(()=>{J.current=p},[p]);const ae=s.useRef(new Set),ee=s.useRef(0),Ne=s.useRef(n);Ne.current!==n&&(Ne.current=n,ee.current++),s.useEffect(()=>{const u=ee.current;ze(void 0,n).then(m=>{if(ee.current!==u)return;const h=new Map;for(const k of m)h.set(k.id,k);ne(h)}).catch(()=>{})},[n]);const te=s.useCallback(async()=>{v(!0);try{const m=[...(await gt(n)).sessions].sort((h,k)=>new Date(k.updatedAt).getTime()-new Date(h.updatedAt).getTime());c(m)}catch{}finally{v(!1)}},[n]);s.useEffect(()=>{te()},[te]);const Q=s.useRef(()=>{});s.useEffect(()=>{if(f)return;const u=ft(_e,n);u&&i.find(h=>h.id===u)&&Q.current(u)},[f,i,n]);const _=s.useCallback(async(u,m)=>{I(!0);try{const h=await pt(u,{limit:50,...m},n),k=h.messages.map(Je);m?.offset&&m.offset>0?w(W=>[...k,...W]):w(k),H(h.messages.length>=50)}catch{}finally{I(!1)}},[n]),de=s.useCallback(u=>{N.current&&(N.current.close(),N.current=null);const m=i.find(h=>h.id===u);r(m||null),E(""),T(""),P([]),L(!1),H(!0),u?_(u):w([]),u?xt(_e,u,n):St(_e,n)},[i,_,n]);Q.current=de;const ue=s.useCallback(async u=>{const m=await bt(u,n),h={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 c(k=>[h,...k]),r(h),w([]),E(""),T(""),P([]),L(!1),H(!0),h},[n]),he=s.useCallback(async u=>{await vt(u,{status:"archived"},n),c(m=>m.filter(h=>h.id!==u)),l?.id===u&&(r(null),w([]))},[l,n]),ie=s.useCallback(async u=>{l?.id===u&&N.current&&(N.current.close(),N.current=null),await wt(u,n),c(m=>m.filter(h=>h.id!==u)),l?.id===u&&(r(null),w([]))},[l,n]),me=s.useCallback(async()=>{!l||!A||await _(l.id,{offset:j.length})},[l,A,_,j.length]),se=s.useCallback(()=>{l&&(q.current=!0,N.current?.close(),N.current=null,kt(l.id,n).catch(()=>{}),L(!1),E(""),T(""),P([]))},[l,n]),B=s.useCallback(()=>{J.current="",D("")},[]),G=s.useCallback(u=>{if(!l)return;if(F){J.current=u,D(u);return}q.current=!1,N.current&&(N.current.close(),N.current=null);const m=`temp-${Date.now()}`,h={id:m,sessionId:l.id,role:"user",content:u,createdAt:new Date().toISOString()};w(x=>[...x,h]),E(""),T(""),P([]),L(!0);let k="",W="",M=[];const be={onThinking:x=>{W+=x,T(W)},onText:x=>{k+=x,E(k)},onToolStart:x=>{M=[...M,{toolName:x.toolName,args:x.args,isError:!1,status:"running"}],P(M)},onToolEnd:x=>{const d=[...M];for(let S=d.length-1;S>=0;S--){const b=d[S];if(b?.toolName===x.toolName&&b.status==="running"){d[S]={...b,status:"completed",isError:x.isError,result:x.result},M=d,P(d);return}}M=[...d,{toolName:x.toolName,isError:x.isError,result:x.result,status:"completed"}],P(M)},onDone:x=>{const d={id:x.messageId||`msg-${Date.now()}`,sessionId:l.id,role:"assistant",content:k,thinkingOutput:W,toolCalls:M.length>0?M:void 0,createdAt:new Date().toISOString()};ae.current.add(d.id),w(b=>[...b,d]),E(""),T(""),P([]),L(!1),N.current=null,setTimeout(()=>{ae.current.delete(d.id)},1e3),te();const S=J.current.trim();S&&(J.current="",D(""),G(S))},onError:x=>{if(w(d=>d.filter(S=>S.id!==m)),E(""),T(""),P([]),L(!1),N.current=null,console.error("[useChat] Stream error:",x),!q.current){const d=J.current.trim();d&&(J.current="",D(""),G(d))}}};N.current=Nt(l.id,u,be,n)},[l,F,n,te]),Se=Z?i.filter(u=>u.title?.toLowerCase().includes(Z.toLowerCase())||u.agentId.toLowerCase().includes(Z.toLowerCase())):i;return s.useEffect(()=>{const u=ee.current,m=n?`?projectId=${encodeURIComponent(n)}`:"",h=()=>ee.current!==u,k=S=>{if(h())return;const b=JSON.parse(S.data);c(g=>g.some(R=>R.id===b.id)?g:[b,...g])},W=S=>{if(h())return;const b=JSON.parse(S.data);c(g=>[...g.map(C=>C.id===b.id?b:C)]),V.current?.id===b.id&&r(b)},M=S=>{if(h())return;const{id:b}=JSON.parse(S.data);c(g=>g.filter(R=>R.id!==b)),V.current?.id===b&&(r(null),w([]))},be=S=>{if(h())return;const b=JSON.parse(S.data),g=Je(b);ae.current.has(g.id)||V.current?.id===g.sessionId&&!ke.current&&w(R=>R.some(C=>C.id===g.id)?R:[...R,g])},x=S=>{if(h())return;const{id:b}=JSON.parse(S.data);w(g=>g.filter(R=>R.id!==b))};return Ct(`/api/events${m}`,{events:{"chat:session:created":k,"chat:session:updated":W,"chat:session:deleted":M,"chat:message:added":be,"chat:message:deleted":x}})},[n]),s.useEffect(()=>()=>{N.current&&(N.current.close(),N.current=null)},[]),{sessions:i,activeSession:l,sessionsLoading:f,messages:j,messagesLoading:X,isStreaming:F,streamingText:oe,streamingThinking:O,streamingToolCalls:pe,pendingMessage:p,selectSession:de,createSession:ue,archiveSession:he,deleteSession:ie,sendMessage:G,stopStreaming:se,clearPendingMessage:B,loadMoreMessages:me,hasMoreMessages:A,searchQuery:Z,setSearchQuery:K,filteredSessions:Se,refreshSessions:te,agentsMap:U}}function Qe(n){const i=new Date(n),l=new Date().getTime()-i.getTime(),r=Math.floor(l/1e3),f=Math.floor(r/60),v=Math.floor(f/60),j=Math.floor(v/24);return r<60?"just now":f<60?`${f}m ago`:v<24?`${v}h ago`:j<7?`${j}d ago`:i.toLocaleDateString()}function We(n,i){if(!n||!i)return null;const c=i.toLowerCase();if(c.includes("claude")){let r=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 r=r.replace(/\s+/g," "),r.length>30?r.slice(0,30)+"…":r}if(c.includes("gpt")||c.includes("openai")){const r=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 r.length>30?r.slice(0,30)+"…":r}if(c.includes("gemini")){const r=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 r.length>30?r.slice(0,30)+"…":r}const l=i.replace(/-/g," ").replace(/^\w/,r=>r.toUpperCase()).replace(/\s+/g," ").trim();return l.length>30?l.slice(0,30)+"…":l}function ye(n,i){return n.length>i?`${n.slice(0,i)}…`:n}function Gt(n){if(!n)return null;const i=Object.entries(n);return i.length===0?null:i.map(([c,l])=>{let r="";if(typeof l=="string")r=l;else try{r=JSON.stringify(l)}catch{r=String(l)}return`${c}=${ye(r,50)}`}).join(", ")}function Kt(n){if(n===void 0)return null;if(typeof n=="string")return ye(n,200);try{return ye(JSON.stringify(n),200)}catch{return ye(String(n),200)}}function Ye(n){return!n||n.length===0?null:e.jsxs("div",{className:"chat-tool-calls","data-testid":"chat-tool-calls",children:[e.jsxs("div",{className:"chat-tool-calls-header",children:[e.jsx(Ft,{size:12,"aria-hidden":"true"}),e.jsx("span",{children:"Tool calls"})]}),n.map((i,c)=>{const l=i.status==="running",r=i.status==="completed"&&i.isError,f=Gt(i.args),v=Kt(i.result),j=l?f:v?`result: ${v}`:f?`args: ${f}`:null,w=l?"running":r?"error":"completed";return e.jsxs("details",{className:`chat-tool-call${l?" chat-tool-call--running":""}${r?" chat-tool-call--error":""}`,open:l,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:i.toolName}),j&&e.jsx("span",{className:"chat-tool-call-preview",title:j,children:j}),e.jsx("span",{className:"chat-tool-call-status-text",children:w})]}),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})]}),v&&e.jsxs("div",{className:`chat-tool-call-row${r?" 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:v})]})]})]},`${i.toolName}-${c}`)})]})}const Ut={pre:({children:n,...i})=>e.jsx("pre",{...i,className:"chat-markdown-pre",children:n}),table:({children:n,...i})=>e.jsx("table",{...i,className:"chat-markdown-table",children:n})},Te="__fn_agent__";function Xe(n){const i=/(^|[\s])\/([^\s]*)$/.exec(n);if(!i)return null;const c=i[1]??"",l=i[2]??"",r=i.index+c.length;return{filter:l,start:r,end:n.length}}function qt(n,i){const c=n.slice(0,i),l=/(^|[\s\n])@([\w-]*)$/.exec(c);if(!l)return null;const r=l[2]??"",f=c.length-r.length-1;return{filter:r,start:f,end:i}}function Jt({projectId:n,onClose:i,onCreate:c}){const[l,r]=s.useState("agent"),[f,v]=s.useState([]),[j,w]=s.useState(!0),[X,I]=s.useState(""),[F,L]=s.useState([]),[oe,E]=s.useState(!0),[O,T]=s.useState("");s.useEffect(()=>{let p=!1;return w(!0),ze(void 0,n).then(D=>{p||v(D)}).catch(()=>{p||v([])}).finally(()=>{p||w(!1)}),()=>{p=!0}},[n]),s.useEffect(()=>{E(!0),Ot().then(p=>{L(p.models)}).catch(()=>{L([])}).finally(()=>{E(!1)})},[]);const pe=p=>{if(p.preventDefault(),l==="agent"){if(!X)return;c({agentId:X});return}if(!O)return;const D=O.indexOf("/");if(D<=0)return;const Z=O.slice(0,D),K=O.slice(D+1);c({agentId:Te,modelProvider:Z,modelId:K})},P=l==="agent"?!X:!O;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:p=>p.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:()=>{r("agent"),T("")},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:()=>{r("model"),I("")},children:"Model"})]}),e.jsxs("form",{onSubmit:pe,children:[l==="agent"&&e.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",j?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):f.length===0?e.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):e.jsx("div",{className:"chat-new-dialog-agent-list",children:f.map(p=>e.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${X===p.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>I(p.id),"data-testid":`agent-option-${p.id}`,children:[e.jsx(je,{size:16}),e.jsx("span",{className:"chat-new-dialog-agent-name",children:p.name}),e.jsx("span",{className:"chat-new-dialog-agent-role",children:p.role})]},p.id))})]}),l==="model"&&e.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:oe?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):e.jsx(Ht,{models:F,value:O,onChange:T,label:"Model",placeholder:"Select a model"})}),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:P,children:"Create"})]})]})]})})}function Zt({projectId:n,addToast:i}){const{activeSession:c,sessionsLoading:l,messages:r,messagesLoading:f,isStreaming:v,streamingText:j,streamingThinking:w,streamingToolCalls:X,selectSession:I,createSession:F,archiveSession:L,deleteSession:oe,sendMessage:E,stopStreaming:O,pendingMessage:T,clearPendingMessage:pe,searchQuery:P,setSearchQuery:p,filteredSessions:D}=Bt(n),[Z,K]=s.useState(!1),[A,H]=s.useState(""),[U,ne]=s.useState(null),[N,q]=s.useState(null),[J,xe]=s.useState(!0),[V,ke]=s.useState(new Map),[ae,ee]=s.useState([]),[Ne,te]=s.useState(!0),[Q,_]=s.useState(!1),[de,ue]=s.useState(""),[he,ie]=s.useState(0),[me,se]=s.useState(""),[B,G]=s.useState(!1),[Se,u]=s.useState(0),[m,h]=s.useState(-1),[k,W]=s.useState(()=>new Set),[,M]=s.useState(!1),[be,x]=s.useState({top:0,left:0}),d=Mt({projectId:n}),S=s.useCallback(t=>{if(!t||!d.mentionActive)return;const a=t.getBoundingClientRect();x({top:a.top-260,left:a.left+8})},[d.mentionActive]),b=s.useRef(null),g=s.useRef(null),R=s.useRef(null),C=s.useRef(null),ve=s.useRef(0),le=jt()==="mobile",{keyboardOverlap:Ce,viewportHeight:Ie}=yt({enabled:le&&!!c}),Ze=Ce>0?{"--keyboard-overlap":`${Ce}px`,...Ie!==null?{"--vv-height":`${Ie}px`}:{}}:{},z=s.useMemo(()=>{const t=de.trim().toLowerCase();return(t?ae.filter(o=>o.name.toLowerCase().includes(t)):ae).slice(0,10)},[ae,de]),ge=s.useMemo(()=>Array.from(V.values()),[V]),re=s.useMemo(()=>{const t=me.trim().toLowerCase();return t?ge.filter(a=>a.name.toLowerCase().includes(t)):ge},[ge,me]),Fe=s.useMemo(()=>{const t=new Map;for(const a of ge)t.set(a.name.toLowerCase(),a);return t},[ge]);s.useEffect(()=>{ie(0)},[z]),s.useEffect(()=>{u(0)},[me,B]),s.useEffect(()=>()=>{g.current!==null&&window.clearTimeout(g.current)},[]),s.useEffect(()=>{b.current?.scrollIntoView({behavior:"smooth"})},[r,j]),s.useEffect(()=>{if(Ce<=0)return;const t=R.current;t&&(t.scrollTop=t.scrollHeight)},[Ce]),s.useEffect(()=>{const t=()=>ne(null);if(U)return document.addEventListener("click",t),()=>document.removeEventListener("click",t)},[U]),s.useEffect(()=>{let t=!1;const a=n;return ze(void 0,n).then(o=>{if(t||a!==n)return;const y=new Map;for(const $ of o)y.set($.id,$);ke(y)}).catch(()=>{}),()=>{t=!0}},[n]),s.useEffect(()=>{let t=!1;return te(!0),Tt(n).then(a=>{t||ee(a)}).catch(()=>{t||ee([])}).finally(()=>{t||te(!1)}),()=>{t=!0}},[n]);const et=s.useCallback(async t=>{try{await F(t),K(!1),le&&xe(!1)}catch{i("Failed to create chat session","error")}},[F,i,le]),Ae=s.useCallback(()=>{const t=A.trim();!t||!c||(H(""),_(!1),ue(""),G(!1),se(""),h(-1),E(t))},[A,c,E]),$e=s.useCallback(t=>{H(a=>{const o=Xe(a);if(!o)return a;const y=`/skill:${t.name} `,$=a.slice(0,o.start)+y+a.slice(o.end);return window.requestAnimationFrame(()=>{C.current&&(C.current.style.height="auto",C.current.style.height=`${Math.min(C.current.scrollHeight,120)}px`,C.current.focus())}),$}),_(!1),ue(""),ie(0)},[]),Ee=s.useCallback(t=>{const a=C.current;if(!a||m<0)return;const o=a.selectionStart??ve.current,y=a.selectionEnd??o,$=Math.max(o,y),we=Math.min(m,$),ce=`${`@${t.name.replace(/\s+/g,"_")}`} `,Re=A.slice(0,we)+ce+A.slice($),fe=we+ce.length;H(Re),G(!1),se(""),u(0),h(-1),window.requestAnimationFrame(()=>{C.current&&(C.current.style.height="auto",C.current.style.height=`${Math.min(C.current.scrollHeight,120)}px`,C.current.focus(),C.current.setSelectionRange(fe,fe))})},[m,A]),tt=s.useCallback(t=>{const a=/@([\w-]+)/g,o=[];let y=0,$=a.exec(t);for(;$;){const[we,Ge=""]=$,ce=$.index;ce>y&&o.push(t.slice(y,ce));const Re=Ge.replace(/_/g," ").toLowerCase(),fe=Fe.get(Re);fe?o.push(e.jsxs("span",{className:"chat-mention-chip",children:["@",fe.name.replace(/\s+/g,"_")]},`${fe.id}-${ce}`)):o.push(we),y=ce+we.length,$=a.exec(t)}return y<t.length&&o.push(t.slice(y)),o.length===0?t:o},[Fe]),st=s.useCallback(t=>{if(ve.current=t.currentTarget.selectionStart??ve.current,d.mentionActive&&d.files.length>0){if(d.handleKeyDown(t,A),t.key==="Enter"||t.key==="Tab"){const a=d.files[d.selectedIndex];if(a){const o=d.selectFile(a,A);H(o),d.dismissMention(),M(!1)}}return}if(B&&t.key==="ArrowDown"){t.preventDefault(),re.length>0&&u(a=>(a+1)%re.length);return}if(B&&t.key==="ArrowUp"){t.preventDefault(),re.length>0&&u(a=>a===0?re.length-1:a-1);return}if(B&&t.key==="Enter"){t.preventDefault();const a=re[Se]??re[0];a&&Ee(a);return}if(B&&t.key==="Escape"){t.preventDefault(),G(!1),se(""),h(-1);return}if(Q&&t.key==="ArrowDown"){t.preventDefault(),z.length>0&&ie(a=>(a+1)%z.length);return}if(Q&&t.key==="ArrowUp"){t.preventDefault(),z.length>0&&ie(a=>a===0?z.length-1:a-1);return}if(Q&&(t.key==="Enter"||t.key==="Tab")&&z.length>0){t.preventDefault();const a=z[he]??z[0];a&&$e(a);return}if(Q&&t.key==="Escape"){t.preventDefault(),_(!1);return}t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),Ae())},[B,re,Se,Ee,Q,z,he,$e,Ae,d,A]),Me=s.useCallback((t,a)=>{const o=qt(t,a);if(o){G(!0),se(o.filter),h(o.start);return}G(!1),se(""),h(-1)},[]),nt=s.useCallback(t=>{const a=t.target,o=a.value,y=a.selectionStart??o.length;ve.current=y,H(o);const $=Xe(o);$?(_(!0),ue($.filter)):(_(!1),ue("")),Me(o,y),d.detectMention(o,y),M(d.mentionActive),d.mentionActive&&S(a),a.style.height="auto",a.style.height=`${Math.min(a.scrollHeight,120)}px`},[Me]),Pe=s.useCallback(t=>{const a=t.currentTarget,o=a.selectionStart??a.value.length;ve.current=o,Me(a.value,o),d.detectMention(a.value,o),M(d.mentionActive),d.mentionActive&&S(a)},[Me,d,S]),at=s.useCallback(t=>{t.key!=="Escape"&&Pe(t)},[Pe]),it=s.useCallback(()=>{g.current!==null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{_(!1),G(!1),se(""),h(-1),M(!1),d.dismissMention(),g.current=null},120)},[d]),lt=s.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),rt=s.useCallback(async t=>{ne(null);try{await L(t),i("Conversation archived","success")}catch{i("Failed to archive conversation","error")}},[L,i]),ct=s.useCallback(async t=>{q(null),ne(null);try{await oe(t),i("Conversation deleted","success")}catch{i("Failed to delete conversation","error")}},[oe,i]),ot=s.useCallback(t=>{I(t),le&&xe(!1)},[I,le]),dt=s.useCallback(()=>{I(""),xe(!0)},[I]),ut=()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(It,{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(Le,{size:16}),"New Chat"]})]}),Y=We(c?.modelProvider,c?.modelId),Oe=c?.agentId===Te?Y??"Fusion":c?.title||V.get(c?.agentId??"")?.name||c?.agentId||"Chat",ht=!!(Y&&Y!==Oe),De=V.get(c?.agentId??"")?.name||(c?.agentId===Te?Y??"Fusion":c?.agentId?.slice(0,30)??"Fusion"),He=!!(Y&&Y!==De),mt=T.length>50?`${T.slice(0,50)}…`:T,Ve=s.useCallback(t=>{W(a=>{const o=new Set(a);return o.has(t)?o.delete(t):o.add(t),o})},[]),Be=s.useCallback((t,a=!1)=>a?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(At,{remarkPlugins:[$t],components:Ut,children:t})}),[]);return e.jsxs("div",{className:"chat-view",children:[e.jsxs("div",{className:`chat-sidebar${J?"":" chat-sidebar--hidden"}`,children:[e.jsx("div",{className:"chat-sidebar-header",children:e.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>K(!0),"data-testid":"chat-new-btn",children:[e.jsx(Le,{size:14}),"New Chat"]})}),e.jsx("div",{className:"chat-sidebar-search",children:e.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[e.jsx(Et,{size:14,className:"chat-sidebar-search-icon"}),e.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:P,onChange:t=>p(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..."}):D.length===0?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):D.map(t=>e.jsxs("div",{className:`chat-session-item${c?.id===t.id?" chat-session-item--active":""}`,onClick:()=>ot(t.id),onContextMenu:a=>{a.preventDefault(),ne({sessionId:t.id,x:a.clientX,y:a.clientY})},"data-testid":`chat-session-${t.id}`,children:[e.jsx("button",{className:"chat-session-delete-btn",onClick:a=>{a.stopPropagation(),q(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:V.get(t.agentId)?.name||(t.agentId===Te?We(t.modelProvider,t.modelId)??"Fusion":t.agentId.slice(0,30))}),e.jsx("span",{children:t.updatedAt?Qe(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-mobile",children:[e.jsx(Le,{size:14}),"New Chat"]})})]}),U&&e.jsxs("div",{className:"chat-session-context-menu",style:{top:U.y,left:U.x},onClick:t=>t.stopPropagation(),children:[e.jsxs("button",{onClick:()=>rt(U.sessionId),"data-testid":"chat-context-archive",children:[e.jsx(Pt,{size:14}),"Archive"]}),e.jsxs("button",{onClick:()=>{ne(null),q(U.sessionId)},"data-testid":"chat-context-delete",children:[e.jsx(Ke,{size:14}),"Delete"]})]}),N&&e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:()=>q(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:()=>q(null),children:"Cancel"}),e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void ct(N),children:"Delete"})]})]})}),e.jsxs("div",{className:"chat-thread",style:Ze,children:[(c||!le)&&e.jsxs("div",{className:"chat-thread-header",children:[le&&c&&e.jsx("button",{className:"btn-icon",onClick:dt,"data-testid":"chat-back-btn",children:e.jsx(Dt,{size:16})}),e.jsx(je,{size:16}),e.jsx("span",{className:"chat-thread-header-title",children:Oe}),ht&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),e.jsxs("div",{className:"chat-messages",ref:R,children:[f?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):r.length===0&&!c?ut():r.length===0&&c?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):e.jsxs(e.Fragment,{children:[r.map(t=>{const a=t.role==="assistant",o=k.has(t.id);return e.jsxs("div",{className:`chat-message chat-message--${t.role}`,"data-testid":`chat-message-${t.id}`,children:[a&&e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(je,{size:14}),e.jsx("span",{children:De}),He&&e.jsx("span",{className:"chat-model-tag",children:Y}),e.jsx("button",{type:"button",className:`btn btn-icon chat-message-render-toggle${o?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":o?"Show rendered markdown":"Show plain text",onClick:()=>Ve(t.id),children:o?e.jsx(Ue,{size:14}):e.jsx(qe,{size:14})})]}),a?Be(t.content,o):e.jsx("div",{className:"chat-message-content",children:tt(t.content)}),Ye(t.toolCalls),t.thinkingOutput&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:t.thinkingOutput})]}),e.jsx("div",{className:"chat-message-time",children:Qe(t.createdAt)})]},t.id)}),v&&e.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(je,{size:14}),e.jsx("span",{children:De}),He&&e.jsx("span",{className:"chat-model-tag",children:Y}),e.jsx("button",{type:"button",className:`btn btn-icon chat-message-render-toggle${k.has("__streaming__")?" chat-message-render-toggle--plain":""}`,"data-testid":"chat-message-render-toggle","aria-label":k.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>Ve("__streaming__"),children:k.has("__streaming__")?e.jsx(Ue,{size:14}):e.jsx(qe,{size:14})})]}),j?Be(j,k.has("__streaming__")):e.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:w?"Thinking…":"Connecting…"}),Ye(X),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:b})]}),c&&e.jsxs("div",{className:"chat-input-area",children:[Q&&e.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ne?e.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):z.length===0?e.jsx("div",{className:"chat-skill-menu-empty",children:de?"No skills found":"No skills available"}):z.map((t,a)=>e.jsxs("button",{type:"button",role:"option","aria-selected":a===he,className:`chat-skill-menu-item${a===he?" chat-skill-menu-item--highlighted":""}`,onMouseDown:o=>o.preventDefault(),onMouseEnter:()=>ie(a),onClick:()=>$e(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))}),e.jsxs("div",{className:"chat-input-wrapper",children:[e.jsx("textarea",{ref:C,className:"chat-input-textarea",placeholder:"Type a message...",value:A,onChange:nt,onKeyDown:st,onKeyUp:at,onClick:Pe,onBlur:it,onFocus:lt,rows:1,"data-testid":"chat-input"}),e.jsx(Rt,{agents:ge,filter:me,highlightedIndex:Se,visible:B,onSelect:Ee,position:"below"}),e.jsx(Lt,{visible:d.mentionActive&&!B,position:be,files:d.files,selectedIndex:d.selectedIndex,onSelect:t=>{const a=d.selectFile(t,A);H(a),d.dismissMention(),M(!1),C.current?.focus()},loading:d.loading}),T&&e.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[e.jsx("span",{children:`Queued: ${mt}`}),e.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:pe,children:"×"})]})]}),v?e.jsx("button",{className:"chat-input-stop",onClick:O,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:e.jsx(_t,{size:14})}):e.jsx("button",{className:"chat-input-send",onClick:()=>void Ae(),disabled:!A.trim(),"data-testid":"chat-send-btn",children:e.jsx(zt,{size:16})})]})]}),Z&&e.jsx(Jt,{projectId:n,onClose:()=>K(!1),onCreate:et})]})}export{Zt as ChatView};
@@ -0,0 +1 @@
1
+ import{r,j as t}from"./vendor-react-K0fH_qHe.js";import{bq as De,br as de,bs as Ze,bt as ue,s as Ue,bu as ge,bv as we,bw as xe,bx as ye,by as et,bz as ae,bA as tt,bB as rt,bC as st,bD as nt,bE as at,bF as ie,L as ee,S as it,bG as lt,bH as ct,N as ot,bI as Me,T as Ae,bJ as dt,J as ut,aM as vt,bK as mt,a5 as ft,aj as pt,R as ht}from"./index-D1gavMG-.js";import"./vendor-xterm-DzcZoU0P.js";const ve=500,bt=3e3;function B(e){return e instanceof Error?e.message:String(e)}function Pe(e){return e.length<=ve?e:e.slice(-ve)}function le(e,i){return Pe([...e,i])}function I(e){try{return JSON.parse(e)}catch{return null}}function Q(e){const i=e.text??"";return e.stream==="stderr"?`[stderr] ${i}`:i}function gt(e){return e?.previewUrl??null}async function Ne(e){return tt(e)}async function Se(e,i){return rt(e,i)}async function wt(e){return st(e)}async function xt(e){return nt(e)}async function je(e){return at(e)}function V(e){try{return e()}catch{return null}}function ce(){return typeof V(()=>de)=="function"&&typeof V(()=>De)=="function"}function W(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}function yt(e){const[i,o]=r.useState(null),[b,y]=r.useState([]),[w,f]=r.useState([]),[k,U]=r.useState([]),[C,P]=r.useState(!0),[N,u]=r.useState(null),n=r.useRef(0),[d,M]=r.useState(null),R=r.useCallback(a=>{if(o(a),a?.logHistory){const s=a.logHistory.slice(-ve).map(Q);f(s)}},[]),A=r.useCallback(async()=>{const a=n.current;try{if(ce())if(d){const s=await De(d,e);if(n.current!==a)return;R(s)}else{const s=await de(e);if(n.current!==a)return;y(s),s.length>0&&(M(s[0].config.id),R(s[0]))}else{const s=await Ne(e);if(n.current!==a)return;const c=W(s);y([c]),R(c)}u(null)}catch(s){if(n.current!==a)return;u(B(s))}},[R,e,d]);r.useEffect(()=>{n.current+=1;const a=n.current;o(null),y([]),f([]),U([]),P(!0),u(null),M(null),(async()=>{try{const[c,l]=await Promise.allSettled([ce()?de(e):Ne(e).then(S=>[W(S)]),typeof V(()=>ae)=="function"?ae(e):je(e).then(S=>S.map(g=>({name:g.name,command:g.command,cwd:g.cwd,scriptName:g.scriptName,packagePath:g.packagePath})))]);if(n.current!==a)return;let v=null;if(c.status==="fulfilled"){const S=c.value;if(y(S),S.length>0){const g=S[0];ce()&&M(g.config.id),R(g)}}else v=B(c.reason);l.status==="fulfilled"&&U(l.value),v&&u(v)}catch(c){if(n.current!==a)return;u(B(c))}finally{n.current===a&&P(!1)}})()},[R,e]),r.useEffect(()=>{const a=d?Ze(d,e):typeof V(()=>ue)=="function"?ue(e):null;if(!a)return;const s=n.current,c=Ue(a,{events:{history:l=>{if(n.current!==s)return;const v=I(l.data);if(v?.lines){const S=v.lines.map(Q);f(Pe(S))}},log:l=>{if(n.current!==s)return;const v=I(l.data);if(v){const S=typeof v.line=="string"?v.line:Q(v);f(g=>le(g,S))}},"dev-server:log":l=>{if(n.current!==s)return;const v=I(l.data);if(v){const S=typeof v.line=="string"?v.line:Q(v);f(g=>le(g,S))}},"dev-server:output":l=>{if(n.current!==s)return;const v=I(l.data);v?.line&&f(S=>le(S,v.line))},status:l=>{if(n.current!==s)return;const v=I(l.data),S=v?.status;S&&o(g=>g&&{...g,status:S,runtime:v.pid?{...g.runtime??{startedAt:new Date().toISOString()},pid:v.pid}:g.runtime})},"dev-server:status":l=>{if(n.current!==s)return;const v=I(l.data);if(v?.status){const S=W(v);o(S),y([S])}},stopped:()=>{n.current},failed:()=>{n.current}},onReconnect:()=>{n.current===s&&A()},onError:()=>{n.current===s&&u(l=>l??"Lost log stream connection.")}});return()=>{c()}},[e,A,d]),r.useEffect(()=>{if(i?.status!=="running"&&i?.status!=="starting")return;const a=setInterval(()=>{A()},bt);return()=>{clearInterval(a)}},[A,i?.status]);const _=r.useCallback(async(a,s)=>{n.current+=1;const c=n.current;try{let l;if(d&&typeof V(()=>ge)=="function")l=await ge(d,e);else{const v=await Se({command:a,cwd:s},e);l=W(v)}if(n.current!==c)return;o(l),u(null)}catch(l){if(n.current!==c)return;throw u(B(l)),l}},[e,d]),D=r.useCallback(async()=>{n.current+=1;const a=n.current;try{let s;if(d&&typeof V(()=>we)=="function")s=await we(d,e);else{const c=await wt(e);s=W(c)}if(n.current!==a)return;o(s),u(null)}catch(s){if(n.current!==a)return;throw u(B(s)),s}},[e,d]),j=r.useCallback(async()=>{n.current+=1;const a=n.current;try{let s;if(d&&typeof V(()=>xe)=="function")s=await xe(d,e);else{const c=await xt(e);s=W(c)}if(n.current!==a)return;o(s),u(null)}catch(s){if(n.current!==a)return;throw u(B(s)),s}},[e,d]),T=r.useCallback(async a=>{n.current+=1;const s=n.current;try{let c;if(d&&typeof V(()=>ye)=="function")c=await ye(d,a,e);else{const l=await et({url:a},e);c={url:l.manualUrl??l.previewUrl??l.detectedUrl??null,source:l.manualUrl?"manual":"auto"}}if(n.current!==s)return;o(l=>l?{...l,previewUrl:c.url??void 0}:null),u(null)}catch(c){if(n.current!==s)return;throw u(B(c)),c}},[e,d]),h=r.useCallback(async()=>{n.current+=1;const a=n.current;try{let s;try{s=await ae(e)}catch{s=(await je(e)).map(l=>({name:l.name,command:l.command,cwd:l.cwd,scriptName:l.scriptName,packagePath:l.packagePath}))}if(n.current!==a)return;U(s),u(null)}catch(s){if(n.current!==a)return;throw u(B(s)),s}},[e]),p=r.useCallback(async(a,s)=>{if(typeof a!="string"&&!d)try{const v=a,S=await Se({command:v.command,cwd:v.cwd,scriptName:v.scriptName,packagePath:v.packagePath??v.cwd},e),g=W(S);o(g),y([g]),u(null);return}catch(v){throw u(B(v)),v}const c=typeof a=="string"?a:a.command,l=typeof a=="string"?s:a.cwd;await _(c,l)},[e,_,d]),E=r.useCallback(async()=>{await D()},[D]),L=r.useCallback(async()=>{await j()},[j]),z=r.useCallback(async a=>{await T(a)},[T]),$=r.useCallback(async()=>{await h()},[h]),O=r.useCallback(async()=>{await A()},[A]),H=gt(i),x=i?{...i,pid:i.runtime?.pid}:null;return{session:i,sessions:b,logs:w,detectedCommands:k,previewUrl:H,isLoading:C,error:N,startServer:_,stopServer:D,restartServer:j,setPreviewUrl:T,detectCommands:h,refresh:A,candidates:k,serverState:x,loading:C,start:p,stop:E,restart:L,setManualUrl:z,detect:$,refreshStatus:O}}const ke=500,Ce=100;function Te(e){return e.length>ke?e.slice(-ke):e}function ze(e){return e==="stderr"?"stderr":"stdout"}function Y(e){try{return JSON.parse(e.data)}catch{return null}}function Z(e,i){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:i,text:typeof e.text=="string"?e.text:"",stream:ze(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Nt(e,i){return{id:i,text:e,stream:"stdout",timestamp:""}}function oe(e,i){if(i.length===0)return e;const o=[...e],b=new Set(e.map(y=>y.id));for(const y of i)b.has(y.id)||(b.add(y.id),o.push(y));return o.sort((y,w)=>y.id-w.id),Te(o)}function St(e,i){const[o,b]=r.useState([]),[y,w]=r.useState(!1),[f,k]=r.useState(!1),[U,C]=r.useState(!1),[P,N]=r.useState(null),u=r.useRef(null),n=r.useRef(!1),d=r.useRef(0),M=r.useRef(0),R=r.useRef(e),A=r.useRef(i),_=r.useRef(0),D=r.useRef(1);(R.current!==e||A.current!==i)&&(R.current=e,A.current=i,d.current++,n.current=!0,_.current=0,D.current=1,b([]),w(!1),k(!1),C(!1),N(null),u.current&&(u.current(),u.current=null)),r.useEffect(()=>{if(!i){u.current&&(u.current(),u.current=null);return}const E=d.current,L=++M.current;n.current=!1,w(!0);const z=(x,a)=>{const s=Te(x);b(s),N(a),C(a!==null?a>s.length:!1);const c=s.length>0?s[s.length-1].id:0;_.current=c,D.current=c+1},$=x=>{if(n.current||d.current!==E||!x||typeof x!="object")return;const a=x.lines;if(!Array.isArray(a))return;if(a.length>0&&typeof a[0]=="string"){const c=a.filter(l=>typeof l=="string").map((l,v)=>Nt(l,v+1));z(c,c.length);return}const s=a.filter(c=>!!c&&typeof c=="object").map((c,l)=>Z(c,l+1));z(s,s.length)},O=x=>{if(n.current||d.current!==E)return;const a=typeof x.text=="string"?x.text:typeof x.line=="string"?x.line:null;if(!a)return;const s=D.current,c=typeof x.id=="number"&&Number.isFinite(x.id)?x.id:s,l={id:c,text:a,stream:ze(x.stream),timestamp:typeof x.timestamp=="string"?x.timestamp:""};_.current=Math.max(_.current,c),D.current=Math.max(D.current,c+1),b(v=>oe(v,[l])),N(v=>v===null?v:Math.max(v+1,l.id))};async function H(){try{const a=await ie({maxLines:Ce},e);if(n.current||d.current!==E||M.current!==L)return;const s=a.lines.map((c,l)=>Z(c,l+1));z(s,a.totalLines)}catch{if(n.current||d.current!==E||M.current!==L)return;z([],null)}finally{!n.current&&d.current===E&&M.current===L&&w(!1)}const x=ue(e);u.current=Ue(x,{events:{"dev-server:log":a=>{const s=Y(a);s&&O(s)},log:a=>{const s=Y(a);s&&O(s)},history:a=>{const s=Y(a);$(s)},"dev-server:history":a=>{const s=Y(a);$(s)}},onReconnect:()=>{n.current||d.current!==E||ie({lastEventId:_.current,maxLines:50},e).then(a=>{if(n.current||d.current!==E)return;const s=a.lines.map((c,l)=>Z(c,D.current+l));if(s.length>0){const c=s[s.length-1].id;_.current=Math.max(_.current,c),D.current=Math.max(D.current,c+1)}b(c=>oe(c,s)),N(a.totalLines)}).catch(()=>{})}})}return H(),()=>{n.current=!0,u.current&&(u.current(),u.current=null)}},[i,e]);const T=r.useCallback(async()=>{if(!i||f)return;const E=d.current,L=o.length;k(!0);try{const z=await ie({maxLines:Ce,offset:L},e);if(n.current||d.current!==E)return;const $=z.lines.map((O,H)=>Z(O,H+1));b(O=>oe($,O)),C(z.totalLines>L+$.length),N(z.totalLines)}catch{}finally{k(!1)}},[i,o.length,f,e]),h=r.useCallback(()=>{b([])},[]),p=u.current!==null&&!y&&!n.current;return{entries:o,loading:y,loadingMore:f,hasMore:U,total:P,loadMore:T,clear:h,logs:o,isStreaming:p,clearLogs:h}}const jt="This preview appears to block iframe embedding. Open it in a new tab instead.",kt="The preview URL could not be loaded. Verify the server is running and the URL is correct.",Ct="Preview is taking longer than expected and may block iframe embedding.";function Et(e){return e==="blocked"?jt:e==="error"?kt:null}function Lt(e,i={}){const{loadTimeoutMs:o=1e4,detectionMethod:b=null}=i,y=r.useRef(null),w=r.useRef(null),[f,k]=r.useState("unknown"),[U,C]=r.useState(null),[P]=r.useState(b),N=r.useCallback(()=>{w.current!==null&&(window.clearTimeout(w.current),w.current=null)},[]),u=r.useCallback(j=>{k(j),C(Et(j))},[]),n=r.useCallback(()=>{k("blocked"),C(Ct)},[]);r.useEffect(()=>{if(N(),!e){k("unknown"),C(null);return}k("unknown"),C(null);let j=!1;return queueMicrotask(()=>{j||(k("loading"),C(null))}),()=>{j=!0,N()}},[N,e]),r.useEffect(()=>{if(f!=="loading"){N();return}const j=setTimeout(()=>{w.current=null,n()},o);return w.current=j,()=>{clearTimeout(j),w.current===j&&(w.current=null)}},[N,f,o,n]);const d=r.useCallback(()=>{const j=y.current;if(!j){u("embedded");return}try{if(j.contentWindow?.location?.href==="about:blank"&&j.src!=="about:blank"){u("blocked");return}}catch{}u("embedded")},[u]),M=r.useCallback(()=>{u("error")},[u]);r.useEffect(()=>{if(N(),!e){k("unknown"),C(null);return}k("unknown"),C(null)},[N]);const R=r.useCallback(()=>{N(),k("unknown"),C(null)},[N]),A=R,_=r.useMemo(()=>f==="embedded",[f]),D=r.useMemo(()=>f==="blocked"||f==="error",[f]);return{embedStatus:f,isEmbedded:_,isBlocked:D,blockReason:U,detectionMethod:P,iframeRef:y,resetEmbedStatus:R,setEmbedStatus:u,retry:A,embedContext:U,handleIframeLoad:d,handleIframeError:M}}const Rt=/\x1b\[[0-9;]*m/g;function me(e){return e.replace(Rt,"")}function _t(e){if(!e)return"";const i=new Date(e);return Number.isNaN(i.getTime())?"":i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function Dt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ut(e){if(e.stream==="stderr")return"error";const i=me(e.text).toLowerCase();return/\b(warn|warning)\b/.test(i)?"warn":/\b(error|fatal)\b/.test(i)?"error":"info"}function Mt(e,i){if(!i)return e;const o=new RegExp(`(${Dt(i)})`,"ig"),b=e.split(o),y=i.toLowerCase();return t.jsx(t.Fragment,{children:b.map((w,f)=>w.toLowerCase()===y?t.jsx("mark",{children:w},`${w}-${f}`):t.jsx("span",{children:w},`${w}-${f}`))})}function At({entries:e,loading:i,loadingMore:o,hasMore:b,total:y,onLoadMore:w,isRunning:f}){const k=r.useRef(null),U=r.useRef(e.length),C=r.useRef(f),[P,N]=r.useState(!1),[u,n]=r.useState(!1),[d,M]=r.useState(""),[R,A]=r.useState("all"),_=r.useMemo(()=>R==="all"?e:e.filter(p=>Ut(p)===R),[e,R]),D=r.useMemo(()=>{const p=d.trim().toLowerCase();return p?_.filter(E=>me(E.text).toLowerCase().includes(p)):_},[_,d]),j=D.length,T=r.useCallback(()=>{const p=k.current;p&&(p.scrollTop=p.scrollHeight,n(!1))},[]);r.useEffect(()=>{const p=C.current,E=U.current,L=e.length>E;f&&(!p||!u&&L)&&T(),C.current=f,U.current=e.length},[e.length,f,u,T]);const h=r.useCallback(()=>{const p=k.current;if(!p)return;const L=p.scrollTop+p.clientHeight>=p.scrollHeight-50;n(!L)},[]);return r.useEffect(()=>{i||e.length===0||!u&&f&&T()},[e,f,u,i,T]),i&&e.length===0?t.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:t.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[t.jsx(ee,{size:16,className:"devserver-log-viewer__spinner"}),t.jsx("span",{children:"Loading logs…"})]})}):t.jsxs("section",{className:`devserver-log-viewer${P?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[t.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[t.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[t.jsx("span",{className:"devserver-log-viewer__title",children:"Logs"}),t.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[y!==null?`${e.length}/${y}`:`${e.length}`," lines"]})]}),t.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[t.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[t.jsx("span",{className:"visually-hidden",children:"Filter logs by severity"}),t.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:R,onChange:p=>A(p.target.value),"data-testid":"devserver-log-severity-filter","aria-label":"Filter logs by severity",children:[t.jsx("option",{value:"all",children:"All severities"}),t.jsx("option",{value:"info",children:"Info"}),t.jsx("option",{value:"warn",children:"Warn"}),t.jsx("option",{value:"error",children:"Error"})]})]}),t.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[t.jsx("span",{className:"visually-hidden",children:"Search logs"}),t.jsx(it,{size:14}),t.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:d,onChange:p=>M(p.target.value),placeholder:"Search logs","data-testid":"devserver-log-search-input","aria-label":"Search logs"})]}),d.trim().length>0&&t.jsxs("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:[j," match",j===1?"":"es"]}),t.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>N(p=>!p),"data-testid":"devserver-log-fullscreen-toggle","aria-label":P?"Exit fullscreen logs":"Enter fullscreen logs",children:P?t.jsx(lt,{size:14}):t.jsx(ct,{size:14})})]})]}),t.jsxs("div",{className:"devserver-log-viewer__body",children:[b&&t.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:t.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:w,disabled:o,"data-testid":"devserver-log-load-more-button",children:o?t.jsxs(t.Fragment,{children:[t.jsx(ee,{size:14,className:"devserver-log-viewer__spinner"}),"Loading older logs…"]}):"Load older logs"})}),t.jsxs("div",{ref:k,className:"devserver-log-viewer__content",onScroll:h,"data-testid":"devserver-log-content",children:[!i&&D.length===0&&t.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?"No logs yet. Start the dev server to see output.":_.length===0?"No log lines match the selected severity.":"No log lines match your search."}),D.map(p=>{const E=me(p.text),L=_t(p.timestamp);return t.jsxs("div",{className:"devserver-log-line",children:[L&&t.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:L}),p.stream==="stderr"&&t.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:"ERR"}),t.jsx("span",{className:"devserver-log-text",children:Mt(E,d.trim())})]},p.id)})]}),u&&f&&t.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:T,"data-testid":"devserver-log-jump-button",children:[t.jsx(ot,{size:14}),"New logs"]})]})]})}const Pt="devserver-preview-iframe";function Tt({url:e,embedStatus:i,onEmbedStatusChange:o,iframeRef:b,blockReason:y,onRetry:w,className:f=Pt,embedContext:k}){const U=y??k??null,[C,P]=r.useState(0);r.useEffect(()=>{!e||i!=="unknown"||(P(d=>d+1),o("loading"))},[i,o,e]);const N=r.useCallback(()=>{const d=b.current;if(!d){o("embedded");return}try{if(d.contentWindow?.location?.href==="about:blank"&&d.src!=="about:blank"){o("blocked");return}}catch{}o("embedded")},[b,o]),u=r.useCallback(d=>{d.stopPropagation(),o("error")},[o]),n=r.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?t.jsxs("div",{className:"devserver-preview-iframe-shell",children:[t.jsx("iframe",{src:e,ref:b,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:f,title:"Dev server preview",onLoad:N,onError:u,onErrorCapture:u,"data-testid":"devserver-preview-iframe"},`${e}-${C}`),i==="loading"&&t.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[t.jsx(ee,{size:16,className:"dev-server-spin"}),t.jsx("span",{children:"Loading preview..."})]}),i==="blocked"&&t.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[t.jsx(Me,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),t.jsxs("div",{children:[t.jsx("p",{className:"devserver-preview-blocked-title",children:"Preview cannot be embedded"}),U&&t.jsx("p",{className:"devserver-preview-blocked-context",children:U})]}),t.jsx("p",{className:"devserver-preview-blocked-description",children:"You can view the preview in a separate browser tab."}),t.jsxs("div",{className:"devserver-preview-blocked-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:n,children:"Open in new tab"}),w&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:w,children:"Retry"})]})]}),i==="error"&&t.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[t.jsx(Ae,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),t.jsxs("div",{children:[t.jsx("p",{className:"devserver-preview-blocked-title",children:"Unable to load preview"}),U&&t.jsx("p",{className:"devserver-preview-blocked-context",children:U})]}),t.jsx("p",{className:"devserver-preview-blocked-description",children:"You can view the preview in a separate browser tab."}),t.jsxs("div",{className:"devserver-preview-blocked-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:n,children:"Open in new tab"}),w&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:w,children:"Retry"})]})]})]}):null}const Ee={stopped:{className:"dev-server-status-badge--stopped",label:"Stopped"},starting:{className:"dev-server-status-badge--starting",label:"Starting..."},running:{className:"dev-server-status-badge--running",label:"Running"},stopping:{className:"dev-server-status-badge--starting",label:"Stopping..."},failed:{className:"dev-server-status-badge--failed",label:"Failed"}};function Le(e){return e instanceof Error?e.message:String(e)}function Fe(e){return e==="."?"root":e}function Re(e){return e?e==="root"?".":e:null}function _e(e,i,o){return!i||e.scriptName!==i?!1:o?Fe(e.cwd)===o:!0}function zt(e){return e.cwd==="."?"root":e.cwd}function Ft(e){return e.length<=60?e:`${e.slice(0,60)}…`}function Ht({addToast:e,projectId:i}){const{session:o,detectedCommands:b,previewUrl:y,isLoading:w,error:f,startServer:k,stopServer:U,restartServer:C,setPreviewUrl:P,detectCommands:N,refresh:u}=yt(i),n=o?.status??"stopped",d=n==="running"||n==="starting",M=Ee[n]??Ee.stopped,{entries:R,loading:A,loadingMore:_,hasMore:D,total:j,loadMore:T}=St(i,!!i),h=y,p=o?.config?.cwd??null,[E,L]=r.useState(!0),[z,$]=r.useState(""),[O,H]=r.useState(""),[x,a]=r.useState(null),[s,c]=r.useState(null),[l,v]=r.useState("embedded"),S=l==="embedded"?h:null,{embedStatus:g,setEmbedStatus:$e,resetEmbedStatus:J,iframeRef:G,isEmbedded:Oe,isBlocked:te,blockReason:re,retry:fe}=Lt(S),[pe,q]=r.useState(!1),he=r.useRef(g);r.useEffect(()=>{const m=he.current!==g;te&&m&&q(!0),g==="embedded"&&q(!1),he.current=g},[g,te]),r.useEffect(()=>{q(!1)},[h]);const X=r.useMemo(()=>{if(!x)return null;const m=Re(p);return b.find(F=>!(F.scriptName!==x||m&&F.cwd!==m||o?.config?.command&&F.command!==o.config.command))??b.find(F=>_e(F,x,p))??null},[b,o?.config?.command,x,p]);r.useEffect(()=>{typeof N=="function"&&N().catch(m=>{e(Le(m),"error")})},[e,N]),r.useEffect(()=>{if(x){L(!1);return}L(!0)},[x]),r.useEffect(()=>{if(o?.status==="running"||o?.status==="starting"){o.config?.command?.trim().length>0&&$(o.config.command);return}if(X){$(X.command);return}b.length>0&&$(m=>m.trim().length>0?m:b[0]?.command??"")},[b,X,o?.config?.command,o?.status]),r.useEffect(()=>{H(h??"")},[h]);const se=r.useCallback(()=>{h&&window.open(h,"_blank","noopener,noreferrer")},[h]),be=r.useCallback(()=>{q(!1),fe()},[fe]),Be=r.useCallback(()=>{try{const m=G.current;if(m?.contentWindow){m.contentWindow.location.reload(),q(!1),J();return}}catch{}if(!(!h||!G.current))try{const m=new URL(h);m.searchParams.set("_t",Date.now().toString()),G.current.src=m.toString(),q(!1),J()}catch{G.current.src=h,q(!1),J()}},[h,G,J]),K=r.useCallback(async(m,F,ne)=>{c(m);try{await F(),e(ne,"success")}catch(Ye){e(Le(Ye),"error")}finally{c(null)}},[e]),He=r.useCallback(m=>{a(m.scriptName),L(!1),$(m.command),e(`Selected ${m.scriptName} script.`,"success")},[e]),Ve=r.useCallback(()=>{a(null),L(!0),e("Cleared selected dev server script.","success")},[e]),qe=()=>{const m=z.trim();if(m.length===0){e("Enter a command before starting the dev server.","warning");return}const F=Re(p)??".",ne=X?.cwd??F;K("start",()=>k(m,ne),"Dev server started.")},We=()=>{K("stop",U,"Dev server stopped.")},Ge=()=>{K("restart",C,"Dev server restarted.")},Ie=()=>{const m=O.trim(),F=m.length>0?m:null;K("preview",()=>P(F),F?"Preview URL updated.":"Preview URL override cleared.")},Je=r.useCallback(()=>{f&&u()},[f,u]),Xe=n==="starting"||n==="running"||s!==null,Ke=n==="stopped"||s!==null,Qe=n==="stopped"||n==="starting"||s!==null;return t.jsxs("div",{className:"dev-server-view","data-testid":"dev-server-view",children:[t.jsxs("section",{className:"dev-server-header","aria-label":"Dev server controls header",children:[t.jsxs("div",{className:"dev-server-header-title",children:[t.jsx(dt,{size:16}),t.jsx("h2",{children:"Dev Server"}),t.jsx("span",{className:`dev-server-status-badge ${M.className}`,"data-testid":"dev-server-status-badge",children:M.label})]}),t.jsxs("div",{className:"dev-server-header-actions",children:[t.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:qe,disabled:Xe,"data-testid":"dev-server-start-button",children:[t.jsx(ut,{size:14}),t.jsx("span",{children:s==="start"?"Starting...":"Start"})]}),t.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:We,disabled:Ke,"data-testid":"dev-server-stop-button",children:[t.jsx(vt,{size:14}),t.jsx("span",{children:s==="stop"?"Stopping...":"Stop"})]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Ge,disabled:Qe,"data-testid":"dev-server-restart-button",children:[t.jsx(mt,{size:14}),t.jsx("span",{children:s==="restart"?"Restarting...":"Restart"})]})]})]}),t.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":"Dev server configuration",children:[t.jsxs("div",{className:"dev-server-section-header",children:[t.jsx("h3",{children:"Configuration"}),w&&t.jsx("span",{className:"dev-server-muted",children:"Loading..."})]}),w&&!o&&b.length===0&&t.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[t.jsx(ee,{size:16,className:"dev-server-spin"}),t.jsx("span",{children:"Loading dev server configuration..."})]}),f&&t.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[t.jsx("p",{children:f}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:Je,children:"Retry"})]}),t.jsxs("div",{className:"dev-server-section",children:[t.jsx("h3",{children:"Script Selection"}),x&&t.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[t.jsx("span",{className:"dev-server-candidate-name",children:x}),t.jsx("span",{className:"dev-server-candidate-source",children:p??"root"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(!0),"data-testid":"dev-server-change-selection",children:"Change"}),t.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Ve,"data-testid":"dev-server-clear-selection",children:"Clear"})]}),E&&b.length===0&&t.jsxs("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:["No dev server scripts detected. Check that your project has a ",t.jsx("code",{children:"package.json"})," with a ",t.jsx("code",{children:"dev"}),", ",t.jsx("code",{children:"start"}),", or similar script."]}),E&&b.length>0&&t.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:b.map(m=>{const F=_e(m,x,p);return t.jsxs("button",{type:"button",className:`dev-server-candidate ${F?"dev-server-candidate--selected":""}`,onClick:()=>He(m),"data-testid":`dev-server-candidate-${m.scriptName}-${Fe(m.cwd)}`,children:[t.jsx("span",{className:"dev-server-candidate-name",children:m.scriptName}),t.jsx("span",{className:"dev-server-candidate-command",children:Ft(m.command)}),t.jsx("span",{className:"dev-server-candidate-source",children:zt(m)})]},`${m.cwd}::${m.scriptName}::${m.command}`)})})]}),t.jsxs("div",{className:"dev-server-field-group",children:[t.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:"Command"}),t.jsx("input",{id:"dev-server-command",className:"input",value:z,onChange:m=>$(m.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:n==="running"||n==="starting"})]}),(n==="running"||n==="starting")&&o&&t.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[t.jsx("span",{className:"dev-server-label",children:"Running command"}),t.jsx("code",{children:o.config?.command??z})]}),t.jsxs("div",{className:"dev-server-preview-override",children:[t.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:"Preview URL Override"}),t.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:O,onChange:m=>H(m.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ie,disabled:s==="preview","data-testid":"dev-server-set-preview",children:"Save"})]}),h&&t.jsxs("p",{className:"dev-server-preview-hint",children:["Auto-detected: ",h]})]}),t.jsx("div",{className:"dev-server-content",children:t.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":"Dev server logs",children:[t.jsxs("div",{className:"dev-server-section-header",children:[t.jsx("h3",{children:"Logs"}),t.jsxs("span",{className:"dev-server-muted",children:[j??R.length," lines"]})]}),t.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:t.jsx(At,{entries:R,loading:A,loadingMore:_,hasMore:D,total:j,onLoadMore:T,isRunning:d})})]})}),t.jsxs("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":"Dev server preview",children:[t.jsxs("div",{className:"devserver-preview-header",children:[t.jsxs("div",{className:"devserver-preview-title",children:[t.jsx(ft,{size:14}),t.jsx("span",{children:"Preview"})]}),t.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:h??"No preview URL","data-testid":"devserver-preview-url-badge",children:["Auto",h?` · ${h}`:" · Not available"]}),t.jsxs("div",{className:"devserver-preview-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>v(m=>m==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:l==="embedded"?"External only":"Embedded"}),t.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:"Open in new tab",onClick:se,disabled:!h,"data-testid":"devserver-preview-open-tab",children:t.jsx(pt,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:"Refresh preview",onClick:Be,disabled:!h,"data-testid":"devserver-preview-refresh",children:t.jsx(ht,{size:14})})]})]}),t.jsxs("div",{className:"devserver-preview-container","data-embed-status":g,"data-embedded":Oe?"true":"false",children:[!h&&!d&&t.jsx("p",{className:"devserver-preview-empty",children:"Start a dev server to see a live preview here."}),!h&&d&&t.jsx("p",{className:"devserver-preview-empty",children:"No preview URL detected. Start the dev server or set a manual URL to preview your app."}),h&&l==="external"&&t.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[t.jsx("p",{children:"Embedded preview is disabled. Open your app in a separate browser tab."}),t.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:se,"data-testid":"devserver-preview-external-open-tab",children:"Open in new tab"})]}),h&&l==="embedded"&&pe&&te&&t.jsxs("div",{className:g==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[g==="error"?t.jsx(Ae,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):t.jsx(Me,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),t.jsxs("div",{children:[t.jsx("p",{className:"devserver-preview-blocked-title",children:g==="error"?"Preview failed":"Preview blocked"}),re&&t.jsx("p",{className:"devserver-preview-blocked-context",children:re})]}),t.jsx("p",{className:"devserver-preview-blocked-description",children:"Open the preview in a new tab, or retry embedded mode after checking your server settings."}),t.jsxs("div",{className:"devserver-preview-blocked-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:se,"data-testid":"devserver-preview-fallback-open-tab",children:"Open preview in new tab"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:be,"data-testid":"devserver-preview-fallback-retry",children:"Retry embedded preview"})]})]}),h&&l==="embedded"&&!pe&&t.jsx(Tt,{url:h,embedStatus:g,onEmbedStatusChange:$e,iframeRef:G,blockReason:re,onRetry:be})]})]})]})}export{Ht as DevServerView};