@runfusion/fusion 0.29.0 → 0.31.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 (74) hide show
  1. package/dist/bin.js +11265 -3612
  2. package/dist/client/assets/AgentDetailView-CY-O6VkV.css +1 -0
  3. package/dist/client/assets/AgentDetailView-Dx7T1-gM.js +18 -0
  4. package/dist/client/assets/AgentPermissionPolicyEditor-Cbd6SG_T.css +1 -0
  5. package/dist/client/assets/AgentPermissionPolicyEditor-Ia7QkynK.js +6 -0
  6. package/dist/client/assets/AgentsView-DBbdPWV-.js +34 -0
  7. package/dist/client/assets/ChatView-DYpoWnCc.js +1 -0
  8. package/dist/client/assets/DevServerView-DotHOFZt.js +1 -0
  9. package/dist/client/assets/{DirectoryPicker-Bb3TIWEa.js → DirectoryPicker-CIj3ZGKv.js} +1 -1
  10. package/dist/client/assets/DocumentsView-Dt27gDYa.js +1 -0
  11. package/dist/client/assets/EvalsView-HfWTc8Uv.js +1 -0
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-AsmRLMxm.js → ExperimentalAgentOnboardingModal-U7fXDhhN.js} +1 -1
  13. package/dist/client/assets/{InsightsView-j7J_vUME.js → InsightsView-C8bsAlMv.js} +3 -3
  14. package/dist/client/assets/{MemoryView-QWiqVDuQ.js → MemoryView-D-HLtRrr.js} +2 -2
  15. package/dist/client/assets/{NodesView-Cr4CXr7b.js → NodesView-w3ms-XX2.js} +2 -2
  16. package/dist/client/assets/{PiExtensionsManager-CPZ-82Wl.js → PiExtensionsManager-DFAZAfNn.js} +2 -2
  17. package/dist/client/assets/PluginManager-DN1VG7Qm.js +1 -0
  18. package/dist/client/assets/ReliabilityView-D0Rtd7pX.css +1 -0
  19. package/dist/client/assets/ReliabilityView-DAuqE-zi.js +1 -0
  20. package/dist/client/assets/ResearchView-DTh8FLUm.css +1 -0
  21. package/dist/client/assets/ResearchView-YoxEFtNB.js +1 -0
  22. package/dist/client/assets/{SettingsModal-BAx4gt2A.css → SettingsModal-1Y8N6MkL.css} +1 -1
  23. package/dist/client/assets/SettingsModal-B86XhYB1.js +31 -0
  24. package/dist/client/assets/{SettingsModal-8l8vfXns.js → SettingsModal-BRRPoxku.js} +1 -1
  25. package/dist/client/assets/{SettingsModal-ChnabMhF.css → SettingsModal-sp7SNwS9.css} +1 -1
  26. package/dist/client/assets/SetupWizardModal-B4eA3bpz.js +1 -0
  27. package/dist/client/assets/SkillsView-DZIfZoF5.js +1 -0
  28. package/dist/client/assets/StashRecoveryView-mKXYsqam.js +1 -0
  29. package/dist/client/assets/{TodoView-rSn0aPsb.js → TodoView-C6sLLEQu.js} +2 -2
  30. package/dist/client/assets/dashboard-view-DOY8-BIx.js +21 -0
  31. package/dist/client/assets/{folder-open-Bq_TweLR.js → folder-open-C_fxRMq1.js} +1 -1
  32. package/dist/client/assets/index-DTFPgu6_.js +695 -0
  33. package/dist/client/assets/index-DdvAZIzj.css +1 -0
  34. package/dist/client/assets/{upload-D1y22Www.js → upload-xjku_93-.js} +1 -1
  35. package/dist/client/assets/{users-UQdBpweI.js → users-CbALDtDk.js} +1 -1
  36. package/dist/client/assets/vendor-codemirror-jBKmHyH0.js +27 -0
  37. package/dist/client/index.html +3 -2
  38. package/dist/client/version.json +1 -1
  39. package/dist/droid-cli/package.json +1 -1
  40. package/dist/extension.js +8344 -1919
  41. package/dist/pi-claude-cli/package.json +1 -1
  42. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  43. package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/workflow-steps-verdict-contract.test.ts +42 -0
  44. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  45. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  46. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  47. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  48. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  49. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  50. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  51. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  52. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  53. package/package.json +1 -1
  54. package/skill/fusion/SKILL.md +2 -2
  55. package/skill/fusion/references/extension-tools.md +34 -0
  56. package/skill/fusion/references/fusion-capabilities.md +3 -0
  57. package/dist/client/assets/AgentDetailView-CWyOv8HJ.js +0 -18
  58. package/dist/client/assets/AgentDetailView-ChIKbcEi.css +0 -1
  59. package/dist/client/assets/AgentsView-DljrBNE1.js +0 -34
  60. package/dist/client/assets/ChatView-BklDUi5_.js +0 -1
  61. package/dist/client/assets/DevServerView-BqcI1wXr.js +0 -1
  62. package/dist/client/assets/DocumentsView-BhrdTTh3.js +0 -1
  63. package/dist/client/assets/EvalsView-DrFp2cLg.js +0 -1
  64. package/dist/client/assets/PluginManager-DShC4UiM.js +0 -1
  65. package/dist/client/assets/ResearchView-B5wYC1KE.js +0 -1
  66. package/dist/client/assets/ResearchView-C7uXon3o.css +0 -1
  67. package/dist/client/assets/SettingsModal-CYetgxZj.js +0 -31
  68. package/dist/client/assets/SetupWizardModal-_IK6hTA7.js +0 -1
  69. package/dist/client/assets/SkillsView-Dilmj1nh.js +0 -1
  70. package/dist/client/assets/StashRecoveryView-BtL9aAn3.js +0 -1
  71. package/dist/client/assets/dashboard-view-C_G8JVU7.js +0 -21
  72. package/dist/client/assets/index-DjfAYMGG.css +0 -1
  73. package/dist/client/assets/index-tbwUVj8p.js +0 -696
  74. package/dist/client/assets/star-Dn0V0Cnq.js +0 -6
@@ -1 +0,0 @@
1
- .agent-detail-overlay{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;padding:var(--space-lg)}.agent-detail-modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;min-width:calc(var(--space-xl) * 20);max-width:calc(100vw - var(--space-2xl) - var(--space-xs) * 2);min-height:calc(var(--space-xl) * 13 + var(--space-sm));max-height:calc(100dvh - var(--space-2xl) - var(--space-xs) * 2);display:flex;flex-direction:column;overflow:hidden;resize:both;box-shadow:var(--shadow-lg)}.agent-detail-modal:not([style*=width]){width:min(calc(var(--space-xl) * 37 + var(--space-md)),calc(100vw - var(--space-2xl) - var(--space-xs) * 2))}.agent-detail-modal:not([style*=height]){height:min(85vh,calc(100dvh - var(--space-2xl) - var(--space-xs) * 2))}.agent-detail-inline-shell{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden}.agent-detail-inline{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:var(--surface);border:1px solid var(--border)}.agent-detail-inline-loading{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden}.agent-detail-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:calc(var(--space-xl) * 2 + var(--space-md));color:var(--text-muted)}.agent-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) calc(var(--space-lg) + var(--space-xs));border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.agent-detail-identity{display:flex;align-items:center;gap:var(--space-md);flex-shrink:0;min-width:0}.agent-detail-inline-back{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));padding:calc(var(--space-sm) - var(--space-xs) * .5) calc(var(--space-sm) + var(--space-xs) * .5);flex-shrink:0}.agent-detail-icon{width:calc(var(--space-lg) * 2 + var(--space-xs));height:calc(var(--space-lg) * 2 + var(--space-xs));display:flex;align-items:center;justify-content:center;color:var(--text);flex-shrink:0}.agent-detail-info{min-width:0}.agent-detail-info h2{font-size:calc(var(--space-md) + var(--space-xs));font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{display:flex;gap:var(--space-xs);margin-top:calc(var(--space-xs) * .5)}.agent-detail-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);flex:1 1 auto;min-width:0}.agent-detail-controls{display:flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25);flex-shrink:0}.btn--compact{padding:calc(var(--space-xs) + var(--space-xs) * .25) calc(var(--space-sm) + var(--space-xs) * .5);font-size:var(--space-md);gap:var(--space-xs)}.agent-detail-utility-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.agent-detail-bulk-menu{position:relative}.agent-detail-bulk-menu-popover{position:absolute;right:0;top:calc(100% + var(--space-xs));min-width:calc(var(--space-xl) * 9);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:2;padding:var(--space-xs);display:flex;flex-direction:column;gap:var(--space-xs)}.agent-detail-bulk-menu-item{width:100%;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text);text-align:left;padding:var(--space-sm);display:flex;flex-direction:column;gap:calc(var(--space-xs) * .5);cursor:pointer}.agent-detail-bulk-menu-item:hover:not(:disabled),.agent-detail-bulk-menu-item:focus-visible{outline:none;background:var(--card-hover)}.agent-detail-bulk-menu-item:disabled{color:var(--text-muted);cursor:not-allowed}.agent-detail-bulk-menu-item-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted)}.agent-detail-import-btn{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.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:var(--space-xs);padding:0 calc(var(--space-lg) + var(--space-xs));border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.agent-detail-tab{display:flex;align-items:center;gap:var(--space-xs);padding:calc(var(--space-sm) + var(--space-xs) * .5) var(--space-md);background:none;border:none;border-bottom:calc(var(--space-xs) * .5) solid transparent;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) + var(--space-xs) * .25);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-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:color-mix(in srgb,var(--todo) 12%,transparent);color:var(--text);border-radius:var(--radius-sm)}.agent-detail-content{flex:1;min-height:0;overflow-y:auto;padding:var(--space-xl)}.agent-detail-footer{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) var(--space-xl);border-top:1px solid var(--border);background:var(--bg-secondary);font-size:var(--space-md);color:var(--text-muted);flex-shrink:0}.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:var(--space-xl)}.dashboard-summary-layout{padding-bottom:var(--space-md)}.dashboard-summary-health-reason{margin-left:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs))}.dashboard-summary-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.budget-warning-banner{display:flex;gap:var(--space-sm);align-items:flex-start;border:1px solid var(--color-warning);background:color-mix(in srgb,var(--color-warning) 12%,transparent);border-radius:var(--radius-md);padding:var(--space-md)}.dashboard-summary-hero__heading{display:flex;align-items:center;gap:var(--space-sm)}.dashboard-summary-hero__heading h3{margin:0;font-size:calc(var(--space-lg) + var(--space-xs) * .5);font-weight:600}.dashboard-summary-hero__meta{display:flex;flex-wrap:wrap;gap:var(--space-md);color:var(--text-muted)}.agent-detail-approval-badge{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--color-warning)}.dashboard-summary-skills{display:inline-flex;align-items:center;gap:var(--space-sm)}.dashboard-summary-skill-badges{display:inline-flex;flex-wrap:wrap;gap:var(--space-xs)}.dashboard-summary-skill-badge{max-width:calc(var(--space-xl) * 8);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-summary-skill-badge-btn{cursor:pointer}.dashboard-summary-skill-badge-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.dashboard-summary-skill-badge--selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 20%,transparent)}.dashboard-summary-skill-detail{margin-top:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.dashboard-summary-skill-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.dashboard-summary-skill-detail-title{font-weight:600;color:var(--text)}.dashboard-summary-skill-detail-loading,.dashboard-summary-skill-detail-empty{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--text-muted)}.dashboard-summary-skill-detail-error{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs);color:var(--color-error)}.dashboard-summary-skill-detail-content{margin:0;padding:var(--space-sm);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--card);color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:calc(var(--space-2xl) * 6);overflow:auto}.dashboard-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(var(--space-xl) * 6 + var(--space-sm)),1fr));gap:var(--space-md)}.dashboard-summary-grid p{margin:0}.dashboard-summary-label{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted)}.dashboard-summary-health-row{display:inline-flex;align-items:center;gap:var(--space-xs)}.dashboard-summary-health-reason{margin-left:var(--space-xs);font-size:var(--space-md)}.runs-list{display:flex;flex-direction:column;gap:var(--space-sm)}.run-item{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-sm)}.dashboard-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:calc(var(--space-lg) + var(--space-xs))}.dashboard-section h3{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:600;margin:0 0 var(--space-lg) 0;color:var(--text-muted);text-transform:uppercase;letter-spacing:calc(var(--space-xs) * .125)}.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-xl) * 7 + var(--space-sm)),1fr));gap:var(--space-lg)}.info-item{display:flex;flex-direction:column;gap:var(--space-xs)}.info-label{font-size:var(--space-md);color:var(--text-muted)}.info-value{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:500}.inline-badge{display:inline-block;padding:calc(var(--space-xs) * .5) var(--space-sm);border-radius:var(--radius-sm);font-size:var(--space-md);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:calc(var(--space-lg) + var(--space-xs) * .5);font-weight:700;color:var(--todo)}.stat-label{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted);margin-top:var(--space-xs)}.current-task{display:flex;align-items:center;gap:var(--space-md)}.task-badge{font-family:var(--font-mono);background:var(--surface);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);font-size:calc(var(--space-md) + var(--space-xs) * .25)}.metadata-json{background:var(--surface);padding:var(--space-md);border-radius:var(--radius-sm);font-size:var(--space-md);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:var(--space-md);color:var(--text-muted)}.streaming-indicator{display:flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25);font-size:var(--space-md);color:var(--color-success)}.streaming-dot{width:var(--space-sm);height:var(--space-sm);background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.logs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:calc(var(--space-2xl) + var(--space-lg));color:var(--text-muted);text-align:center}.logs-empty p{margin:var(--space-sm) 0 0 0}.agent-mail-tab{display:flex;flex-direction:column;gap:var(--space-md)}.agent-mail-tab-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-mail-tab-header h3{margin:0;font-size:calc(var(--space-md) + var(--space-xs) * .5)}.agent-mail-tab-error{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-error)}.agent-detail-loading--inline{flex-direction:row;justify-content:flex-start;padding:var(--space-md) 0}.agent-mail-tab .agent-mail-tab-message{width:100%;border:0;background:transparent;text-align:left;color:inherit;cursor:pointer}.agent-mail-tab .agent-mail-tab-message:hover{background:var(--card-hover)}.agent-mail-tab .agent-mail-tab-message:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.agent-mail-tab .agent-mail-tab-message--selected{background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-mail-tab .agent-mail-tab-detail{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-mail-tab .agent-mail-tab-back{align-self:flex-start}.agent-mail-tab .agent-mail-tab-detail-meta{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-mail-tab .agent-mail-tab-detail-row{display:flex;flex-wrap:wrap;gap:var(--space-md)}.agent-mail-tab .agent-mail-tab-detail-label{color:var(--text-muted);min-width:calc(var(--space-2xl) * 2)}.agent-mail-tab .agent-mail-tab-reply-context{color:var(--text-muted)}.agent-mail-tab .agent-mail-tab-detail-body{white-space:pre-wrap;word-break:break-word}.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:calc(var(--space-2xl) + var(--space-lg));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:calc(var(--space-xs) + var(--space-sm) * .25);font-weight:600;color:var(--in-progress)}.live-dot{width:var(--space-sm);height:var(--space-sm);background:var(--in-progress);border-radius:50%;animation:pulse 1.5s infinite}.run-id{font-family:var(--font-mono);font-size:calc(var(--space-md) + var(--space-xs) * .25);color:var(--text-muted)}.run-status{display:flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25);font-size:calc(var(--space-md) + var(--space-xs) * .25);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:var(--space-md);color:var(--text-muted)}.run-logs-container{padding:var(--space-md);background:var(--bg-secondary);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.run-details-loading-state{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) 0}.run-output-sections{margin-bottom:var(--space-md)}.run-output-section{margin-bottom:var(--space-sm)}.run-output-label{margin-bottom:var(--space-xs);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;letter-spacing:calc(var(--space-xs) * .1);text-transform:uppercase}.run-output-label--error{color:var(--color-error)}.run-output-panel{margin:0;max-height:calc(var(--space-2xl) * 6.25);overflow:auto;border-radius:var(--radius-sm);padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;font-size:calc(var(--space-sm) + var(--space-xs));line-height:1.5}.run-output-panel--error{color:var(--color-error);border-color:color-mix(in srgb,var(--color-error) 35%,var(--border));background:color-mix(in srgb,var(--color-error) 10%,transparent)}.run-context-grid{display:flex;flex-wrap:wrap;gap:var(--space-xs) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs))}.run-context-item{line-height:1.5}.run-output-empty{padding:var(--space-sm) 0;font-style:italic;font-size:calc(var(--space-sm) + var(--space-xs))}.run-agent-logs-section{margin-top:var(--space-xs);padding-top:var(--space-sm);border-top:1px solid var(--border)}.agent-tasks-list{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-task-item{display:flex;flex-direction:column;gap:calc(var(--space-xs) + var(--space-sm) * .25);padding:var(--space-md) calc(var(--space-md) + var(--space-xs) * .5);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:var(--space-md);font-weight:600;color:var(--todo)}.agent-task-title{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:500;color:var(--text);line-height:1.4}.agent-task-status{font-size:var(--space-md);color:var(--text-muted)}.agent-task-column{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) var(--space-sm);border-radius:var(--radius-pill);font-size:calc(var(--space-sm) + var(--space-xs) * .5);font-weight:700;text-transform:uppercase;letter-spacing:calc(var(--space-xs) * .1)}.agent-task-column.column-triage{color:var(--triage);background:color-mix(in srgb,var(--triage) 18%,transparent)}.agent-task-column.column-todo{color:var(--todo);background:color-mix(in srgb,var(--todo) 18%,transparent)}.agent-task-column.column-in-progress{color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 18%,transparent)}.agent-task-column.column-in-review{color:var(--in-review);background:color-mix(in srgb,var(--in-review) 18%,transparent)}.agent-task-column.column-done{color:var(--done);background:color-mix(in srgb,var(--done) 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:calc(var(--space-2xl) + var(--space-lg));color:var(--text-muted);text-align:center}.agent-tasks-empty p{margin:0}.config-tab{display:flex;flex-direction:column;gap:var(--space-xl)}.config-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:calc(var(--space-md) + var(--space-sm))}.config-section h3{font-size:calc(var(--space-md) + var(--space-xs));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:calc(var(--space-xs) + var(--space-sm) * .25)}.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:calc(var(--space-md) + var(--space-xs) * .5);color:var(--text-muted);margin:0 0 calc(var(--space-md) + var(--space-sm)) 0}.config-actions-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.config-fields{display:flex;flex-direction:column;gap:var(--space-lg)}.config-field{display:flex;flex-direction:column;gap:calc(var(--space-xs) + var(--space-sm) * .25)}.config-field label{font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:500}.agent-avatar-editor{display:flex;align-items:center;gap:var(--space-md)}.agent-avatar-editor-preview{background:var(--card)}.agent-avatar-editor-actions{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.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:calc(var(--space-sm) + var(--space-xs) * .75);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:calc(var(--space-md) + var(--space-sm));padding-top:var(--space-lg);border-top:1px solid var(--border)}.config-saved-indicator{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);color:var(--color-success)}.config-saved-indicator--error{color:var(--color-error)}.heartbeat-procedure-actions{margin-top:var(--space-sm)}.heartbeat-procedure-viewer{margin-top:var(--space-lg)}.heartbeat-procedure-status{display:inline-flex;align-items:center;gap:var(--space-xs);margin-left:auto}.heartbeat-procedure-status--warning{color:var(--color-warning)}.rating-summary-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:calc(var(--space-md) + var(--space-sm));display:flex;flex-direction:column;gap:var(--space-md)}.rating-score-display{display:flex;align-items:center;gap:var(--space-md)}.rating-average{font-size:var(--space-2xl);font-weight:700;line-height:1}.rating-stats{display:flex;align-items:center;gap:var(--space-md)}.rating-count{font-size:calc(var(--space-md) + var(--space-xs) * .5);color:var(--text-muted)}.rating-trend-badge{font-size:var(--space-md);padding:var(--space-xs) calc(var(--space-md) - var(--space-xs) * .5);border-radius:var(--radius-lg);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:calc(var(--space-md) + var(--space-xs) * .25);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:calc(var(--space-md) + var(--space-xs) * .25)}.category-score{font-weight:600;font-size:calc(var(--space-md) + var(--space-xs) * .25)}.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:calc(var(--space-md) + var(--space-xs) * .25);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:calc(var(--space-md) + var(--space-xs) * .25);font-weight:600}.rating-history .no-ratings{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);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:calc(var(--space-sm) + var(--space-xs) * .5);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:calc(var(--space-sm) + var(--space-xs) * .5);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:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted);line-height:1.4}.runs-loading-row{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl)}.runs-toolbar{padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--border)}.runs-toolbar--between{display:flex;justify-content:space-between;align-items:center}.runs-toolbar-meta{font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.run-card--clickable{cursor:pointer}.run-card--clickable:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.run-header-group{display:flex;align-items:center;gap:var(--space-sm)}.run-badge--compact{font-size:calc(var(--space-sm) + var(--space-xs) * .5);padding:calc(var(--space-xs) * .25) calc(var(--space-sm) * .75)}.run-output-summary{cursor:pointer;user-select:none}.run-live-indicator--with-margin{margin-left:var(--space-sm)}.detail-section-body--loading{display:flex;align-items:center;gap:var(--space-sm)}.agent-empty--padded{padding:var(--space-xl)}.logs-fallback-label{font-size:calc(var(--space-sm) + var(--space-xs))}.config-textarea-mono{font-family:var(--font-mono);font-size:calc(var(--space-md) + var(--space-xs) * .25);resize:vertical}.config-textarea-top-spacing{margin-top:var(--space-sm)}.config-hint--block-spacing{margin-bottom:var(--space-md)}.config-hint--block{display:block;margin-bottom:var(--space-sm)}.config-hint--top-spacing{margin-top:var(--space-sm)}.config-hint--inline-loader{display:inline-flex;gap:var(--space-xs);margin-top:var(--space-sm)}.config-inline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-sm)}.config-hint--inline-tight{display:flex;align-items:center;gap:var(--space-xs)}.config-hint--warning{color:var(--color-warning)}@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:100dvh!important;max-width:100vw!important;max-height:100dvh;margin:0;border-radius:0;border:none;resize:none}.agent-detail-header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:var(--space-xs);row-gap:0;padding:var(--space-sm) var(--space-md);padding-top:max(var(--space-sm),env(safe-area-inset-top,0))}.agent-detail-identity{grid-column:1;grid-row:1;flex:1 1 auto;min-width:0;gap:var(--space-sm)}.agent-detail-icon{width:calc(var(--space-lg) * 2);height:calc(var(--space-lg) * 2);flex-shrink:0}.agent-detail-icon svg{width:calc(var(--space-sm) + var(--space-xs) * 2);height:calc(var(--space-sm) + var(--space-xs) * 2)}.agent-detail-info h2{font-size:calc(var(--space-md) + var(--space-xs) * .75);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{flex-wrap:wrap}.agent-detail-header-actions{grid-column:2;grid-row:1;flex:0 0 auto;justify-content:flex-end;gap:calc(var(--space-xs) * .5)}.agent-detail-controls{flex:0 0 auto;gap:calc(var(--space-xs) * .5)}.agent-detail-controls .btn--compact{padding:calc(var(--space-sm) - var(--space-xs) * .5) calc(var(--space-md) - var(--space-xs) * .5);font-size:var(--space-md);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-controls .agent-detail-mobile-icon-control{min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs));padding-left:calc(var(--space-sm) - var(--space-xs) * .5);padding-right:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-detail-controls .agent-detail-mobile-icon-control .agent-detail-control-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.agent-detail-controls .btn--compact svg{width:calc(var(--space-md) + var(--space-xs) * .5);height:calc(var(--space-md) + var(--space-xs) * .5)}.agent-detail-utility-actions{flex-shrink:0;margin-left:0}.agent-detail-bulk-menu-popover{right:0}.agent-detail-utility-actions .btn-icon{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-import-btn{min-width:calc(var(--space-xl) * 3 + var(--space-xs))}.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:calc(var(--space-xs) + var(--space-sm) * .25)}.agent-detail-actions .btn{padding:calc(var(--space-sm) - var(--space-xs) * .5) calc(var(--space-md) - var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-actions .btn svg{width:calc(var(--space-sm) + var(--space-xs) * 1.5);height:calc(var(--space-sm) + var(--space-xs) * 1.5)}.agent-detail-actions .btn-icon{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.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:var(--space-md) calc(var(--space-md) + var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);white-space:nowrap;min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-content{padding:var(--space-lg);-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.agent-detail-footer{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);padding-bottom:max(var(--space-sm),env(safe-area-inset-bottom,0));font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.agent-detail-id{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-tab{gap:var(--space-lg)}.dashboard-summary-skills,.dashboard-summary-skill-detail-header{flex-direction:column;align-items:flex-start}.dashboard-section{padding:var(--space-lg)}.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:calc(var(--space-lg) + var(--space-xs) * .5)}.logs-empty{padding:var(--space-2xl) var(--space-lg)}.agent-mail-tab-header{flex-direction:column;align-items:flex-start}.agent-mail-tab .mailbox-agent-subtabs{width:100%}.agent-mail-tab .mailbox-agent-subtab{flex:1}.agent-mail-tab .agent-mail-tab-detail{width:100%;padding:var(--space-md)}.agent-mail-tab .agent-mail-tab-back{min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.run-card{padding:var(--space-md)}.run-header{flex-wrap:wrap;gap:calc(var(--space-xs) + var(--space-sm) * .25)}.run-details{flex-wrap:wrap}.run-logs-container{padding:var(--space-sm)}.run-output-panel{max-height:calc(var(--space-2xl) * 5)}.run-context-grid{flex-direction:column;gap:var(--space-xs)}.run-details .text-muted{min-width:0;overflow-wrap:anywhere}.config-tab{gap:var(--space-lg)}.config-section{padding:var(--space-lg)}.config-section .input,.config-section .select,.config-section textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.config-actions{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.config-actions .btn{width:100%;justify-content:center}.heartbeat-procedure-status{margin-left:0}}@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-avatar-editor{flex-direction:column;align-items:flex-start}.agent-avatar-editor-actions{width:100%}.agent-avatar-editor-actions .btn{min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.agent-dialog-overlay{padding:0;align-items:stretch}.agent-dialog{width:100vw!important;height:100dvh;max-width:100%!important;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-muted);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-muted);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-muted);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-muted);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:var(--space-xs)}.budget-progress-bar{width:100%;height:var(--space-sm);background:var(--surface);border-radius:var(--radius-sm);overflow:hidden;margin-top:var(--space-xs)}.budget-progress-bar__fill{height:100%;border-radius:var(--radius-sm);transition:width var(--transition-slow),background-color var(--transition-slow)}.budget-progress-bar__fill--green{background:var(--color-success)}.budget-progress-bar__fill--amber{background:var(--color-warning)}.budget-progress-bar__fill--red{background:var(--color-error)}.budget-progress-label{font-size:.75rem;color:var(--text-muted);margin-top:var(--space-xs);display:block}.budget-badge{display:inline-flex;align-items:center;gap:var(--space-xs);padding:calc(var(--space-xs) / 2) var(--space-sm);border-radius:var(--radius-pill);font-size:.75rem;font-weight:500}.budget-warning-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);background:var(--state-error-bg, color-mix(in srgb, var(--color-error) 15%, transparent));color:var(--state-error-text);border:1px solid var(--state-error-border);font-size:.875rem;margin-bottom:var(--space-md)}.btn-reset-budget{margin-top:var(--space-sm)}
@@ -1,34 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-CWyOv8HJ.js","assets/vendor-react-K0fH_qHe.js","assets/index-tbwUVj8p.js","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/index-DjfAYMGG.css","assets/star-Dn0V0Cnq.js","assets/ExperimentalAgentOnboardingModal-AsmRLMxm.js","assets/ExperimentalAgentOnboardingModal-BNpveCEk.css","assets/AgentDetailView-ChIKbcEi.css"])))=>i.map(i=>d[i]);
2
- import{c as Ke,A as Be,C as tt,Z as sa,s as na,r as bt,F as vt,f as la,a as ia,b as Kt,B as jt,u as Ut,d as rt,e as ra,g as oa,h as ca,i as da,j as Rt,k as st,P as ua,l as ma,m as ga,n as ha,o as Et,G as pa,S as xa,L as ot,T as ct,R as He,X as Mt,p as ba,q as va,t as Je,v as ja,w as _t,x as fa,y as Na,z as Se,D as dt,E as ya,H as $t,N as Lt,I as It,J as ka,M as wa,K as Ca,O as Sa,Q as Aa,U as ut,V as Pt,W as Ta,_ as Ra,Y as Ea,$ as Qe,a0 as Ma,a1 as Ft,a2 as _a,a3 as $a,a4 as La}from"./index-tbwUVj8p.js";import{r as s,j as e,a as Ia}from"./vendor-react-K0fH_qHe.js";import{A as Pa,S as Fa,E as za,f as Da}from"./ExperimentalAgentOnboardingModal-AsmRLMxm.js";import{U as ft}from"./upload-D1y22Www.js";import{F as Oa}from"./folder-open-Bq_TweLR.js";import"./vendor-xterm-DzcZoU0P.js";/**
3
- * @license lucide-react v1.7.0 - ISC
4
- *
5
- * This source code is licensed under the ISC license.
6
- * See the LICENSE file in the root directory of this source tree.
7
- */const Ha=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],Ba=Ke("info",Ha);/**
8
- * @license lucide-react v1.7.0 - ISC
9
- *
10
- * This source code is licensed under the ISC license.
11
- * See the LICENSE file in the root directory of this source tree.
12
- */const Ga=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["rect",{x:"3",y:"4",width:"6",height:"6",rx:"1",key:"cif1o7"}]],Va=Ke("list-todo",Ga);/**
13
- * @license lucide-react v1.7.0 - ISC
14
- *
15
- * This source code is licensed under the ISC license.
16
- * See the LICENSE file in the root directory of this source tree.
17
- */const Wa=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],Ka=Ke("sliders-horizontal",Wa);/**
18
- * @license lucide-react v1.7.0 - ISC
19
- *
20
- * This source code is licensed under the ISC license.
21
- * See the LICENSE file in the root directory of this source tree.
22
- */const Ua=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Za=Ke("zoom-in",Ua);/**
23
- * @license lucide-react v1.7.0 - ISC
24
- *
25
- * This source code is licensed under the ISC license.
26
- * See the LICENSE file in the root directory of this source tree.
27
- */const qa=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Ya=Ke("zoom-out",qa);function zt(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function Oe(n){return n.toLocaleString()}function Ja({agents:n}){const{rows:i,totalInputTokens:h,totalOutputTokens:m,totalTokens:u}=s.useMemo(()=>{const o=n.map(c=>{const v=zt(c.totalInputTokens),f=zt(c.totalOutputTokens);return{id:c.id,name:c.name,inputTokens:v,outputTokens:f,totalTokens:v+f}}).sort((c,v)=>v.totalTokens-c.totalTokens||c.name.localeCompare(v.name)||c.id.localeCompare(v.id));return{rows:o,totalInputTokens:o.reduce((c,v)=>c+v.inputTokens,0),totalOutputTokens:o.reduce((c,v)=>c+v.outputTokens,0),totalTokens:o.reduce((c,v)=>c+v.totalTokens,0)}},[n]),g=u>0;return e.jsxs("section",{className:"agent-token-stats-panel","aria-label":"Agent token usage statistics",children:[e.jsx("header",{className:"agent-token-stats-panel__header",children:e.jsx("h3",{className:"agent-token-stats-panel__title",children:"Token Usage by Agent"})}),e.jsxs("div",{className:"agent-token-stats-panel__totals",role:"list","aria-label":"Token usage totals",children:[e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:"Input Tokens"}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:Oe(h)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:"Output Tokens"}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:Oe(m)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:"Combined Tokens"}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:Oe(u)})]})]}),g?e.jsx("div",{className:"agent-token-stats-panel__table-wrapper",children:e.jsxs("table",{className:"agent-token-stats-panel__table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:"Agent"}),e.jsx("th",{scope:"col",children:"Input"}),e.jsx("th",{scope:"col",children:"Output"}),e.jsx("th",{scope:"col",children:"Total"})]})}),e.jsx("tbody",{children:i.map(o=>e.jsxs("tr",{children:[e.jsxs("th",{scope:"row",className:"agent-token-stats-panel__agent-cell",children:[e.jsx("span",{className:"agent-token-stats-panel__agent-name",children:o.name}),e.jsx("span",{className:"agent-token-stats-panel__agent-id",children:o.id})]}),e.jsx("td",{children:Oe(o.inputTokens)}),e.jsx("td",{children:Oe(o.outputTokens)}),e.jsx("td",{className:"agent-token-stats-panel__total-cell",children:Oe(o.totalTokens)})]},o.id))})]})}):e.jsx("div",{className:"agent-token-stats-panel__empty",role:"status",children:"No token usage recorded yet. Token totals appear here once agents run."})]})}const Qa=[{icon:Be,label:"Active Agents",valueKey:"activeCount",className:"agent-metric-card--active"},{icon:Va,label:"Assigned Tasks",valueKey:"assignedTaskCount",className:"agent-metric-card--tasks"},{icon:tt,label:"Success Rate",valueKey:"successRate",className:"agent-metric-card--success"},{icon:sa,label:"Total Runs",valueKey:"completedRuns",className:"agent-metric-card--runs"}];function Xa({stats:n,className:i=""}){return n?e.jsx("div",{className:`agent-metrics-bar ${i}`.trim(),children:Qa.map(h=>{const m=h.valueKey==="successRate"?`${Math.round(n.successRate*100)}%`:n[h.valueKey];return e.jsxs("div",{className:`agent-metric-card ${h.className}`,children:[e.jsx(h.icon,{size:18}),e.jsxs("div",{className:"agent-metric-info",children:[e.jsx("span",{className:"agent-metric-value",children:m}),e.jsx("span",{className:"agent-metric-label",children:h.label})]})]},h.label)})}):null}const Dt=200;function es(n,i){const[h,m]=s.useState([]),[u,g]=s.useState(!1),o=s.useRef(null),c=s.useRef(0),v=s.useRef(n),f=s.useRef(i);return(v.current!==n||f.current!==i)&&(v.current=n,f.current=i,c.current++,o.current&&(o.current(),o.current=null),m([]),g(!1)),s.useEffect(()=>{if(!n){m([]),g(!1);return}const R=c.current;let C=`/api/tasks/${encodeURIComponent(n)}/logs/stream`;i&&(C+=`?projectId=${encodeURIComponent(i)}`);const k=na(C,{events:{"agent:log":F=>{if(c.current===R)try{const T=JSON.parse(F.data),M={type:T.type??"text",text:T.text??T.content??"",timestamp:T.timestamp,content:T.content};m(S=>{const _=[M,...S];return _.length>Dt?_.slice(0,Dt):_})}catch{}}},onOpen:()=>{c.current===R&&g(!0)},onError:()=>{c.current===R&&g(!1)}});return o.current=k,()=>{k(),o.current=null,c.current===R&&g(!1)}},[n,i]),{entries:h,isConnected:u}}const ts=5e3;function as({agent:n,projectId:i,onSelect:h,onOpenTaskLogs:m}){const{entries:u,isConnected:g}=es(n.taskId,i),[o,c]=s.useState(null);s.useEffect(()=>{if(!n.taskId){c(null);return}let S=!1,_;const x=async()=>{try{const P=await la(n.taskId,i);S||c(P)}catch{}finally{S||(_=setTimeout(x,ts))}};return x(),()=>{S=!0,_&&clearTimeout(_)}},[n.taskId,i]);const v=n.lastHeartbeatAt?Math.floor((Date.now()-new Date(n.lastHeartbeatAt).getTime())/1e3):0,f=(()=>{if(!n.lastHeartbeatAt)return null;const S=bt(n.runtimeConfig?.heartbeatIntervalMs),_=new Date(n.lastHeartbeatAt).getTime()+S,x=Math.round((_-Date.now())/1e3);return Number.isFinite(x)?x<=0?`Heartbeat overdue ${mt(-x)}`:`Next heartbeat in ${mt(x)}`:null})(),y=o?.steps?.[o.currentStep??0],R=o?.steps?.length??0,C=(o?.currentStep??0)+1,k=o?.modelId,F=()=>{h&&h(n.id)},T=S=>{S.stopPropagation(),n.taskId&&m&&m(n.taskId)},M=S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),F())};return e.jsxs("div",{className:"live-agent-card",onClick:F,onKeyDown:M,role:"button",tabIndex:0,"aria-label":`Select agent ${n.name}`,children:[e.jsxs("div",{className:"live-agent-card-header",children:[e.jsxs("div",{className:"live-agent-card-name",children:[e.jsx("span",{className:`status-dot ${n.state==="running"?"status-dot--pending":"status-dot--online"}`,"aria-hidden":"true"}),e.jsx("span",{children:n.name})]}),n.taskId&&e.jsx("span",{className:"live-agent-task badge",children:n.taskId})]}),e.jsx("div",{className:"live-agent-card-transcript",children:u.length===0?e.jsx("div",{className:"live-agent-card-empty",children:n.taskId?y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"live-agent-card-status",children:["Step ",C,R?`/${R}`:"",": ",y.name]}),k&&e.jsx("div",{className:"live-agent-card-status-sub",children:k}),e.jsx("div",{className:"live-agent-card-status-sub",children:g?"Waiting for output...":"Connecting to log stream..."})]}):e.jsx("span",{children:g?"Waiting for output...":"Connecting..."}):e.jsx("span",{children:n.state==="running"?"Starting...":"Idle — no task assigned"})}):u.slice(0,20).map((S,_)=>e.jsx("div",{className:"live-agent-card-line",children:S.text},_))}),e.jsxs("div",{className:"live-agent-card-footer",children:[e.jsxs("div",{className:"live-agent-card-footer-meta",children:[e.jsx("span",{className:"text-secondary",title:"Time since last heartbeat",children:mt(v)}),f&&e.jsx("span",{className:"live-agent-card-next-heartbeat",title:f,children:f})]}),e.jsxs("div",{className:"live-agent-card-footer-actions",children:[n.taskId&&m&&e.jsxs("button",{type:"button",className:"live-agent-card-logs-btn",onClick:T,title:"View live run logs","aria-label":`View live logs for ${n.taskId}`,children:[e.jsx(vt,{size:12}),e.jsx("span",{children:"Live logs"})]}),g&&e.jsx(Be,{size:12,className:"live-agent-streaming-dot"})]})]})]})}function mt(n){return n<60?`${n}s`:n<3600?`${Math.floor(n/60)}m ${n%60}s`:`${Math.floor(n/3600)}h ${Math.floor(n%3600/60)}m`}function ss({agents:n,projectId:i,onAgentSelect:h,onOpenTaskLogs:m,className:u=""}){const g=Array.from(new Map(n.map(o=>[o.id,o])).values());return g.length===0?null:e.jsxs("div",{className:`active-agents-panel ${u}`.trim(),children:[e.jsxs("div",{className:"active-agents-panel-header",children:[e.jsx(Be,{size:16}),e.jsxs("span",{children:["Active Agents (",g.length,")"]})]}),e.jsx("div",{className:"active-agents-grid",children:g.map(o=>e.jsx(as,{agent:o,projectId:i,onSelect:h,onOpenTaskLogs:m},o.id))})]})}function ns({stats:n,activeAgents:i,projectId:h,isOpen:m,onToggle:u,onSelectAgent:g,onOpenTaskLogs:o}){return e.jsxs("section",{className:"agents-overview-bar","aria-label":"Agents overview",children:[e.jsxs("button",{type:"button",className:"agents-overview-bar__toggle","aria-expanded":m,onClick:u,children:[e.jsxs("span",{className:"agents-overview-bar__title-wrap",children:[m?e.jsx(ia,{size:16,"aria-hidden":"true"}):e.jsx(Kt,{size:16,"aria-hidden":"true"}),e.jsx("span",{className:"agents-overview-bar__title",children:"Overview"})]}),e.jsxs("span",{className:"agents-overview-bar__meta text-secondary",children:[i.filter(c=>c.state==="active").length," active · ",i.filter(c=>c.state==="running").length," running"]})]}),m?e.jsxs("div",{className:"agents-overview-bar__content",children:[e.jsx(Xa,{stats:n,className:"agents-overview-bar__metrics"}),e.jsx(ss,{agents:i,projectId:h,onAgentSelect:g,onOpenTaskLogs:o,className:"agents-overview-bar__active-panel"})]}):null]})}function gt({title:n="No agents found",description:i="Create an agent to get started",ctaLabel:h="Create Agent",onCtaClick:m}){return e.jsxs("div",{className:"agent-empty",children:[e.jsx(jt,{size:48,opacity:.3,className:"agent-empty-state__icon"}),e.jsx("p",{className:"agent-empty-state__title",children:n}),e.jsx("p",{className:"agent-empty-state__description text-secondary",children:i}),m?e.jsx("button",{type:"button",className:"btn btn-task-create btn-sm",onClick:m,children:h}):null]})}const Ot=3,ht=1e3;function ls({isOpen:n,onClose:i,onGenerated:h,projectId:m}){Ut(n);const[u,g]=s.useState(""),[o,c]=s.useState({type:"input"}),[v,f]=s.useState(null),[y,R]=s.useState(!1),C=s.useRef(null),k=s.useRef(null);s.useEffect(()=>{n&&o.type==="input"&&k.current?.focus()},[n,o.type]),s.useEffect(()=>{if(!n&&C.current){const x=C.current;C.current=null,rt(x,m).catch(()=>{})}},[n,m]),s.useEffect(()=>{if(!n)return;const x=P=>{P.key==="Escape"&&F()};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[n]);const F=s.useCallback(()=>{if(C.current){const x=C.current;C.current=null,rt(x,m).catch(()=>{})}g(""),c({type:"input"}),f(null),R(!1),i()},[i,m]),T=s.useCallback(async()=>{if(!(!u.trim()||u.trim().length<Ot)){f(null),c({type:"loading"});try{const{sessionId:x}=await ra(u.trim(),m);C.current=x;const{spec:P}=await oa(x,m);c({type:"preview",spec:P,sessionId:x})}catch(x){const P=x instanceof Error?x.message:"Failed to generate agent specification";P.includes("429")||P.toLowerCase().includes("rate limit")?f("Too many requests. Please wait a moment and try again."):f(P),c({type:"input"}),C.current=null}}},[u,m]),M=s.useCallback(async()=>{if(C.current){const x=C.current;C.current=null;try{await rt(x,m)}catch{}}await T()},[T,m]),S=s.useCallback(()=>{o.type==="preview"&&(C.current=null,h(o.spec),g(""),c({type:"input"}),f(null),R(!1),i())},[o,h,i]);if(!n)return null;const _=u.trim().length>=Ot&&u.trim().length<=ht;return e.jsx("div",{className:"agent-dialog-overlay",onClick:x=>{x.target===x.currentTarget&&F()},children:e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":"Generate agent with AI",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsxs("span",{className:"agent-dialog-header-title",children:[e.jsx("span",{className:"agent-dialog-header-sparkle",children:"✨"}),"Generate Agent"]}),e.jsx("button",{className:"modal-close",onClick:F,"aria-label":"Close",children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[v&&e.jsx("div",{className:"agent-dialog-error-banner",children:v}),o.type==="input"&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:"Describe your agent's role and the AI will generate a complete specification including system prompt, suggested configuration, and more."}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-role-description",children:"Role Description"}),e.jsx("textarea",{ref:k,id:"agent-role-description",className:"input agent-dialog-textarea",rows:4,placeholder:'e.g. "Senior frontend code reviewer who specializes in React accessibility"',value:u,onChange:x=>g(x.target.value),onKeyDown:x=>{x.key==="Enter"&&!x.shiftKey&&_&&(x.preventDefault(),T())},maxLength:ht,"aria-describedby":"role-description-hint"}),e.jsxs("div",{id:"role-description-hint",className:"agent-dialog-hint",children:[e.jsx("span",{children:"Describe what your agent should do"}),e.jsxs("span",{children:[u.length,"/",ht]})]})]})]}),o.type==="loading"&&e.jsxs("div",{className:"agent-dialog-loading-center",children:[e.jsx("div",{className:"agent-dialog-spinner spin"}),e.jsx("p",{className:"agent-dialog-loading-text",children:"Generating agent specification..."})]}),o.type==="preview"&&e.jsxs("div",{children:[e.jsxs("div",{className:"agent-dialog-summary agent-dialog-summary--spaced",children:[e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:"Title"}),e.jsxs("span",{className:"agent-dialog-summary-row-value",children:[o.spec.icon," ",o.spec.title]})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:"Role"}),e.jsx("span",{children:o.spec.role})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:"Description"}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--body",children:o.spec.description})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:"Thinking"}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--capitalize",children:o.spec.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:"Max Turns"}),e.jsx("span",{children:o.spec.maxTurns})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{children:["System Prompt",e.jsx("button",{type:"button",className:"agent-dialog-expand-btn",onClick:()=>R(!y),children:y?"Collapse":"Expand"})]}),e.jsxs("div",{className:`agent-generation-prompt-box${y?"":" agent-generation-prompt-box--collapsed"}`,children:[o.spec.systemPrompt,!y&&o.spec.systemPrompt.length>500&&e.jsx("div",{className:"agent-generation-prompt-fade"})]})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[e.jsx("button",{className:"btn",onClick:F,children:"Cancel"}),o.type==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void T(),disabled:!_,children:"Generate"}),o.type==="preview"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:()=>void M(),children:"Regenerate"}),e.jsx("button",{className:"btn btn-task-create",onClick:S,children:"Use This"})]})]})]})})}const Ht=[{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:"✦"}],Bt=new Set(["triage","executor","reviewer","merger","scheduler","engineer","custom"]);function is({isOpen:n,onClose:i,onCreated:h,projectId:m,prefillDraft:u=null,agentOnboardingEnabled:g=!1,existingAgents:o=[],onPrefillDraft:c}){const[v,f]=s.useState(0),[y,R]=s.useState("presets"),[C,k]=s.useState(""),[F,T]=s.useState(""),[M,S]=s.useState(""),[_,x]=s.useState("custom"),[P,$]=s.useState(""),[X,Ae]=s.useState(""),[ue,ee]=s.useState(""),[oe,me]=s.useState(""),[z,N]=s.useState(""),[je,fe]=s.useState(""),[A,te]=s.useState({model:"",thinkingLevel:"off",maxTurns:1e3}),[ae,Te]=s.useState(null),[U,Z]=s.useState([]),[Ne,B]=s.useState(!1),[Q,ge]=s.useState(null),[se,K]=s.useState(!1),[ne,re]=s.useState(!1),[ce,he]=s.useState([]),[Re,_e]=s.useState(!1),[ye,pe]=s.useState([]),[xe,$e]=s.useState([]),[L,O]=s.useState("model"),[be,q]=s.useState(""),[Ee,le]=s.useState([]),[Ie,ie]=s.useState(!1),[l,b]=s.useState([]),[I,Y]=s.useState(!1);s.useEffect(()=>{n&&(_e(!0),ca().then(a=>{he(a.models),pe(a.favoriteProviders),$e(a.favoriteModels)}).catch(()=>{}).finally(()=>_e(!1)))},[n]),s.useEffect(()=>{n&&(Y(!0),b([]),da(void 0,m).then(a=>{b(a)}).catch(()=>{b([])}).finally(()=>Y(!1)))},[n,m]),s.useEffect(()=>{if(!n)return;const a=ma;if(typeof a!="function"){le([]),ie(!1);return}ie(!0),le([]),a(m).then(w=>{le(w)}).catch(()=>{le([])}).finally(()=>ie(!1))},[n,m]);const E=A.model.includes("/")?A.model:"",G=s.useCallback(a=>{const w=Bt.has(a.role)?a.role:"custom";k(a.title),T(a.description),S(a.icon),x(w),ee(a.systemPrompt),te(D=>({...D,thinkingLevel:a.thinkingLevel,maxTurns:a.maxTurns})),K(!1),f(1)},[]),Le=s.useCallback(a=>{te(w=>({...w,model:a}))},[]),de=s.useCallback(a=>{O(a),a==="model"&&q("")},[]),Pe=s.useCallback(async a=>{const w=ye,H=w.includes(a)?w.filter(Ce=>Ce!==a):[a,...w];pe(H);try{await Rt({favoriteProviders:H,favoriteModels:xe})}catch{pe(w)}},[ye,xe]),Ue=s.useCallback(async a=>{const w=xe,H=w.includes(a)?w.filter(Ce=>Ce!==a):[a,...w];$e(H);try{await Rt({favoriteProviders:ye,favoriteModels:H})}catch{$e(w)}},[ye,xe]),Fe=s.useCallback(a=>{Te(a.id),k(a.name),S(a.icon),T(a.description??a.title),x(a.role),N(a.soul??""),ee(a.instructionsText??""),f(1)},[]),ke=s.useCallback(a=>{const w=a.runtimeHint?.trim()??"",D=a.model?.trim()||a.modelHint?.trim()||"";f(1),R("custom"),k(a.name??""),T(a.title??""),S(a.icon??""),x(Bt.has(a.role)?a.role:"custom"),$(a.reportsTo??""),ee(a.instructionsText??""),me(a.heartbeatProcedurePath??""),N(a.soul??""),fe(a.memory??""),Z(Array.isArray(a.skills)?a.skills:[]),te(H=>({...H,model:w?"":D,thinkingLevel:a.thinkingLevel??H.thinkingLevel,maxTurns:a.maxTurns??H.maxTurns})),w?(O("runtime"),q(w)):(O("model"),q(""))},[]);if(s.useEffect(()=>{!n||!u||ke(u)},[n,u,ke]),!n)return null;const ze=()=>{f(0),R("presets"),k(""),T(""),S(""),x("custom"),$(""),Ae(""),ee(""),me(""),N(""),fe(""),te({model:"",thinkingLevel:"off",maxTurns:1e3}),O("model"),q(""),Te(null),Z([]),ge(null),K(!1),re(!1),i()},we=async()=>{if(C.trim()){B(!0),ge(null);try{const a={};L==="runtime"?be.trim()&&(a.runtimeHint=be.trim()):A.model.trim()&&(a.model=A.model.trim()),A.thinkingLevel!=="off"&&(a.thinkingLevel=A.thinkingLevel),A.maxTurns!==1e3&&(a.maxTurns=A.maxTurns),await ha({name:C.trim(),role:_,...F.trim()?{title:F.trim()}:{},...M.trim()?{icon:M.trim()}:{},...P.trim()?{reportsTo:P.trim()}:{},...X.trim()?{instructionsPath:X.trim()}:{},...ue.trim()?{instructionsText:ue.trim()}:{},...oe.trim()?{heartbeatProcedurePath:oe.trim()}:{},...z.trim()?{soul:z.trim()}:{},...je.trim()?{memory:je.trim()}:{},...Object.keys(a).length>0?{runtimeConfig:a}:{},...U.length>0?{metadata:{skills:U}}:{}},m),ze(),h()}catch(a){ge(a instanceof Error?a.message:"Failed to create agent")}finally{B(!1)}}},Me=Ht.find(a=>a.value===_),De=P.trim(),Ge=De?l.find(a=>a.id===De):void 0,Ze=be?Ee.find(a=>a.runtimeId===be):void 0,qe=a=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{id:a,children:"Runtime Source"}),e.jsxs("div",{className:"agent-runtime-mode-toggle",role:"radiogroup","aria-labelledby":a,children:[e.jsxs("label",{className:`agent-runtime-mode-option${L==="model"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:a,value:"model",checked:L==="model",onChange:()=>de("model")}),e.jsx("span",{children:"Built-in Model"})]}),e.jsxs("label",{className:`agent-runtime-mode-option${L==="runtime"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:a,value:"runtime",checked:L==="runtime",onChange:()=>de("runtime")}),e.jsx("span",{children:"Plugin Runtime"})]})]})]}),L==="model"?e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:"Model"}),Re?e.jsx("div",{className:"agent-dialog-loading",children:"Loading models…"}):e.jsx(ga,{id:"agent-model",label:"Model",value:E,onChange:Le,models:ce,placeholder:"Select a model…",favoriteProviders:ye,onToggleFavorite:Pe,favoriteModels:xe,onToggleModelFavorite:Ue})]}):e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:"Runtime"}),Ie?e.jsx("div",{className:"agent-dialog-loading",children:"Loading runtimes…"}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:be,onChange:w=>q(w.target.value),children:[e.jsx("option",{value:"",children:Ee.length>0?"Select a plugin runtime…":"No plugin runtimes available"}),Ee.map(w=>e.jsx("option",{value:w.runtimeId,children:w.description?`${w.name} — ${w.description}`:w.name},`${w.pluginId}:${w.runtimeId}`))]})]})]});return Ia.createPortal(e.jsxs("div",{className:"agent-dialog-overlay",onClick:a=>{a.target===a.currentTarget&&ze()},children:[e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":"Create new agent",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:"New Agent"}),e.jsx("button",{className:"btn-icon",onClick:ze,"aria-label":"Close",children:"×"})]}),e.jsx("div",{className:"agent-dialog-steps",children:[0,1,2].map(a=>e.jsx("div",{className:`agent-dialog-step${a===v?" active":a<v?" completed":""}`,"aria-label":`Step ${a+1}`},a))}),e.jsxs("div",{className:"agent-dialog-body",children:[v===0&&e.jsxs("div",{children:[g&&e.jsx("div",{className:"agent-dialog-step-zero-actions",children:e.jsx("button",{type:"button",className:"btn agent-dialog-interview-btn",onClick:()=>re(!0),children:"AI Interview"})}),e.jsxs("div",{className:"agent-dialog-tabs",role:"tablist","aria-label":"Agent setup mode",children:[e.jsx("button",{id:"agent-dialog-tab-presets",type:"button",role:"tab","aria-controls":"agent-dialog-panel-presets","aria-selected":y==="presets",tabIndex:y==="presets"?0:-1,className:`agent-dialog-tab${y==="presets"?" active":""}`,onClick:()=>R("presets"),"data-testid":"agent-dialog-tab-presets",children:"Preset personas"}),e.jsx("button",{id:"agent-dialog-tab-custom",type:"button",role:"tab","aria-controls":"agent-dialog-panel-custom","aria-selected":y==="custom",tabIndex:y==="custom"?0:-1,className:`agent-dialog-tab${y==="custom"?" active":""}`,onClick:()=>R("custom"),"data-testid":"agent-dialog-tab-custom",children:"Custom agent"})]}),y==="presets"&&e.jsx("div",{id:"agent-dialog-panel-presets",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-presets",children:e.jsxs("div",{className:"agent-presets",children:[e.jsx("div",{className:"agent-presets-header",children:"Choose a preset persona to prefill role, identity, soul, and instructions"}),e.jsx("div",{className:"agent-presets-grid",children:Pa.map(a=>e.jsxs("button",{type:"button",className:`agent-preset-card${ae===a.id?" selected":""}`,"data-testid":`preset-${a.id}`,onClick:()=>Fe(a),title:a.title,children:[e.jsx("span",{className:"agent-preset-icon",children:e.jsx(st,{agent:{id:a.id,icon:a.icon,name:a.name},size:28})}),e.jsx("span",{className:"agent-preset-name",children:a.name}),e.jsx("span",{className:"agent-preset-role",children:a.role}),a.description&&e.jsx("span",{className:"agent-preset-description",children:a.description})]},a.id))})]})}),y==="custom"&&e.jsxs("div",{id:"agent-dialog-panel-custom",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-custom",children:[e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:"Identity"}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-name",children:["Name ",!ae&&e.jsx("span",{className:"agent-dialog-required",children:"*"})]}),e.jsx("input",{id:"agent-name",type:"text",className:"input",placeholder:"e.g. Frontend Reviewer",value:C,onChange:a=>k(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field agent-dialog-field--title",children:[e.jsxs("label",{htmlFor:"agent-title",children:["Title ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:"e.g. Senior Code Reviewer",value:F,onChange:a=>T(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-icon",children:["Icon ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:"e.g. 🤖",value:M,onChange:a=>S(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:"Role"}),e.jsx("div",{className:"agent-role-grid",children:Ht.map(a=>e.jsxs("button",{type:"button",className:`agent-role-option${_===a.value?" selected":""}`,onClick:()=>x(a.value),children:[e.jsx("span",{className:"agent-role-option-icon",children:a.icon}),e.jsx("span",{className:"agent-role-option-label",children:a.label})]},a.value))})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:"Configuration"}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-reports-to",children:["Reports To ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:P,onChange:a=>$(a.target.value),disabled:I,children:[e.jsx("option",{value:"",children:"No manager"}),l.map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.id,")"]},a.id))]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-soul",children:["Soul ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("textarea",{id:"agent-soul",className:"input",rows:2,placeholder:"Describe the agent's personality and communication style...",value:z,onChange:a=>N(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-memory",children:["Agent Memory ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("textarea",{id:"agent-memory",className:"input",rows:2,placeholder:"Private to this agent — durable preferences, operating habits, and context it should carry across tasks...",value:je,onChange:a=>fe(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-path",children:["Instructions Path ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("input",{id:"agent-instructions-path",type:"text",className:"input",placeholder:"e.g. .fusion/agents/reviewer.md",value:X,onChange:a=>Ae(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-heartbeat-procedure-path",children:["Heartbeat Procedure Path ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("input",{id:"agent-heartbeat-procedure-path",type:"text",className:"input",placeholder:"e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md",value:oe,onChange:a=>me(a.target.value)}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-field-hint",children:"Path to the agent's heartbeat procedure path, typically .fusion/agents/ceo-agent2736/HEARTBEAT.md. Legacy id-only default paths still work."})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-text",children:["Inline Instructions ",e.jsx("span",{className:"agent-dialog-optional",children:"(optional)"})]}),e.jsx("textarea",{id:"agent-instructions-text",className:"input",rows:4,placeholder:"Add custom behavior instructions...",value:ue,onChange:a=>ee(a.target.value)})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:"Runtime"}),qe("agent-runtime-source-step-0")]}),e.jsxs("div",{className:"agent-dialog-ai-generate",children:[e.jsxs("button",{type:"button",className:"btn btn--ai-generate",onClick:()=>K(!0),children:[e.jsx("span",{children:"✨"}),"Generate with AI"]}),e.jsx("p",{className:"agent-dialog-ai-hint",children:"Describe your agent's role and let AI generate a specification"})]})]})]}),v===1&&e.jsxs("div",{children:[qe("agent-runtime-source-step-1"),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-thinking",children:"Thinking Level"}),e.jsxs("select",{id:"agent-thinking",className:"select",value:A.thinkingLevel,onChange:a=>te(w=>({...w,thinkingLevel:a.target.value})),children:[e.jsx("option",{value:"off",children:"Off"}),e.jsx("option",{value:"minimal",children:"Minimal"}),e.jsx("option",{value:"low",children:"Low"}),e.jsx("option",{value:"medium",children:"Medium"}),e.jsx("option",{value:"high",children:"High"})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-max-turns",children:"Max Turns"}),e.jsx("input",{id:"agent-max-turns",type:"number",className:"input",min:1,max:2e3,value:A.maxTurns,onChange:a=>te(w=>({...w,maxTurns:Math.max(1,parseInt(a.target.value,10)||1)}))})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx(Fa,{id:"agent-skills",label:"Skills",value:U,onChange:Z,projectId:m}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-skills-hint",children:"Optional skills to assign to this agent"})]})]}),v===2&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:"Review your agent configuration before creating."}),e.jsxs("div",{className:"agent-dialog-summary",children:[e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:"Name"}),e.jsxs("span",{className:"agent-dialog-summary-row-value",children:[M&&e.jsx("span",{className:"agent-dialog-icon-prefix",children:M}),C]})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable agent-dialog-summary-row--title",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-title",children:"Title"}),e.jsx("input",{id:"agent-review-title",type:"text",className:"input",placeholder:"e.g. Senior Code Reviewer",value:F,onChange:a=>T(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:"Role"}),e.jsxs("span",{children:[Me?.icon," ",Me?.label]})]}),De&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:"Reports To"}),e.jsx("span",{children:Ge?`${Ge.name} (${Ge.id})`:De})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-soul",children:"Soul"}),e.jsx("textarea",{id:"agent-review-soul",className:"input",rows:2,placeholder:"Describe the agent's personality and communication style...",value:z,onChange:a=>N(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-heartbeat-procedure-path",children:"Heartbeat Procedure Path"}),e.jsx("input",{id:"agent-review-heartbeat-procedure-path",type:"text",className:"input",placeholder:"e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md",value:oe,onChange:a=>me(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-path",children:"Instructions Path"}),e.jsx("input",{id:"agent-review-instructions-path",type:"text",className:"input",placeholder:"e.g. .fusion/agents/reviewer.md",value:X,onChange:a=>Ae(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-text",children:"Inline Instructions"}),e.jsx("textarea",{id:"agent-review-instructions-text",className:"input",rows:4,placeholder:"Add custom behavior instructions...",value:ue,onChange:a=>ee(a.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:L==="runtime"?"Runtime":"Model"}),e.jsx("span",{children:L==="runtime"?Ze?Ze.name:e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:"Not selected"}):E?e.jsxs(e.Fragment,{children:[e.jsx(ua,{provider:E.split("/")[0],size:"sm"})," ",(()=>{const a=E.indexOf("/"),w=E.slice(0,a),D=E.slice(a+1);return ce.find(Ce=>Ce.provider===w&&Ce.id===D)?.name||E})()]}):e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:"default"})})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:"Thinking"}),e.jsx("span",{className:"agent-dialog-summary-row-value--capitalize",children:A.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:"Max Turns"}),e.jsx("span",{children:A.maxTurns})]}),U.length>0&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:"Skills"}),e.jsxs("span",{children:[U.length," skill",U.length!==1?"s":""," selected"]})]})]}),Q&&e.jsx("p",{className:"agent-dialog-error",children:Q})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v>0&&e.jsx("button",{className:"btn",onClick:()=>f(a=>a-1),disabled:Ne,children:"Back"}),e.jsx("button",{className:"btn",onClick:ze,disabled:Ne,children:"Cancel"}),v<2?e.jsx("button",{className:"btn btn--primary",onClick:()=>f(a=>a+1),disabled:v===0&&!C.trim()&&!ae,children:"Next"}):e.jsx("button",{className:"btn btn--primary",onClick:()=>void we(),disabled:Ne||!C.trim(),children:Ne?"Creating...":"Create"})]})]}),e.jsx(ls,{isOpen:se,onClose:()=>K(!1),onGenerated:G,projectId:m}),e.jsx(za,{isOpen:ne,onClose:()=>re(!1),onUseDraft:a=>{c?.(a),c||ke(a),re(!1)},projectId:m,existingAgents:o,mode:"create"})]}),document.body)}function rs(n){const i=n.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\r?\n([\s\S]*))?$/);if(!i)throw new Error("Missing YAML frontmatter delimiters (---)");const h=i[1].split(/\r?\n/),m=i[2]??"",u={name:""},g=[];let o=!1;for(const c of h){const f=c.trimEnd().trim();if(!f)continue;if(f.startsWith("skills:")){o=!0;continue}if(o&&f.startsWith("- ")){g.push(f.slice(2).trim());continue}o=!1;const[y,...R]=f.split(":"),k=R.join(":").trim().replace(/^['"]|['"]$/g,"");y==="name"&&(u.name=k),y==="title"&&(u.title=k),y==="icon"&&(u.icon=k),y==="role"&&(u.role=k),y==="reportsTo"&&(u.reportsTo=k)}if(!u.name)throw new Error("Missing required field: name");return g.length>0&&(u.skills=g),m.trim().length>0&&(u.instructionBody=m),u}function os({isOpen:n,onClose:i,onImported:h,projectId:m,initialInputMethod:u="paste"}){Ut(n);const[g,o]=s.useState("input"),[c,v]=s.useState(u),[f,y]=s.useState(""),[R,C]=s.useState([]),[k,F]=s.useState("Unknown"),[T,M]=s.useState([]),[S,_]=s.useState([]),[x,P]=s.useState([]),[$,X]=s.useState([]),[Ae,ue]=s.useState(!1),[ee,oe]=s.useState(!1),[me,z]=s.useState(null),[N,je]=s.useState(null),[fe,A]=s.useState(null),te=s.useRef(null),ae=s.useRef(null),[Te,U]=s.useState([]),[Z,Ne]=s.useState(""),[B,Q]=s.useState(null),[ge,se]=s.useState(!1),[K,ne]=s.useState(null),re=s.useRef(!1);s.useEffect(()=>{c==="browse"&&!re.current&&!ge&&(re.current=!0,se(!0),ne(null),Et().then(l=>{l.error?ne(l.error):l.companies.length>0?U(l.companies):ne("No companies available")}).catch(l=>{ne(l instanceof Error?l.message:"Failed to load companies")}).finally(()=>{se(!1)}))},[c,ge]);const ce=s.useCallback(()=>{re.current=!0,ne(null),U([]),Q(null),se(!0),Et().then(l=>{l.error?ne(l.error):l.companies.length>0?U(l.companies):ne("No companies available")}).catch(l=>{ne(l instanceof Error?l.message:"Failed to load companies")}).finally(()=>{se(!1)})},[]),he=s.useCallback(()=>{o("input"),v(u),y(""),C([]),F("Unknown"),M([]),_([]),P([]),X([]),ue(!1),oe(!1),z(null),je(null),A(null),U([]),Ne(""),Q(null),se(!1),ne(null),re.current=!1},[u]),Re=s.useCallback(()=>{he(),i()},[he,i]),_e=s.useCallback(l=>{const b=l.target.files?.[0];if(!b)return;const I=new FileReader;I.onload=Y=>{const E=Y.target?.result;v("file"),C([]),y(E),z(null)},I.onerror=()=>{z("Failed to read file")},I.readAsText(b),l.target.value=""},[]),ye=s.useCallback(async l=>{const b=Array.from(l.target.files??[]);if(b.length!==0)try{const I=b.filter(E=>(E.webkitRelativePath||E.name).toLowerCase().endsWith("agents.md")).sort((E,G)=>{const Le=E.webkitRelativePath||E.name,de=G.webkitRelativePath||G.name;return Le.localeCompare(de)});if(I.length===0){z("Selected directory has no AGENTS.md files");return}const Y=[];for(const E of I){const G=await E.text();Y.push(rs(G))}v("directory"),C(Y),y(""),z(null)}catch{z("Failed to parse AGENTS.md files from selected directory")}finally{l.target.value=""}},[]);function pe(l){if(!m)return`/api${l}`;const b=l.includes("?")?"&":"?";return`/api${l}${b}projectId=${encodeURIComponent(m)}`}const xe=s.useCallback(async()=>{if(c==="directory"&&R.length===0){z("Please select a directory containing AGENTS.md files");return}if(c==="browse"&&!B){z("Please select a company from the catalog");return}if(c!=="directory"&&c!=="browse"&&!f.trim()){z("Please provide manifest content");return}ue(!0),z(null);try{let l;c==="directory"?l={agents:R,dryRun:!0}:c==="browse"&&B?l={importSource:"companies.sh",companySlug:B.slug,dryRun:!0}:l={manifest:f,dryRun:!0};const b=await fetch(pe("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(!b.ok){const G=await b.json();throw new Error(G.error??`Parse failed (${b.status})`)}const I=await b.json(),Y=I.agents&&I.agents.length>0?I.agents:I.created.map(G=>({name:G,role:"custom"})),E=Array.isArray(I.skills)?I.skills:[];F(I.companyName??"Unknown"),M(Y),_(E),P(Y.map(G=>G.name)),X(E.map(G=>G.name)),o("preview")}catch(l){z(l instanceof Error?l.message:"Failed to parse manifest")}finally{ue(!1)}},[c,R,f,B,m]),$e=s.useCallback(async()=>{oe(!0),A(null);try{let l;c==="directory"?l={agents:R,skipExisting:!0,selectedAgents:x,selectedSkills:$}:c==="browse"&&B?l={importSource:"companies.sh",companySlug:B.slug,skipExisting:!0,selectedAgents:x,selectedSkills:$}:l={manifest:f,skipExisting:!0,selectedAgents:x,selectedSkills:$};const b=await fetch(pe("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(!b.ok){const Y=await b.json();throw new Error(Y.error??`Import failed (${b.status})`)}const I=await b.json();je(I),o("result"),h()}catch(l){A(l instanceof Error?l.message:"Failed to import agents")}finally{oe(!1)}},[c,R,f,B,x,$,m,h]),L=x.length,O=$.length,be=`${L} Agent${L!==1?"s":""}`,q=`${O} Skill${O!==1?"s":""}`,Ee=L>0&&O>0?`${be} + ${q}`:O>0?q:be,le=L>0&&O>0?`Importing ${L} agent${L!==1?"s":""} and ${O} skill${O!==1?"s":""}...`:O>0?`Importing ${O} skill${O!==1?"s":""}...`:`Importing ${L} agent${L!==1?"s":""}...`,Ie=l=>{P(b=>b.includes(l)?b.filter(I=>I!==l):[...b,l])},ie=l=>{X(b=>b.includes(l)?b.filter(I=>I!==l):[...b,l])};return n?e.jsx("div",{className:"agent-dialog-overlay",onClick:l=>{l.target===l.currentTarget&&Re()},children:e.jsxs("div",{className:"agent-dialog agent-import-dialog",role:"dialog","aria-modal":"true","aria-label":"Import agents",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:"Import Agents"}),e.jsx("button",{className:"modal-close",onClick:Re,"aria-label":"Close",children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[g==="input"&&e.jsxs("div",{className:"agent-import-input",children:[e.jsx("p",{className:"agent-import-description",children:"Import agents from an Agent Companies package. Browse the companies.sh catalog to discover published agents, upload an AGENTS.md file, select a directory, or paste manifest content."}),e.jsxs("div",{className:"agent-import-file-upload",children:[e.jsx("input",{ref:te,type:"file",accept:".md,.txt",onChange:_e,className:"agent-import-file-input","aria-label":"Upload agent manifest file"}),e.jsx("input",{ref:ae,type:"file",webkitdirectory:"",multiple:!0,onChange:ye,className:"agent-import-file-input","aria-label":"Select directory"}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>te.current?.click(),children:[e.jsx(ft,{size:16}),"Choose File"]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>ae.current?.click(),children:[e.jsx(Oa,{size:16}),"Select Directory"]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>{v("browse"),C([]),y(""),Q(null),z(null)},children:[e.jsx(pa,{size:16}),"Browse Catalog"]}),e.jsx("span",{className:"agent-import-file-hint",children:".md and .txt files supported"})]}),c==="browse"&&e.jsxs("div",{className:"agent-import-browse",children:[e.jsxs("div",{className:"agent-import-browse-header",children:[e.jsxs("div",{className:"agent-import-browse-search",children:[e.jsx(xa,{size:16,className:"agent-import-browse-search-icon"}),e.jsx("input",{type:"text",className:"agent-import-browse-search-input",placeholder:"Search companies...",value:Z,onChange:l=>Ne(l.target.value),"aria-label":"Search companies"})]}),B&&e.jsxs("div",{className:"agent-import-browse-selected",children:[e.jsx("span",{className:"agent-import-browse-selected-label",children:"Selected:"}),e.jsx("span",{className:"agent-import-browse-selected-name",children:B.name}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Q(null),children:"Change"})]})]}),ge&&e.jsxs("div",{className:"agent-import-browse-loading",children:[e.jsx(ot,{size:20,className:"spin"}),e.jsx("span",{children:"Loading companies..."})]}),K&&e.jsxs("div",{className:"agent-import-browse-error",children:[e.jsx(ct,{size:16}),e.jsx("span",{children:K}),e.jsxs("button",{type:"button",className:"btn btn-sm",onClick:ce,children:[e.jsx(He,{size:14}),"Retry"]})]}),!ge&&!K&&e.jsxs("div",{className:"agent-import-browse-list",children:[Te.filter(l=>Z===""||l.name.toLowerCase().includes(Z.toLowerCase())||(l.tagline?.toLowerCase().includes(Z.toLowerCase())??!1)).map(l=>e.jsxs("div",{className:`agent-import-browse-item ${B?.slug===l.slug?"agent-import-browse-item--selected":""}`,onClick:()=>Q(l),role:"button",tabIndex:0,onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&Q(l)},children:[e.jsxs("div",{className:"agent-import-browse-item-header",children:[e.jsx("span",{className:"agent-import-browse-item-name",children:l.name}),l.installs!==void 0&&e.jsxs("span",{className:"agent-import-browse-item-installs",children:[l.installs.toLocaleString()," installs"]})]}),l.tagline&&e.jsx("span",{className:"agent-import-browse-item-tagline",children:l.tagline}),l.repo&&e.jsx("span",{className:"agent-import-browse-item-repo",children:l.repo})]},l.slug)),Te.filter(l=>Z===""||l.name.toLowerCase().includes(Z.toLowerCase())||(l.tagline?.toLowerCase().includes(Z.toLowerCase())??!1)).length===0&&e.jsx("p",{className:"agent-import-browse-empty",children:Z?"No companies match your search":"No companies available"})]})]}),c!=="browse"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-divider",children:e.jsx("span",{children:"or paste manifest content"})}),e.jsx("textarea",{className:"agent-import-textarea",placeholder:`---
28
- name: CEO
29
- title: Chief Executive Officer
30
- reportsTo: null
31
- skills:
32
- - review
33
- ---
34
- Agent instructions go here...`,value:f,onChange:l=>{v("paste"),C([]),y(l.target.value),z(null)},rows:8,"aria-label":"Manifest content"})]}),e.jsxs("p",{className:"agent-import-file-hint",children:["Current input: ",c]}),me&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(ct,{size:14}),me]})]}),g==="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(vt,{size:14}),e.jsxs("span",{children:[T.length," agent",T.length!==1?"s":""," found"]})]}),T.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>P(T.map(l=>l.name)),children:"Select all agents"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>P([]),children:"Clear agents"})]}),T.length>0?e.jsx("div",{className:"agent-import-agent-list",children:T.map((l,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 ${l.name}`,checked:x.includes(l.name),onChange:()=>Ie(l.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:l.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:l.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[l.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[l.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:l.role}),l.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",l.reportsTo]}),l.skills&&l.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",l.skills.join(", ")]})]}),l.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[l.instructionsText.slice(0,100),l.instructionsText.length>100?"...":""]})]})]},b))}):e.jsx("p",{className:"agent-import-empty",children:"No agents found in the manifest."}),S.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(vt,{size:14}),e.jsxs("span",{children:[S.length," skill",S.length!==1?"s":""," found"]})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>X(S.map(l=>l.name)),children:"Select all skills"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>X([]),children:"Clear skills"})]}),e.jsx("div",{className:"agent-import-skill-list",children:S.map((l,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 ${l.name}`,checked:$.includes(l.name),onChange:()=>ie(l.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:l.name}),l.description&&e.jsx("span",{className:"agent-import-skill-description",children:l.description})]})]},`${l.name}-${b}`))})]}),fe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(ct,{size:14}),fe]})]}),g==="result"&&N&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(tt,{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((l,b)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(tt,{size:12}),e.jsx("span",{children:l.name})]},b))}),N.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:N.errors.map((l,b)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Mt,{size:12}),e.jsxs("span",{children:[l.name,": ",l.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((l,b)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(tt,{size:12}),e.jsx("span",{children:l.name})]},b))}),N.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:N.skills.errors.map((l,b)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Mt,{size:12}),e.jsxs("span",{children:[l.name,": ",l.error]})]},b))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[g==="preview"&&e.jsx("button",{className:"btn",onClick:()=>o("input"),disabled:ee,children:"Back"}),e.jsx("button",{className:"btn",onClick:Re,disabled:ee,children:g==="result"?"Close":"Cancel"}),g==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void xe(),disabled:Ae||(c==="directory"?R.length===0:c==="browse"?!B:!f.trim()),children:Ae?e.jsxs(e.Fragment,{children:[e.jsx(ot,{size:14,className:"spin"}),"Parsing..."]}):"Preview"}),g==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void $e(),disabled:ee||L===0&&O===0,children:ee?e.jsxs(e.Fragment,{children:[e.jsx(ot,{size:14,className:"spin"}),le]}):`Import ${Ee}`})]})]})}):null}const pt="fn-agent-org-chart-layout";function Gt(n){return n==="auto"||n==="horizontal"||n==="vertical"}const cs=768,ds={nodeWidth:220,siblingGap:24,rootGap:24,chartPadding:24},us={nodeWidth:160,siblingGap:8,rootGap:8,chartPadding:8};function Zt(n){return n.children.length===0?1:n.children.reduce((i,h)=>i+Zt(h),0)}function ms(n){return n<=cs?us:ds}function gs(n,i){const h=Zt(n);return h*i.nodeWidth+Math.max(0,h-1)*i.siblingGap}function hs(n,i=Number.POSITIVE_INFINITY){const h=ms(i);if(n.length===0)return h.nodeWidth;const u=n.map(o=>gs(o,h)).reduce((o,c)=>o+c,0),g=Math.max(0,n.length-1)*h.rootGap;return u+g+h.chartPadding*2}function Vt(n){const i=n.preference??"auto";if(i!=="auto")return i;const h=Number.isFinite(n.availableWidth)&&n.availableWidth>0?n.availableWidth:0;return h===0||n.tree.length<=1?"horizontal":hs(n.tree,h)>h?"vertical":"horizontal"}const Wt=s.lazy(()=>Ra(()=>import("./AgentDetailView-CWyOv8HJ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(n=>({default:n.AgentDetailView}))),Xe=[{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:"✦"}],xt=[.1,.25,.5,1,2,3,5,10],et=[.75,1,1.25,1.5];function Nt(n){switch(n){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"idle":default:return"agent-badge--idle"}}function yt(n,i){switch(i){case"running":return`${n}--running`;case"active":return`${n}--active`;case"paused":return`${n}--paused`;case"error":return`${n}--error`;case"idle":default:return`${n}--idle`}}function at(n){return n.children.length===0?1:n.children.reduce((i,h)=>i+at(h),0)}function kt(n,i){return n.state==="error"?{title:void 0,label:"Error"}:{title:i.reason??i.label,label:i.stateDerived?null:i.label}}function qt({node:n,onSelect:i,getHealthStatus:h,getRoleIcon:m,selectedAgentId:u}){const{agent:g,children:o}=n,c=h(g),v=kt(g,c),f=Nt(g.state),y=yt("org-chart-node-card",g.state),R=at(n),C={"--org-chart-subtree-leaves":String(R)},k=o.length>0?at(o[0]):1,F=o.length>0?at(o[o.length-1]):1,T={"--org-chart-first-child-leaves":String(k),"--org-chart-last-child-leaves":String(F)};return e.jsxs("div",{className:`org-chart-node${o.length>0?" org-chart-node--has-children":""}`,style:C,children:[e.jsxs("div",{className:`${y}${u===g.id?" agent-card--selected":""}`,onClick:()=>i(g.id),role:"button",tabIndex:0,onKeyDown:M=>{(M.key==="Enter"||M.key===" ")&&(M.key===" "&&M.preventDefault(),i(g.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(st,{agent:g,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:g.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${f}`,children:g.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:c.color},title:v.title,children:[c.icon,v.label&&e.jsx("span",{className:"text-secondary",children:v.label})]})]})]}),o.length>0&&e.jsx("div",{className:"org-chart-children",style:T,role:"group","aria-label":`${g.name} employees`,children:o.map(M=>e.jsx(qt,{node:M,onSelect:i,getHealthStatus:h,getRoleIcon:m,selectedAgentId:u},M.agent.id))})]})}function Ns({addToast:n,projectId:i,onOpenTaskLogs:h,agentOnboardingEnabled:m=!1}){const[u,g]=s.useState(!1),c=ba()==="mobile",[v,f]=s.useState("all"),{agents:y,stats:R,isLoading:C,loadAgents:k,refreshAgents:F}=va(i,{filterState:v,showSystemAgents:u}),[T,M]=s.useState(!1),[S,_]=s.useState(null),[x,P]=s.useState(!1),[$,X]=s.useState(null),[Ae,ue]=s.useState(null),ee=c&&!!$,[oe,me]=s.useState("dashboard"),[z,N]=s.useState(null),[je,fe]=s.useState(!1),[A,te]=s.useState(()=>{if(typeof window>"u")return"list";const t=Je("fn-agent-view",i);return t==="list"||t==="board"||t==="org"?t:"list"}),[ae,Te]=s.useState(()=>{if(typeof window>"u")return"auto";const t=Je(pt,i);return Gt(t)?t:"auto"}),[U,Z]=s.useState([]),[Ne,B]=s.useState(!1),[Q,ge]=s.useState(0),[se,K]=s.useState(!1),[ne,re]=s.useState(!1),[ce,he]=s.useState(1),Re=s.useRef(null),_e=s.useRef(null),{confirm:ye}=ja(),pe=s.useRef(null),xe=s.useId();s.useEffect(()=>{const t=Je("fn-agent-view",i);if(t==="list"||t==="board"||t==="org"){te(t);return}te("list")},[i]),s.useEffect(()=>{_t("fn-agent-view",A,i)},[A,i]),s.useEffect(()=>{const t=Je(pt,i);Te(Gt(t)?t:"auto")},[i]),s.useEffect(()=>{_t(pt,ae,i)},[ae,i]);const[$e,L]=s.useState(null),O=s.useRef(null),[be,q]=s.useState(null),[Ee,le]=s.useState(null),[Ie,ie]=s.useState({}),[l,b]=s.useState(1),[I,Y]=s.useState(!1),[E,G]=s.useState(new Set),[Le,de]=s.useState(new Map),Pe=s.useRef(!0);s.useEffect(()=>(Pe.current=!0,()=>{Pe.current=!1}),[]),s.useEffect(()=>{fa(i).then(t=>{Pe.current&&b(t.heartbeatMultiplier??1)}).catch(()=>{})},[i]);const Ue=s.useCallback(async t=>{const r=Number.isFinite(t)&&t>0?t:1;b(r),Y(!0);try{await Na({heartbeatMultiplier:r},i),n(`Heartbeat speed set to ×${r.toFixed(1)}`,"success")}catch(d){n(`Failed to save heartbeat multiplier: ${Se(d)}`,"error")}finally{Pe.current&&Y(!1)}},[i,n]),Fe=s.useMemo(()=>Le.size===0?y:y.map(t=>{const r=Le.get(t.id);return r?{...t,state:r}:t}),[y,Le]),ke=s.useMemo(()=>Fe.filter(t=>u||!dt(t)),[Fe,u]),ze=s.useMemo(()=>Fe.filter(t=>t.state!=="active"&&t.state!=="running"?!1:u||!dt(t)),[Fe,u]),we=s.useMemo(()=>{if(u)return U;const t=r=>dt(r.agent)?null:{...r,children:r.children.map(t).filter(d=>d!==null)};return U.map(t).filter(r=>r!==null)},[U,u]);s.useEffect(()=>{if(A!=="org")return;const t=_e.current;if(!t)return;const r=()=>{ge(t.clientWidth)};r();const d=typeof ResizeObserver<"u"?new ResizeObserver(r):null;return d?.observe(t),window.addEventListener("resize",r),()=>{d?.disconnect(),window.removeEventListener("resize",r)}},[A,we.length]),s.useEffect(()=>{if(A!=="org")return;let t=!1;return B(!0),ya(i,{includeEphemeral:u}).then(r=>{t||Z(r)}).catch(r=>{t||(n(`Failed to load org chart: ${Se(r)}`,"error"),Z([]))}).finally(()=>{t||B(!1)}),()=>{t=!0}},[A,i,u,n]),s.useEffect(()=>{const t=setInterval(()=>{k()},3e4);return()=>{clearInterval(t)}},[k]),s.useEffect(()=>{if(!se)return;const t=d=>{const j=d.target;j&&(Re.current?.contains(j)||pe.current?.contains(j)||K(!1))},r=d=>{d.key==="Escape"&&(K(!1),pe.current?.focus())};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),document.addEventListener("keydown",r),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",r)}},[se]);const Me=async(t,r)=>{if(!E.has(t)){G(d=>new Set(d).add(t)),de(d=>{const j=new Map(d);return j.set(t,r),j});try{await _a(t,r,i),n(`Agent state updated to ${r}`,"success"),await k(),de(d=>{const j=new Map(d);return j.delete(t),j})}catch(d){de(j=>{const V=new Map(j);return V.delete(t),V}),n(`Failed to update state: ${Se(d)}`,"error")}finally{G(d=>{const j=new Set(d);return j.delete(t),j})}}},De=async(t,r)=>{if(await ye({title:"Delete Agent",message:`Delete agent "${r}"? This cannot be undone.`,danger:!0}))try{await La(t,i),n(`Agent "${r}" deleted`,"success"),await k()}catch(j){n(`Failed to delete agent: ${Se(j)}`,"error")}},Ge=async(t,r)=>{const d=y.find(j=>j.id===t);if(d){if(d.role===r){L(null);return}try{await Qe(t,{role:r},i),n(`Agent role updated to ${Xe.find(j=>j.value===r)?.label??r}`,"success"),L(null),k()}catch(j){n(`Failed to update role: ${Se(j)}`,"error")}}},Ze=(t,r)=>{t.key==="Escape"&&L(null)},qe=async(t,r)=>{Ee===t.id&&(le(null),ie(d=>{const j={...d};return delete j[t.id],j})),q(t.id);try{await Qe(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:r}},i),n(`Heartbeat interval updated to ${Ft(r)} for ${t.name}`,"success"),k()}catch(d){n(`Failed to update heartbeat interval: ${Se(d)}`,"error")}finally{q(null)}},a=async t=>{const r=Ie[t.id]??"";if(r.trim()===""){n("Please enter a heartbeat interval in minutes","error");return}const d=Number(r);if(isNaN(d)){n("Heartbeat interval must be a valid number","error");return}if(d<=0){n("Heartbeat interval must be greater than 0","error");return}if(d>=1&&d<5){q(t.id);try{await Qe(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Ma}},i),n(`Heartbeat interval set to 5 minutes (minimum). ${d} minute${d!==1?"s":""} was below the 5-minute minimum.`,"success"),le(null),ie(V=>{const J={...V};return delete J[t.id],J}),k()}catch(V){n(`Failed to update heartbeat interval: ${Se(V)}`,"error")}finally{q(null)}return}const j=Math.round(d*6e4);q(t.id);try{await Qe(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:j}},i),n(`Heartbeat interval updated to ${Ft(j)} for ${t.name}`,"success"),le(null),ie(V=>{const J={...V};return delete J[t.id],J}),k()}catch(V){n(`Failed to update heartbeat interval: ${Se(V)}`,"error")}finally{q(null)}},w=t=>{const r=bt(t.runtimeConfig?.heartbeatIntervalMs),d=Math.round(r/6e4);le(t.id),ie(j=>({...j,[t.id]:String(d)}))},D=s.useCallback((t,r)=>{X(t),me(r?.initialTab??"dashboard"),N(r?.initialRunId??null),fe(r?.preferActiveRun??!1)},[]),H=s.useCallback(()=>{X(null),me("dashboard"),N(null),fe(!1)},[]),Ce=s.useCallback(t=>{D(t)},[D]),Yt=s.useCallback(t=>{ue(t),D(t)},[D]),Jt=s.useCallback(async({agentId:t,deleted:r})=>{await F(),r&&$===t&&H()},[F,$,H]),Qt=s.useCallback(t=>{D(t),c&&re(!1)},[c,D]),Xt=async(t,r)=>{de(d=>{const j=new Map(d);return j.set(t,"running"),j});try{await $a(t,i,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),n(`Heartbeat run started for ${r}`,"success"),await k(),de(d=>{const j=new Map(d);return j.delete(t),j})}catch(d){de(j=>{const V=new Map(j);return V.delete(t),V}),n(`Failed to start heartbeat run: ${Se(d)}`,"error")}},nt=s.useCallback(t=>{te(t),t!=="org"&&he(1),c&&$&&H()},[H,c,$]),wt=t=>Xe.find(r=>r.value===t)?.label??t,ea=t=>Xe.find(r=>r.value===t)?.icon??"◆",Ct=et[ce],Ye=s.useMemo(()=>Vt({tree:we,availableWidth:Q,preference:ae}),[we,ae,Q]),St=s.useCallback(t=>{Te(t);const r=ce===0||ce===et.length-1,d=Vt({tree:we,availableWidth:Q,preference:t});r&&d!==Ye&&he(1)},[we,Ye,Q,ce]),At=s.useCallback(()=>{const t=[{value:"horizontal",label:"Horizontal",icon:e.jsx(Lt,{size:16}),ariaLabel:"Horizontal layout"},{value:"vertical",label:"Vertical",icon:e.jsx($t,{size:16}),ariaLabel:"Vertical layout"},{value:"auto",label:"Auto",icon:e.jsx(He,{size:16}),ariaLabel:"Automatic layout"}];return e.jsx("div",{className:"agent-org-chart-layout-toggle","data-testid":"agent-org-chart-layout-toggle",children:t.map(r=>{const d=ae===r.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${d?" btn-icon--active":""}`,onClick:()=>St(r.value),"aria-pressed":d,"aria-label":r.ariaLabel,title:r.ariaLabel,"data-layout-value":r.value,children:[r.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:r.label})]},r.value)})})},[St,ae]),ta=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],lt=t=>Ea(t),Tt=C&&y.length===0,Ve=s.useCallback(()=>{M(!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(jt,{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${A==="list"?" active":""}`,onClick:()=>nt("list"),title:"List view","aria-label":"List view","aria-pressed":A==="list",children:e.jsx($t,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="board"?" active":""}`,onClick:()=>nt("board"),title:"Board view","aria-label":"Board view","aria-pressed":A==="board",children:e.jsx(Be,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="org"?" active":""}`,onClick:()=>nt("org"),title:"Org Chart view","aria-label":"Org Chart view","aria-pressed":A==="org",children:e.jsx(Lt,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:pe,className:`btn-icon agent-controls-trigger${se?" agent-controls-trigger--active":""}`,onClick:()=>K(t=>!t),title:"Controls","aria-label":"Controls","aria-haspopup":"dialog","aria-expanded":se,"aria-controls":xe,children:e.jsx(Ka,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void k(),title:"Refresh","aria-label":"Refresh",children:e.jsx(He,{size:16,className:C?"spin":void 0})}),!c&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{P(!0),K(!1)},"aria-label":"Import",title:"Import",children:[e.jsx(ft,{size:16}),"Import"]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{Ve(),K(!1)},"aria-label":"New Agent",title:"New Agent",children:[e.jsx(It,{size:16}),"New Agent"]})]}),se&&e.jsxs("div",{ref:Re,id:xe,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":"Agent controls","aria-modal":"false",children:[e.jsx("div",{className:"agent-controls",children:e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(ka,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:v,onChange:t=>f(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.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:u,onChange:t=>g(t.target.checked),"aria-label":"Show system agents"}),"Show system agents"]})]})}),c&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{P(!0),K(!1)},"aria-label":"Import",title:"Import",children:[e.jsx(ft,{size:16}),"Import"]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{Ve(),K(!1)},"aria-label":"New Agent",title:"New Agent",children:[e.jsx(It,{size:16}),"New Agent"]})]}),e.jsx("div",{className:"agent-global-controls agent-controls-actions",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:l,onChange:t=>{const r=Number(t.target.value);Ue(Number.isFinite(r)&&r>0?r:1)},disabled:I}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",l.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(xt.reduce((t,r)=>Math.abs(r-l)<Math.abs(t-l)?r:t,xt[0])),onChange:t=>{const r=Number(t.target.value);Ue(Number.isFinite(r)&&r>0?r:1)},disabled:I,"aria-label":"Heartbeat speed preset",children:xt.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(Ja,{agents:ke})]})]})]})]}),e.jsx(is,{isOpen:T,onClose:()=>{M(!1),_(null)},onCreated:()=>{M(!1),_(null),k()},projectId:i,prefillDraft:S,agentOnboardingEnabled:m,existingAgents:y,onPrefillDraft:_}),e.jsx(os,{isOpen:x,onClose:()=>P(!1),onImported:()=>void k(),projectId:i}),e.jsx(ns,{stats:R,activeAgents:ze,projectId:i,isOpen:ne,onToggle:()=>re(t=>!t),onSelectAgent:Qt,onOpenTaskLogs:h}),A==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:$?e.jsxs("div",{className:"agents-org-detail-view","data-testid":"agents-org-detail-view",children:[e.jsx("button",{type:"button",className:"btn btn-sm agents-org-detail-back",onClick:H,"aria-label":"Back to org chart",children:"Back to org chart"}),e.jsx(s.Suspense,{fallback:null,children:e.jsx(Wt,{inline:!0,showInlineBackButton:!1,agentId:$,projectId:i,onClose:H,addToast:n,onChildClick:Ce,initialTab:oe,initialRunId:z,preferActiveRun:je},$)})]}):Tt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(He,{size:18,className:"spin"}),e.jsx("span",{children:"Loading agents..."})]}):e.jsxs("div",{className:"agent-org-chart-shell","data-testid":"agent-org-chart-shell",children:[c?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[At(),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>he(t=>Math.max(0,t-1)),disabled:ce===0,"aria-label":"Zoom out org chart",title:"Zoom out",children:e.jsx(Ya,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(Ct*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>he(t=>Math.min(et.length-1,t+1)),disabled:ce===et.length-1,"aria-label":"Zoom in org chart",title:"Zoom in",children:e.jsx(Za,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:()=>he(1),"aria-label":"Fit org chart",title:"Fit org chart",children:[e.jsx(wa,{size:16}),"Fit"]})]}):e.jsx("div",{className:"agent-org-chart-toolbar",children:At()}),e.jsx("div",{ref:_e,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",children:e.jsx("div",{className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round(Ct*100)}`,children:e.jsx("div",{className:`agent-org-chart${Ye==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":Ye,children:Ne?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(He,{size:18,className:"spin"}),e.jsx("span",{children:"Loading org chart..."})]}):we.length===0?e.jsx(gt,{onCtaClick:Ve}):we.map(t=>e.jsx(qt,{node:t,onSelect:Yt,getHealthStatus:lt,getRoleIcon:ea,selectedAgentId:Ae},t.agent.id))})})})]})})}):e.jsxs("div",{className:"agents-split-layout",children:[e.jsx("div",{className:`agents-split-sidebar${ee?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:Tt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(He,{size:18,className:"spin"}),e.jsx("span",{children:"Loading agents..."})]}):A==="board"?e.jsx("div",{className:"agent-board",children:ke.length===0?e.jsx(gt,{onCtaClick:Ve}):ke.map(t=>{const r=lt(t),d=kt(t,r),j=Nt(t.state),V=yt("agent-board-card",t.state);return e.jsx("div",{className:`agent-board-card ${V}${$===t.id?" agent-card--selected":""}`,children:e.jsxs("div",{className:"agent-board-clickable",onClick:()=>D(t.id),role:"button",tabIndex:0,onKeyDown:J=>{(J.key==="Enter"||J.key===" ")&&(J.key===" "&&J.preventDefault(),D(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(st,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:wt(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${j}`,children:t.state}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"agent-board-badge badge agent-approval-badge",title:"Pending approvals",children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null]}),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:r.color},title:d.title,children:[r.icon,d.label?` ${d.label}`:""]})]})},t.id)})}):e.jsx("div",{className:"agent-list",children:ke.length===0?e.jsx(gt,{onCtaClick:Ve}):ke.map(t=>{const r=lt(t),d=kt(t,r),j=Nt(t.state),V=yt("agent-card",t.state),J=bt(t.runtimeConfig?.heartbeatIntervalMs),aa=Ca(J),We=be===t.id;return e.jsxs("div",{className:`agent-card agent-card--clickable ${V}${$===t.id?" agent-card--selected":""}`,onClick:p=>{const W=p.target;if(W===p.currentTarget){D(t.id);return}const ve=W.closest('button, select, input, [role="button"]');ve&&ve!==p.currentTarget||D(t.id)},role:"button",tabIndex:0,onKeyDown:p=>{p.target===p.currentTarget&&(p.key==="Enter"||p.key===" ")&&(p.key===" "&&p.preventDefault(),D(t.id))},"aria-label":`Open details for ${t.name}`,children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info",children:[$e===t.id?e.jsx("select",{ref:O,className:"select agent-role-select",value:t.role,onChange:p=>void Ge(t.id,p.target.value),onKeyDown:p=>Ze(p,t.id),onBlur:()=>L(null),autoFocus:!0,children:Xe.map(p=>e.jsxs("option",{value:p.value,children:[p.icon," ",p.label]},p.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:p=>{p.stopPropagation(),L(t.id)},title:"Click to change role",role:"button",tabIndex:0,onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.stopPropagation(),L(t.id))},children:e.jsx(st,{agent:t,size:20})}),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(Kt,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${j}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:r.color},title:d.title,children:[r.icon,d.label?` ${d.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:wt(t.role)}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"badge agent-approval-badge",title:"Pending approvals",children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null,(()=>{const p=ta(t);if(p.length===0)return null;const W=p.slice(0,2),ve=p.length-2;return e.jsxs(e.Fragment,{children:[W.map(it=>e.jsx("span",{className:"badge badge-skill",title:it,children:Da(it)},it)),ve>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",ve]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.state==="error"&&t.lastError?e.jsx(Sa,{errorText:t.lastError,issueContext:{surface:"AgentsView list",agentId:t.id,agentName:t.name,agentState:t.state,taskId:t.taskId}}):null,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:"}),Ee===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:Ie[t.id]??"",onChange:p=>ie(W=>({...W,[t.id]:p.target.value})),onKeyDown:p=>{p.key==="Enter"?a(t):p.key==="Escape"&&(le(null),ie(W=>{const ve={...W};return delete ve[t.id],ve}))},disabled:We,"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 a(t),disabled:We,title:"Save custom interval",children:"Save"}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{le(null),ie(p=>{const W={...p};return delete W[t.id],W})},disabled:We,title:"Cancel custom interval",children:"Cancel"})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:J,onChange:p=>{const W=p.target.value;W==="__custom__"?w(t):qe(t,Number(W))},disabled:We,"aria-label":`Set heartbeat interval for ${t.name}`,children:[aa.map(p=>e.jsx("option",{value:p.value,children:p.label},p.value)),Aa.some(p=>p.value===J)&&e.jsx("option",{value:"__custom__",children:"Custom..."})]})}),We&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:"Saving…"}),t.lastHeartbeatAt&&(()=>{const p=new Date(t.lastHeartbeatAt),W=new Date(p.getTime()+J),ve=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"agent-heartbeat-last text-secondary",title:p.toLocaleString(),children:["Last: ",p.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})]}),ve&&e.jsxs("span",{className:"agent-heartbeat-next text-secondary",title:W.toLocaleString(),children:["Next: ",W.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})]})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--primary",children:[t.state==="idle"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Me(t.id,"active"),disabled:E.has(t.id),title:"Activate",children:[e.jsx(ut,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Start"})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Xt(t.id,t.name),disabled:E.has(t.id),title:"Run Now","aria-label":`Run now for ${t.name}`,children:[e.jsx(Be,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Run Now"})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Me(t.id,"paused"),disabled:E.has(t.id),title:"Pause",children:[e.jsx(Pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Pause"})]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Me(t.id,"active"),disabled:E.has(t.id),title:"Resume",children:[e.jsx(ut,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Resume"})]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>D(t.id,{initialTab:"runs",initialRunId:null,preferActiveRun:!0}),title:"View live run details","aria-label":`View live run details for ${t.name}`,children:[e.jsx(Be,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Running"})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Me(t.id,"paused"),disabled:E.has(t.id),title:"Pause",children:[e.jsx(Pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Pause"})]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Me(t.id,"active"),disabled:E.has(t.id),title:"Retry",children:[e.jsx(ut,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Retry"})]})]}),e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--secondary",children:[e.jsxs("button",{className:"btn btn-sm agent-card-details-btn",onClick:()=>D(t.id),title:`View details for ${t.name}`,"aria-label":`View details for ${t.name}`,children:[e.jsx(Ba,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Details"})]}),(t.state==="idle"||t.state==="paused")&&e.jsxs("button",{className:"btn btn-sm btn-danger",onClick:()=>void De(t.id,t.name),title:"Delete",children:[e.jsx(Ta,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:"Delete"})]})]})]})]},t.id)})})})}),e.jsx("div",{className:`agents-split-detail${c&&!$?" agents-split-detail--hidden-mobile":""}`,children:$?e.jsx(s.Suspense,{fallback:null,children:e.jsx(Wt,{inline:!0,showInlineBackButton:c,agentId:$,projectId:i,onClose:H,addToast:n,onChildClick:Ce,initialTab:oe,initialRunId:z,preferActiveRun:je,onMutationSuccess:Jt},$)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(jt,{size:48}),e.jsx("h3",{children:"Select an agent"}),e.jsx("p",{children:"Choose an agent from the sidebar to view details"})]})})]})]})}export{Ns as AgentsView};
@@ -1 +0,0 @@
1
- import{r as n,a as en,j as t,R as tn}from"./vendor-react-K0fH_qHe.js";import{i as yt,b4 as fs,t as Es,b5 as sn,b6 as gs,b7 as nn,w as Kt,b8 as qe,b9 as an,ba as rn,bb as on,bc as cn,bd as ln,be as ps,bf as dn,s as Ds,bg as un,bh as mn,bi as _t,bj as hn,bk as fn,bl as gn,bm as pn,k as Is,bn,bo as vn,p as xn,bp as yn,bq as wn,u as Sn,br as Cn,ab as $s,ac as Ps,bs as Nn,bt as kn,S as jn,W as Ut,P as rt,I as gt,ao as Mn,bu as bs,bv as vs,bw as xs,B as it,a as ys,a8 as Rn,a9 as An,aV as xt,bx as Tn,by as En,aS as Dn,bz as ws,bA as In,T as $n,bB as Ss,bC as Pn,h as Ln,j as Cs,m as Fn}from"./index-tbwUVj8p.js";import"./vendor-xterm-DzcZoU0P.js";const Ot="kb-chat-active-session";function Ns(s){const r=typeof s=="string"?s.trim():"",l=r.indexOf("/");return!r||l<=0||l>=r.length-1?{}:{modelProvider:r.slice(0,l),modelId:r.slice(l+1)}}function zn(s){const r=s?.toolCalls;if(!Array.isArray(r))return;const l=r.map(i=>{if(!i||typeof i!="object")return null;const u=i,x=typeof u.toolName=="string"?u.toolName:"";if(!x)return null;const R=u.args;return{toolName:x,...R&&typeof R=="object"?{args:R}:{},isError:!!u.isError,result:u.result,status:"completed"}}).filter(i=>i!==null);return l.length>0?l:void 0}function _n(s){const r=s?.fallback;if(!r||typeof r!="object")return;const l=r,i=typeof l.primaryModel=="string"?l.primaryModel:"",u=typeof l.fallbackModel=="string"?l.fallbackModel:"",x=l.triggerPoint;if(!(!i||!u||x!=="session-creation"&&x!=="prompt-time"))return{primaryModel:i,fallbackModel:u,triggerPoint:x}}function Un(s){const r=s?.failureInfo;if(!r||typeof r!="object")return;const l=r,i=typeof l.summary=="string"?l.summary.trim():"";if(!i)return;const u=(()=>{const x=l.reference;if(!x||typeof x!="object")return;const R=x,E=typeof R.kind=="string"?R.kind.trim():"",D=typeof R.id=="string"?R.id.trim():"";if(!(!E||!D))return{kind:E,id:D,...typeof R.label=="string"&&R.label.trim()?{label:R.label.trim()}:{}}})();return{summary:i,...typeof l.errorClass=="string"&&l.errorClass.trim()?{errorClass:l.errorClass.trim()}:{},...typeof l.code=="string"&&l.code.trim()?{code:l.code.trim()}:{},...typeof l.detail=="string"&&l.detail.trim()?{detail:l.detail.trim()}:{},...u?{reference:u}:{}}}function ks(s){return typeof s=="string"?{summary:s.trim()||"Failed to get response"}:{summary:typeof s.summary=="string"&&s.summary.trim()?s.summary.trim():"Failed to get response",...typeof s.errorClass=="string"&&s.errorClass.trim()?{errorClass:s.errorClass.trim()}:{},...typeof s.code=="string"&&s.code.trim()?{code:s.code.trim()}:{},...typeof s.detail=="string"&&s.detail.trim()?{detail:s.detail.trim()}:{},...s.reference?{reference:s.reference}:{}}}function Ht(s){return{id:s.id,sessionId:s.sessionId,role:s.role,content:s.content,thinkingOutput:s.thinkingOutput,toolCalls:zn(s.metadata),fallbackInfo:_n(s.metadata),failureInfo:Un(s.metadata),attachments:s.attachments,createdAt:s.createdAt}}function On(s,r){const[l,i]=n.useState([]),[u,x]=n.useState(null),[R,E]=n.useState(!0),[D,C]=n.useState([]),[Q,S]=n.useState(!1),[L,g]=n.useState(!1),[ee,N]=n.useState(""),[_,b]=n.useState(""),[M,A]=n.useState([]),[T,I]=n.useState(""),[J,Y]=n.useState(""),[z,h]=n.useState(!0),[p,o]=n.useState(new Map),c=n.useRef(null),m=n.useRef(!1),y=n.useRef(""),k=n.useRef(null),Z=n.useRef(l),F=n.useRef(u),G=n.useRef(L);Z.current=l,F.current=u,G.current=L,n.useEffect(()=>{y.current=T},[T]);const ke=n.useRef(new Set),ue=n.useRef(0),ve=n.useRef(s);ve.current!==s&&(ve.current=s,ue.current++),n.useEffect(()=>{const f=ue.current;yt(void 0,s).then(v=>{if(ue.current!==f)return;const w=new Map;for(const $ of v)w.set($.id,$);o(w)}).catch(()=>{})},[s]);const ie=n.useCallback(async()=>{E(!0);try{const v=[...(await fs(s)).sessions].sort((w,$)=>new Date($.updatedAt).getTime()-new Date(w.updatedAt).getTime());i(v)}catch{}finally{E(!1)}},[s]);n.useEffect(()=>{ie()},[ie]);const Ue=n.useRef(()=>{}),Fe=n.useRef(!1);n.useEffect(()=>{Fe.current=!1},[s]),n.useEffect(()=>{if(R||Fe.current||F.current)return;const f=Es(Ot,s);if(!f){Fe.current=!0;return}const v=l.find(w=>w.id===f);if(v){Fe.current=!0,Ue.current(f,v);return}Fe.current=!0},[R,l,s]);const se=n.useCallback(async(f,v)=>{S(!0);try{const w=await sn(f,{limit:50,...v},s),$=w.messages.map(Ht);v?.offset&&v.offset>0?C(te=>[...$,...te]):C($),h(w.messages.length>=50)}catch{}finally{S(!1)}},[s]),me=n.useCallback(()=>{k.current?.(),k.current=null,y.current="",I(""),N(""),b(""),A([]),g(!1)},[]),wt=n.useCallback(()=>{y.current="",I("")},[]),ne=n.useCallback(()=>{const f=y.current.trim();f&&(y.current="",I(""),ze.current(f))},[]),oe=n.useCallback((f,v,w)=>{if(c.current||!f)return!0;m.current=!1,v&&(N(v.streamingText),b(v.streamingThinking),A(v.toolCalls)),g(!0);const{handlers:$}=gs({sessionId:f,tempUserMessageId:"",setStreamingText:N,setStreamingThinking:b,setStreamingToolCalls:A,cancelStreamingFlushesRef:k,addToast:w?.silent?void 0:r,onFallbackSession:(H,ae)=>{const U=Ns(H.fallbackModel);i(K=>K.map(V=>V.id===ae?{...V,...U}:V)),x(K=>K&&K.id===ae?{...K,...U}:K)},onDone:()=>{N(""),b(""),A([]),g(!1),G.current=!1,c.current=null,se(f),ne()},onError:H=>{N(""),b(""),A([]),g(!1),G.current=!1,c.current=null;const ae=ks(H);w?.silent||r?.(ae.summary,"error"),se(f),ne()}}),te=nn(f,$,s,{...typeof v?.replayFromEventId=="number"?{lastEventId:v.replayFromEventId}:{}});return c.current=te,!0},[r,se,s,ne]),Oe=n.useCallback((f,v)=>{const w=F.current?.id??null;if(f&&w===f&&!v)return;c.current&&(c.current.close(),c.current=null);const $=v??l.find(te=>te.id===f);x($||null),me(),h(!0),f?se(f):C([]),$?.isGenerating&&oe($.id,$.inFlightGeneration),f?Kt(Ot,f,s):qe(Ot,s)},[oe,l,se,s,me]);Ue.current=Oe;const ot=n.useCallback(async f=>{const v=await an(f,s);c.current&&(c.current.close(),c.current=null);const w={id:v.session.id,title:v.session.title,agentId:v.session.agentId,status:v.session.status,modelProvider:v.session.modelProvider,modelId:v.session.modelId,createdAt:v.session.createdAt,updatedAt:v.session.updatedAt};return i($=>$.some(te=>te.id===w.id)?$:[w,...$]),me(),Oe(w.id,w),C([]),w},[s,me,Oe]),je=n.useCallback(async f=>{await rn(f,{status:"archived"},s),i(v=>v.filter(w=>w.id!==f)),u?.id===f&&(x(null),C([]))},[u,s]),Me=n.useCallback(async f=>{u?.id===f&&c.current&&(c.current.close(),c.current=null),await on(f,s),i(v=>v.filter(w=>w.id!==f)),u?.id===f&&(x(null),C([]))},[u,s]),Je=n.useCallback(async()=>{!u||!z||await se(u.id,{offset:D.length})},[u,z,se,D.length]),He=n.useCallback(()=>{u&&(m.current=!0,k.current?.(),k.current=null,c.current?.close(),c.current=null,cn(u.id,s).catch(()=>{}),g(!1),N(""),b(""),A([]))},[u,s]),ze=n.useRef(()=>{}),Re=ln(),xe=n.useCallback(async f=>{try{await ie();const v=await ps(f,s);F.current?.id===f&&x(w=>!w||w.id!==f?w:{...w,...v.session}),v.session.isGenerating?(N(""),b(""),A([]),g(!0),G.current=!0,oe(f,v.session.inFlightGeneration,{silent:!0})):(N(""),b(""),A([]),g(!1),G.current=!1,await se(f))}catch{}},[oe,se,s,ie]),ye=n.useCallback((f,v)=>{if(!u)return;if(G.current){y.current=f,I(f);return}m.current=!1,c.current&&(c.current.close(),c.current=null);const w=`temp-${Date.now()}`,$={id:w,sessionId:u.id,role:"user",content:f,createdAt:new Date().toISOString()};C(H=>[...H,$]),N(""),b(""),A([]),g(!0);const{handlers:te}=gs({sessionId:u.id,tempUserMessageId:w,setStreamingText:N,setStreamingThinking:b,setStreamingToolCalls:A,cancelStreamingFlushesRef:k,addToast:r,onFallbackSession:(H,ae)=>{const U=Ns(H.fallbackModel);i(K=>K.map(V=>V.id===ae?{...V,...U}:V)),x(K=>K&&K.id===ae?{...K,...U}:K)},onDone:({messageId:H,message:ae,accumulated:U})=>{const K=ae?Ht(ae):{id:H||`msg-${Date.now()}`,sessionId:u.id,role:"assistant",content:U.text,thinkingOutput:U.thinking,toolCalls:U.toolCalls.length>0?U.toolCalls:void 0,fallbackInfo:U.fallbackInfo,createdAt:new Date().toISOString()};ke.current.add(K.id),C(V=>[...V,K]),N(""),b(""),A([]),g(!1),G.current=!1,c.current=null,setTimeout(()=>{ke.current.delete(K.id)},1e3),ie(),ne()},onError:(H,ae)=>{const U=ks(H),K=typeof H=="string"?H:U.summary,V=un(K);C(W=>{const O=W.filter(q=>q.id!==ae);return V?O:[...O,{id:`error-${Date.now()}`,sessionId:u.id,role:"assistant",content:U.summary,failureInfo:U,createdAt:new Date().toISOString()}]}),N(""),b(""),A([]),g(!1),G.current=!1,c.current=null,console.error("[useChat] Stream error:",H),V?(console.info("[useChat] Suppressed tab-suspension stream error:",H),u?.id&&(N(""),b(""),A([]),g(!0),G.current=!0,xe(u.id))):(r?.(U.summary,"error"),ie()),m.current||ne()}});c.current=dn(u.id,f,te,v,s)},[u,s,ie,r,oe,xe,ne]);ze.current=ye;const fe=J?l.filter(f=>f.title?.toLowerCase().includes(J.toLowerCase())||f.agentId.toLowerCase().includes(J.toLowerCase())):l;return n.useEffect(()=>{if(!F.current?.isGenerating||(c.current||oe(F.current.id,F.current.inFlightGeneration),!G.current||c.current||!F.current))return;const f=setInterval(async()=>{if(!G.current||c.current||!F.current){clearInterval(f);return}try{(await fs(s)).sessions.find($=>$.id===F.current?.id)?.isGenerating||(clearInterval(f),await se(F.current.id),N(""),b(""),A([]),g(!1),G.current=!1,ne())}catch{}},3e3);return()=>clearInterval(f)},[oe,se,s,u,ne]),n.useEffect(()=>Re.onBecameVisible(()=>{const v=F.current;if(!v||c.current)return;const w=ue.current;ps(v.id,s).then($=>{if(!(ue.current!==w||c.current)){if($.session.isGenerating){N(""),b(""),A([]),g(!0),G.current=!0,oe(v.id,$.session.inFlightGeneration,{silent:!0});return}G.current&&(N(""),b(""),A([]),g(!1),G.current=!1,ne(),se(v.id))}}).catch(()=>{})}),[oe,se,s,Re,ne]),n.useEffect(()=>{const f=ue.current,v=s?`?projectId=${encodeURIComponent(s)}`:"",w=()=>ue.current!==f,$=V=>{if(w())return;const W=JSON.parse(V.data);i(O=>O.some(q=>q.id===W.id)?O:[W,...O])},te=V=>{if(w())return;const W=JSON.parse(V.data);i(O=>[...O.map(re=>re.id===W.id?W:re)]),F.current?.id===W.id&&(x(W),W.isGenerating&&!c.current&&oe(W.id,W.inFlightGeneration))},H=V=>{if(w())return;const{id:W}=JSON.parse(V.data);i(O=>O.filter(q=>q.id!==W)),F.current?.id===W&&(x(null),C([]))},ae=V=>{if(w())return;const W=JSON.parse(V.data),O=Ht(W);if(!ke.current.has(O.id)){if(F.current?.id===O.sessionId&&G.current&&!c.current&&O.role==="assistant"){C(q=>q.some(re=>re.id===O.id)?q:[...q,O]),N(""),b(""),A([]),g(!1),G.current=!1,ne();return}F.current?.id===O.sessionId&&!G.current&&C(q=>{if(q.some(re=>re.id===O.id))return q;if(O.role==="user"){const re=q.findIndex(we=>we.role==="user"&&we.id.startsWith("temp-")&&we.content.trim()===O.content.trim());if(re>=0){const we=[...q];return we[re]=O,we}}return[...q,O]})}},U=V=>{if(w())return;const{id:W}=JSON.parse(V.data);C(O=>O.filter(q=>q.id!==W))};return Ds(`/api/events${v}`,{events:{"chat:session:created":$,"chat:session:updated":te,"chat:session:deleted":H,"chat:message:added":ae,"chat:message:deleted":U}})},[oe,s,ne]),n.useEffect(()=>()=>{c.current&&(c.current.close(),c.current=null)},[]),{sessions:l,activeSession:u,sessionsLoading:R,messages:D,messagesLoading:Q,isStreaming:L,streamingText:ee,streamingThinking:_,streamingToolCalls:M,pendingMessage:T,selectSession:Oe,createSession:ot,archiveSession:je,deleteSession:Me,sendMessage:ye,stopStreaming:He,clearPendingMessage:wt,loadMoreMessages:Je,hasMoreMessages:z,searchQuery:J,setSearchQuery:Y,filteredSessions:fe,refreshSessions:ie,agentsMap:p}}const Pe="fusion:chat-active-room";function Vt(s){return[...s].sort((r,l)=>new Date(l.updatedAt).getTime()-new Date(r.updatedAt).getTime())}function at(s,r){const l=s.findIndex(u=>u.id===r.id);if(l===-1)return Vt([r,...s]);const i=[...s];return i[l]=r,Vt(i)}function Le(s){try{return JSON.parse(s.data)}catch{return null}}function Hn(s,r){return{id:`temp-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,roomId:s,role:"user",content:r,thinkingOutput:null,metadata:null,senderAgentId:null,mentions:[],createdAt:new Date().toISOString()}}function Bn(s,r){const[l,i]=n.useState([]),[u,x]=n.useState(!0),[R,E]=n.useState(null),[D,C]=n.useState(null),[Q,S]=n.useState([]),[L,g]=n.useState([]),[ee,N]=n.useState(!1),_=n.useRef(l),b=n.useRef(D),M=n.useRef(0),A=n.useRef(s);_.current=l,b.current=D,A.current!==s&&(A.current=s,M.current+=1);const T=n.useCallback(async(p,o=!0)=>{if(!p){S([]),g([]),N(!1);return}o&&g([]),N(!0);try{const[c,m]=await Promise.all([mn(p.id,s),_t(p.id,{limit:100},s)]);S(c.members),g(m.messages)}catch{S([]),g([])}finally{N(!1)}},[s]),I=n.useCallback(async()=>{x(!0);try{const p=await hn({},s),o=Vt(p.rooms);i(o),E(null);const c=Es(Pe,s);if(c){const m=o.find(y=>y.id===c)??null;m?(C(m),T(m,!0)):qe(Pe,s)}}catch(p){const o=p instanceof Error?p.message:"Failed to load chat rooms";E(o),r?.(o,"error")}finally{x(!1)}},[r,T,s]),J=n.useCallback(p=>{if(!p){C(null),qe(Pe,s),T(null,!0);return}const o=_.current.find(c=>c.id===p)??null;C(o),o&&(Kt(Pe,o.id,s),T(o,!0))},[T,s]),Y=n.useCallback(async p=>{const c=(await fn({name:p.name,memberAgentIds:p.memberAgentIds},s)).room;return i(m=>at(m,c)),C(c),Kt(Pe,c.id,s),await T(c,!0),c},[T,s]),z=n.useCallback(async p=>{await gn(p,s),i(o=>o.filter(c=>c.id!==p)),b.current?.id===p&&(C(null),S([]),g([]),qe(Pe,s))},[s]),h=n.useCallback(async(p,o)=>{const c=b.current,m=c?.id;if(!m)throw new Error("Select a room before sending a message");const y=Hn(m,p);b.current?.id===m&&g(k=>[...k,y]);try{const k=await pn(m,{content:p,...o?.attachments?{attachments:o.attachments}:{}},s);k.message?.createdAt&&c&&i(F=>at(F,{...c,updatedAt:k.message.createdAt})),b.current?.id===m&&g(F=>F.map(G=>G.id===y.id?k.message:G));const Z=await _t(m,{limit:100},s);if(b.current?.id!==m)return;g(Z.messages)}catch(k){try{const Z=await _t(m,{limit:100},s);b.current?.id===m&&g(Z.messages)}catch{b.current?.id===m&&g(Z=>Z.filter(F=>F.id!==y.id))}throw k}},[s]);return n.useEffect(()=>{I()},[I]),n.useEffect(()=>{const p=M.current,o=s?`/api/events?projectId=${encodeURIComponent(s)}`:"/api/events";return Ds(o,{onReconnect:()=>{I()},events:{"chat:room:created":c=>{if(M.current!==p)return;const m=Le(c);m&&i(y=>at(y,m))},"chat:room:updated":c=>{if(M.current!==p)return;const m=Le(c);m&&(i(y=>at(y,m)),b.current?.id===m.id&&C(m))},"chat:room:deleted":c=>{if(M.current!==p)return;const m=Le(c);m?.id&&(i(y=>y.filter(k=>k.id!==m.id)),b.current?.id===m.id&&(C(null),S([]),g([]),qe(Pe,s)))},"chat:room:member:added":c=>{if(M.current!==p)return;const m=Le(c);!m||b.current?.id!==m.roomId||S(y=>y.some(k=>k.agentId===m.agentId)?y:[...y,m])},"chat:room:member:removed":c=>{if(M.current!==p)return;const m=Le(c);!m||b.current?.id!==m.roomId||S(y=>y.filter(k=>k.agentId!==m.agentId))},"chat:room:message:added":c=>{if(M.current!==p)return;const m=Le(c);m&&(i(y=>{const k=y.find(Z=>Z.id===m.roomId);return k?at(y,{...k,updatedAt:m.createdAt}):y}),b.current?.id===m.roomId&&g(y=>{if(y.some(k=>k.id===m.id))return y;if(m.role==="user"){const k=y.findIndex(Z=>Z.role==="user"&&Z.id.startsWith("temp-")&&Z.content.trim()===m.content.trim());if(k>=0){const Z=[...y];return Z[k]=m,Z}}return[...y,m]}))},"chat:room:message:updated":c=>{if(M.current!==p)return;const m=Le(c);!m||b.current?.id!==m.roomId||g(y=>y.map(k=>k.id===m.id?m:k))},"chat:room:message:deleted":c=>{if(M.current!==p)return;const m=Le(c);m?.id&&g(y=>y.filter(k=>k.id!==m.id))}}})},[s,I]),n.useEffect(()=>{D&&(l.some(p=>p.id===D.id)||(C(null),S([]),g([]),qe(Pe,s)))},[D,s,l]),{rooms:l,roomsLoading:u,roomsError:R,activeRoom:D,activeRoomMembers:Q,messages:L,messagesLoading:ee,selectRoom:J,createRoom:Y,deleteRoom:z,sendRoomMessage:h,refreshRooms:I}}function Gn(s,r=[]){const l=s.trim().replace(/^#/,"");if(!l)return{ok:!1,error:"Room name is required."};if(/[A-Z]/.test(l))return{ok:!1,error:"Use lowercase letters only."};const i=l.toLowerCase();return i.length>80?{ok:!1,error:"Room names can be at most 80 characters."}:/^[a-z0-9_-]+$/.test(i)?/^[-_]|[-_]$/.test(i)?{ok:!1,error:"Room names cannot start or end with a hyphen or underscore."}:r.some(u=>u.toLowerCase()===i)?{ok:!1,error:"A room with this name already exists."}:{ok:!0,name:i}:{ok:!1,error:"Use lowercase letters, numbers, hyphens, or underscores only."}}function Kn({isOpen:s,onClose:r,onCreate:l,projectId:i,existingRoomNames:u=[]}){const[x,R]=n.useState(""),[E,D]=n.useState([]),[C,Q]=n.useState(""),[S,L]=n.useState([]),[g,ee]=n.useState(!1),[N,_]=n.useState(null),[b,M]=n.useState(!1),A=n.useRef(null),T=n.useRef(null);n.useEffect(()=>{s&&(T.current=document.activeElement instanceof HTMLElement?document.activeElement:null,ee(!0),_(null),yt(void 0,i).then(o=>D(o)).catch(()=>{D([]),_("Failed to load agents.")}).finally(()=>ee(!1)))},[s,i]),n.useEffect(()=>{if(!s){R(""),Q(""),L([]),_(null),M(!1);return}const o=window.requestAnimationFrame(()=>A.current?.focus());return()=>window.cancelAnimationFrame(o)},[s]),n.useEffect(()=>{if(!s)return;const o=c=>{c.key==="Escape"&&r()};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[s,r]),n.useEffect(()=>{s||T.current?.focus()},[s]);const I=n.useMemo(()=>Gn(x,u),[x,u]),J=n.useMemo(()=>{const o=C.trim().toLowerCase();return o?E.filter(c=>c.name.toLowerCase().includes(o)):E},[E,C]),Y=n.useMemo(()=>E.filter(o=>S.includes(o.id)),[E,S]),z=I.ok&&S.length>0&&!b&&!g;if(!s)return null;const h=o=>{b||L(c=>c.includes(o)?c.filter(m=>m!==o):[...c,o])},p=async()=>{if(!I.ok){_(I.error);return}if(S.length===0){_("Select at least one member.");return}_(null),M(!0);try{await l({name:I.name,displayName:`#${I.name}`,memberAgentIds:S}),r()}catch(o){_(o instanceof Error?o.message:"Failed to create room.")}finally{M(!1)}};return en.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:o=>o.target===o.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":"Create room",onClick:o=>o.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:"Create room"}),t.jsx("button",{type:"button",className:"modal-close","aria-label":"Close",onClick:r,children:"×"})]}),t.jsxs("div",{className:"form-group create-room-modal-name-group",children:[t.jsx("label",{htmlFor:"create-room-name",children:"Room name"}),t.jsxs("div",{className:"create-room-modal-name-field",children:[t.jsx("span",{"aria-hidden":"true",className:"create-room-modal-name-hash",children:"#"}),t.jsx("input",{ref:A,id:"create-room-name",className:"input",value:x,disabled:b,onChange:o=>{const c=o.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();R(c)}})]}),!I.ok&&t.jsx("div",{className:"form-error",children:I.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:"Members"}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:"Search agents",value:C,disabled:b,onChange:o=>Q(o.target.value)})]}),Y.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:Y.map(o=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>h(o.id),disabled:b,children:[o.name," ×"]},o.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:g?t.jsx("div",{className:"create-room-modal-empty",children:"Loading agents..."}):J.length===0?t.jsx("div",{className:"create-room-modal-empty",children:E.length===0?"No agents in this project yet.":"No agents match your search."}):J.map(o=>{const c=S.includes(o.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${c?" create-room-modal-member-row--selected":""}`,onClick:()=>h(o.id),disabled:b,children:[t.jsx(Is,{agent:o,size:20}),t.jsx("span",{children:o.name}),t.jsx("span",{className:"create-room-modal-member-role",children:o.role})]},o.id)})}),N&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:N})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:b,children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void p(),disabled:!z,children:b?"Creating...":"Create room"})]})]})}),document.body)}const Vn=320;function Wn(s){return Math.min(s,Vn)}function Ls(s){const r=new Date(s),i=new Date().getTime()-r.getTime(),u=Math.floor(i/1e3),x=Math.floor(u/60),R=Math.floor(x/60),E=Math.floor(R/24);return u<60?"just now":x<60?`${x}m ago`:R<24?`${R}h ago`:E<7?`${E}d ago`:r.toLocaleDateString()}function js(s,r){if(!s||!r)return null;const l=r.toLowerCase();if(l.includes("claude")){let u=r.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return u=u.replace(/\s+/g," "),u.length>30?u.slice(0,30)+"…":u}if(l.includes("gpt")||l.includes("openai")){const u=r.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return u.length>30?u.slice(0,30)+"…":u}if(l.includes("gemini")){const u=r.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return u.length>30?u.slice(0,30)+"…":u}const i=r.replace(/-/g," ").replace(/^\w/,u=>u.toUpperCase()).replace(/\s+/g," ").trim();return i.length>30?i.slice(0,30)+"…":i}function vt(s,r){return s.length<=r?s:`${s.slice(0,r)}…`}function qn(s){if(!s)return null;const r=Object.entries(s);return r.length===0?null:r.map(([l,i])=>{const u=typeof i=="string"?i:(()=>{try{return JSON.stringify(i)}catch{return String(i)}})();return`${l}=${vt(u,50)}`}).join(", ")}function Xn(s){if(s===void 0)return null;if(typeof s=="string")return vt(s,200);try{return vt(JSON.stringify(s),200)}catch{return vt(String(s),200)}}function Jn(s){if(!s)return null;if(s.kind==="mailbox"||s.kind==="mailbox-message"){const r=typeof window>"u"?"/":window.location.pathname||"/",l=new URLSearchParams(typeof window>"u"?"":window.location.search);return l.set("view","mailbox"),l.set("mailbox-message",s.id),`${r}?${l.toString()}#message-${encodeURIComponent(s.id)}`}return null}function Yn(s){if(!s)return null;const r=s.label??`${s.kind} ${s.id}`,l=Jn(s),i=`chat-failure-reference-${s.kind}-${s.id}`.replace(/[^a-zA-Z0-9_-]+/g,"-").toLowerCase();return t.jsxs("div",{className:"chat-message-failure-reference",children:[t.jsx("span",{className:"chat-message-failure-reference-label",children:"Reference"}),t.jsx("span",{className:"chat-message-failure-reference-value",children:r}),l?t.jsx("a",{className:"btn btn-sm chat-message-failure-reference-link",href:l,children:"Open mailbox message"}):t.jsxs("details",{className:"chat-message-failure-reference-details",children:[t.jsx("summary",{className:"btn btn-sm chat-message-failure-reference-link",children:"View failure details"}),t.jsxs("dl",{className:"chat-message-failure-reference-meta",id:i,children:[t.jsxs("div",{children:[t.jsx("dt",{children:"Kind"}),t.jsx("dd",{children:s.kind})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"ID"}),t.jsx("dd",{children:s.id})]}),s.label&&t.jsxs("div",{children:[t.jsx("dt",{children:"Label"}),t.jsx("dd",{children:s.label})]})]})]})]})}function Fs(s){if(!s||s.length===0)return null;const r=(S,L)=>{const g=S.status==="running",ee=S.status==="completed"&&S.isError,N=qn(S.args),_=Xn(S.result),b=g?N:_?`result: ${_}`:N?`args: ${N}`:null,M=g?"running":ee?"error":"completed";return t.jsxs("details",{className:`chat-tool-call${g?" chat-tool-call--running":""}${ee?" chat-tool-call--error":""}`,open:g,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",title:S.toolName,children:S.toolName}),b&&t.jsx("span",{className:"chat-tool-call-preview",title:b,children:b}),t.jsx("span",{className:"chat-tool-call-status-text",children:M})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[N&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:"args"}),t.jsx("span",{className:"chat-tool-call-value",children:N})]}),_&&t.jsxs("div",{className:`chat-tool-call-row${ee?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:"result"}),t.jsx("span",{className:"chat-tool-call-value",children:_})]})]})]},`${S.toolName}-${L}`)},l="chat-tool-calls";if(s.length===1)return t.jsxs("div",{className:l,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(Ss,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:"Tool calls"})]}),r(s[0],0)]});const i=s.filter(S=>S.status==="running").length,u=s.filter(S=>S.status==="completed"&&S.isError).length,x=i>0,R=Array.from(new Set(s.map(S=>S.toolName))),E=R.slice(0,5),D=Math.max(0,R.length-E.length),C=D>0?`${E.join(", ")}, +${D} more`:E.join(", "),Q=x?`(${i} running)`:u>0?`(${u} ${u===1?"error":"errors"})`:null;return t.jsx("div",{className:l,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:"chat-tool-calls-group","data-testid":"chat-tool-calls-group",open:x,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(Ss,{size:12,"aria-hidden":"true"}),t.jsxs("span",{className:"chat-tool-calls-count",children:[s.length," tool calls"]}),t.jsx("span",{className:"chat-tool-calls-names",title:C,children:C}),Q&&t.jsx("span",{className:"chat-tool-calls-group-status",children:Q})]}),s.map((S,L)=>r(S,L))]})})}const zs={p:({children:s,...r})=>t.jsx("p",{...r,children:ws(s)}),li:({children:s,...r})=>t.jsx("li",{...r,children:ws(s)}),pre:({children:s,...r})=>t.jsx("pre",{...r,className:"chat-markdown-pre",children:s}),code:({children:s,...r})=>{const l=typeof s=="string"?s:tn.Children.toArray(s).join(""),i=xt(l);return i.length===1&&typeof i[0]=="string"?t.jsx("code",{...r,children:s}):t.jsx("code",{...r,children:i})},table:({children:s,...r})=>t.jsx("table",{...r,className:"chat-markdown-table",children:s})},Xe="__fn_agent__",Qn=280,pt=180,bt=500,Ms="fusion:chat-sidebar-width",Bt="fusion:chat-scope",Zn="fusion:chat-draft:";function Rs(s,r){return r?`${Zn}${s}:${r}`:null}function As(s){if(!s)return"";try{return localStorage.getItem(s)??""}catch{return""}}const ea=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function Ts(s){const r=/(^|[\s])\/([^\s]*)$/.exec(s);if(!r)return null;const l=r[1]??"",i=r[2]??"",u=r.index+l.length;return{filter:i,start:u,end:s.length}}function ta(s,r){const l=s.slice(0,r),i=/(^|[\s\n])@([\w-]*)$/.exec(l);if(!i)return null;const u=i[2]??"",x=l.length-u.length-1;return{filter:u,start:x,end:r}}function sa({projectId:s,onClose:r,onCreate:l}){const[i,u]=n.useState("agent"),[x,R]=n.useState([]),[E,D]=n.useState(!0),[C,Q]=n.useState(""),[S,L]=n.useState([]),[g,ee]=n.useState(!0),[N,_]=n.useState(""),[b,M]=n.useState([]),[A,T]=n.useState([]);n.useEffect(()=>{let h=!1;return D(!0),yt(void 0,s).then(p=>{h||R(p)}).catch(()=>{h||R([])}).finally(()=>{h||D(!1)}),()=>{h=!0}},[s]),n.useEffect(()=>{ee(!0),Ln().then(h=>{L(h.models),M(h.favoriteProviders),T(h.favoriteModels)}).catch(()=>{L([]),M([]),T([])}).finally(()=>{ee(!1)})},[]);const I=n.useCallback(async h=>{const p=b,c=p.includes(h)?p.filter(m=>m!==h):[h,...p];M(c);try{await Cs({favoriteProviders:c,favoriteModels:A})}catch{M(p)}},[b,A]),J=n.useCallback(async h=>{const p=A,c=p.includes(h)?p.filter(m=>m!==h):[h,...p];T(c);try{await Cs({favoriteProviders:b,favoriteModels:c})}catch{T(p)}},[A,b]),Y=h=>{if(h.preventDefault(),i==="agent"){if(!C)return;l({agentId:C});return}if(!N)return;const p=N.indexOf("/");if(p<=0)return;const o=N.slice(0,p),c=N.slice(p+1);l({agentId:Xe,modelProvider:o,modelId:c})},z=i==="agent"?!C:!N;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:r,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:h=>h.stopPropagation(),children:[t.jsx("h3",{children:"New Chat"}),t.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${i==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{u("agent"),_("")},children:"Agent"}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${i==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{u("model"),Q("")},children:"Model"})]}),t.jsxs("form",{onSubmit:Y,children:[i==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",E?t.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):x.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:x.map(h=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${C===h.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>Q(h.id),"data-testid":`agent-option-${h.id}`,children:[t.jsx(it,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:h.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:h.role})]},h.id))})]}),i==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:g?t.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):t.jsx(Fn,{models:S,value:N,onChange:_,label:"Model",placeholder:"Select a model",favoriteProviders:b,onToggleFavorite:I,favoriteModels:A,onToggleModelFavorite:J})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:r,children:"Cancel"}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:z,children:"Create"})]})]})]})})}const Gt=n.memo(function({message:r,forcePlain:l,agentName:i,hideAssistantIdentity:u,showAssistantModelTag:x,activeModelTag:R,activeModelProvider:E,activeSessionId:D,mentionAgentsByName:C,roomContext:Q,copyAction:S}){const L=r.role==="assistant",g=L?r.failureInfo:void 0,ee=L&&(!u||!!g),N=n.useMemo(()=>{if(L)return null;const M=r.content,A=/@([\w-]+)/g,T=[];let I=0,J=A.exec(M);for(;J;){const[Y,z=""]=J,h=J.index;h>I&&T.push(M.slice(I,h));const p=z.replace(/_/g," ").toLowerCase(),o=C.get(p);if(o){const c=!!(Q&&!Q.memberIds.has(o.id)),m=c?`Not a member of ${Q?.roomName}`:void 0;T.push(t.jsxs("span",{className:`chat-mention-chip${c?" chat-mention-chip--non-member":""}`,title:m,"aria-label":m,children:["@",o.name.replace(/\s+/g,"_")]},`${o.id}-${h}`))}else T.push(Y);I=h+Y.length,J=A.exec(M)}return I<M.length&&T.push(M.slice(I)),T.length===0?M:T},[L,r.content,C,Q]),_=n.useMemo(()=>{const M=r.attachments;if(!M||M.length===0||!D)return null;const A=`/api/chat/sessions/${encodeURIComponent(D)}/attachments/`;return t.jsx("div",{className:"chat-message-attachments",children:M.map(T=>{const I=T.mimeType.startsWith("image/"),J=T.id||T.filename,Y=`${A}${encodeURIComponent(T.filename)}`;return I?t.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:Y,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{className:"chat-message-attachment",src:Y,alt:T.originalName})},J):t.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:Y,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(In,{size:14}),t.jsx("span",{children:T.originalName})]},J)})})},[r.attachments,D]),b=n.useMemo(()=>L?g?t.jsxs("div",{className:"chat-message-content chat-message-content--failure",children:[t.jsxs("div",{className:"chat-message-failure-summary-row",children:[t.jsx("span",{className:"status-dot status-dot--error","aria-hidden":"true"}),t.jsx("span",{className:"chat-message-failure-label",children:"Response failed"})]}),t.jsx("div",{className:"chat-message-failure-summary",children:g.summary}),(g.errorClass||g.code)&&t.jsxs("div",{className:"chat-message-failure-badges",children:[g.errorClass&&t.jsx("span",{className:"chat-message-failure-badge",children:g.errorClass}),g.code&&t.jsx("span",{className:"chat-message-failure-badge",children:g.code})]}),(g.detail||g.reference)&&t.jsxs("details",{className:"chat-message-failure-details",children:[t.jsxs("summary",{children:[t.jsx($n,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Failure details"})]}),g.detail&&t.jsx("pre",{className:"chat-message-failure-detail",children:xt(g.detail)}),Yn(g.reference)]})]}):l?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:r.content}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx($s,{remarkPlugins:[Ps],components:zs,children:r.content})}):null,[g,l,L,r.content]);return t.jsxs("div",{className:`chat-message chat-message--${r.role}${g?" chat-message--failure":""}`,"data-testid":`chat-message-${r.id}`,children:[ee&&t.jsxs("div",{className:"chat-message-avatar",children:[E?t.jsx(rt,{provider:E,size:"sm"}):t.jsx(it,{size:14}),t.jsx("span",{children:i}),x&&R&&t.jsx("span",{className:"chat-model-tag",children:R})]}),L?b:t.jsx("div",{className:"chat-message-content",children:N}),!g&&S,Fs(r.toolCalls),r.thinkingOutput&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:"Thinking"}),t.jsx("pre",{className:"chat-message-thinking-content",children:xt(r.thinkingOutput)})]}),_,t.jsx("div",{className:"chat-message-time",children:Ls(r.createdAt)})]})});function oa({projectId:s,addToast:r,experimentalFeatures:l}){const{activeSession:i,sessionsLoading:u,messages:x,messagesLoading:R,isStreaming:E,streamingText:D,streamingThinking:C,streamingToolCalls:Q,selectSession:S,createSession:L,archiveSession:g,deleteSession:ee,sendMessage:N,stopStreaming:_,pendingMessage:b,clearPendingMessage:M,searchQuery:A,setSearchQuery:T,filteredSessions:I}=On(s,r),[J,Y]=n.useState(!1),z=l?.chatRooms===!0,[h,p]=n.useState(()=>{try{if(localStorage.getItem(Bt)==="rooms"&&z)return"rooms"}catch{}return"direct"}),o=Bn(s,r),[c,m]=n.useState(()=>{const e=Rs(h,h==="rooms"?o.activeRoom?.id:i?.id);return As(e)}),[y,k]=n.useState(null),[Z,F]=n.useState(null),[G,ke]=n.useState(null),[ue,ve]=n.useState(!0),[ie,Ue]=n.useState(Qn),[Fe,se]=n.useState(!1),[me,wt]=n.useState(new Map),[ne,oe]=n.useState([]),[Oe,ot]=n.useState(!0),[je,Me]=n.useState(!1),[Je,He]=n.useState(""),[ze,Re]=n.useState(0),[xe,ye]=n.useState(""),[fe,f]=n.useState(!1),[v,w]=n.useState(0),[$,te]=n.useState(-1),[H,ae]=n.useState(!1),[U,K]=n.useState([]),[V,W]=n.useState(!1),[O,q]=n.useState(!1),[re,we]=n.useState({}),[ct,Be]=n.useState(!1),{pushNav:Wt}=bn(),[,Ye]=n.useState(!1),[_s,Us]=n.useState({top:0,left:0}),B=vn({projectId:s}),St=n.useCallback(e=>{if(!e||!B.mentionActive)return;const a=e.getBoundingClientRect();Us({top:a.top-260,left:a.left+8})},[B.mentionActive]),qt=n.useRef(null),Xt=n.useRef(null),Ae=n.useRef(!1),Ct=n.useRef(null),Jt=n.useRef(null),Te=n.useRef(null),Ee=n.useRef(null),Se=n.useRef(null),ge=n.useRef(null),ce=n.useRef(null),Yt=n.useRef(null),Qt=n.useRef([]),Qe=n.useRef(0),Ze=n.useRef(new Map),P=xn()==="mobile";n.useEffect(()=>{try{const e=localStorage.getItem(Ms);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const d=Math.max(pt,Math.min(bt,a));Ue(d)}catch{}},[]),n.useEffect(()=>{try{const e=localStorage.getItem(Bt);if(e==="direct"){p("direct");return}e==="rooms"&&z&&p("rooms")}catch{}},[z]),n.useEffect(()=>{if(!z&&h==="rooms"){p("direct");return}try{localStorage.setItem(Bt,h)}catch{}},[z,h]);const le=Rs(h,h==="rooms"?o.activeRoom?.id:i?.id),Nt=n.useRef(le);n.useEffect(()=>{le!==Nt.current&&(Nt.current=le,m(As(le)))},[le]),n.useEffect(()=>{if(!(!le||Nt.current!==le))try{if(c){localStorage.setItem(le,c);return}localStorage.removeItem(le)}catch{}},[le,c]);const de=z&&h==="rooms"&&!!o.activeRoom,{keyboardOverlap:lt,viewportHeight:Zt,viewportOffsetTop:es,keyboardOpen:et}=yn({enabled:P&&(!!i||de)}),ts=lt>0||es>0,ss=et&&ts?{"--keyboard-overlap":`${lt}px`,"--vv-offset-top":`${es}px`,...Zt!==null?{"--vv-height":`${Zt}px`}:{}}:{},ns=`chat-thread${et&&ts?" chat-thread--keyboard-active":""}`,pe=n.useMemo(()=>{const e=Je.trim().toLowerCase();return(e?ne.filter(d=>d.name.toLowerCase().includes(e)):ne).slice(0,10)},[ne,Je]),Ge=n.useMemo(()=>Array.from(me.values()),[me]),Ce=n.useMemo(()=>!z||h!=="rooms"||!o.activeRoom?null:{roomId:o.activeRoom.id,roomName:o.activeRoom.name,memberIds:new Set(o.activeRoomMembers.map(e=>e.agentId))},[z,h,o.activeRoom,o.activeRoomMembers]),_e=n.useMemo(()=>{const e=Ge.filter(j=>wn(j.name,xe));if(!Ce)return e;const a=e.filter(j=>Ce.memberIds.has(j.id));if(xe.trim().length===0)return a;const d=e.filter(j=>!Ce.memberIds.has(j.id));return[...a,...d]},[Ge,xe,Ce]),kt=n.useMemo(()=>{const e=new Map;for(const a of Ge)e.set(a.name.toLowerCase(),a);return e},[Ge]);n.useEffect(()=>{Re(0)},[pe]),n.useEffect(()=>{w(0)},[xe,fe]),n.useEffect(()=>()=>{Se.current!==null&&window.clearTimeout(Se.current)},[]);const as=n.useCallback(()=>{const e=ge.current;if(!e)return;const d=e.scrollTop+e.clientHeight>=e.scrollHeight-50;q(!d),Ae.current=!d},[]),he=n.useCallback(e=>{if(!e.isConnected)return;let a=0,d=0,j=-1;const X=6,be=()=>{if(e.isConnected){if(e.scrollTop=e.scrollHeight,e.scrollHeight===j?d+=1:(d=0,j=e.scrollHeight),a+=1,a>=X||d>=2){q(!1),Ae.current=!1;return}window.requestAnimationFrame(be)}};be()},[]),tt=n.useCallback(()=>{const e=ge.current;e&&he(e)},[he]);n.useLayoutEffect(()=>{Ee.current!==null&&(window.clearTimeout(Ee.current),Ee.current=null);const e=de?o.activeRoom?.id??null:i?.id??null;if(!e){Ct.current=null;return}const a={threadId:e,loaded:de?!o.messagesLoading:!R,hasMessages:de?o.messages.length>0:x.length>0},d=Ct.current,j=d?.threadId!==e,X=d?.threadId===e&&!d.loaded&&a.loaded,be=d?.threadId===e&&!d.hasMessages&&a.hasMessages;if(!(d===null||j||X||be))return;const Ne=ge.current;if(Ne)return he(Ne),de||(Ee.current=window.setTimeout(()=>{if(Ee.current=null,Ae.current)return;const Ve=ge.current;Ve&&he(Ve)},250)),Ct.current=a,()=>{Ee.current!==null&&(window.clearTimeout(Ee.current),Ee.current=null)}},[de,o.activeRoom?.id,o.messages.length,o.messagesLoading,i?.id,x.length,R,he]);const Os=de?o.messages:x;n.useEffect(()=>{Ae.current||tt()},[Os,D,C,E,tt]),n.useEffect(()=>{lt<=0||!ge.current||tt()},[lt,tt]),Sn(P&&et),n.useEffect(()=>{const e=()=>k(null);if(y)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[y]),n.useEffect(()=>{if(!P||!et)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[P,et]),n.useEffect(()=>{if(!P||!i)return;const e=()=>{const a=ce.current;a&&document.activeElement===a&&(a.blur(),window.setTimeout(()=>{a.focus({preventScroll:!0})},0))};return document.addEventListener("visibilitychange",e),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",e),window.removeEventListener("pageshow",e)}},[P,i]),n.useEffect(()=>{const e=Jt.current;if(Jt.current=h,h!=="direct"||e!==null&&e!=="rooms")return;const a=ge.current;a&&(he(a),Ae.current=!1,q(!1))},[h,he]),n.useEffect(()=>{if(!i&&!de||de&&!P)return;const e=()=>{const d=ge.current;d&&(he(d),Ae.current=!1,q(!1),Te.current!==null&&(window.clearTimeout(Te.current),Te.current=null),Te.current=window.setTimeout(()=>{if(Te.current=null,Ae.current)return;const j=ge.current;j&&he(j)},250))},a=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",a),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pageshow",e),Te.current!==null&&(window.clearTimeout(Te.current),Te.current=null)}},[P,i,de,he]),n.useEffect(()=>{if(de||typeof ResizeObserver>"u")return;const e=ge.current;if(!e)return;const a=new ResizeObserver(()=>{Ae.current||he(e)});return a.observe(e),()=>{a.disconnect()}},[de,he,i?.id,h]),n.useEffect(()=>{let e=!1;const a=s;return yt(void 0,s).then(d=>{if(e||a!==s)return;const j=new Map;for(const X of d)j.set(X.id,X);wt(j)}).catch(()=>{}),()=>{e=!0}},[s]),n.useEffect(()=>{let e=!1;return ot(!0),Cn(s).then(a=>{e||oe(a)}).catch(()=>{e||oe([])}).finally(()=>{e||ot(!1)}),()=>{e=!0}},[s]),n.useEffect(()=>{Qt.current=U},[U]),n.useEffect(()=>()=>{for(const e of Qt.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of Ze.current.values())window.clearTimeout(e);Ze.current.clear()},[]);const dt=n.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const d of Array.from(e)){if(!ea.includes(d.type))continue;const j=d.type.startsWith("image/");a.push({file:d,previewUrl:j?URL.createObjectURL(d):""})}a.length>0&&K(d=>[...d,...a])},[]),Hs=n.useCallback(e=>{K(a=>{const d=a[e];return d?.previewUrl&&URL.revokeObjectURL(d.previewUrl),a.filter((j,X)=>X!==e)})},[]),Bs=n.useCallback(e=>{const a=e.clipboardData?.files;if(!a||a.length===0)return;const d=Array.from(a).filter(j=>j.type.startsWith("image/"));d.length!==0&&dt(d)},[dt]),Gs=n.useCallback(async e=>{try{await L(e),Y(!1),P&&ve(!1)}catch{r("Failed to create chat session","error")}},[L,r,P]),De=n.useCallback(e=>{const a=e??ce.current;a&&(a.style.height="auto",a.style.height=`${Wn(a.scrollHeight)}px`)},[]);n.useLayoutEffect(()=>{De()},[c,De]);const st=n.useCallback(()=>{if(m(""),le)try{localStorage.removeItem(le)}catch{}Me(!1),He(""),f(!1),ye(""),te(-1),K(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[le]),jt=n.useCallback(()=>{const e=c.trim(),a=U.map(d=>d.file);if(!(!e&&a.length===0||!i)){if(e==="/clear"||e==="/new"){st(),_(),M(),L({agentId:i.agentId,modelProvider:i.modelProvider??void 0,modelId:i.modelId??void 0}).catch(()=>{r("Failed to clear conversation","error")});return}st(),N(e,a)}},[c,U,i,st,_,M,L,r,N]),Mt=n.useCallback(async()=>{const e=c.trim();if(e){if(z&&h==="rooms"){if(!o.activeRoom)return;const a=c;st();try{await o.sendRoomMessage(e)}catch(d){m(a);const j=d instanceof Error&&d.message.trim()?d.message:"Failed to send room message";r(j,"error")}return}jt()}},[c,z,h,o,st,r,jt]),Rt=n.useCallback(e=>{m(a=>{const d=Ts(a);if(!d)return a;const j=`/skill:${e.name} `,X=a.slice(0,d.start)+j+a.slice(d.end);return window.requestAnimationFrame(()=>{ce.current&&(De(ce.current),ce.current.focus())}),X}),Me(!1),He(""),Re(0)},[De]),ut=n.useCallback(e=>{const a=ce.current;if(!a||$<0)return;const d=a.selectionStart??Qe.current,j=a.selectionEnd??d,X=Math.max(d,j),be=Math.min($,X),Ne=`${`@${e.name.replace(/\s+/g,"_")}`} `,Ve=c.slice(0,be)+Ne+c.slice(X),We=be+Ne.length;m(Ve),f(!1),ye(""),w(0),te(-1),window.requestAnimationFrame(()=>{ce.current&&(De(ce.current),ce.current.focus(),ce.current.setSelectionRange(We,We))})},[$,c,De]),rs=n.useCallback(e=>{if(Qe.current=e.currentTarget.selectionStart??Qe.current,B.mentionActive&&B.files.length>0){if(B.handleKeyDown(e,c),e.key==="Enter"||e.key==="Tab"){const a=B.files[B.selectedIndex];if(a){const d=B.selectFile(a,c);m(d),B.dismissMention(),Ye(!1)}}return}if(fe&&e.key==="ArrowDown"){e.preventDefault(),_e.length>0&&w(a=>(a+1)%_e.length);return}if(fe&&e.key==="ArrowUp"){e.preventDefault(),_e.length>0&&w(a=>a===0?_e.length-1:a-1);return}if(fe&&e.key==="Enter"){e.preventDefault();const a=_e[v]??_e[0];a&&ut(a);return}if(fe&&e.key==="Escape"){e.preventDefault(),f(!1),ye(""),te(-1);return}if(je&&e.key==="ArrowDown"){e.preventDefault(),pe.length>0&&Re(a=>(a+1)%pe.length);return}if(je&&e.key==="ArrowUp"){e.preventDefault(),pe.length>0&&Re(a=>a===0?pe.length-1:a-1);return}if(je&&(e.key==="Enter"||e.key==="Tab")&&pe.length>0){e.preventDefault();const a=pe[ze]??pe[0];a&&Rt(a);return}if(je&&e.key==="Escape"){e.preventDefault(),Me(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Mt())},[fe,_e,v,ut,je,pe,ze,Rt,Mt,B,c]),mt=n.useCallback((e,a)=>{const d=ta(e,a);if(d){f(!0),ye(d.filter),te(d.start);return}f(!1),ye(""),te(-1)},[]),is=n.useCallback(e=>{const a=e.target,d=a.value,j=a.selectionStart??d.length;Qe.current=j,m(d);const X=Ts(d);X?(Me(!0),He(X.filter)):(Me(!1),He("")),mt(d,j),B.detectMention(d,j),Ye(B.mentionActive),B.mentionActive&&St(a),De(a)},[mt,De]),ht=n.useCallback(e=>{const a=e.currentTarget,d=a.selectionStart??a.value.length;Qe.current=d,mt(a.value,d),B.detectMention(a.value,d),Ye(B.mentionActive),B.mentionActive&&St(a)},[mt,B,St]),os=n.useCallback(e=>{e.key!=="Escape"&&ht(e)},[ht]),cs=n.useCallback(()=>{Se.current!==null&&window.clearTimeout(Se.current),Se.current=window.setTimeout(()=>{Me(!1),f(!1),ye(""),te(-1),Ye(!1),B.dismissMention(),Se.current=null},120)},[B]),ls=n.useCallback(()=>{Se.current!==null&&(window.clearTimeout(Se.current),Se.current=null),typeof window<"u"&&window.innerWidth<=768&&window.setTimeout(()=>{(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},0)},[]),Ks=n.useCallback(async e=>{k(null);try{await g(e),r("Conversation archived","success")}catch{r("Failed to archive conversation","error")}},[g,r]),Vs=n.useCallback(async e=>{F(null),k(null);try{await ee(e),r("Conversation deleted","success")}catch{r("Failed to delete conversation","error")}},[ee,r]),nt=n.useCallback(e=>{try{localStorage.setItem(Ms,String(e))}catch{}},[]),Ws=n.useCallback(e=>{if(P)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const d=e.clientX,j=ie;let X=j;document.body.style.userSelect="none";const be=Ne=>{const Ve=Ne.clientX-d,We=Math.max(pt,Math.min(bt,j+Ve));X=We,Ue(We),nt(We)},Ke=Ne=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(Ne.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",be),document.removeEventListener("pointerup",Ke),nt(X)};document.addEventListener("pointermove",be),document.addEventListener("pointerup",Ke)},[P,nt,ie]),qs=n.useCallback(e=>{if(P||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,d=e.key==="ArrowLeft"?-a:a,j=Math.max(pt,Math.min(bt,ie+d));Ue(j),nt(j)},[P,nt,ie]),ds=n.useCallback(e=>{S(e),Be(!1),P&&ve(!1)},[S,P]),At=n.useCallback(()=>{S(""),ve(!0),Be(!1)},[S]),Tt=n.useCallback(()=>{o.selectRoom(null),ve(!0),Be(!1)},[o]),Xs=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(Pn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:"Start a new conversation"}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>Y(!0),children:[t.jsx(gt,{size:16}),"New Chat"]})]}),Ie=js(i?.modelProvider,i?.modelId),$e=i?.modelProvider??null,Et=!!(i||E||x.length>0),ft=h==="rooms"?de:!!i,us=n.useRef(ft);n.useEffect(()=>{const e=us.current;us.current=ft,P&&(e||!ft||Wt({type:"view",revert:h==="rooms"?Tt:At}))},[h,At,Tt,ft,P,Wt]);const Dt=i?.agentId===Xe?Ie??"Fusion":i?.title||me.get(i?.agentId??"")?.name||i?.agentId||"Chat",ms=!!(Ie&&Ie!==Dt),Js=P&&h==="direct"&&!!i,It=me.get(i?.agentId??"")?.name||(i?.agentId===Xe?Ie??"Fusion":i?.agentId?.slice(0,30)??"Fusion"),$t=!1,Pt=i?.agentId===Xe,Ys=b.length>50?`${b.slice(0,50)}…`:b,Qs=n.useCallback(()=>{ae(e=>!e)},[]);n.useEffect(()=>{if(!ct)return;const e=a=>{Xt.current?.contains(a.target)||Be(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[ct]),n.useEffect(()=>{(!P||h!=="direct"||ue)&&Be(!1)},[P,h,ue]);const Lt=n.useCallback((e,a)=>{const d=Ze.current.get(e);d&&window.clearTimeout(d),we(X=>({...X,[e]:a}));const j=window.setTimeout(()=>{we(X=>{const{[e]:be,...Ke}=X;return Ke}),Ze.current.delete(e)},2e3);Ze.current.set(e,j)},[]),hs=n.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),Lt(e,"success")}catch{Lt(e,"error")}},[Lt]),Zs=n.useCallback((e,a=!1)=>a?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:e}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx($s,{remarkPlugins:[Ps],components:zs,children:e})}),[]),Ft=i?.agentId===Xe,zt=n.useCallback((e,a,d)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${re[e]==="success"?" chat-message-copy-action--success":""}${re[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":d??`chat-copy-response-${e}`,"aria-label":re[e]==="success"?"Response copied":re[e]==="error"?"Copy failed":"Copy response",onClick:()=>{hs(e,a)},children:re[e]==="success"?t.jsx(Nn,{size:14}):t.jsx(kn,{size:14})}),[re,hs]);return t.jsxs("div",{className:"chat-view",children:[t.jsxs("div",{className:`chat-sidebar${ue?"":" chat-sidebar--hidden"}`,style:P?void 0:{width:`${ie}px`},children:[z&&t.jsxs("div",{className:"chat-sidebar-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${h==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":h==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>p("direct"),children:"Direct"}),t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${h==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":h==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>p("rooms"),children:"Rooms"})]}),!z||h==="direct"?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-sidebar-search-container",children:t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx(jn,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:A,onChange:e=>T(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:u?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:"Loading..."}):I.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:"No conversations yet"}):I.map(e=>t.jsxs("div",{className:`chat-session-item${i?.id===e.id?" chat-session-item--active":""}`,onClick:()=>ds(e.id),onContextMenu:a=>{a.preventDefault(),k({sessionId:e.id,x:a.clientX,y:a.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsx("button",{className:"chat-session-delete-btn",onClick:a=>{a.stopPropagation(),F(e.id)},"data-testid":"chat-session-delete-btn","aria-label":"Delete conversation",children:t.jsx(Ut,{size:14})}),t.jsx("div",{className:"chat-session-title",children:e.title||"Untitled"}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||"No messages"}),t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[e.modelProvider&&t.jsx(rt,{provider:e.modelProvider,size:"sm"}),t.jsx("span",{children:me.get(e.agentId)?.name||(e.agentId===Xe?js(e.modelProvider,e.modelId)??"Fusion":e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?Ls(e.updatedAt):""})]})]},e.id))})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[t.jsx("div",{className:"chat-sidebar-rooms-header",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary","data-testid":"chat-create-room-btn",onClick:()=>se(!0),children:[t.jsx(gt,{size:14}),"Create room"]})}),o.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:"No rooms yet."}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:o.rooms.map(e=>{const a=o.activeRoom?.id===e.id;return t.jsxs("div",{role:"button",tabIndex:0,className:`chat-room-item${a?" chat-room-item--active":""}`,"data-testid":`chat-room-item-${e.slug}`,onClick:()=>{o.selectRoom(e.id),P&&ve(!1)},onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),o.selectRoom(e.id),P&&ve(!1))},children:[t.jsxs("span",{className:"chat-room-item-details",children:[t.jsxs("span",{className:"chat-room-item-name",children:["#",e.name]}),a?t.jsxs("span",{className:"chat-room-item-meta",children:[o.activeRoomMembers.length," ",o.activeRoomMembers.length===1?"member":"members"]}):null]}),t.jsx("button",{type:"button",className:"btn-icon chat-room-item-delete","data-testid":`chat-room-delete-${e.slug}`,"aria-label":`Delete room ${e.name}`,onClick:d=>{d.stopPropagation(),ke(e.id)},children:t.jsx(Ut,{size:14})})]},e.id)})})]}),t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>Y(!0),"data-testid":"chat-new-btn",children:[t.jsx(gt,{size:14}),"New Chat"]})})]}),!P&&ue&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":pt,"aria-valuemax":bt,"aria-valuenow":ie,"aria-label":"Resize chat sidebar",tabIndex:0,onPointerDown:Ws,onKeyDown:qs}),y&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:y.y,left:y.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>Ks(y.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(Mn,{size:14}),"Archive"]}),t.jsxs("button",{onClick:()=>{k(null),F(y.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(Ut,{size:14}),"Delete"]})]}),Z&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>F(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:"Delete Conversation?"}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:"This action cannot be undone. All messages in this conversation will be permanently deleted."}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>F(null),children:"Cancel"}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Vs(Z),children:"Delete"})]})]})}),z&&G&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>ke(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:"Delete Room?"}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:"This action cannot be undone. This room and all its messages will be permanently deleted."}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>ke(null),children:"Cancel"}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await o.deleteRoom(G),ke(null)}catch{r("Failed to delete room","error")}})()},children:"Delete"})]})]})}),z&&h==="rooms"?t.jsxs("div",{className:ns,style:ss,children:[o.activeRoom?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-room-thread-header",children:[P&&t.jsx("button",{className:"btn-icon",onClick:Tt,"data-testid":"chat-back-btn",children:t.jsx(bs,{size:16})}),t.jsxs("div",{className:"chat-thread-header-title",children:["#",o.activeRoom.name]}),t.jsx("div",{className:"chat-room-thread-members",children:o.activeRoomMembers.map(e=>t.jsx(Is,{agent:me.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:ge,onScroll:as,children:[o.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:"Loading messages..."}):o.messages.length===0?t.jsx("div",{className:"chat-empty-state",children:"No messages yet. Start the conversation!"}):o.messages.map(e=>{const a=e.senderAgentId?me.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):"You",d={id:e.id,sessionId:e.roomId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput??void 0,toolCalls:void 0,fallbackInfo:void 0,attachments:e.attachments,createdAt:e.createdAt};return t.jsx(Gt,{message:d,forcePlain:H,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:o.activeRoom?.id??null,mentionAgentsByName:kt,roomContext:Ce},e.id)}),t.jsx("div",{ref:qt})]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:"Select a room or create one"}),o.activeRoom&&t.jsx("div",{className:"chat-input-area",children:t.jsxs("div",{className:"chat-input-row",children:[t.jsxs("div",{className:"chat-input-wrapper",children:[t.jsx("textarea",{ref:ce,className:"chat-input-textarea",placeholder:"Type a message...",value:c,onChange:is,onKeyDown:rs,onKeyUp:os,onClick:ht,onBlur:cs,onFocus:ls,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||document.activeElement!==e.currentTarget&&(e.preventDefault(),e.currentTarget.focus({preventScroll:!0}))},rows:1,"data-testid":"chat-input"}),t.jsx(vs,{agents:Ge,filter:xe,highlightedIndex:v,visible:fe,onSelect:ut,position:"below",roomMemberIds:Ce?.memberIds,roomName:Ce?.roomName})]}),t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{e.pointerType&&e.pointerType!=="mouse"&&e.preventDefault()},onMouseDown:e=>{e.preventDefault()},onClick:()=>{Mt()},disabled:!c.trim(),"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(xs,{size:16})})]})})]}):t.jsxs("div",{className:ns,style:ss,children:[(Et||!P)&&t.jsxs("div",{className:"chat-thread-header",children:[P&&Et&&t.jsx("button",{className:"btn-icon",onClick:At,"data-testid":"chat-back-btn",children:t.jsx(bs,{size:16})}),t.jsx("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:Js?t.jsxs("div",{className:"chat-mobile-session-menu",ref:Xt,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":ct,onClick:()=>Be(e=>!e),children:[$e?t.jsx(rt,{provider:$e,size:"md"}):t.jsx(it,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:Dt}),ms&&t.jsx("span",{className:"chat-model-tag",children:Ie}),t.jsx(ys,{size:16,"aria-hidden":"true"})]}),ct&&t.jsx("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:I.map(e=>t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${i?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>ds(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||"Untitled"})},e.id))})]}):t.jsxs(t.Fragment,{children:[$e?t.jsx(rt,{provider:$e,size:"md"}):t.jsx(it,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:Dt}),ms&&t.jsx("span",{className:"chat-model-tag",children:Ie})]})}),Et&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${H?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":H?"Show all messages as rendered Markdown":"Show all messages as plain text",onClick:Qs,children:H?t.jsx(Rn,{size:14}):t.jsx(An,{size:14})}),!P&&t.jsxs("button",{className:"btn btn-sm btn-primary chat-thread-header-new-chat",onClick:()=>Y(!0),"data-testid":"chat-thread-new-chat-btn",children:[t.jsx(gt,{size:14}),"New Chat"]})]}),t.jsxs("div",{className:"chat-messages",ref:ge,onScroll:as,children:[E?t.jsxs(t.Fragment,{children:[x.map(e=>t.jsx(Gt,{message:e,forcePlain:H,agentName:It,hideAssistantIdentity:Pt,showAssistantModelTag:$t,activeModelTag:Ie,activeModelProvider:$e,activeSessionId:i?.id??null,mentionAgentsByName:kt,roomContext:null,copyAction:Ft&&e.role==="assistant"?zt(e.id,e.content):void 0},e.id)),t.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[!Pt&&t.jsxs("div",{className:"chat-message-avatar",children:[$e?t.jsx(rt,{provider:$e,size:"sm"}):t.jsx(it,{size:14}),t.jsx("span",{children:It}),$t]}),D?Zs(D,H):t.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:C?"Thinking…":"Connecting…"}),Ft&&D&&zt("__streaming__",D,"chat-copy-response-streaming"),Fs(Q),C&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:"Thinking"}),t.jsx("pre",{className:"chat-message-thinking-content",children:xt(C)})]}),t.jsxs("div",{className:"chat-typing-indicator",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})]})]}):R?t.jsx("div",{className:"chat-empty-state",children:"Loading messages..."}):x.length===0&&!i?Xs():x.length===0&&i?t.jsx("div",{className:"chat-empty-state",children:"No messages yet. Start the conversation!"}):t.jsx(t.Fragment,{children:x.map(e=>t.jsx(Gt,{message:e,forcePlain:H,agentName:It,hideAssistantIdentity:Pt,showAssistantModelTag:$t,activeModelTag:Ie,activeModelProvider:$e,activeSessionId:i?.id??null,mentionAgentsByName:kt,roomContext:null,copyAction:Ft&&e.role==="assistant"?zt(e.id,e.content):void 0},e.id))}),t.jsx("div",{ref:qt})]}),O&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:tt,children:[t.jsx(ys,{size:14}),"Latest"]}),i&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Yt,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{dt(e.target.files),e.target.value=""}}),je&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Oe?t.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):pe.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:Je?"No skills found":"No skills available"}):pe.map((e,a)=>t.jsxs("button",{type:"button",role:"option","aria-selected":a===ze,className:`chat-skill-menu-item${a===ze?" chat-skill-menu-item--highlighted":""}`,onMouseDown:d=>d.preventDefault(),onMouseEnter:()=>Re(a),onClick:()=>Rt(e),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.relativePath,children:e.relativePath})]},e.id))}),U.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:U.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Hs(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":"Attach files",onClick:()=>Yt.current?.click(),children:t.jsx(Tn,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${V?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),W(!0)},onDragLeave:()=>W(!1),onDrop:e=>{e.preventDefault(),W(!1),dt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:ce,className:"chat-input-textarea",placeholder:"Type a message...",value:c,onChange:is,onKeyDown:rs,onKeyUp:os,onClick:ht,onBlur:cs,onFocus:ls,onPaste:Bs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||document.activeElement!==e.currentTarget&&(e.preventDefault(),e.currentTarget.focus({preventScroll:!0}))},rows:1,"data-testid":"chat-input"}),t.jsx(vs,{agents:Ge,filter:xe,highlightedIndex:v,visible:fe,onSelect:ut,position:"below",roomMemberIds:Ce?.memberIds,roomName:Ce?.roomName}),t.jsx(En,{visible:B.mentionActive&&!fe,position:_s,files:B.files,selectedIndex:B.selectedIndex,onSelect:e=>{const a=B.selectFile(e,c);m(a),B.dismissMention(),Ye(!1),ce.current?.focus()},loading:B.loading}),b&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:`Queued: ${Ys}`}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:M,children:"×"})]})]}),E?t.jsx("button",{className:"chat-input-stop",onClick:_,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:t.jsx(Dn,{size:14})}):t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{e.pointerType&&e.pointerType!=="mouse"&&e.preventDefault()},onMouseDown:e=>{e.preventDefault()},onClick:()=>{jt()},disabled:!c.trim()&&U.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(xs,{size:16})})]})]})]}),z&&t.jsx(Kn,{isOpen:Fe,onClose:()=>se(!1),projectId:s,existingRoomNames:o.rooms.map(e=>e.name),onCreate:async e=>{await o.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),h!=="rooms"&&p("rooms"),se(!1),P&&ve(!1)}}),J&&t.jsx(sa,{projectId:s,onClose:()=>Y(!1),onCreate:Gs})]})}export{oa as ChatView,Wn as clampChatInputHeight};