@runfusion/fusion 0.73.0-beta.3 → 0.73.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +4516 -1896
- package/dist/child-process-worker.js +2647 -936
- package/dist/client/.vite/manifest.json +266 -266
- package/dist/client/assets/{AgentDetailView-lJqxsPOR.js → AgentDetailView-BksUqG3-.js} +4 -4
- package/dist/client/assets/AgentDetailView-CoeSgMXS.css +1 -0
- package/dist/client/assets/AgentPermissionPolicyEditor-CXib-igK.css +1 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor-De4wK_UT.js → AgentPermissionPolicyEditor-uXItB9Br.js} +1 -1
- package/dist/client/assets/AgentsView-m8J2hu5I.js +24 -0
- package/dist/client/assets/{ChatView-BeQXaz7_.js → ChatView-DsAg47W3.js} +3 -3
- package/dist/client/assets/{CommandCenter-BJZCaPLj.js → CommandCenter-DHt4n__j.js} +1 -1
- package/dist/client/assets/{DevServerView-DQgwQXKx.js → DevServerView-D7miVumP.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-B2UVwp6F.js → DirectoryPicker-C0jXctyL.js} +1 -1
- package/dist/client/assets/{DocumentsView-DOeYrhvg.js → DocumentsView-CghLIkD9.js} +1 -1
- package/dist/client/assets/{EvalsView-LwepJ9Ud.js → EvalsView-MIoF_8pc.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-DVNSzflw.js → ExperimentalAgentOnboardingModal-Dz4H4H2a.js} +1 -1
- package/dist/client/assets/{GoalsView-__LpXw4S.js → GoalsView-yPwwGY-D.js} +1 -1
- package/dist/client/assets/{InsightsView-Dv388uaO.js → InsightsView-DP4X2uEa.js} +1 -1
- package/dist/client/assets/{MemoryView-ChCbEfZT.js → MemoryView-m3ceUV-6.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DehAjrqN.js → PiExtensionsManager-KuBkruy9.js} +1 -1
- package/dist/client/assets/PluginManager-CaQ-dg5n.js +1 -0
- package/dist/client/assets/{PullRequestView-BvmajsBq.js → PullRequestView-BPIlRW8u.js} +1 -1
- package/dist/client/assets/{ReportModal-DM9B_h_w.js → ReportModal-DanKtCSD.js} +5 -5
- package/dist/client/assets/{ResearchView-BzXSgUhp.js → ResearchView-Ch6GjDZD.js} +2 -2
- package/dist/client/assets/{SecretsView-COBqEdJj.js → SecretsView-DkxXeLAr.js} +1 -1
- package/dist/client/assets/{SessionTerminal-BUw_FTlh.js → SessionTerminal-BxxAyQqQ.js} +1 -1
- package/dist/client/assets/SettingsModal-C2rdGmkE.js +21 -0
- package/dist/client/assets/SettingsModal-CMLHZBhX.css +1 -0
- package/dist/client/assets/{SettingsModal-CsLaIrqt.js → SettingsModal-Cflm-bXE.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-Bv3aZ9aU.js → SettingsTextareaRow-DPet7lKz.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-C-yMHTlW.js → SetupWizardModal-Bf0WCI07.js} +2 -2
- package/dist/client/assets/{SkillsView-kSHgkBar.js → SkillsView-BDSG7mTv.js} +1 -1
- package/dist/client/assets/{TodoView-DYoicJNY.js → TodoView-5nnuGetx.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-BtWrziOX.css → WorkflowNodeEditor-BNgkFJ_P.css} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-BwCbQtIT.js +8 -0
- package/dist/client/assets/{agent-import-generation-D6P8OUuV.js → agent-import-generation-DtGkjYSm.js} +1 -1
- package/dist/client/assets/app-B1lWYECC.js +13 -0
- package/dist/client/assets/{app-DegRNirF.js → app-B5SToHBH.js} +3 -3
- package/dist/client/assets/app-C4OYRIp7.js +13 -0
- package/dist/client/assets/app-Da8ENc4F.js +13 -0
- package/dist/client/assets/app-DlxXzx0y.js +13 -0
- package/dist/client/assets/app-yfHAC4cX.js +13 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DLqKCckA.js → architectureDiagram-3BPJPVTR-D1K8DpAy.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-DRz6F8wZ.js → blockDiagram-GPEHLZMM-CX1y35p9.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CJ9glQAp.js → c4Diagram-AAUBKEIU-BcbbCnmZ.js} +1 -1
- package/dist/client/assets/channel-DU48uM5V.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-CjIBb3ln.js → chunk-2J33WTMH-Wp3zyvV2.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-DrcoEr1E.js → chunk-4BX2VUAB-BuVwTDYq.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-DU-WcuA9.js → chunk-55IACEB6-CzvhQEXs.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-C5Lklr3l.js → chunk-727SXJPM-D-MIVOud.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DlyTTghY.js → chunk-AQP2D5EJ-DbuidBn6.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-D3C65m5Y.js → chunk-FMBD7UC4-uWKtFzDS.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-BZY-4WZF.js → chunk-ND2GUHAM-CeSIlejj.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CKUtTYy5.js → chunk-QZHKN3VN-BePmVND-.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BunN9MnY.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BunN9MnY.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DbpsF4N5.js → cose-bilkent-S5V4N54A-De9Bj_SA.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BwIo4me1.js → dagre-BM42HDAG-C5CmCySG.js} +1 -1
- package/dist/client/assets/{dashboard-view-C94UCci5.js → dashboard-view-CaUSpwyV.js} +1 -1
- package/dist/client/assets/{dashboard-view-BvAsW6UZ.js → dashboard-view-DsfVW3-8.js} +1 -1
- package/dist/client/assets/{dashboard-view-BMQm7Lt_.js → dashboard-view-j5rWyrQJ.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-C-d8XY1c.js → diagram-2AECGRRQ-DaZNoDA8.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-ByRrlL9w.js → diagram-5GNKFQAL-BLSbdVaK.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BK7jb_J-.js → diagram-KO2AKTUF-BSzU_Az3.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-u2o4bYk6.js → diagram-LMA3HP47-RsRkbaSM.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-Dakk1V3D.js → diagram-OG6HWLK6-ChiWoR2j.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-Yp33v-Cf.js → erDiagram-TEJ5UH35-tJJ6w1wS.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-C4-dR2TA.js → flowDiagram-I6XJVG4X-BswRtnqd.js} +1 -1
- package/dist/client/assets/{folder-open-C9qq38qV.js → folder-open-DzTYX9Fp.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-C0CTCkFN.js → ganttDiagram-6RSMTGT7-QrrkFyh_.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DK0Dd5mm.js → gitGraphDiagram-PVQCEYII-4kdeySLk.js} +1 -1
- package/dist/client/assets/index-C77ORgtm.css +1 -0
- package/dist/client/assets/index-DReijQe4.js +2661 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-u5MwFb7j.js → infoDiagram-5YYISTIA-B8jwktA0.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-C7R6TziI.js → ishikawaDiagram-YF4QCWOH-uZUucrZK.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-Dom8W5Ab.js → journeyDiagram-JHISSGLW-CtT0-QvG.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-_47C02t3.js → kanban-definition-UN3LZRKU-BHEP6Q_z.js} +1 -1
- package/dist/client/assets/{mermaid.core-Cd3LKosp.js → mermaid.core-CyUOdPCI.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-D-qVOEin.js → mindmap-definition-RKZ34NQL-BnKIdn6I.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-B0TXvVbM.js → pieDiagram-4H26LBE5-CLlvgGA1.js} +1 -1
- package/dist/client/assets/{puzzle-BBYTjDQK.js → puzzle-Dz37Zb-E.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-KcFvcZPm.js → quadrantDiagram-W4KKPZXB-D9JMXqPE.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DEObokVc.js → requirementDiagram-4Y6WPE33-DlA5s0oV.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BGYnEp22.js → sankeyDiagram-5OEKKPKP-jZ9qX2PX.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BcYgyJRU.js → sequenceDiagram-3UESZ5HK-PtwRRZmQ.js} +1 -1
- package/dist/client/assets/{shield-alert-CZg8yaFA.js → shield-alert-BjiTG99h.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-BsTtbEqp.js → standing-instructions-template-DJCF_18R.js} +1 -1
- package/dist/client/assets/standing-instructions-template-Ddi_4TIk.css +1 -0
- package/dist/client/assets/{stateDiagram-AJRCARHV-CfZQIqmX.js → stateDiagram-AJRCARHV-CUxFPOtf.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-nBEPRSH7.js → stateDiagram-v2-BHNVJYJU-BZquUTBi.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DySyabS_.js → timeline-definition-PNZ67QCA-HZQcinlS.js} +1 -1
- package/dist/client/assets/{upload-DMd3zMLx.js → upload-C3LesDmE.js} +1 -1
- package/dist/client/assets/{users-9Pyvnn8K.js → users-DGiK8Vco.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-DPomfxp_.js → vennDiagram-CIIHVFJN-DRSTmg6N.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-BPfzngS8.js → wardley-L42UT6IY-DXS5Hs7x.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Yp4nidAP.js → wardleyDiagram-YWT4CUSO-CBPGDv2m.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-REgng603.js → xychartDiagram-2RQKCTM6-Bflc25BH.js} +1 -1
- package/dist/client/index.html +4 -2
- package/dist/client/version.json +1 -1
- package/dist/extension.js +3910 -1266
- package/dist/migrations/0000_initial.sql +4 -0
- package/dist/migrations/0033_fn-8505_wedge_notification.sql +5 -0
- package/dist/migrations/0034_milestone_assertion_provenance.sql +30 -0
- package/dist/migrations/0035_fn_8543_mission_lineage_stop.sql +31 -0
- package/dist/plugin-sdk/index.js +17 -0
- package/dist/plugins/.fusion-ce-agents/.fusion-ce-upstream-provenance.json +7 -0
- package/dist/plugins/.fusion-ce-agents/ce-adversarial-document-reviewer.md +115 -0
- package/dist/plugins/.fusion-ce-agents/ce-adversarial-reviewer.md +111 -0
- package/dist/plugins/.fusion-ce-agents/ce-agent-native-planning-strategist.md +71 -0
- package/dist/plugins/.fusion-ce-agents/ce-agent-native-reviewer.md +181 -0
- package/dist/plugins/.fusion-ce-agents/ce-ankane-readme-writer.md +50 -0
- package/dist/plugins/.fusion-ce-agents/ce-api-contract-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-architecture-strategist.md +53 -0
- package/dist/plugins/.fusion-ce-agents/ce-best-practices-researcher.md +122 -0
- package/dist/plugins/.fusion-ce-agents/ce-code-simplicity-reviewer.md +87 -0
- package/dist/plugins/.fusion-ce-agents/ce-coherence-reviewer.md +73 -0
- package/dist/plugins/.fusion-ce-agents/ce-correctness-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-data-integrity-guardian.md +75 -0
- package/dist/plugins/.fusion-ce-agents/ce-data-migration-reviewer.md +119 -0
- package/dist/plugins/.fusion-ce-agents/ce-deployment-verification-agent.md +164 -0
- package/dist/plugins/.fusion-ce-agents/ce-design-implementation-reviewer.md +94 -0
- package/dist/plugins/.fusion-ce-agents/ce-design-iterator.md +197 -0
- package/dist/plugins/.fusion-ce-agents/ce-design-lens-reviewer.md +56 -0
- package/dist/plugins/.fusion-ce-agents/ce-feasibility-reviewer.md +65 -0
- package/dist/plugins/.fusion-ce-agents/ce-figma-design-sync.md +172 -0
- package/dist/plugins/.fusion-ce-agents/ce-framework-docs-researcher.md +100 -0
- package/dist/plugins/.fusion-ce-agents/ce-git-history-analyzer.md +47 -0
- package/dist/plugins/.fusion-ce-agents/ce-issue-intelligence-analyst.md +207 -0
- package/dist/plugins/.fusion-ce-agents/ce-julik-frontend-races-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-learnings-researcher.md +254 -0
- package/dist/plugins/.fusion-ce-agents/ce-maintainability-reviewer.md +77 -0
- package/dist/plugins/.fusion-ce-agents/ce-pattern-recognition-specialist.md +62 -0
- package/dist/plugins/.fusion-ce-agents/ce-performance-oracle.md +115 -0
- package/dist/plugins/.fusion-ce-agents/ce-performance-reviewer.md +54 -0
- package/dist/plugins/.fusion-ce-agents/ce-pr-comment-resolver.md +63 -0
- package/dist/plugins/.fusion-ce-agents/ce-previous-comments-reviewer.md +68 -0
- package/dist/plugins/.fusion-ce-agents/ce-product-lens-reviewer.md +92 -0
- package/dist/plugins/.fusion-ce-agents/ce-project-standards-reviewer.md +84 -0
- package/dist/plugins/.fusion-ce-agents/ce-reliability-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-repo-research-analyst.md +263 -0
- package/dist/plugins/.fusion-ce-agents/ce-scope-guardian-reviewer.md +79 -0
- package/dist/plugins/.fusion-ce-agents/ce-security-lens-reviewer.md +48 -0
- package/dist/plugins/.fusion-ce-agents/ce-security-reviewer.md +54 -0
- package/dist/plugins/.fusion-ce-agents/ce-security-sentinel.md +98 -0
- package/dist/plugins/.fusion-ce-agents/ce-session-historian.md +89 -0
- package/dist/plugins/.fusion-ce-agents/ce-slack-researcher.md +133 -0
- package/dist/plugins/.fusion-ce-agents/ce-spec-flow-analyzer.md +87 -0
- package/dist/plugins/.fusion-ce-agents/ce-swift-ios-reviewer.md +107 -0
- package/dist/plugins/.fusion-ce-agents/ce-testing-reviewer.md +52 -0
- package/dist/plugins/.fusion-ce-agents/ce-web-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/.fusion-ce-upstream-provenance.json +7 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/SKILL.md +318 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/agents/slack-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/brainstorm-sections.md +354 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/handoff.md +172 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/html-rendering.md +662 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/markdown-rendering.md +236 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/synthesis-summary.md +271 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/universal-brainstorming.md +71 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/visual-probes.md +128 -0
- package/dist/plugins/.fusion-ce-skills/ce-brainstorm/scripts/visual-probe-server.js +419 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/SKILL.md +821 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/action-class-rubric.md +26 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/bulk-preview.md +112 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/cross-model-review.md +63 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/diff-scope.md +41 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/findings-schema.json +137 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/persona-catalog.md +63 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/adversarial-reviewer.md +102 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/agent-native-reviewer.md +173 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/api-contract-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/correctness-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/data-migration-reviewer.md +111 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/deployment-verification-agent.md +157 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/julik-frontend-races-reviewer.md +44 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/learnings-researcher.md +247 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/maintainability-reviewer.md +68 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/performance-reviewer.md +45 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/previous-comments-reviewer.md +59 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/project-standards-reviewer.md +75 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/reliability-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/security-reviewer.md +45 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/swift-ios-reviewer.md +99 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/testing-reviewer.md +43 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/review-output-template.md +170 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/subagent-template.md +199 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/tracker-defer.md +149 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/validator-template.md +89 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/references/walkthrough.md +249 -0
- package/dist/plugins/.fusion-ce-skills/ce-code-review/scripts/cross-model-adversarial-review.sh +218 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit/SKILL.md +105 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/SKILL.md +134 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/references/branch-creation.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/references/pr-description-writing.md +115 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/SKILL.md +712 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/assets/resolution-template.md +94 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/best-practices-researcher.md +115 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/data-integrity-guardian.md +68 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/framework-docs-researcher.md +93 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/pattern-recognition-specialist.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/performance-oracle.md +108 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/security-sentinel.md +91 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/session-historian.md +83 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/concepts-vocabulary.md +78 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/schema.yaml +231 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/references/yaml-schema.md +118 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/discover-sessions.sh +130 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-errors.py +254 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-metadata.py +456 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-skeleton.py +570 -0
- package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/validate-frontmatter.py +137 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/SKILL.md +257 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/references/anti-patterns.md +91 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/references/defense-in-depth.md +35 -0
- package/dist/plugins/.fusion-ce-skills/ce-debug/references/investigation-techniques.md +374 -0
- package/dist/plugins/.fusion-ce-skills/ce-doc-review/SKILL.md +70 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/SKILL.md +401 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/issue-intelligence-analyst.md +200 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/learnings-researcher.md +247 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/slack-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/web-researcher.md +121 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/divergent-ideation.md +89 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/html-rendering.md +662 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/ideation-sections.md +191 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/markdown-rendering.md +236 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/post-ideation-workflow.md +166 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/universal-ideation.md +107 -0
- package/dist/plugins/.fusion-ce-skills/ce-ideate/references/web-research-cache.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/SKILL.md +858 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/agent-native-planning-strategist.md +62 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/architecture-strategist.md +46 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/best-practices-researcher.md +114 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/data-integrity-guardian.md +68 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/data-migration-reviewer.md +103 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/deployment-verification-agent.md +157 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/framework-docs-researcher.md +93 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/git-history-analyzer.md +40 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/learnings-researcher.md +247 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/pattern-recognition-specialist.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/performance-oracle.md +108 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/repo-research-analyst.md +256 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/security-sentinel.md +91 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/slack-researcher.md +127 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/spec-flow-analyzer.md +80 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/web-researcher.md +121 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/approach-altitude.md +55 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/deepening-workflow.md +259 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/html-rendering.md +668 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/markdown-rendering.md +236 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/plan-handoff.md +126 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/plan-sections.md +405 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/synthesis-summary.md +396 -0
- package/dist/plugins/.fusion-ce-skills/ce-plan/references/universal-planning.md +168 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/SKILL.md +53 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/agents/pr-comment-resolver.md +56 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/evaluation-rubric.md +106 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/full-mode.md +283 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/targeted-mode.md +45 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/get-pr-comments +159 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/get-thread-for-comment +76 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/reply-to-pr-thread +33 -0
- package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/resolve-pr-thread +23 -0
- package/dist/plugins/.fusion-ce-skills/ce-strategy/SKILL.md +97 -0
- package/dist/plugins/.fusion-ce-skills/ce-strategy/references/interview.md +143 -0
- package/dist/plugins/.fusion-ce-skills/ce-strategy/references/strategy-template.md +89 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/SKILL.md +429 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/agents/figma-design-sync.md +165 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/execution-engines.md +85 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/non-code-execution.md +23 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/review-findings-followup.md +104 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/shipping-workflow.md +133 -0
- package/dist/plugins/.fusion-ce-skills/ce-work/references/tracker-defer.md +149 -0
- package/dist/plugins/fusion-plugin-compound-engineering/.bundled.reload-3.js +11266 -0
- package/dist/plugins/fusion-plugin-compound-engineering/.bundled.reload-4.js +11266 -0
- package/dist/plugins/fusion-plugin-dependency-graph/.bundled.reload-1.js +8206 -0
- package/dist/plugins/fusion-plugin-grok-runtime/.bundled.reload-2.js +26623 -0
- package/package.json +1 -1
- package/skill/fusion/references/extension-tools.md +1 -1
- package/skill/fusion/references/fusion-capabilities.md +1 -1
- package/dist/client/assets/AgentDetailView-C4vItBCo.css +0 -1
- package/dist/client/assets/AgentPermissionPolicyEditor-TpdlOWZW.css +0 -1
- package/dist/client/assets/AgentsView-CwizRdcA.js +0 -24
- package/dist/client/assets/PluginManager-DBhJ1i27.js +0 -1
- package/dist/client/assets/SettingsModal-BDgH9XID.js +0 -21
- package/dist/client/assets/SettingsModal-BXDnzDkJ.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-DLno6bSJ.js +0 -8
- package/dist/client/assets/app-B-IdUeIu.js +0 -13
- package/dist/client/assets/app-BsIXfnu-.js +0 -13
- package/dist/client/assets/app-C8muVNUU.js +0 -13
- package/dist/client/assets/app-D9ktpVhR.js +0 -13
- package/dist/client/assets/app-nBTNvNKK.js +0 -13
- package/dist/client/assets/channel-Dj4nOgJO.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DnkFo5Qy.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DnkFo5Qy.js +0 -1
- package/dist/client/assets/index-6FBJPKkr.css +0 -1
- package/dist/client/assets/index-BqLVwYoA.js +0 -2661
- package/dist/client/assets/standing-instructions-template-bQJ4X1gH.css +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.73.0-beta.
|
|
3
|
+
"version": "0.73.0-beta.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
|
|
6
6
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
|
@@ -211,7 +211,7 @@ Import GitLab project merge requests as Fusion review tasks using configured Git
|
|
|
211
211
|
|
|
212
212
|
### fn_task_plan
|
|
213
213
|
|
|
214
|
-
Create a task via AI-guided planning mode — interactive conversation to refine your idea into a well-specified task.
|
|
214
|
+
Create a task via AI-guided planning mode — interactive conversation to refine your idea into a well-specified task. Pass resumeSessionId to reopen an existing planning session (even one whose task was already created) and create another task from the evolved plan.
|
|
215
215
|
|
|
216
216
|
| Parameter | Type | Required | Description |
|
|
217
217
|
|-----------|------|----------|-------------|
|
|
@@ -45,7 +45,7 @@ All skill/extension tool invocations in this catalog use the public `fn_*` names
|
|
|
45
45
|
| `fn_task_import_gitlab_group_issues` | Import GitLab group issues as Fusion tasks using each issue's originating project identity. |
|
|
46
46
|
| `fn_task_browse_gitlab_merge_requests` | List GitLab project merge requests from the configured GitLab instance. |
|
|
47
47
|
| `fn_task_import_gitlab_merge_requests` | Import GitLab project merge requests as Fusion review tasks using configured GitLab HTTP API auth. |
|
|
48
|
-
| `fn_task_plan` | Create a task via AI-guided planning mode — interactive conversation to refine your idea into a well-specified task. |
|
|
48
|
+
| `fn_task_plan` | Create a task via AI-guided planning mode — interactive conversation to refine your idea into a well-specified task. Pass resumeSessionId to reopen an existing planning session (even one whose task was already created) and create another task from the evolved plan. |
|
|
49
49
|
| `fn_web_fetch` | Lightweight URL fetch (no JS rendering). Use agent-browser skill for JS-heavy pages. URL to fetch (http/https) Optional extraction hint for downstream summarization Timeout in milliseconds (default: 30000) Max bytes to return (default: 512000) |
|
|
50
50
|
| `fn_secret_get` | Read a secret by key using per-secret access policy. |
|
|
51
51
|
| `fn_experiment_finalize` | Group kept experiment runs into reviewable branches and finalize the session. Use dryRun=true to preview the plan without touching git. |
|
|
@@ -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;flex-wrap:wrap;gap:var(--space-sm) 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:1 1 auto;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;flex-wrap:wrap;gap:var(--space-sm);flex:0 1 auto;min-width:0}.agent-detail-controls{display:flex;align-items:center;flex-wrap:wrap;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;overflow-x:auto;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:none}.agent-detail-tabs::-webkit-scrollbar{display:none}.agent-detail-tab{display:flex;flex:0 0 auto;touch-action:pan-x pan-y;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:.875rem;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.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))}.prompt-size-summary{display:flex;align-items:center;gap:var(--space-sm)}.prompt-size-sparkline{width:calc(var(--space-2xl) * 2);height:calc(var(--space-xl) + var(--space-md));border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.prompt-size-sparkline-grid{fill:none;stroke:var(--text-muted);stroke-width:1}.prompt-size-sparkline-line{fill:none;stroke:var(--accent);stroke-width:2}.prompt-size-values{font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.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)}.agent-heartbeat-auto-claim-card{background:color-mix(in srgb,var(--surface) 60%,transparent);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.agent-heartbeat-preset-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}.agent-heartbeat-preset-label{display:block;color:var(--text);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;margin-bottom:calc(var(--space-xs) * .5)}.agent-heartbeat-preset-btn{min-height:calc(var(--space-xl) + var(--space-md));flex-shrink:0}@media(max-width:768px){.agent-heartbeat-preset-row{flex-direction:column;align-items:stretch}.agent-heartbeat-preset-btn{width:100%;min-height:calc(var(--space-xl) + var(--space-md))}.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-sm);row-gap:var(--space-sm);padding:var(--space-md);padding-top:max(var(--space-md),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-md)}.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;row-gap:var(--space-xs);column-gap:var(--space-sm);margin-top:var(--space-xs)}.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:.875rem;touch-action:pan-x pan-y;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-hero__heading{flex-wrap:wrap;row-gap:var(--space-sm);column-gap:var(--space-md)}.dashboard-summary-hero__meta{align-items:flex-start;row-gap:var(--space-lg);column-gap:var(--space-md)}.dashboard-summary-hero__health{overflow-wrap:anywhere}.dashboard-summary-skills{flex-direction:column;align-items:flex-start;row-gap:var(--space-sm)}.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){.dashboard-summary-card{padding:var(--space-md)}.dashboard-summary-hero__heading{row-gap:var(--space-md)}.dashboard-summary-hero__meta{row-gap:var(--space-lg);column-gap:var(--space-sm)}.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}}.agent-permission-inherit-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);margin-bottom:var(--space-sm)}.agent-capability-grants{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-capability-grants h4{margin:0;color:var(--text-primary);font-size:var(--font-size-md)}.agent-capability-grants-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--size-card-min, 16rem)),1fr));gap:var(--space-sm)}.agent-capability-grant-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-capability-grant-name{display:block;color:var(--text-primary);font-weight:600}@media(max-width:768px){.agent-capability-grants-grid{grid-template-columns:1fr}.agent-capability-grant-row,.agent-permission-inherit-banner{align-items:flex-start;flex-direction:column}}.agent-memory-file-editor{border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column;min-height:320px;max-height:55vh}.agent-memory-file-editor .cm-editor{height:100%;min-height:0}.agent-memory-file-editor .cm-scroller{overflow:auto}.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);background:var(--card-hover)}.reflection-card:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.reflection-card--expanded{border-color:var(--accent)}.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(--accent) 15%,transparent);color:var(--accent)}.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(--accent)}.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 +0,0 @@
|
|
|
1
|
-
.agent-policy-editor{padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:var(--space-md)}.agent-policy-table{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-policy-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,14rem);gap:var(--space-md);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-policy-cell{display:flex;flex-direction:column;gap:var(--space-xs)}.agent-policy-description{color:var(--text-muted);font-size:.75rem}.agent-policy-inherit-note{color:var(--text-dim);font-size:.75rem}.agent-policy-examples,.agent-policy-exempt-list{margin:0;padding-left:var(--space-xl);display:grid;gap:var(--space-xs)}.agent-policy-examples code,.agent-policy-exempt-list code{font-family:var(--font-mono);font-size:.75rem}.agent-policy-tool-rules{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.agent-policy-tool-rules h4,.agent-policy-tool-rules p{margin:0}.agent-policy-tool-rules p,.agent-policy-tool-empty{color:var(--text-muted);font-size:.875rem}.agent-policy-tool-list{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-policy-tool-row,.agent-policy-tool-add{display:grid;grid-template-columns:minmax(0,1fr) minmax(9rem,12rem) auto;gap:var(--space-sm);align-items:end}.agent-policy-tool-row label,.agent-policy-tool-add label{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.agent-policy-tool-row .input,.agent-policy-tool-add .input{width:100%}.agent-policy-exempt{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-sm);color:var(--text-muted)}.agent-policy-exempt summary{cursor:pointer;color:var(--text);font-weight:600}.agent-policy-exempt p{margin:var(--space-sm) 0}@media(max-width:768px){.agent-policy-row,.agent-policy-tool-row,.agent-policy-tool-add{grid-template-columns:1fr}.agent-policy-tool-row .btn,.agent-policy-tool-add .btn{width:100%}.agent-policy-examples,.agent-policy-exempt-list{padding-left:var(--space-lg)}}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-lJqxsPOR.js","assets/vendor-react-SZ_qB27O.js","assets/index-BqLVwYoA.js","assets/vendor-i18n-GF3RlKbq.js","assets/vendor-codemirror-jBKmHyH0.js","assets/vendor-reactflow-9C3XTE7_.js","assets/vendor-reactflow-C5ap-Sga.css","assets/vendor-xterm-BNq00GSj.js","assets/vendor-xterm-LZoznX6r.css","assets/index-6FBJPKkr.css","assets/AgentPermissionPolicyEditor-De4wK_UT.js","assets/AgentPermissionPolicyEditor-TpdlOWZW.css","assets/standing-instructions-template-BsTtbEqp.js","assets/standing-instructions-template-bQJ4X1gH.css","assets/ExperimentalAgentOnboardingModal-DVNSzflw.js","assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css","assets/AgentDetailView-C4vItBCo.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as Xt,bJ as rt,dK as rs,am as Ct,Z as is,bc as os,ch as Dt,dL as cs,c9 as _a,dM as $t,aG as Ht,ay as ds,C as us,g as Ma,bv as Ot,cT as Ia,ct as gs,bH as ms,bo as Vt,dN as hs,ac as ps,ai as bs,B as xs,al as wt,dz as ma,cf as fs,aI as ha,bL as vs,aj as js,ak as Ns,dO as ys,aH as ks,L as Tt,aZ as ht,R as lt,X as pa,du as Cs,dP as ws,bw as bt,aa as Ss,bq as Et,aV as As,aW as Rs,bp as pe,c1 as pt,dQ as Ts,cW as Es,dR as Ps,dS as ba,V as _s,dT as Ms,P as xa,dU as Is,c3 as Pt,c2 as Nt,x as fa,dV as Ls,cB as Fs,dW as zs,dX as Ds,cb as va,a2 as $s,ca as Hs,cd as Os,cv as yt,dY as Vs,ci as ja,cc as Bs}from"./index-BqLVwYoA.js";import{r as s,j as e,b as Ws}from"./vendor-react-SZ_qB27O.js";import{u as Pe}from"./vendor-i18n-GF3RlKbq.js";import{c as _t,s as Us,g as Gs,f as Na}from"./agent-import-generation-D6P8OUuV.js";import{w as ya,a as Ks,f as Xs}from"./standing-instructions-template-BsTtbEqp.js";import{ExperimentalAgentOnboardingModal as Ys}from"./ExperimentalAgentOnboardingModal-DVNSzflw.js";import{U as Bt}from"./upload-DMd3zMLx.js";import{F as Zs}from"./folder-open-C9qq38qV.js";import{O as Mt,i as ka,r as qs}from"./agentsOrgChartLayout-BMvyuaLA.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.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 Js=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],Ca=Xt("network",Js);/**
|
|
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 Qs=[["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"}]],en=Xt("zoom-in",Qs);/**
|
|
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 tn=[["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"}]],an=Xt("zoom-out",tn);function wa(l){return typeof l=="number"&&Number.isFinite(l)?l:0}function st(l){return l.toLocaleString()}function sn({agents:l}){const{t:d}=Pe("app"),{rows:y,totalInputTokens:p,totalOutputTokens:a,totalTokens:i}=s.useMemo(()=>{const m=l.map(n=>{const v=wa(n.totalInputTokens),j=wa(n.totalOutputTokens);return{id:n.id,name:n.name,inputTokens:v,outputTokens:j,totalTokens:v+j}}).sort((n,v)=>v.totalTokens-n.totalTokens||n.name.localeCompare(v.name)||n.id.localeCompare(v.id));return{rows:m,totalInputTokens:m.reduce((n,v)=>n+v.inputTokens,0),totalOutputTokens:m.reduce((n,v)=>n+v.outputTokens,0),totalTokens:m.reduce((n,v)=>n+v.totalTokens,0)}},[l]),f=i>0;return e.jsxs("section",{className:"agent-token-stats-panel","aria-label":d("agents.tokenStatistics","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:d("agents.tokenUsageByAgent","Token Usage by Agent")})}),e.jsxs("div",{className:"agent-token-stats-panel__totals",role:"list","aria-label":d("agents.tokenUsageTotals","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:d("agents.inputTokens","Input Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:st(p)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:d("agents.outputTokens","Output Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:st(a)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:d("agents.combinedTokens","Combined Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:st(i)})]})]}),f?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:d("agents.agent","Agent")}),e.jsx("th",{scope:"col",children:d("agents.input","Input")}),e.jsx("th",{scope:"col",children:d("agents.output","Output")}),e.jsx("th",{scope:"col",children:d("agents.total","Total")})]})}),e.jsx("tbody",{children:y.map(m=>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:m.name}),e.jsx("span",{className:"agent-token-stats-panel__agent-id",children:m.id})]}),e.jsx("td",{children:st(m.inputTokens)}),e.jsx("td",{children:st(m.outputTokens)}),e.jsx("td",{className:"agent-token-stats-panel__total-cell",children:st(m.totalTokens)})]},m.id))})]})}):e.jsx("div",{className:"agent-token-stats-panel__empty",role:"status",children:d("agents.noTokenUsageYet","No token usage recorded yet. Token totals appear here once agents run.")})]})}const nn=[{icon:rt,label:"Active Agents",valueKey:"activeCount",className:"agent-metric-card--active"},{icon:rs,label:"Assigned Tasks",valueKey:"assignedTaskCount",className:"agent-metric-card--tasks"},{icon:Ct,label:"Success Rate",valueKey:"successRate",className:"agent-metric-card--success"},{icon:is,label:"Total Runs",valueKey:"completedRuns",className:"agent-metric-card--runs"}];function ln({stats:l,className:d=""}){return l?e.jsx("div",{className:`agent-metrics-bar ${d}`.trim(),children:nn.map(y=>{const p=y.valueKey==="successRate"?`${Math.round(l.successRate*100)}%`:l[y.valueKey];return e.jsxs("div",{className:`agent-metric-card ${y.className}`,children:[e.jsx(y.icon,{size:18}),e.jsxs("div",{className:"agent-metric-info",children:[e.jsx("span",{className:"agent-metric-value",children:p}),e.jsx("span",{className:"agent-metric-label",children:y.label})]})]},y.label)})}):null}const Sa=200;function rn(l,d){const[y,p]=s.useState([]),[a,i]=s.useState(!1),f=s.useRef(null),m=s.useRef(0),n=s.useRef(l),v=s.useRef(d);return(n.current!==l||v.current!==d)&&(n.current=l,v.current=d,m.current++,f.current&&(f.current(),f.current=null),p([]),i(!1)),s.useEffect(()=>{if(!l){p([]),i(!1);return}const P=m.current;let T=`/api/tasks/${encodeURIComponent(l)}/logs/stream`;d&&(T+=`?projectId=${encodeURIComponent(d)}`);const C=os(T,{events:{"agent:log":B=>{if(m.current===P)try{const A=JSON.parse(B.data),D={type:A.type??"text",text:A.text??A.content??"",timestamp:A.timestamp,content:A.content};p(_=>{const I=[D,..._];return I.length>Sa?I.slice(0,Sa):I})}catch{}}},onOpen:()=>{m.current===P&&i(!0)},onError:()=>{m.current===P&&i(!1)}});return f.current=C,()=>{C(),f.current=null,m.current===P&&i(!1)}},[l,d]),{entries:y,isConnected:a}}const on=5e3;function cn({agent:l,projectId:d,onSelect:y,onOpenTaskLogs:p}){const{t:a}=Pe("app"),{entries:i,isConnected:f}=rn(l.taskId,d),[m,n]=s.useState(null),v=s.useRef(null),[j,P]=s.useState(!1);s.useEffect(()=>{if(typeof IntersectionObserver>"u"){P(!0);return}const E=v.current;if(!E)return;const M=new IntersectionObserver(([$])=>{P($?.isIntersecting??!0)},{rootMargin:"200px"});return M.observe(E),()=>M.disconnect()},[l.id]),s.useEffect(()=>{if(!l.taskId){n(null);return}let E=!1,M;const $=async()=>{try{const Y=await ds(l.taskId,d);E||n(Y)}catch{}finally{E||(M=setTimeout($,on))}};return $(),()=>{E=!0,M&&clearTimeout(M)}},[l.taskId,d]);const T=l.lastHeartbeatAt?Math.floor((Date.now()-new Date(l.lastHeartbeatAt).getTime())/1e3):0,C=(()=>{if(!l.lastHeartbeatAt)return null;const E=Dt(l.runtimeConfig?.heartbeatIntervalMs),M=new Date(l.lastHeartbeatAt).getTime()+E,$=Math.round((M-Date.now())/1e3);return Number.isFinite($)?$<=0?a("agents.heartbeatOverdue","Heartbeat overdue {{elapsed}}",{elapsed:It(-$)}):a("agents.nextHeartbeat","Next heartbeat in {{elapsed}}",{elapsed:It($)}):null})(),{stepNumber:B,totalSteps:A}=cs(m),D=m?.steps?.[B],_=m?.modelId,I=()=>{y&&y(l.id)},U=E=>{E.stopPropagation(),l.taskId&&p&&p(l.taskId)},R=E=>{(E.key==="Enter"||E.key===" ")&&(E.preventDefault(),I())};return e.jsxs("div",{ref:v,className:"live-agent-card",onClick:I,onKeyDown:R,role:"button",tabIndex:0,"aria-label":a("agents.selectAgent","Select agent {{name}}",{name:l.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 ${l.state==="running"?"status-dot--pending":"status-dot--online"}`,"aria-hidden":"true"}),e.jsx("span",{children:l.name})]}),l.taskId&&e.jsx("span",{className:"live-agent-task badge",children:e.jsx(_a,{taskId:l.taskId,taskColumn:l.taskColumn})}),l.taskId&&e.jsx($t,{taskId:l.taskId,isInViewport:j,projectId:d})]}),e.jsx("div",{className:"live-agent-card-transcript",children:i.length===0?e.jsx("div",{className:"live-agent-card-empty",children:l.taskId?D?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"live-agent-card-status",children:a("agents.step","Step {{number}}{{total}}: {{name}}",{number:B,total:A?`/${A}`:"",name:D.name})}),_&&e.jsx("div",{className:"live-agent-card-status-sub",children:_}),e.jsx("div",{className:"live-agent-card-status-sub",children:f?a("agents.waitingOutput","Waiting for output..."):a("agents.connectingStream","Connecting to log stream...")})]}):e.jsx("span",{children:f?a("agents.waitingOutput","Waiting for output..."):a("agents.connecting","Connecting...")}):e.jsx("span",{children:l.state==="running"?a("agents.starting","Starting..."):a("agents.idleNoTask","Idle — no task assigned")})}):i.slice(0,20).map((E,M)=>e.jsx("div",{className:"live-agent-card-line",children:E.text},M))}),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:a("agents.timeSinceLastHeartbeat","Time since last heartbeat"),children:It(T)}),C&&e.jsx("span",{className:"live-agent-card-next-heartbeat",title:C,children:C})]}),e.jsxs("div",{className:"live-agent-card-footer-actions",children:[l.taskId&&p&&e.jsxs("button",{type:"button",className:"live-agent-card-logs-btn",onClick:U,title:a("agents.viewLiveLogs","View live run logs"),"aria-label":a("agents.viewLogsFor","View live logs for {{taskId}}",{taskId:l.taskId}),children:[e.jsx(Ht,{size:12}),e.jsx("span",{children:a("agents.liveLogs","Live logs")})]}),f&&e.jsx(rt,{size:12,className:"live-agent-streaming-dot"})]})]})]})}function It(l){return l<60?`${l}s`:l<3600?`${Math.floor(l/60)}m ${l%60}s`:`${Math.floor(l/3600)}h ${Math.floor(l%3600/60)}m`}function dn({agents:l,projectId:d,onAgentSelect:y,onOpenTaskLogs:p,className:a=""}){const{t:i}=Pe("app"),f=Array.from(new Map(l.map(m=>[m.id,m])).values());return f.length===0?null:e.jsxs("div",{className:`active-agents-panel ${a}`.trim(),children:[e.jsxs("div",{className:"active-agents-panel-header",children:[e.jsx(rt,{size:16}),e.jsx("span",{children:i("agents.activeAgents","Active Agents ({{count}})",{count:f.length})})]}),e.jsx("div",{className:"active-agents-grid",children:f.map(m=>e.jsx(cn,{agent:m,projectId:d,onSelect:y,onOpenTaskLogs:p},m.id))})]})}function un({stats:l,activeAgents:d,projectId:y,isOpen:p,onToggle:a,onSelectAgent:i,onOpenTaskLogs:f}){const{t:m}=Pe("app"),n=d.filter(j=>j.state==="active").length,v=d.filter(j=>j.state==="running").length;return e.jsxs("section",{className:"agents-overview-bar","aria-label":m("agents.overviewLabel","Agents overview"),children:[e.jsxs("button",{type:"button",className:"agents-overview-bar__toggle","aria-expanded":p,onClick:a,children:[e.jsxs("span",{className:"agents-overview-bar__title-wrap",children:[p?e.jsx(us,{size:16,"aria-hidden":"true"}):e.jsx(Ma,{size:16,"aria-hidden":"true"}),e.jsx("span",{className:"agents-overview-bar__title",children:m("agents.overview","Overview")})]}),e.jsx("span",{className:"agents-overview-bar__meta text-secondary",children:m("agents.statusCount","{{activeCount}} active · {{runningCount}} running",{activeCount:n,runningCount:v})})]}),p?e.jsxs("div",{className:"agents-overview-bar__content",children:[e.jsx(ln,{stats:l,className:"agents-overview-bar__metrics"}),e.jsx(dn,{agents:d,projectId:y,onAgentSelect:i,onOpenTaskLogs:f,className:"agents-overview-bar__active-panel"})]}):null]})}function Lt({title:l="No agents found",description:d="Create an agent to get started",ctaLabel:y="Create Agent",onCtaClick:p}){return e.jsxs("div",{className:"agent-empty",children:[e.jsx(Ot,{size:48,opacity:.3,className:"agent-empty-state__icon"}),e.jsx("p",{className:"agent-empty-state__title",children:l}),e.jsx("p",{className:"agent-empty-state__description text-secondary",children:d}),p?e.jsx("button",{type:"button",className:"btn btn-task-create btn-sm",onClick:p,children:y}):null]})}const Aa=3,Ft=1e3;function gn({isOpen:l,onClose:d,onGenerated:y,projectId:p}){const{t:a}=Pe("app");Ia(l);const[i,f]=s.useState(""),[m,n]=s.useState({type:"input"}),[v,j]=s.useState(null),[P,T]=s.useState(!1),C=s.useRef(null),B=s.useRef(null);s.useEffect(()=>{l&&m.type==="input"&&B.current?.focus()},[l,m.type]),s.useEffect(()=>{if(!l&&C.current){const R=C.current;C.current=null,_t(R,p).catch(()=>{})}},[l,p]),s.useEffect(()=>{if(!l)return;const R=E=>{E.key==="Escape"&&A()};return document.addEventListener("keydown",R),()=>document.removeEventListener("keydown",R)},[l]);const A=s.useCallback(()=>{if(C.current){const R=C.current;C.current=null,_t(R,p).catch(()=>{})}f(""),n({type:"input"}),j(null),T(!1),d()},[d,p]),D=s.useCallback(async()=>{if(!(!i.trim()||i.trim().length<Aa)){j(null),n({type:"loading"});try{const{sessionId:R}=await Us(i.trim(),p);C.current=R;const{spec:E}=await Gs(R,p);n({type:"preview",spec:E,sessionId:R})}catch(R){const E=R instanceof Error?R.message:"Failed to generate agent specification";E.includes("429")||E.toLowerCase().includes("rate limit")?j(a("agents.generation.rateLimited","Too many requests. Please wait a moment and try again.")):j(E),n({type:"input"}),C.current=null}}},[i,p]),_=s.useCallback(async()=>{if(C.current){const R=C.current;C.current=null;try{await _t(R,p)}catch{}}await D()},[D,p]),I=s.useCallback(()=>{m.type==="preview"&&(C.current=null,y(m.spec),f(""),n({type:"input"}),j(null),T(!1),d())},[m,y,d]);if(!l)return null;const U=i.trim().length>=Aa&&i.trim().length<=Ft;return e.jsx("div",{className:"agent-dialog-overlay",onClick:R=>{R.target===R.currentTarget&&A()},children:e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":a("agents.generateWithAiLabel","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:"✨"}),a("agents.generation.title","Generate Agent")]}),e.jsx("button",{className:"modal-close",onClick:A,"aria-label":a("actions.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[v&&e.jsx("div",{className:"agent-dialog-error-banner",children:v}),m.type==="input"&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:a("agents.generation.info","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:a("agents.generation.roleLabel","Role Description")}),e.jsx("textarea",{ref:B,id:"agent-role-description",className:"input agent-dialog-textarea",rows:4,placeholder:a("agents.generation.rolePlaceholder",'e.g. "Senior frontend code reviewer who specializes in React accessibility"'),value:i,onChange:R=>f(R.target.value),onKeyDown:R=>{R.key==="Enter"&&!R.shiftKey&&U&&(R.preventDefault(),D())},maxLength:Ft,"aria-describedby":"role-description-hint"}),e.jsxs("div",{id:"role-description-hint",className:"agent-dialog-hint",children:[e.jsx("span",{children:a("agents.generation.roleHint","Describe what your agent should do")}),e.jsxs("span",{children:[i.length,"/",Ft]})]})]})]}),m.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:a("agents.generation.loading","Generating agent specification...")})]}),m.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:a("agents.generation.previewTitle","Title")}),e.jsxs("span",{className:"agent-dialog-summary-row-value",children:[m.spec.icon," ",m.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:a("agents.generation.previewRole","Role")}),e.jsx("span",{children:m.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:a("agents.generation.previewDescription","Description")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--body",children:m.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:a("agents.generation.previewThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--capitalize",children:m.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:a("agents.generation.previewMaxTurns","Max Turns")}),e.jsx("span",{children:m.spec.maxTurns})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{children:[a("agents.generation.systemPrompt","System Prompt"),e.jsx("button",{type:"button",className:"agent-dialog-expand-btn",onClick:()=>T(!P),children:P?a("agents.generation.collapse","Collapse"):a("agents.generation.expand","Expand")})]}),e.jsxs("div",{className:`agent-generation-prompt-box${P?"":" agent-generation-prompt-box--collapsed"}`,children:[m.spec.systemPrompt,!P&&m.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:A,children:a("actions.cancel","Cancel")}),m.type==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void D(),disabled:!U,children:a("agents.generation.generate","Generate")}),m.type==="preview"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:()=>void _(),children:a("agents.generation.regenerate","Regenerate")}),e.jsx("button",{className:"btn btn-task-create",onClick:I,children:a("agents.generation.useThis","Use This")})]})]})]})})}const Ra=[{value:"triage"},{value:"executor"},{value:"reviewer"},{value:"merger"},{value:"scheduler"},{value:"engineer"},{value:"custom"}];function mn({isOpen:l,onClose:d,onCreated:y,projectId:p,prefillDraft:a=null,agentOnboardingEnabled:i=!1,existingAgents:f=[],onPrefillDraft:m}){const{t:n}=Pe("app"),v=c=>({triage:n("agents.roleTriage","Triage"),executor:n("agents.roleExecutor","Executor"),reviewer:n("agents.roleReviewer","Reviewer"),merger:n("agents.roleMerger","Merger"),scheduler:n("agents.roleScheduler","Scheduler"),engineer:n("agents.roleEngineer","Engineer"),custom:n("agents.roleCustom","Custom")})[c]??c,[j,P]=s.useState(0),[T,C]=s.useState("presets"),[B,A]=s.useState(""),[D,_]=s.useState(""),[I,U]=s.useState(""),[R,E]=s.useState("custom"),[M,$]=s.useState(""),[Y,L]=s.useState(""),[be,ae]=s.useState(""),[le,oe]=s.useState(""),[ue,H]=s.useState(""),[w,O]=s.useState(""),[re,xe]=s.useState({model:"",thinkingLevel:"off",maxTurns:1e3}),[_e,He]=s.useState(null),[Ce,ve]=s.useState([]),[se,Me]=s.useState(!1),[Z,ge]=s.useState(null),[W,ce]=s.useState(!1),[fe,q]=s.useState(!1),{favoriteProviders:we,favoriteModels:Ye,toggleFavoriteProvider:Ie,toggleFavoriteModel:Le}=gs(),[Oe,it]=s.useState([]),[je,de]=s.useState(!1),[me,J]=s.useState("model"),[K,Ne]=s.useState(""),[ye,Ae]=s.useState([]),[Ve,Fe]=s.useState(!1),[ze,o]=s.useState([]),[h,S]=s.useState(!1);s.useEffect(()=>{l&&(de(!0),ms().then(c=>{it(c.models)}).catch(()=>{}).finally(()=>de(!1)))},[l]),s.useEffect(()=>{l&&(S(!0),o([]),Vt(void 0,p).then(c=>{o(c)}).catch(()=>{o([])}).finally(()=>S(!1)))},[l,p]),s.useEffect(()=>{if(!l)return;const c=fs;if(typeof c!="function"){Ae([]),Fe(!1);return}Fe(!0),Ae([]),c(p).then(k=>{Ae(k)}).catch(()=>{Ae([])}).finally(()=>Fe(!1))},[l,p]);const G=re.model.includes("/")?re.model:"",Q=G?G.split("/")[0]:"default",ee=s.useCallback(c=>{const k=hs.has(c.role)?c.role:"custom";A(c.title),_(c.description),U(c.icon),E(k),ae(c.systemPrompt),xe(ke=>({...ke,thinkingLevel:c.thinkingLevel,maxTurns:c.maxTurns})),ce(!1),P(1)},[]),Se=s.useCallback(c=>{xe(k=>({...k,model:c}))},[]),Re=s.useCallback(c=>{J(c),c==="model"&&Ne("")},[]),ot=s.useCallback(c=>{const k=ps(c);He(c.id),A(k.name),U(k.icon??""),_(k.title??""),E(k.role),H(k.soul??""),ae(k.instructionsText??""),P(1)},[]),Be=s.useCallback(c=>{const k=bs(c);P(1),C("custom"),A(k.name),_(k.title??""),U(k.icon??""),E(k.role),$(k.reportsTo??""),ae(ya(k.instructionsText??"")),oe(k.heartbeatProcedurePath??""),H(k.soul??""),O(k.memory??""),ve(k.skills??[]),xe(ke=>({...ke,model:k.model??"",thinkingLevel:k.thinkingLevel??ke.thinkingLevel,maxTurns:k.maxTurns??ke.maxTurns})),k.runtimeHint?(J("runtime"),Ne(k.runtimeHint)):(J("model"),Ne(""))},[]);if(s.useEffect(()=>{!l||!a||Be(a)},[l,a,Be]),!l)return null;const ne=()=>{P(0),C("presets"),A(""),_(""),U(""),E("custom"),$(""),L(""),ae(""),oe(""),H(""),O(""),xe({model:"",thinkingLevel:"off",maxTurns:1e3}),J("model"),Ne(""),He(null),ve([]),ge(null),ce(!1),q(!1),d()},Te=async()=>{if(B.trim()){Me(!0),ge(null);try{await js(Ns({name:B,role:R,title:D,icon:I,reportsTo:M,instructionsPath:Y,instructionsText:be,heartbeatProcedurePath:le,soul:ue,memory:w,model:me==="model"?re.model:"",runtimeHint:me==="runtime"?K:"",thinkingLevel:re.thinkingLevel,maxTurns:re.maxTurns,skills:Ce}),p),ne(),y()}catch(c){ge(c instanceof Error?c.message:n("agents.createError","Failed to create agent"))}finally{Me(!1)}}},Ze=Ra.find(c=>c.value===R),De=M.trim(),qe=De?ze.find(c=>c.id===De):void 0,Je=K?ye.find(c=>c.runtimeId===K):void 0,ct=c=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{id:c,children:n("agents.runtimeSource","Runtime Source")}),e.jsxs("div",{className:"agent-runtime-mode-toggle",role:"radiogroup","aria-labelledby":c,children:[e.jsxs("label",{className:`agent-runtime-mode-option${me==="model"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:c,value:"model",checked:me==="model",onChange:()=>Re("model")}),e.jsx("span",{children:n("agents.runtimeSourceBuiltIn","Built-in Model")})]}),e.jsxs("label",{className:`agent-runtime-mode-option${me==="runtime"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:c,value:"runtime",checked:me==="runtime",onChange:()=>Re("runtime")}),e.jsx("span",{children:n("agents.runtimeSourcePlugin","Plugin Runtime")})]})]})]}),me==="model"?e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:n("agents.model","Model")}),je?e.jsx("div",{className:"agent-dialog-loading",children:e.jsx(ha,{label:n("agents.loadingModels","Loading models…")})}):e.jsx(vs,{id:"agent-model",label:n("agents.model","Model"),value:G,onChange:Se,models:Oe,placeholder:n("agents.modelPlaceholder","Select a model…"),favoriteProviders:we,onToggleFavorite:Ie,favoriteModels:Ye,onToggleModelFavorite:Le,thinkingLevel:re.thinkingLevel,onThinkingLevelChange:k=>xe(ke=>({...ke,thinkingLevel:k}))})]}):e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:n("agents.runtime","Runtime")}),Ve?e.jsx("div",{className:"agent-dialog-loading",children:e.jsx(ha,{label:n("agents.loadingRuntimes","Loading runtimes…")})}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:K,onChange:k=>Ne(k.target.value),children:[e.jsx("option",{value:"",children:ye.length>0?n("agents.runtimePlaceholder","Select a plugin runtime…"):n("agents.runtimeEmpty","No plugin runtimes available")}),ye.map(k=>e.jsx("option",{value:k.runtimeId,children:k.description?`${k.name} — ${k.description}`:k.name},`${k.pluginId}:${k.runtimeId}`))]})]})]});return Ws.createPortal(e.jsxs("div",{className:"agent-dialog-overlay",onClick:c=>{c.target===c.currentTarget&&ne()},children:[e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":n("agents.dialogAriaLabel","Create new agent"),children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:n("agents.dialogTitle","New Agent")}),e.jsx("button",{className:"btn-icon",onClick:ne,"aria-label":n("agents.closeAriaLabel","Close"),children:"×"})]}),e.jsx("div",{className:"agent-dialog-steps",children:[0,1,2].map(c=>e.jsx("div",{className:`agent-dialog-step${c===j?" active":c<j?" completed":""}`,"aria-label":n("agents.stepAriaLabel","Step {{step}}",{step:c+1})},c))}),e.jsxs("div",{className:"agent-dialog-body",children:[j===0&&e.jsxs("div",{children:[i&&e.jsx("div",{className:"agent-dialog-step-zero-actions",children:e.jsx("button",{type:"button",className:"btn agent-dialog-interview-btn",onClick:()=>q(!0),children:n("agents.aiInterview","AI Interview")})}),e.jsxs("div",{className:"agent-dialog-tabs",role:"tablist","aria-label":n("agents.setupModeAriaLabel","Agent setup mode"),children:[e.jsx("button",{id:"agent-dialog-tab-presets",type:"button",role:"tab","aria-controls":"agent-dialog-panel-presets","aria-selected":T==="presets",tabIndex:T==="presets"?0:-1,className:`agent-dialog-tab${T==="presets"?" active":""}`,onClick:()=>C("presets"),"data-testid":"agent-dialog-tab-presets",children:n("agents.tabPresets","Preset personas")}),e.jsx("button",{id:"agent-dialog-tab-custom",type:"button",role:"tab","aria-controls":"agent-dialog-panel-custom","aria-selected":T==="custom",tabIndex:T==="custom"?0:-1,className:`agent-dialog-tab${T==="custom"?" active":""}`,onClick:()=>{C("custom"),ae(c=>ya(c))},"data-testid":"agent-dialog-tab-custom",children:n("agents.tabCustom","Custom agent")})]}),T==="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:n("agents.presetsHeader","Choose a preset persona to prefill role, identity, soul, and instructions")}),e.jsx("div",{className:"agent-presets-grid",children:xs.map(c=>e.jsxs("button",{type:"button",className:`agent-preset-card${_e===c.id?" selected":""}`,"data-testid":`preset-${c.id}`,onClick:()=>ot(c),title:c.title,children:[e.jsx("span",{className:"agent-preset-icon",children:e.jsx(wt,{agent:{id:c.id,icon:c.icon,name:c.name},size:28})}),e.jsx("span",{className:"agent-preset-name",children:c.name}),e.jsx("span",{className:"agent-preset-role",children:c.role}),c.description&&e.jsx("span",{className:"agent-preset-description",children:c.description})]},c.id))})]})}),T==="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:n("agents.sectionIdentity","Identity")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-name",children:[n("agents.fieldName","Name")," ",!_e&&e.jsx("span",{className:"agent-dialog-required",children:"*"})]}),e.jsx("input",{id:"agent-name",type:"text",className:"input",placeholder:n("agents.namePlaceholder","e.g. Frontend Reviewer"),value:B,onChange:c=>A(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field agent-dialog-field--title",children:[e.jsxs("label",{htmlFor:"agent-title",children:[n("agents.fieldTitle","Title")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:n("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:D,onChange:c=>_(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-icon",children:[n("agents.fieldIcon","Icon")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:n("agents.iconPlaceholder","e.g. 🤖"),value:I,onChange:c=>U(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:n("agents.fieldRole","Role")}),e.jsx("div",{className:"agent-role-grid",children:Ra.map(c=>e.jsxs("button",{type:"button",className:`agent-role-option${R===c.value?" selected":""}`,onClick:()=>E(c.value),children:[e.jsx("span",{className:"agent-role-option-icon","aria-hidden":"true",children:e.jsx(ma,{provider:Q,size:"sm"})}),e.jsx("span",{className:"agent-role-option-label",children:v(c.value)})]},c.value))})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:n("agents.sectionConfiguration","Configuration")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-reports-to",children:[n("agents.fieldReportsTo","Reports To")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:M,onChange:c=>$(c.target.value),disabled:h,children:[e.jsx("option",{value:"",children:n("agents.noManager","No manager")}),ze.map(c=>e.jsxs("option",{value:c.id,children:[c.name," (",c.id,")"]},c.id))]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-soul",children:[n("agents.fieldSoul","Soul")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-soul",className:"input",rows:2,placeholder:n("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:ue,onChange:c=>H(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-memory",children:[n("agents.fieldMemory","Agent Memory")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-memory",className:"input",rows:2,placeholder:n("agents.memoryPlaceholder","Private to this agent — durable preferences, operating habits, and context it should carry across tasks..."),value:w,onChange:c=>O(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-path",children:[n("agents.fieldInstructionsPath","Instructions Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-instructions-path",type:"text",className:"input",placeholder:n("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:Y,onChange:c=>L(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-heartbeat-procedure-path",children:[n("agents.fieldHeartbeatPath","Heartbeat Procedure Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-heartbeat-procedure-path",type:"text",className:"input",placeholder:n("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:le,onChange:c=>oe(c.target.value)}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-field-hint",children:n("agents.heartbeatPathHint","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:[n("agents.fieldInstructionsText","Inline Instructions")," ",e.jsx("span",{className:"agent-dialog-optional",children:n("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-instructions-text",className:"input",rows:4,placeholder:n("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:be,onChange:c=>ae(c.target.value)})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:n("agents.sectionRuntime","Runtime")}),ct("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:()=>ce(!0),children:[e.jsx("span",{children:"✨"}),n("agents.generateWithAI","Generate with AI")]}),e.jsx("p",{className:"agent-dialog-ai-hint",children:n("agents.generateHint","Describe your agent's role and let AI generate a specification")})]})]})]}),j===1&&e.jsxs("div",{children:[ct("agent-runtime-source-step-1"),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-max-turns",children:n("agents.fieldMaxTurns","Max Turns")}),e.jsx("input",{id:"agent-max-turns",type:"number",className:"input",min:1,max:2e3,value:re.maxTurns,onChange:c=>xe(k=>({...k,maxTurns:Math.max(1,parseInt(c.target.value,10)||1)}))})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx(Ks,{id:"agent-skills",label:n("agents.fieldSkills","Skills"),value:Ce,onChange:ve,projectId:p}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-skills-hint",children:n("agents.skillsHint","Optional skills to assign to this agent")})]})]}),j===2&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:n("agents.reviewHint","Review your agent configuration before creating.")}),e.jsxs("div",{className:"agent-dialog-summary",children:[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-name",children:n("agents.fieldName","Name")}),e.jsx("input",{id:"agent-review-name",type:"text",className:"input",placeholder:n("agents.namePlaceholder","e.g. Frontend Reviewer"),value:B,onChange:c=>A(c.target.value)})]}),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:n("agents.fieldTitle","Title")}),e.jsx("input",{id:"agent-review-title",type:"text",className:"input",placeholder:n("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:D,onChange:c=>_(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:n("agents.fieldRole","Role")}),e.jsx("span",{children:Ze?v(Ze.value):""})]}),De&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:n("agents.fieldReportsTo","Reports To")}),e.jsx("span",{children:qe?`${qe.name} (${qe.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:n("agents.fieldSoul","Soul")}),e.jsx("textarea",{id:"agent-review-soul",className:"input",rows:2,placeholder:n("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:ue,onChange:c=>H(c.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:n("agents.fieldHeartbeatPath","Heartbeat Procedure Path")}),e.jsx("input",{id:"agent-review-heartbeat-procedure-path",type:"text",className:"input",placeholder:n("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:le,onChange:c=>oe(c.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:n("agents.fieldInstructionsPath","Instructions Path")}),e.jsx("input",{id:"agent-review-instructions-path",type:"text",className:"input",placeholder:n("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:Y,onChange:c=>L(c.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:n("agents.fieldInstructionsText","Inline Instructions")}),e.jsx("textarea",{id:"agent-review-instructions-text",className:"input",rows:4,placeholder:n("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:be,onChange:c=>ae(c.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:me==="runtime"?n("agents.runtime","Runtime"):n("agents.model","Model")}),e.jsx("span",{children:me==="runtime"?Je?Je.name:e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:n("agents.notSelected","Not selected")}):G?e.jsxs(e.Fragment,{children:[e.jsx(ma,{provider:G.split("/")[0],size:"sm"})," ",(()=>{const c=G.indexOf("/"),k=G.slice(0,c),ke=G.slice(c+1);return Oe.find(Ee=>Ee.provider===k&&Ee.id===ke)?.name||G})()]}):e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:n("agents.modelDefault","default")})})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:n("agents.fieldThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value--capitalize",children:re.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:n("agents.fieldMaxTurns","Max Turns")}),e.jsx("span",{children:re.maxTurns})]}),Ce.length>0&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:n("agents.fieldSkills","Skills")}),e.jsx("span",{children:n("agents.skillsSelected","{{count}} skill selected",{count:Ce.length,defaultValue_one:"{{count}} skill selected",defaultValue_other:"{{count}} skills selected"})})]})]}),Z&&e.jsx("p",{className:"agent-dialog-error",children:Z})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[j>0&&e.jsx("button",{className:"btn",onClick:()=>P(c=>c-1),disabled:se,children:n("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:ne,disabled:se,children:n("agents.cancel","Cancel")}),j<2?e.jsx("button",{className:"btn btn--primary",onClick:()=>P(c=>c+1),disabled:j===0&&!B.trim()&&!_e,children:n("agents.next","Next")}):e.jsx("button",{className:"btn btn--primary",onClick:()=>void Te(),disabled:se||!B.trim(),children:se?n("agents.creating","Creating..."):n("agents.create","Create")})]})]}),e.jsx(gn,{isOpen:W,onClose:()=>ce(!1),onGenerated:ee,projectId:p}),e.jsx(Ys,{isOpen:fe,onClose:()=>q(!1),onUseDraft:c=>{m?.(c),m||Be(c),q(!1)},projectId:p,existingAgents:f,mode:"create"})]}),document.body)}function hn(l){const d=l.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\r?\n([\s\S]*))?$/);if(!d)throw new Error("Missing YAML frontmatter delimiters (---)");const y=d[1].split(/\r?\n/),p=d[2]??"",a={name:""},i=[];let f=!1;for(const m of y){const v=m.trimEnd().trim();if(!v)continue;if(v.startsWith("skills:")){f=!0;continue}if(f&&v.startsWith("- ")){i.push(v.slice(2).trim());continue}f=!1;const[j,...P]=v.split(":"),C=P.join(":").trim().replace(/^['"]|['"]$/g,"");j==="name"&&(a.name=C),j==="title"&&(a.title=C),j==="icon"&&(a.icon=C),j==="role"&&(a.role=C),j==="reportsTo"&&(a.reportsTo=C)}if(!a.name)throw new Error("Missing required field: name");return i.length>0&&(a.skills=i),p.trim().length>0&&(a.instructionBody=p),a}function pn({isOpen:l,onClose:d,onImported:y,projectId:p,initialInputMethod:a="paste"}){const{t:i}=Pe("app");Ia(l);const[f,m]=s.useState("input"),[n,v]=s.useState(a),[j,P]=s.useState(""),[T,C]=s.useState([]),[B,A]=s.useState("Unknown"),[D,_]=s.useState([]),[I,U]=s.useState([]),[R,E]=s.useState([]),[M,$]=s.useState([]),[Y,L]=s.useState([]),[be,ae]=s.useState(!1),[le,oe]=s.useState(!1),[ue,H]=s.useState(null),[w,O]=s.useState(null),[re,xe]=s.useState(null),_e=s.useRef(null),He=s.useRef(null),[Ce,ve]=s.useState([]),[se,Me]=s.useState(""),[Z,ge]=s.useState(null),[W,ce]=s.useState(!1),[fe,q]=s.useState(null),we=s.useRef(!1);s.useEffect(()=>{n==="browse"&&!we.current&&!W&&(we.current=!0,ce(!0),q(null),Na().then(o=>{o.error?q(o.error):o.companies.length>0?ve(o.companies):q(i("agents.noCompaniesAvailable","No companies available"))}).catch(o=>{q(o instanceof Error?o.message:i("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{ce(!1)}))},[n,W,i]);const Ye=s.useCallback(()=>{we.current=!0,q(null),ve([]),ge(null),ce(!0),Na().then(o=>{o.error?q(o.error):o.companies.length>0?ve(o.companies):q(i("agents.noCompaniesAvailable","No companies available"))}).catch(o=>{q(o instanceof Error?o.message:i("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{ce(!1)})},[i]),Ie=s.useCallback(()=>{m("input"),v(a),P(""),C([]),A("Unknown"),_([]),U([]),E([]),$([]),L([]),ae(!1),oe(!1),H(null),O(null),xe(null),ve([]),Me(""),ge(null),ce(!1),q(null),we.current=!1},[a]),Le=s.useCallback(()=>{Ie(),d()},[Ie,d]),Oe=s.useCallback(o=>{const h=o.target.files?.[0];if(!h)return;const S=new FileReader;S.onload=G=>{const Q=G.target?.result;v("file"),C([]),P(Q),H(null)},S.onerror=()=>{H(i("agents.failedToReadFile","Failed to read file"))},S.readAsText(h),o.target.value=""},[i]),it=s.useCallback(async o=>{const h=Array.from(o.target.files??[]);if(h.length!==0)try{const S=h.filter(Q=>(Q.webkitRelativePath||Q.name).toLowerCase().endsWith("agents.md")).sort((Q,ee)=>{const Se=Q.webkitRelativePath||Q.name,Re=ee.webkitRelativePath||ee.name;return Se.localeCompare(Re)});if(S.length===0){H(i("agents.noAgentsMdFiles","Selected directory has no AGENTS.md files"));return}const G=[];for(const Q of S){const ee=await Q.text();G.push(hn(ee))}v("directory"),C(G),P(""),H(null)}catch{H(i("agents.failedToParseDirectory","Failed to parse AGENTS.md files from selected directory"))}finally{o.target.value=""}},[i]);function je(o){if(!p)return`/api${o}`;const h=o.includes("?")?"&":"?";return`/api${o}${h}projectId=${encodeURIComponent(p)}`}const de=s.useCallback(async()=>{if(n==="directory"&&T.length===0){H(i("agents.selectDirectory","Please select a directory containing AGENTS.md files"));return}if(n==="browse"&&!Z){H(i("agents.selectCompany","Please select a company from the catalog"));return}if(n!=="directory"&&n!=="browse"&&!j.trim()){H(i("agents.provideManifest","Please provide manifest content"));return}ae(!0),H(null);try{let o;n==="directory"?o={agents:T,dryRun:!0}:n==="browse"&&Z?o={importSource:"companies.sh",companySlug:Z.slug,dryRun:!0}:o={manifest:j,dryRun:!0};const h=await fetch(je("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!h.ok){const ee=await h.json();throw new Error(ee.error??`Parse failed (${h.status})`)}const S=await h.json(),G=S.agents&&S.agents.length>0?S.agents:S.created.map(ee=>({name:ee,role:"custom"})),Q=Array.isArray(S.skills)?S.skills:[];A(S.companyName??"Unknown"),_(G),U(Q),E(Array.isArray(S.warnings)?S.warnings:[]),$(G.map(ee=>ee.name)),L(Q.map(ee=>ee.name)),m("preview")}catch(o){H(o instanceof Error?o.message:i("agents.failedToParseManifest","Failed to parse manifest"))}finally{ae(!1)}},[n,T,j,Z,p,i]),me=s.useCallback(async()=>{oe(!0),xe(null);try{let o;n==="directory"?o={agents:T,skipExisting:!0,selectedAgents:M,selectedSkills:Y}:n==="browse"&&Z?o={importSource:"companies.sh",companySlug:Z.slug,skipExisting:!0,selectedAgents:M,selectedSkills:Y}:o={manifest:j,skipExisting:!0,selectedAgents:M,selectedSkills:Y};const h=await fetch(je("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!h.ok){const G=await h.json();throw new Error(G.error??`Import failed (${h.status})`)}const S=await h.json();O(S),m("result"),y()}catch(o){xe(o instanceof Error?o.message:i("agents.failedToImport","Failed to import agents"))}finally{oe(!1)}},[n,T,j,Z,M,Y,p,y,i]),J=M.length,K=Y.length,Ne=i("agents.selectedAgentLabel","{{count}} Agent{{plural}}",{count:J,plural:J!==1?"s":""}),ye=i("agents.selectedSkillLabel","{{count}} Skill{{plural}}",{count:K,plural:K!==1?"s":""}),Ae=J>0&&K>0?`${Ne} + ${ye}`:K>0?ye:Ne,Ve=J>0&&K>0?i("agents.importingAgentsAndSkills","Importing {{agentCount}} agent{{agentPlural}} and {{skillCount}} skill{{skillPlural}}...",{agentCount:J,agentPlural:J!==1?"s":"",skillCount:K,skillPlural:K!==1?"s":""}):K>0?i("agents.importingSkills","Importing {{count}} skill{{plural}}...",{count:K,plural:K!==1?"s":""}):i("agents.importingAgents","Importing {{count}} agent{{plural}}...",{count:J,plural:J!==1?"s":""}),Fe=o=>{$(h=>h.includes(o)?h.filter(S=>S!==o):[...h,o])},ze=o=>{L(h=>h.includes(o)?h.filter(S=>S!==o):[...h,o])};return l?e.jsx("div",{className:"agent-dialog-overlay",onClick:o=>{o.target===o.currentTarget&&Le()},children:e.jsxs("div",{className:"agent-dialog agent-import-dialog",role:"dialog","aria-modal":"true","aria-label":i("agents.importAgents","Import agents"),children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:i("agents.importAgents","Import Agents")}),e.jsx("button",{className:"modal-close",onClick:Le,"aria-label":i("agents.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[f==="input"&&e.jsxs("div",{className:"agent-import-input",children:[e.jsx("p",{className:"agent-import-description",children:i("agents.importDescription","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:_e,type:"file",accept:".md,.txt",onChange:Oe,className:"agent-import-file-input","aria-label":"Upload agent manifest file"}),e.jsx("input",{ref:He,type:"file",webkitdirectory:"",multiple:!0,onChange:it,className:"agent-import-file-input","aria-label":"Select directory"}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>_e.current?.click(),children:[e.jsx(Bt,{size:16}),i("agents.chooseFile","Choose File")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>He.current?.click(),children:[e.jsx(Zs,{size:16}),i("agents.selectDirectory","Select Directory")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>{v("browse"),C([]),P(""),ge(null),H(null)},children:[e.jsx(ys,{size:16}),i("agents.browseCatalog","Browse Catalog")]}),e.jsx("span",{className:"agent-import-file-hint",children:i("agents.fileHint",".md and .txt files supported")})]}),n==="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(ks,{size:16,className:"agent-import-browse-search-icon"}),e.jsx("input",{type:"text",className:"agent-import-browse-search-input",placeholder:i("agents.searchCompanies","Search companies..."),value:se,onChange:o=>Me(o.target.value),"aria-label":i("agents.searchCompanies","Search companies")})]}),Z&&e.jsxs("div",{className:"agent-import-browse-selected",children:[e.jsxs("span",{className:"agent-import-browse-selected-label",children:[i("agents.selected","Selected:")," "]}),e.jsx("span",{className:"agent-import-browse-selected-name",children:Z.name}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ge(null),children:i("agents.change","Change")})]})]}),W&&e.jsxs("div",{className:"agent-import-browse-loading",children:[e.jsx(Tt,{size:20,className:"spin"}),e.jsx("span",{children:i("agents.loadingCompanies","Loading companies...")})]}),fe&&e.jsxs("div",{className:"agent-import-browse-error",children:[e.jsx(ht,{size:16}),e.jsx("span",{children:fe}),e.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Ye,children:[e.jsx(lt,{size:14}),i("agents.retry","Retry")]})]}),!W&&!fe&&e.jsxs("div",{className:"agent-import-browse-list",children:[Ce.filter(o=>se===""||o.name.toLowerCase().includes(se.toLowerCase())||(o.tagline?.toLowerCase().includes(se.toLowerCase())??!1)).map(o=>e.jsxs("div",{className:`agent-import-browse-item ${Z?.slug===o.slug?"agent-import-browse-item--selected":""}`,onClick:()=>ge(o),role:"button",tabIndex:0,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&ge(o)},children:[e.jsxs("div",{className:"agent-import-browse-item-header",children:[e.jsx("span",{className:"agent-import-browse-item-name",children:o.name}),o.installs!==void 0&&e.jsxs("span",{className:"agent-import-browse-item-installs",children:[o.installs.toLocaleString()," ",i("agents.installs","installs")]})]}),o.tagline&&e.jsx("span",{className:"agent-import-browse-item-tagline",children:o.tagline}),o.repo&&e.jsx("span",{className:"agent-import-browse-item-repo",children:o.repo})]},o.slug)),Ce.filter(o=>se===""||o.name.toLowerCase().includes(se.toLowerCase())||(o.tagline?.toLowerCase().includes(se.toLowerCase())??!1)).length===0&&e.jsx("p",{className:"agent-import-browse-empty",children:se?i("agents.noCompaniesMatch","No companies match your search"):i("agents.noCompaniesAvailable","No companies available")})]})]}),n!=="browse"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-divider",children:e.jsx("span",{children:i("agents.orPasteManifest","or paste manifest content")})}),e.jsx("textarea",{className:"agent-import-textarea",placeholder:i("agents.manifestPlaceholder",`---
|
|
18
|
-
name: CEO
|
|
19
|
-
title: Chief Executive Officer
|
|
20
|
-
reportsTo: null
|
|
21
|
-
skills:
|
|
22
|
-
- review
|
|
23
|
-
---
|
|
24
|
-
Agent instructions go here...`),value:j,onChange:o=>{v("paste"),C([]),P(o.target.value),H(null)},rows:8,"aria-label":i("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:i("agents.currentInput","Current input: {{method}}",{method:n})}),ue&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(ht,{size:14}),ue]})]}),f==="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:i("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:B})]}),R.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:R.map((o,h)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(ht,{size:12}),e.jsx("span",{children:o})]},h))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Ht,{size:14}),e.jsx("span",{children:i("agents.agentsFound","{{count}} agent{{plural}} found",{count:D.length,plural:D.length!==1?"s":""})})]}),D.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>$(D.map(o=>o.name)),children:i("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>$([]),children:i("agents.clearAgents","Clear agents")})]}),D.length>0?e.jsx("div",{className:"agent-import-agent-list",children:D.map((o,h)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":i("agents.selectAgent","Select agent {{name}}",{name:o.name}),checked:M.includes(o.name),onChange:()=>Fe(o.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:o.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:o.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[o.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[o.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:o.role}),o.reportsTo&&e.jsx("span",{className:"agent-import-agent-reports",children:i("agents.importReportsTo"," · reports to {{agent}}",{agent:o.reportsTo})}),o.skills&&o.skills.length>0&&e.jsx("span",{className:"agent-import-agent-model",children:i("agents.importSkills"," · skills: {{skills}}",{skills:o.skills.join(", ")})})]}),o.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[o.instructionsText.slice(0,100),o.instructionsText.length>100?"...":""]})]})]},h))}):e.jsx("p",{className:"agent-import-empty",children:i("agents.noAgentsFound","No agents found in the manifest.")}),I.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Ht,{size:14}),e.jsx("span",{children:i("agents.skillsFound","{{count}} skill{{plural}} found",{count:I.length,plural:I.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(I.map(o=>o.name)),children:i("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L([]),children:i("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:I.map((o,h)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":i("agents.selectSkill","Select skill {{name}}",{name:o.name}),checked:Y.includes(o.name),onChange:()=>ze(o.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:o.name}),o.description&&e.jsx("span",{className:"agent-import-skill-description",children:o.description})]})]},`${o.name}-${h}`))})]}),re&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(ht,{size:14}),re]})]}),f==="result"&&w&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Ct,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:i("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[i("agents.from","From")," ",e.jsx("strong",{children:w.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[w.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:i("agents.resultCreated","{{count}} created",{count:w.created.length})})}),w.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:i("agents.resultSkipped","{{count}} skipped (already exist)",{count:w.skipped.length})})}),w.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:i("agents.resultErrors","{{count}} error{{plural}}",{count:w.errors.length,plural:w.errors.length!==1?"s":""})})})]}),w.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:w.created.map((o,h)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Ct,{size:12}),e.jsx("span",{children:o.name})]},h))}),w.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:w.errors.map((o,h)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(pa,{size:12}),e.jsxs("span",{children:[o.name,": ",o.error]})]},h))}),w.warnings&&w.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:w.warnings.map((o,h)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(ht,{size:12}),e.jsx("span",{children:o})]},h))}),w.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:i("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[w.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:i("agents.skillsImported","{{count}} skill{{plural}} imported",{count:w.skills.imported.length,plural:w.skills.imported.length!==1?"s":""})})}),w.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:i("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:w.skills.skipped.length,plural:w.skills.skipped.length!==1?"s":""})})}),w.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:i("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:w.skills.errors.length,plural:w.skills.errors.length!==1?"s":"",pluralError:w.skills.errors.length!==1?"s":""})})}),w.skills.imported.length===0&&w.skills.skipped.length===0&&w.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:i("agents.noSkillsInPackage","No skills in package")})})]}),w.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:w.skills.imported.map((o,h)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Ct,{size:12}),e.jsx("span",{children:o.name})]},h))}),w.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:w.skills.errors.map((o,h)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(pa,{size:12}),e.jsxs("span",{children:[o.name,": ",o.error]})]},h))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[f==="preview"&&e.jsx("button",{className:"btn",onClick:()=>m("input"),disabled:le,children:i("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Le,disabled:le,children:f==="result"?i("agents.close","Close"):i("agents.cancel","Cancel")}),f==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void de(),disabled:be||(n==="directory"?T.length===0:n==="browse"?!Z:!j.trim()),children:be?e.jsxs(e.Fragment,{children:[e.jsx(Tt,{size:14,className:"spin"}),i("agents.parsing","Parsing...")]}):i("agents.preview","Preview")}),f==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void me(),disabled:le||J===0&&K===0,children:le?e.jsxs(e.Fragment,{children:[e.jsx(Tt,{size:14,className:"spin"}),Ve]}):i("agents.importButton","Import {{label}}",{label:Ae})})]})]})}):null}const Ta=s.lazy(()=>$s(()=>import("./AgentDetailView-lJqxsPOR.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(l=>({default:l.AgentDetailView})));function bn(l){return[{value:"triage",label:l("agents.roleTriage","Triage"),icon:"⊕"},{value:"executor",label:l("agents.roleExecutor","Executor"),icon:"▶"},{value:"reviewer",label:l("agents.roleReviewer","Reviewer"),icon:"⊙"},{value:"merger",label:l("agents.roleMerger","Merger"),icon:"⊞"},{value:"scheduler",label:l("agents.roleScheduler","Scheduler"),icon:"◷"},{value:"engineer",label:l("agents.roleEngineer","Engineer"),icon:"⎔"},{value:"custom",label:l("agents.roleCustom","Custom"),icon:"✦"}]}const zt=[.1,.25,.5,1,2,3,5,10],xn=.25,fn=3,kt=16,nt=32,Ea=320,La=260,Fa=520,za="kb-dashboard-agents-sidebar-width";function Wt(l){return Math.max(La,Math.min(Fa,l))}function Pa(l){if(typeof window>"u")return Ea;const d=bt(za,l),y=d?Number(d):NaN;return Number.isFinite(y)?Wt(y):Ea}function Ut(l){switch(l){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 Gt(l,d){switch(d){case"running":return`${l}--running`;case"active":return`${l}--active`;case"paused":return`${l}--paused`;case"error":return`${l}--error`;case"idle":default:return`${l}--idle`}}function vn(l){const d=l.runtimeConfig??{},y=typeof d.runtimeHint=="string"?d.runtimeHint:"";if(y)return{label:y,isRuntime:!0};const p=typeof d.modelProvider=="string"?d.modelProvider:"",a=typeof d.modelId=="string"?d.modelId:"";if(p&&a)return{label:`${p}/${a}`,isRuntime:!1};const i=typeof d.model=="string"?d.model:"";if(i.includes("/")){const f=i.indexOf("/");return{label:i.slice(f+1),isRuntime:!1}}return{label:null,isRuntime:!1}}function Da(l){return l.children.length===0?1:l.children.reduce((d,y)=>d+Da(y),0)}function Kt(l,d,y){return l.state==="error"?{title:void 0,label:y("agents.healthError","Error")}:{title:d.reason??d.label,label:d.stateDerived?null:d.label}}function $a({node:l,onSelect:d,getHealthStatus:y,selectedAgentId:p,registerNodeElement:a,linksRef:i}){const{t:f}=Pe("app"),{agent:m,children:n}=l,v=y(m),j=Kt(m,v,f),P=Ut(m.state),T=Gt("org-chart-node-card",m.state),C=Da(l),B={"--org-chart-subtree-leaves":String(C)};return e.jsxs("div",{className:`org-chart-node${n.length>0?" org-chart-node--has-children":""}`,style:B,children:[e.jsxs("div",{ref:A=>a(m.id,A),"data-agent-id":m.id,className:`org-chart-node-card ${T}${p===m.id?" agent-card--selected":""}`,onClick:()=>d(m.id),role:"button",tabIndex:0,onKeyDown:A=>{(A.key==="Enter"||A.key===" ")&&(A.key===" "&&A.preventDefault(),d(m.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(wt,{agent:m,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:m.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${P}`,children:m.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:v.color},title:j.title,children:[v.icon,j.label&&e.jsx("span",{className:"text-secondary",children:j.label})]})]})]}),n.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":f("agents.orgChartEmployees","{{name}} employees",{name:m.name}),children:n.map(A=>(i.current.push({parentId:m.id,childId:A.agent.id}),e.jsx($a,{node:A,onSelect:d,getHealthStatus:y,selectedAgentId:p,registerNodeElement:a,linksRef:i},A.agent.id)))})]})}function jn({links:l,nodeElements:d,canvasRef:y,viewportRef:p,layoutMode:a,transform:i}){const[f,m]=s.useState([]);return s.useLayoutEffect(()=>{const n=y.current,v=p.current;if(!n||!v||l.length===0){m([]);return}const j=()=>{const T=n.getBoundingClientRect(),C=l.flatMap(({parentId:B,childId:A})=>{const D=d.get(B),_=d.get(A);if(!D||!_)return[];const I=D.getBoundingClientRect(),U=_.getBoundingClientRect(),R=(I.left-T.left)/i.scale,E=(I.top-T.top)/i.scale,M=(U.left-T.left)/i.scale,$=(U.top-T.top)/i.scale;if(a==="vertical"){const oe=R,ue=E+I.height/i.scale/2,H=M,w=$+U.height/i.scale/2,O=oe-(oe-H)/2;return[`M ${oe} ${ue} L ${O} ${ue} L ${O} ${w} L ${H} ${w}`]}const Y=R+I.width/i.scale/2,L=E+I.height/i.scale,be=M+U.width/i.scale/2,ae=$,le=L+(ae-L)/2;return[`M ${Y} ${L} L ${Y} ${le} L ${be} ${le} L ${be} ${ae}`]});m(C)};j();const P=new ResizeObserver(j);return P.observe(n),P.observe(v),d.forEach(T=>P.observe(T)),()=>P.disconnect()},[y,a,l,d,i.scale,p]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:f.map((n,v)=>e.jsx("path",{d:n},`${v}-${n}`))})}function Mn({addToast:l,projectId:d,onOpenTaskLogs:y,agentOnboardingEnabled:p=!1}){const{t:a}=Pe("app"),i=bn(a),[f,m]=s.useState(!1),n=s.useRef(new Map),v=s.useRef(new Map),j=s.useRef(new Map),[P,T]=s.useState(new Set),C=s.useRef(null);s.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=new IntersectionObserver(r=>{T(u=>{let g=!1;const x=new Set(u);for(const N of r){const F=v.current.get(N.target);F&&(N.isIntersecting?x.has(F)||(x.add(F),g=!0):x.has(F)&&(x.delete(F),g=!0))}return g?x:u})},{rootMargin:"200px"});return C.current=t,n.current.forEach(r=>t.observe(r)),()=>{t.disconnect(),C.current=null}},[]);const B=s.useCallback(t=>{const r=j.current.get(t);if(r)return r;const u=g=>{const x=n.current.get(t);x&&(C.current?.unobserve(x),v.current.delete(x)),g?(n.current.set(t,g),v.current.set(g,t),C.current?C.current.observe(g):T(N=>N.has(t)?N:new Set(N).add(t))):(n.current.delete(t),j.current.delete(t),T(N=>{if(!N.has(t))return N;const F=new Set(N);return F.delete(t),F}))};return j.current.set(t,u),u},[]),A=s.useCallback(t=>typeof IntersectionObserver>"u"?!0:P.has(t),[P]),_=Cs()==="mobile",[I,U]=s.useState(()=>Pa(d)),[R,E]=s.useState("all"),{agents:M,stats:$,isLoading:Y,loadAgents:L,refreshAgents:be}=ws(d,{filterState:R,showSystemAgents:f}),[ae,le]=s.useState(!1),[oe,ue]=s.useState(null),[H,w]=s.useState(!1),[O,re]=s.useState(null),[xe,_e]=s.useState(null),He=_&&!!O,[Ce,ve]=s.useState("dashboard"),[se,Me]=s.useState(null),[Z,ge]=s.useState(!1),[W,ce]=s.useState(()=>{if(typeof window>"u")return"list";const t=bt("fn-agent-view",d);return t==="list"||t==="board"||t==="org"?t:"list"}),[fe,q]=s.useState(()=>{if(typeof window>"u")return"auto";const t=bt(Mt,d);return ka(t)?t:"auto"}),[we,Ye]=s.useState([]),[Ie,Le]=s.useState(!1),[Oe,it]=s.useState(0),[je,de]=s.useState(!1),[me,J]=s.useState(!1),[K,Ne]=s.useState(!1),[ye,Ae]=s.useState(!1),[Ve,Fe]=s.useState(0),[ze,o]=s.useState(0),[h,S]=s.useState({scale:1,x:0,y:0}),[G,Q]=s.useState(!1),ee=s.useRef(null),Se=s.useRef(null),Re=s.useRef(null),ot=s.useRef(new Map),Be=s.useRef([]),ne=s.useRef(new Map),Te=s.useRef(null),Ze=s.useRef(null),De=s.useRef(!1),{confirm:qe}=Ss(),Je=s.useRef(null),ct=s.useId();s.useEffect(()=>{U(Pa(d))},[d]),s.useEffect(()=>{const t=bt("fn-agent-view",d);if(t==="list"||t==="board"||t==="org"){ce(t);return}ce("list")},[d]),s.useEffect(()=>{Et("fn-agent-view",W,d)},[W,d]),s.useEffect(()=>{const t=bt(Mt,d);q(ka(t)?t:"auto")},[d]),s.useEffect(()=>{Et(Mt,fe,d)},[fe,d]);const c=s.useCallback(t=>{try{Et(za,String(t),d)}catch{}},[d]),k=s.useCallback(t=>{if(_)return;t.preventDefault(),t.stopPropagation();const r=t.currentTarget;typeof r.setPointerCapture=="function"&&r.setPointerCapture(t.pointerId);const u=t.clientX,g=I;let x=g;document.body.style.userSelect="none";const N=X=>{const ie=X.clientX-u,b=Wt(g+ie);x=b,U(b)},F=X=>{typeof r.releasePointerCapture=="function"&&r.releasePointerCapture(X.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",N),document.removeEventListener("pointerup",F),c(x)};document.addEventListener("pointermove",N),document.addEventListener("pointerup",F)},[_,c,I]),ke=s.useCallback(t=>{if(_||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;t.preventDefault();const r=t.shiftKey?50:10,u=t.key==="ArrowLeft"?-r:r,g=Wt(I+u);U(g),c(g)},[_,c,I]),[Yt,Ee]=s.useState(null),Ha=s.useRef(null),[Oa,Qe]=s.useState(null),[Zt,et]=s.useState(null),[qt,We]=s.useState({}),[dt,Jt]=s.useState(1),[Qt,ea]=s.useState(!1),[Ue,ta]=s.useState(new Set),[St,tt]=s.useState(new Map),xt=s.useRef(!0);s.useEffect(()=>(xt.current=!0,()=>{xt.current=!1}),[]),s.useEffect(()=>{As(d).then(t=>{xt.current&&Jt(t.heartbeatMultiplier??1)}).catch(()=>{})},[d]);const aa=s.useCallback(async t=>{const r=Number.isFinite(t)&&t>0?t:1;Jt(r),ea(!0);try{await Rs({heartbeatMultiplier:r},d),l(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:r.toFixed(1)}),"success")}catch(u){l(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:pe(u)}),"error")}finally{xt.current&&ea(!1)}},[d,l]),ft=s.useMemo(()=>St.size===0?M:M.map(t=>{const r=St.get(t.id);return r?{...t,state:r}:t}),[M,St]),ut=s.useMemo(()=>ft.filter(t=>f||!pt(t)),[ft,f]),Va=s.useMemo(()=>ft.filter(t=>t.state!=="active"&&t.state!=="running"?!1:f||!pt(t)),[ft,f]),Ge=s.useMemo(()=>{if(f)return we;const t=r=>pt(r.agent)?null:{...r,children:r.children.map(t).filter(u=>u!==null)};return we.map(t).filter(r=>r!==null)},[we,f]);s.useEffect(()=>{if(W!=="org")return;const t=Se.current;if(!t)return;const r=()=>{it(t.clientWidth)};r();const u=typeof ResizeObserver<"u"?new ResizeObserver(r):null;return u?.observe(t),window.addEventListener("resize",r),()=>{u?.disconnect(),window.removeEventListener("resize",r)}},[W,Ge.length]),s.useEffect(()=>{if(W!=="org")return;let t=!1;return Le(!0),Ts(d,{includeEphemeral:f}).then(r=>{t||Ye(r)}).catch(r=>{t||(l(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:pe(r)}),"error"),Ye([]))}).finally(()=>{t||Le(!1)}),()=>{t=!0}},[W,d,f,l]),s.useEffect(()=>{const t=setInterval(()=>{L()},3e4);return()=>{clearInterval(t)}},[L]),s.useEffect(()=>{if(!je)return;let t=!1;Ae(!0),Vt(void 0,d).then(g=>{if(t)return;const x=g.filter(N=>!pt(N));Fe(x.filter(N=>N.state==="active"||N.state==="running").length),o(x.filter(N=>N.state==="paused").length)}).catch(g=>{t||(Fe(0),o(0),l(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:pe(g)}),"error"))}).finally(()=>{t||Ae(!1)});const r=g=>{const x=g.target;x&&(ee.current?.contains(x)||Je.current?.contains(x)||de(!1))},u=g=>{g.key==="Escape"&&(de(!1),Je.current?.focus())};return document.addEventListener("mousedown",r),document.addEventListener("touchstart",r),document.addEventListener("keydown",u),()=>{t=!0,document.removeEventListener("mousedown",r),document.removeEventListener("touchstart",r),document.removeEventListener("keydown",u)}},[l,je,d]);const sa=async t=>{if(!K){Ne(!0);try{const u=(await Vt(void 0,d)).filter(z=>!pt(z)),g=u.filter(z=>t==="paused"?z.state==="active"||z.state==="running":z.state==="paused"),x=u.length-g.length;if(g.length===0){l(t==="paused"?a("agents.noAgentsToPause","No agents eligible to pause"):a("agents.noAgentsToResume","No agents eligible to resume"),"error");return}if(!await qe({title:t==="paused"?a("agents.pauseAllTitle","Pause All Agents"):a("agents.resumeAllTitle","Resume All Agents"),message:t==="paused"?a("agents.pauseAllConfirm",{count:g.length,defaultValue_one:"Pause {{count}} agent in this project?",defaultValue_other:"Pause {{count}} agents in this project?"}):a("agents.resumeAllConfirm",{count:g.length,defaultValue_one:"Resume {{count}} agent in this project?",defaultValue_other:"Resume {{count}} agents in this project?"}),danger:t==="paused"}))return;const F=await Promise.allSettled(g.map(z=>va(z.id,t,d))),X=F.map((z,$e)=>({result:z,agent:g[$e]})).filter(z=>z.result.status==="rejected"),ie=F.length-X.length,b=X.length,V=t==="paused"?a("agents.pausedSummary",{count:ie,skipped:x,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:ie,skipped:x,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(b>0){const z=X.slice(0,3).map(({agent:$e,result:ls})=>`${$e.name||$e.id}: ${pe(ls.reason)}`).join("; ");l(`${V}; failed ${b}${z?` (${z})`:""}`,"error")}else l(V,"success");await L()}catch(r){l(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:pe(r)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:pe(r)}),"error")}finally{Ne(!1)}}},gt=async(t,r)=>{if(!Ue.has(t)){ta(u=>new Set(u).add(t)),tt(u=>{const g=new Map(u);return g.set(t,r),g});try{await va(t,r,d),l(a("agents.stateUpdated","Agent state updated to {{state}}",{state:r}),"success"),await L(),tt(u=>{const g=new Map(u);return g.delete(t),g})}catch(u){tt(g=>{const x=new Map(g);return x.delete(t),x}),l(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:pe(u)}),"error")}finally{ta(u=>{const g=new Set(u);return g.delete(t),g})}}},na=async(t,r)=>{if(await qe({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:r}),danger:!0}))try{await Os(t,d),l(a("agents.deleted",'Agent "{{name}}" deleted',{name:r}),"success"),await L()}catch(g){l(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:pe(g)}),"error")}},Ba=async(t,r)=>{const u=M.find(g=>g.id===t);if(u){if(u.role===r){Ee(null);return}try{await yt(t,{role:r},d),l(a("agents.roleUpdated","Agent role updated to {{role}}",{role:i.find(g=>g.value===r)?.label??r}),"success"),Ee(null),L()}catch(g){l(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:pe(g)}),"error")}}},Wa=(t,r)=>{t.key==="Escape"&&Ee(null)},Ua=async(t,r)=>{Zt===t.id&&(et(null),We(u=>{const g={...u};return delete g[t.id],g})),Qe(t.id);try{await yt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:r}},d),l(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ja(r),name:t.name}),"success"),L()}catch(u){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:pe(u)}),"error")}finally{Qe(null)}},la=async t=>{const r=qt[t.id]??"";if(r.trim()===""){l(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const u=Number(r);if(isNaN(u)){l(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(u<=0){l(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(u>=1&&u<5){Qe(t.id);try{await yt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Vs}},d),l(a("agents.heartbeatClampedToMin",{count:u,defaultValue_one:"Heartbeat interval set to 5 minutes (minimum). {{count}} minute was below the 5-minute minimum.",defaultValue_other:"Heartbeat interval set to 5 minutes (minimum). {{count}} minutes was below the 5-minute minimum."}),"success"),et(null),We(x=>{const N={...x};return delete N[t.id],N}),L()}catch(x){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:pe(x)}),"error")}finally{Qe(null)}return}const g=Math.round(u*6e4);Qe(t.id);try{await yt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:g}},d),l(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ja(g),name:t.name}),"success"),et(null),We(x=>{const N={...x};return delete N[t.id],N}),L()}catch(x){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:pe(x)}),"error")}finally{Qe(null)}},Ga=t=>{const r=Dt(t.runtimeConfig?.heartbeatIntervalMs),u=Math.round(r/6e4);et(t.id),We(g=>({...g,[t.id]:String(u)}))},he=s.useCallback((t,r)=>{re(t),ve(r?.initialTab??"dashboard"),Me(r?.initialRunId??null),ge(r?.preferActiveRun??!1)},[]),Ke=s.useCallback(()=>{re(null),ve("dashboard"),Me(null),ge(!1)},[]),ra=s.useCallback(t=>{he(t)},[he]),Ka=s.useCallback(t=>{_e(t),he(t)},[he]),Xa=s.useCallback(async({agentId:t,deleted:r})=>{await be(),r&&O===t&&Ke()},[be,O,Ke]),Ya=s.useCallback(t=>{he(t),_&&J(!1)},[_,he]),Za=async(t,r)=>{tt(u=>{const g=new Map(u);return g.set(t,"running"),g});try{await Bs(t,d,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),l(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:r}),"success"),await L(),tt(u=>{const g=new Map(u);return g.delete(t),g})}catch(u){tt(g=>{const x=new Map(g);return x.delete(t),x}),l(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:pe(u)}),"error")}},Xe=s.useCallback(t=>Math.min(fn,Math.max(xn,t)),[]),te=s.useCallback(t=>{const r=Se.current,u=Re.current?.querySelector(".agent-org-chart");if(!r||!u)return{...t,scale:Xe(t.scale)};const g=Xe(t.scale),x=u.scrollWidth*g,N=u.scrollHeight*g,F=r.clientWidth,X=r.clientHeight,ie=Math.min(nt,F-x-nt),b=nt,V=Math.min(nt,X-N-nt),z=nt;return{scale:g,x:Math.max(ie,Math.min(b,t.x)),y:Math.max(V,Math.min(z,t.y))}},[Xe]),vt=s.useCallback((t,r,u)=>{const g=Se.current;g&&S(x=>{const N=Xe(t),F=g.getBoundingClientRect(),X=r-F.left,ie=u-F.top,b=(X-x.x)/x.scale,V=(ie-x.y)/x.scale;return te({scale:N,x:X-b*N,y:ie-V*N})})},[Xe,te]),at=s.useCallback(()=>{const t=Se.current,r=Re.current?.querySelector(".agent-org-chart");if(!t||!r)return;const u=t.clientWidth,g=t.clientHeight,x=r.scrollWidth,N=r.scrollHeight;if(x<=0||N<=0)return;const F=Xe(Math.min(u/x,g/N,1)),X=(u-x*F)/2,ie=(g-N*F)/2;S(te({scale:F,x:X,y:ie}))},[Xe,te]),At=s.useCallback(t=>{ce(t),t!=="org"&&S({scale:1,x:0,y:0}),_&&O&&Ke()},[Ke,_,O]),ia=t=>i.find(r=>r.value===t)?.label??t,jt=s.useMemo(()=>qs({tree:Ge,availableWidth:Oe,preference:fe}),[Ge,fe,Oe]),oa=s.useCallback(t=>{q(t),S({scale:1,x:0,y:0})},[]);s.useEffect(()=>{S({scale:1,x:0,y:0}),De.current=!1},[d,jt]),s.useLayoutEffect(()=>{W!=="org"||Ie||Ge.length===0||De.current||(at(),De.current=!0)},[W,Ge.length,at,Ie]);const qa=s.useCallback((t,r)=>{r?ot.current.set(t,r):ot.current.delete(t)},[]),ca=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>S(t=>te({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(an,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(h.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>S(t=>te({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(en,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:at,"aria-label":a("agents.orgChartFit","Fit org chart"),title:a("agents.orgChartFit","Fit org chart"),children:[e.jsx(Es,{size:16}),a("agents.fit","Fit")]}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm",onClick:()=>S(t=>te({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(Ps,{size:16}),a("agents.center","Center")]})]}),[te,at,h.scale]),Ja=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const r=t.deltaY>0?.9:1.1;vt(h.scale*r,t.clientX,t.clientY)},[h.scale,vt]),Qa=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),ne.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),ne.current.size===1){Te.current={x:t.clientX-h.x,y:t.clientY-h.y,pointerId:t.pointerId},Q(!0);return}if(ne.current.size===2){const u=Array.from(ne.current.values()),g=u[0].x-u[1].x,x=u[0].y-u[1].y;Ze.current={distance:Math.hypot(g,x),scale:h.scale,centerX:(u[0].x+u[1].x)/2,centerY:(u[0].y+u[1].y)/2},Te.current=null}},[h.scale,h.x,h.y]),es=s.useCallback(t=>{if(ne.current.has(t.pointerId)){if(ne.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),ne.current.size>=2){const r=Array.from(ne.current.values()),u=Ze.current;if(!u)return;const g=r[0].x-r[1].x,x=r[0].y-r[1].y,N=Math.hypot(g,x),F=u.scale*(N/u.distance);vt(F,u.centerX,u.centerY);return}!Te.current||Te.current.pointerId!==t.pointerId||S(r=>te({...r,x:t.clientX-Te.current.x,y:t.clientY-Te.current.y}))}},[te,vt]),da=s.useCallback(t=>{ne.current.delete(t.pointerId),ne.current.size<2&&(Ze.current=null),ne.current.size===0&&(Te.current=null,Q(!1))},[]),ts=s.useCallback(t=>{if(t.key==="ArrowLeft")S(r=>te({...r,x:r.x+kt}));else if(t.key==="ArrowRight")S(r=>te({...r,x:r.x-kt}));else if(t.key==="ArrowUp")S(r=>te({...r,y:r.y+kt}));else if(t.key==="ArrowDown")S(r=>te({...r,y:r.y-kt}));else if(t.key==="+"||t.key==="=")S(r=>te({...r,scale:r.scale*1.1}));else if(t.key==="-")S(r=>te({...r,scale:r.scale*.9}));else if(t.key==="0")at();else if(t.key==="Home")S({scale:1,x:0,y:0});else return;t.preventDefault()},[te,at]),ua=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(Ca,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(ba,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(lt,{size:16}),ariaLabel:a("agents.layoutAutoAria","Automatic layout")}];return e.jsx("div",{className:"agent-org-chart-layout-toggle","data-testid":"agent-org-chart-layout-toggle",children:t.map(r=>{const u=fe===r.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${u?" btn-icon--active":""}`,onClick:()=>oa(r.value),"aria-pressed":u,"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)})})},[oa,fe]),as=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],Rt=t=>Hs(t,dt),ss=ye||K||Ve===0,ns=ye||K||ze===0,ga=Y&&M.length===0,mt=s.useCallback(()=>{le(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsx(_s,{icon:Ot,title:a("agents.title","Agents"),actions:e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${W==="list"?" active":""}`,onClick:()=>At("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":W==="list",children:e.jsx(ba,{size:16})}),e.jsx("button",{className:`view-toggle-btn${W==="board"?" active":""}`,onClick:()=>At("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":W==="board",children:e.jsx(rt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${W==="org"?" active":""}`,onClick:()=>At("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":W==="org",children:e.jsx(Ca,{size:16})})]}),e.jsxs("div",{className:`agents-view-primary-actions${je?" agents-view-primary-actions--controls-open":""}`,children:[e.jsx("button",{ref:Je,className:`btn-icon agent-controls-trigger${je?" agent-controls-trigger--active":""}`,onClick:()=>de(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":je,"aria-controls":ct,children:e.jsx(Ms,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void L(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(lt,{size:16,className:Y?"spin":void 0})}),!_&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{w(!0),de(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(Bt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{mt(),de(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(xa,{size:16}),a("agents.newAgent","New Agent")]})]}),je&&e.jsxs("div",{ref:ee,id:ct,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":a("agents.agentControls","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(Is,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:R,onChange:t=>E(t.target.value),"aria-label":a("agents.filterByState","Filter agents by state"),children:[e.jsx("option",{value:"all",children:a("agents.stateAll","All States")}),e.jsx("option",{value:"idle",children:a("agents.stateIdle","Idle")}),e.jsx("option",{value:"active",children:a("agents.stateActive","Active")}),e.jsx("option",{value:"running",children:a("agents.stateRunning","Running")}),e.jsx("option",{value:"paused",children:a("agents.statePaused","Paused")}),e.jsx("option",{value:"error",children:a("agents.stateError","Error")})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:f,onChange:t=>m(t.target.checked),"aria-label":a("agents.showSystemAgents","Show system agents")}),a("agents.showSystemAgents","Show system agents")]})]})}),_&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{w(!0),de(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(Bt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{mt(),de(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(xa,{size:16}),a("agents.newAgent","New Agent")]})]}),e.jsxs("div",{className:"agent-controls-bulk-actions",role:"menu","aria-label":a("agents.bulkAgentActions","Bulk agent actions"),children:[e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:ss,onClick:()=>{de(!1),sa("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Pt,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:ye?a("agents.loadingEligibility","Loading eligibility…"):Ve===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Ve,defaultValue_one:"Pause {{count}} active/running agent",defaultValue_other:"Pause {{count}} active/running agents"})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:ns,onClick:()=>{de(!1),sa("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Nt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:ye?a("agents.loadingEligibility","Loading eligibility…"):ze===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:ze,defaultValue_one:"Resume {{count}} paused agent",defaultValue_other:"Resume {{count}} paused agents"})})]})]}),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:a("agents.heartbeatSpeed","Heartbeat Speed")}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:dt,onChange:t=>{const r=Number(t.target.value);aa(Number.isFinite(r)&&r>0?r:1)},disabled:Qt}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",dt.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(zt.reduce((t,r)=>Math.abs(r-dt)<Math.abs(t-dt)?r:t,zt[0])),onChange:t=>{const r=Number(t.target.value);aa(Number.isFinite(r)&&r>0?r:1)},disabled:Qt,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:zt.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:a("agents.heartbeatSpeedHint","Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0")})]})}),e.jsx(sn,{agents:ut})]})]})]})}),e.jsx(mn,{isOpen:ae,onClose:()=>{le(!1),ue(null)},onCreated:()=>{le(!1),ue(null),L()},projectId:d,prefillDraft:oe,agentOnboardingEnabled:p,existingAgents:M,onPrefillDraft:ue}),e.jsx(pn,{isOpen:H,onClose:()=>w(!1),onImported:()=>void L(),projectId:d}),e.jsx(un,{stats:$,activeAgents:Va,projectId:d,isOpen:me,onToggle:()=>J(t=>!t),onSelectAgent:Ya,onOpenTaskLogs:y}),W==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:O?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:Ke,"aria-label":a("agents.backToOrgChart","Back to org chart"),children:a("agents.backToOrgChart","Back to org chart")}),e.jsx(s.Suspense,{fallback:null,children:e.jsx(Ta,{inline:!0,showInlineBackButton:!1,agentId:O,projectId:d,onClose:Ke,addToast:l,onChildClick:ra,initialTab:Ce,initialRunId:se,preferActiveRun:Z},O)})]}):ga?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(lt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):e.jsxs("div",{className:"agent-org-chart-shell","data-testid":"agent-org-chart-shell",children:[_?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[ua(),ca()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[ua(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:ca()})]}),e.jsx("div",{ref:Se,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Ja,onPointerDown:Qa,onPointerMove:es,onPointerUp:da,onPointerCancel:da,onKeyDown:ts,"data-panning":G?"true":"false",children:e.jsxs("div",{ref:Re,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((h.scale??1)*100)}`,"data-panning":G?"true":"false",style:{transform:`translate(${h.x}px, ${h.y}px) scale(${h.scale})`},children:[e.jsx("div",{className:`agent-org-chart${jt==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":jt,children:Ie?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(lt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):Ge.length===0?e.jsx(Lt,{onCtaClick:mt}):(Be.current=[],Ge.map(t=>e.jsx($a,{node:t,onSelect:Ka,getHealthStatus:Rt,selectedAgentId:xe,registerNodeElement:qa,linksRef:Be},t.agent.id)))}),e.jsx(jn,{links:Be.current,nodeElements:ot.current,canvasRef:Re,viewportRef:Se,layoutMode:jt,transform:h})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",style:_?void 0:{gridTemplateColumns:`${I}px var(--space-sm) minmax(0, 1fr)`},children:[e.jsx("div",{className:`agents-split-sidebar${He?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:ga?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(lt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):W==="board"?e.jsx("div",{className:"agent-board",children:ut.length===0?e.jsx(Lt,{onCtaClick:mt}):ut.map(t=>{const r=Rt(t),u=Kt(t,r,a),g=Ut(t.state),x=Gt("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${x}${O===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{ref:B(`board:${t.id}`),className:"agent-board-clickable",onClick:()=>he(t.id),role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.key===" "&&N.preventDefault(),he(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(wt,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:ia(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${g}`,children:t.state}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"agent-board-badge badge agent-approval-badge",title:a("agents.pendingApprovals","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}),t.taskId&&e.jsx($t,{taskId:t.taskId,isInViewport:A(`board:${t.id}`),projectId:d}),e.jsxs("div",{className:"agent-board-health",style:{color:r.color},title:u.title,children:[r.icon,u.label?` ${u.label}`:""]})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsx("div",{className:"agent-board-actions",children:e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void na(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(fa,{size:14})})})]},t.id)})}):e.jsx("div",{className:"agent-list",children:ut.length===0?e.jsx(Lt,{onCtaClick:mt}):ut.map(t=>{const r=Rt(t),u=Kt(t,r,a),g=Ut(t.state),x=Gt("agent-card",t.state),N=Dt(t.runtimeConfig?.heartbeatIntervalMs),F=Ls(N),X=Oa===t.id,ie=vn(t);return e.jsxs("div",{ref:B(`list:${t.id}`),className:`agent-card agent-card--clickable ${x}${O===t.id?" agent-card--selected":""}`,onClick:b=>{const V=b.target;if(V===b.currentTarget){he(t.id);return}const z=V.closest('button, select, input, [role="button"]');z&&z!==b.currentTarget||he(t.id)},role:"button",tabIndex:0,onKeyDown:b=>{b.target===b.currentTarget&&(b.key==="Enter"||b.key===" ")&&(b.key===" "&&b.preventDefault(),he(t.id))},"aria-label":a("agents.openDetails","Open details for {{name}}",{name:t.name}),children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info",children:[Yt===t.id?e.jsx("select",{ref:Ha,className:"select agent-role-select",value:t.role,onChange:b=>void Ba(t.id,b.target.value),onKeyDown:b=>Wa(b,t.id),onBlur:()=>Ee(null),autoFocus:!0,children:i.map(b=>e.jsxs("option",{value:b.value,children:[b.icon," ",b.label]},b.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:b=>{b.stopPropagation(),Ee(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.stopPropagation(),Ee(t.id))},children:e.jsx(wt,{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(Ma,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${g}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:r.color},title:u.title,children:[r.icon,u.label?` ${u.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:ia(t.role)}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null,(()=>{const b=as(t);if(b.length===0)return null;const V=b.slice(0,2),z=b.length-2;return e.jsxs(e.Fragment,{children:[V.map($e=>e.jsx("span",{className:"badge badge-skill",title:$e,children:Xs($e)},$e)),z>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",z]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[e.jsxs("div",{className:"agent-model-runtime",children:[e.jsxs("span",{className:"text-secondary",children:[ie.isRuntime?a("agents.runtime","Runtime"):a("agents.model","Model"),":"]}),e.jsx("span",{className:"badge agent-model-runtime__value",title:ie.label??a("agents.auto","Auto"),children:ie.label??a("agents.auto","Auto")})]}),t.state==="error"&&t.lastError?e.jsx(Fs,{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:a("agents.workingOn","Working on:")}),e.jsx("span",{className:"badge",children:e.jsx(_a,{taskId:t.taskId,taskColumn:t.taskColumn})}),e.jsx($t,{taskId:t.taskId,isInViewport:A(`list:${t.id}`),projectId:d})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),Zt===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:qt[t.id]??"",onChange:b=>We(V=>({...V,[t.id]:b.target.value})),onKeyDown:b=>{b.key==="Enter"?la(t):b.key==="Escape"&&(et(null),We(V=>{const z={...V};return delete z[t.id],z}))},disabled:X,"aria-label":a("agents.customHeartbeatAria","Custom heartbeat interval in minutes for {{name}}",{name:t.name})}),e.jsx("span",{className:"text-secondary",children:a("agents.minutesUnit","min")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void la(t),disabled:X,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{et(null),We(b=>{const V={...b};return delete V[t.id],V})},disabled:X,title:a("agents.cancelCustomInterval","Cancel custom interval"),children:a("agents.cancel","Cancel")})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:N,onChange:b=>{const V=b.target.value;V==="__custom__"?Ga(t):Ua(t,Number(V))},disabled:X,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[F.map(b=>e.jsx("option",{value:b.value,children:b.label},b.value)),zs.some(b=>b.value===N)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),X&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const b=new Date(t.lastHeartbeatAt),V=new Date(b.getTime()+N),z=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:b.toLocaleString(),children:a("agents.lastHeartbeatAt","Last: {{time}}",{time:b.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),z&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:V.toLocaleString(),children:a("agents.nextHeartbeatAt","Next: {{time}}",{time:V.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 gt(t.id,"active"),disabled:Ue.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(Nt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.start","Start")})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Za(t.id,t.name),disabled:Ue.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(rt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.runNow","Run Now")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void gt(t.id,"paused"),disabled:Ue.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void gt(t.id,"active"),disabled:Ue.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(Nt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.resume","Resume")})]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>he(t.id,{initialTab:"runs",initialRunId:null,preferActiveRun:!0}),title:a("agents.viewLiveRun","View live run details"),"aria-label":a("agents.viewLiveRunAria","View live run details for {{name}}",{name:t.name}),children:[e.jsx(rt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.running","Running")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void gt(t.id,"paused"),disabled:Ue.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void gt(t.id,"active"),disabled:Ue.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(Nt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.retry","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:()=>he(t.id),title:a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),"aria-label":a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),children:[e.jsx(Ds,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.details","Details")})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsxs("button",{className:"btn btn-sm btn-danger",onClick:()=>void na(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(fa,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),!_&&e.jsx("div",{className:"agents-split-resize-handle","data-testid":"agents-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":La,"aria-valuemax":Fa,"aria-valuenow":I,"aria-label":a("agents.resizeSidebar","Resize agents sidebar"),tabIndex:0,onPointerDown:k,onKeyDown:ke}),e.jsx("div",{className:`agents-split-detail${_&&!O?" agents-split-detail--hidden-mobile":""}`,children:O?e.jsx(s.Suspense,{fallback:null,children:e.jsx(Ta,{inline:!0,showInlineBackButton:_,agentId:O,projectId:d,onClose:Ke,addToast:l,onChildClick:ra,initialTab:Ce,initialRunId:se,preferActiveRun:Z,onMutationSuccess:Xa},O)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(Ot,{size:48}),e.jsx("h3",{children:a("agents.selectAnAgent","Select an agent")}),e.jsx("p",{children:a("agents.selectAgentHint","Choose an agent from the sidebar to view details")})]})})]})]})}export{Mn as AgentsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as d,j as e}from"./vendor-react-SZ_qB27O.js";import{aa as He,b9 as Ve,ba as Qe,bb as pe,bc as Ke,X as me,aQ as Je,bd as Ye,aI as he,P as be,a$ as ye,x as xe,R as fe,aL as Xe,Y as Ze,be as es,bf as ss,bg as ns,bh as is,bi as je,bj as ts,bk as as,bl as M,bm as ls,bn as rs}from"./index-BqLVwYoA.js";import{D as os}from"./DirectoryPicker-B2UVwp6F.js";import{u as us}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";import"./folder-open-C9qq38qV.js";const cs="/api/plugins/fusion-plugin-whatsapp-chat",ds=/^\d+$/;function Q(r,c){const n=c?`?projectId=${encodeURIComponent(c)}`:"";return`${cs}${r}${n}`}function gs({projectId:r,settings:c}){const[n,j]=d.useState(null),[b,C]=d.useState(null),[D,_]=d.useState(()=>String(c?.pairingPhoneNumber??"")),[F,S]=d.useState(null),[P,k]=d.useState(null),w=d.useCallback(async()=>{try{const l=await fetch(Q("/status",r)),y=await l.json();if(!l.ok)throw new Error(y.error??"WhatsApp pairing is unavailable. Enable the plugin and try again.");j(y),C(null)}catch(l){C(l instanceof Error?l.message:String(l))}},[r]);d.useEffect(()=>{w();const l=window.setInterval(()=>void w(),5e3);return()=>window.clearInterval(l)},[w]);const O=async()=>{const l=D.trim();if(!l||!ds.test(l)){S("Enter an E.164 phone number using digits only, without +.");return}k("code"),S(null);try{const y=await fetch(Q("/pair-code",r),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({phoneNumber:l,...r?{projectId:r}:{}})}),p=await y.json();if(!y.ok)throw new Error(p.error??"Could not request a pairing code.");j(x=>({status:"awaiting-code",...x,pairingCode:p.pairingCode})),await w()}catch(y){S(y instanceof Error?y.message:String(y))}finally{k(null)}},$=async()=>{k("logout"),S(null);try{const l=await fetch(Q("/logout",r),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r?{projectId:r}:{})});if(!l.ok){const y=await l.json();throw new Error(y.error??"Could not log out from WhatsApp.")}await w()}catch(l){S(l instanceof Error?l.message:String(l))}finally{k(null)}},B=c?.pairingMode==="code"?"code":"qr",R=n?.status??"starting";return e.jsxs("section",{className:"whatsapp-pairing-panel","aria-labelledby":"whatsapp-pairing-heading",children:[e.jsxs("div",{className:"whatsapp-pairing-heading-row",children:[e.jsxs("div",{children:[e.jsx("h5",{id:"whatsapp-pairing-heading",className:"plugin-detail-section-heading",children:"WhatsApp pairing"}),e.jsx("p",{className:"whatsapp-pairing-description",children:"Pair and monitor this project's WhatsApp connection here."})]}),e.jsx("button",{className:"btn btn-secondary btn-sm",type:"button",onClick:()=>void w(),children:"Refresh status"})]}),e.jsxs("div",{className:`whatsapp-pairing-status whatsapp-pairing-status--${R}`,role:"status","data-testid":"whatsapp-pairing-status",children:[e.jsxs("strong",{children:["Status: ",R]}),n?.jid&&e.jsxs("span",{children:["Connected as ",n.jid]}),(n?.lastError||b)&&e.jsx("span",{className:"field-error",children:n?.lastError??b})]}),R==="awaiting-qr"&&e.jsx("div",{className:"whatsapp-pairing-qr","data-testid":"whatsapp-pairing-qr",children:n?.qrDataUrl?e.jsx("img",{src:n.qrDataUrl,alt:"WhatsApp pairing QR code",className:"whatsapp-pairing-qr-image"}):e.jsx("p",{className:"text-muted",children:"Waiting for a fresh QR code. Keep this panel open and refresh if needed."})}),(B==="code"||R==="awaiting-code")&&e.jsxs("div",{className:"whatsapp-pairing-code",children:[e.jsx("label",{htmlFor:"whatsapp-pairing-phone",children:"Phone number (E.164 digits without +)"}),e.jsxs("div",{className:"whatsapp-pairing-code-controls",children:[e.jsx("input",{id:"whatsapp-pairing-phone",className:"input",value:D,onChange:l=>_(l.target.value),inputMode:"numeric"}),e.jsx("button",{className:"btn btn-secondary",type:"button",onClick:()=>void O(),disabled:P!==null,children:P==="code"?"Requesting code...":"Request pairing code"})]}),n?.pairingCode&&e.jsx("output",{className:"whatsapp-pairing-code-output",children:n.pairingCode})]}),R==="connected"&&e.jsx("p",{className:"whatsapp-pairing-success",children:"WhatsApp is paired and ready to receive messages from allowed senders."}),F&&e.jsx("p",{className:"field-error",children:F}),e.jsx("button",{className:"btn btn-danger",type:"button",onClick:()=>void $(),disabled:P!==null,"data-testid":"whatsapp-pairing-logout",children:P==="logout"?"Logging out...":"Logout and re-pair"}),e.jsxs("aside",{className:"whatsapp-pairing-instructions","aria-label":"WhatsApp pairing instructions","data-testid":"whatsapp-pairing-instructions",children:[e.jsx("h6",{children:"Pairing and configuration"}),e.jsxs("ol",{children:[e.jsx("li",{children:"Install and enable this plugin, then keep this settings panel open."}),e.jsxs("li",{children:["Set ",e.jsx("strong",{children:"Allowed WhatsApp Senders"}),"; an empty list blocks all inbound messages."]}),e.jsxs("li",{children:["Choose ",e.jsx("strong",{children:"QR"})," to scan in WhatsApp Linked Devices, or ",e.jsx("strong",{children:"code"})," to enter a phone number and request a pairing code."]}),e.jsxs("li",{children:["Wait for the status above to become ",e.jsx("strong",{children:"connected"}),"."]}),e.jsx("li",{children:"Use Logout and re-pair to start over. If QR is still pending, wait briefly or refresh status for a new code."})]})]})]})}const Pe="fusion-plugin-agent-browser",Ne={enabled:{type:"boolean",label:"Enable Agent Browser",group:"General"},installChannel:{type:"enum",label:"Install Channel",enumValues:["stable","beta","nightly"],defaultValue:"stable",group:"General"},commandTimeoutMs:{type:"number",label:"Command Timeout (ms)",defaultValue:12e4,group:"General"},headlessMode:{type:"boolean",label:"Headless Mode",defaultValue:!0,group:"Browser"},allowedDomains:{type:"array",label:"Allowed Domains",itemType:"string",group:"Browser"},promptExecutorSystem:{type:"string",label:"Executor System Prompt",multiline:!0,group:"Prompt Contributions"},promptExecutorTask:{type:"string",label:"Executor Task Prompt",multiline:!0,group:"Prompt Contributions"},promptTriage:{type:"string",label:"Triage Prompt",multiline:!0,group:"Prompt Contributions"},promptReviewer:{type:"string",label:"Reviewer Prompt",multiline:!0,group:"Prompt Contributions"},promptHeartbeat:{type:"string",label:"Heartbeat Prompt",multiline:!0,group:"Prompt Contributions"},skillExposure:{type:"enum",label:"Skill Exposure",enumValues:["none","selected","all"],defaultValue:"selected",group:"Skills"}},Se={General:"plugins.agentBrowser.groupGeneral",Browser:"plugins.agentBrowser.groupBrowser","Prompt Contributions":"plugins.agentBrowser.groupPromptContributions",Skills:"plugins.agentBrowser.groupSkills"},we={"Enable Agent Browser":"plugins.agentBrowser.labelEnabled","Install Channel":"plugins.agentBrowser.labelInstallChannel","Command Timeout (ms)":"plugins.agentBrowser.labelCommandTimeoutMs","Headless Mode":"plugins.agentBrowser.labelHeadlessMode","Allowed Domains":"plugins.agentBrowser.labelAllowedDomains","Executor System Prompt":"plugins.agentBrowser.labelPromptExecutorSystem","Executor Task Prompt":"plugins.agentBrowser.labelPromptExecutorTask","Triage Prompt":"plugins.agentBrowser.labelPromptTriage","Reviewer Prompt":"plugins.agentBrowser.labelPromptReviewer","Heartbeat Prompt":"plugins.agentBrowser.labelPromptHeartbeat","Skill Exposure":"plugins.agentBrowser.labelSkillExposure"},ve=[{id:"fusion-plugin-hermes-runtime",name:"Hermes Runtime",description:"Runtime provider for Hermes CLI-backed execution.",category:"runtime",path:"./plugins/fusion-plugin-hermes-runtime",experimental:!0},{id:"fusion-plugin-paperclip-runtime",name:"Paperclip Runtime",description:"Runtime provider for Paperclip agent connections.",category:"runtime",path:"./plugins/fusion-plugin-paperclip-runtime"},{id:"fusion-plugin-openclaw-runtime",name:"OpenClaw Runtime",description:"Runtime provider for OpenClaw execution.",category:"runtime",path:"./plugins/fusion-plugin-openclaw-runtime",experimental:!0},{id:"fusion-plugin-droid-runtime",name:"Droid Runtime",description:"Runtime provider for Droid CLI execution.",category:"runtime",path:"./plugins/fusion-plugin-droid-runtime",experimental:!0},{id:"fusion-plugin-dependency-graph",name:"Dependency Graph",description:"Dashboard plugin for task dependency graph visualization.",category:"integration",path:"./plugins/fusion-plugin-dependency-graph"},{id:"fusion-plugin-reports",name:"Reports",description:"View report history, compare runs side-by-side, and export standalone HTML summaries.",category:"integration",path:"./plugins/fusion-plugin-reports"},{id:"fusion-plugin-whatsapp-chat",name:"WhatsApp Chat",description:"Pairs to WhatsApp Web (multi-device) with QR or pairing code, then bridges direct chats to a Fusion agent.",category:"integration",path:"./plugins/fusion-plugin-whatsapp-chat"},{id:"fusion-plugin-cli-printing-press",name:"CLI Printing Press",description:"Guided wizard for drafting external service CLI definitions.",category:"integration",path:"./plugins/fusion-plugin-cli-printing-press"},{id:"fusion-plugin-compound-engineering",name:"Compound Engineering",description:"A dedicated dashboard surface for compound-engineering artifacts and interactive ce-* sessions.",category:"integration",path:"./plugins/fusion-plugin-compound-engineering"},{id:"fusion-plugin-quality",name:"Quality",description:"Task QA tab and Quality hub: preview servers, test runs, reports, screenshots, and suggested cases.",category:"integration",path:"./plugins/fusion-plugin-quality"},{id:"fusion-plugin-linear-import",name:"Linear Import",description:"Browse Linear issues and import selected issues as Fusion triage tasks through plugin-owned settings.",category:"integration",path:"./plugins/fusion-plugin-linear-import"},{id:Pe,name:"Agent Browser",description:"Built-in integration metadata. Package install support lands in FN-3101.",category:"integration",hasSetup:!0}],T={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function ps(r){const c=r.settingsSchema,n=c&&Object.keys(c).length>0;return r.id!==Pe?n?c:void 0:n?{...Ne,...c}:Ne}function ms(r){const c=new Map,n=[];for(const[j,b]of Object.entries(r))if(b.group){const C=c.get(b.group)??[];C.push([j,b]),c.set(b.group,C)}else n.push([j,b]);return{grouped:c,ungrouped:n}}function Ce(r,c="plugin-error-text"){return r.state!=="error"||!r.error?null:e.jsx("p",{className:c,title:r.error,children:r.error})}function vs({addToast:r,projectId:c}){const{t:n}=us("app"),[j,b]=d.useState([]),[C,D]=d.useState(!0),[_,F]=d.useState(!1),[S,P]=d.useState(""),[k,w]=d.useState(!1),[O,$]=d.useState(!1),[B,R]=d.useState(null),[l,y]=d.useState(null),[p,x]=d.useState({}),[Re,K]=d.useState(!1),[J,Y]=d.useState(null),[X,Ee]=d.useState([]),[Ie,Z]=d.useState(!0),[ee,se]=d.useState(null),[f,ke]=d.useState(""),[N,Be]=d.useState(""),[Ae,ne]=d.useState(null),q=d.useRef(null),[Fe,z]=d.useState({}),[Le,ie]=d.useState(null),[U,te]=d.useState(null),[De,ae]=d.useState(null),{confirm:qe}=He(),h=d.useCallback(async(s=!1,i)=>{try{s||D(!0);const a=await Ve(c);b(i?a.some(o=>o.id===i.id)?a.map(o=>o.id===i.id?i:o):[...a,i]:a)}catch(a){r(n("plugins.loadFailed","Failed to load plugins: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}finally{s||D(!1)}},[c,r]),E=d.useCallback(async(s=f,i=N)=>{try{Z(!0),se(null);const a=await Qe(s,i||void 0,c);Ee(a)}catch(a){const o=a instanceof Error?a.message:String(a);se(o)}finally{Z(!1)}},[c,N,f]);d.useEffect(()=>{h()},[h]),d.useEffect(()=>(q.current&&clearTimeout(q.current),q.current=setTimeout(()=>{E(f,N)},300),()=>{q.current&&clearTimeout(q.current)}),[E,N,f]),d.useEffect(()=>{const s=ve.filter(a=>a.hasSetup&&j.some(o=>o.id===a.id));if(s.length===0)return;let i=!1;return Promise.all(s.map(async a=>{try{const o=await pe(a.id,c);if(i)return;z(g=>({...g,[a.id]:o}))}catch{if(i)return;z(o=>({...o,[a.id]:{hasSetup:!0,setupCheckDeferred:!0,deferredReason:"plugin-not-started",pluginState:"installed"}}))}})),()=>{i=!0}},[j,c]);const Ge=d.useRef([]);Ge.current=j,d.useEffect(()=>{const s=c?`?projectId=${encodeURIComponent(c)}`:"",i=a=>{try{const o=JSON.parse(a.data);if(o.scope==="project"&&(o.projectId??c)!==c)return;switch(o.transition){case"installing":case"enabled":case"disabled":case"settings-updated":E(f,N),b(g=>{const u=g.findIndex(t=>t.id===o.pluginId);if(u>=0){const t=[...g];return t[u]={...t[u],enabled:o.enabled,state:o.state,settings:o.settings,error:o.error},t}else return h(),g});break;case"state-changed":b(g=>{const u=g.findIndex(t=>t.id===o.pluginId);if(u>=0){const t=[...g];return t[u]={...t[u],state:o.state,error:o.error},t}return g});break;case"uninstalled":b(g=>g.filter(u=>u.id!==o.pluginId)),E(f,N);break;case"error":b(g=>{const u=g.findIndex(t=>t.id===o.pluginId);if(u>=0){const t=[...g];return t[u]={...t[u],state:o.state,error:o.error},t}return g});break}}catch{}};return Ke(`/api/events${s}`,{events:{"plugin:lifecycle":i},onReconnect:()=>{h(),E(f,N)}})},[c,h,E,N,f]);const le=async()=>{if(!S.trim()){r(n("plugins.installPathRequired","Please enter a plugin path"),"error");return}try{w(!0),await M({path:S,...O?{aiScanOnLoad:!0}:{}},c),r(n("plugins.installedGlobally","Plugin installed globally"),"success"),F(!1),P(""),$(!1),await h()}catch(s){r(n("plugins.installFailed","Failed to install plugin: {{error}}",{error:s instanceof Error?s.message:String(s)}),"error")}finally{w(!1)}},Oe=async s=>{if(!s.path){r(n("plugins.builtinNoPackage","{{name}} is built in and does not have an installable package yet",{name:s.name}),"warning");return}try{Y(s.id),await M({path:s.path},c),r(n("plugins.builtinInstalledGlobally","{{name}} installed globally",{name:s.name}),"success"),await h()}catch(i){r(n("plugins.builtinInstallFailed","Failed to install {{name}}: {{error}}",{name:s.name,error:i instanceof Error?i.message:String(i)}),"error")}finally{Y(null)}},$e=async s=>{if(!s.path){r(n("plugins.registryNotInstallable","{{name}} is not available for one-click install yet",{name:s.name}),"warning");return}try{ne(s.id),await M({path:s.path},c),r(n("plugins.registryInstalled","{{name}} installed and enabled",{name:s.name}),"success"),await h(),await E(f,N)}catch(i){r(n("plugins.registryInstallFailed","Failed to install {{name}}: {{error}}",{name:s.name,error:i instanceof Error?i.message:String(i)}),"error")}finally{ne(null)}},re=async s=>{try{te(s.id);const i=await rs(s.id,c);if(!i.success){r(n("plugins.setupInstallFailed","Failed to install {{name}} setup: {{error}}",{name:s.name,error:i.error??n("plugins.unknownError","unknown error")}),"error");return}r(n("plugins.setupInstalled","{{name}} setup installed",{name:s.name}),"success"),ie(s.id);const a=await pe(s.id,c);z(o=>({...o,[s.id]:a}))}catch(i){r(n("plugins.setupInstallFailed","Failed to install {{name}} setup: {{error}}",{name:s.name,error:i instanceof Error?i.message:String(i)}),"error")}finally{te(null),ie(null)}},H=async s=>{try{const i=await ts(s.id,c);if(b(a=>a.map(o=>o.id===i.id?i:o)),i.state==="error"){r(n("plugins.enableFailed","Failed to enable {{name}}: {{error}}",{name:s.name,error:i.error??n("plugins.unknownError","unknown error")}),"error"),await h();return}r(n("plugins.enabledForProject","{{name}} enabled for this project",{name:s.name}),"success"),await h(!0,i)}catch(i){r(n("plugins.enablePluginFailed","Failed to enable plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}},V=async s=>{try{const i=await je(s.id,c);b(a=>a.map(o=>o.id===i.id?i:o)),r(n("plugins.disabledForProject","{{name}} disabled for this project",{name:s.name}),"success"),await h(!0,i)}catch(i){r(n("plugins.disablePluginFailed","Failed to disable plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}},Ue=async(s,i)=>{if(i){i.enabled?await V(i):await H(i);return}if(!s.path){r(n("plugins.builtinNoPackage","{{name}} is built in and does not have an installable package yet",{name:s.name}),"warning");return}try{ae(s.id);const a=await M({path:s.path},c);await je(a.id,c),r(n("plugins.disabledForProject","{{name}} disabled for this project",{name:s.name}),"success"),await h()}catch(a){r(n("plugins.disablePluginFailed","Failed to disable plugin: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}finally{ae(null)}},oe=async s=>{try{R(s.id),await is(s.id,c),r(n("plugins.reloaded","{{name}} reloaded",{name:s.name}),"success"),await h()}catch(i){r(n("plugins.reloadFailed","Failed to reload plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}finally{R(null)}},ue=async s=>{if(await qe({title:n("plugins.uninstallTitle","Uninstall Plugin Globally"),message:n("plugins.uninstallConfirm",'Are you sure you want to uninstall "{{name}}" globally (all projects)?',{name:s.name}),danger:!0}))try{await as(s.id,c),r(n("plugins.uninstalledGlobally","{{name}} uninstalled globally",{name:s.name}),"success"),await h(),y(null)}catch(a){r(n("plugins.uninstallFailed","Failed to uninstall plugin: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}},We=async(s,i)=>{try{await es(s.id,{aiScanOnLoad:i},c),r(i?n("plugins.aiScanEnabled","AI scan on load enabled"):n("plugins.aiScanDisabled","AI scan on load disabled"),"success"),await h()}catch(a){r(n("plugins.updateFailed","Failed to update plugin: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}},Me=async s=>{try{await ss(s.id,c),r(n("plugins.rescanned","{{name}} rescanned",{name:s.name}),"success"),await h()}catch(i){r(n("plugins.rescanFailed","Failed to rescan plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}},W=async s=>{y(s);try{K(!0);const i=await ls(s.id,c);x(i)}catch{x({})}finally{K(!1)}},Te=async()=>{if(l)try{await ns(l.id,p,c),r(n("plugins.settingsSaved","Settings saved"),"success")}catch(s){r(n("plugins.saveSettingsFailed","Failed to save settings: {{error}}",{error:s instanceof Error?s.message:String(s)}),"error")}};if(l)return e.jsxs("div",{className:"plugin-manager-detail","data-testid":"plugin-manager-detail",children:[e.jsxs("div",{className:"plugin-manager-detail-header",children:[e.jsx("button",{className:"btn-icon",onClick:()=>y(null),"aria-label":n("plugins.backToList","Back to plugin list"),children:e.jsx(me,{size:16})}),e.jsxs("div",{className:"plugin-detail-title",children:[e.jsxs("div",{className:"plugin-detail-title-copy",children:[e.jsx("h4",{className:"plugin-detail-name",children:l.name}),Ce(l,"plugin-error-text plugin-error-text--detail")]}),e.jsx("span",{className:"plugin-state-badge",style:{color:T[l.state]||T.installed},children:l.state})]})]}),e.jsxs("div",{className:"plugin-detail-content",children:[e.jsxs("div",{className:"plugin-detail-card",children:[l.description&&e.jsx("p",{className:"plugin-description",children:l.description}),l.author&&e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:n("plugins.author","Author:")}),l.author]}),l.homepage&&e.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[e.jsx("span",{className:"text-muted",children:n("plugins.homepage","Homepage:")}),e.jsxs("a",{href:l.homepage,target:"_blank",rel:"noopener noreferrer",children:[l.homepage,e.jsx(Je,{size:12})]})]}),e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:n("plugins.version","Version:")}),l.version]})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h5",{className:"plugin-detail-section-heading",children:n("plugins.securityScan","Security Scan")}),e.jsxs("div",{className:"plugin-security-row",children:[e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:!!l.aiScanOnLoad,onChange:s=>void We(l,s.target.checked)}),n("plugins.enableAiScanBeforeLoad","Enable AI scan before load/reload")]}),e.jsxs("button",{className:"btn btn-secondary btn-sm",onClick:()=>void Me(l),children:[e.jsx(Ye,{size:14})," ",n("plugins.rescanAndReload","Rescan and Reload")]})]}),e.jsx("p",{className:"text-muted",children:n("plugins.aiScanHint","Turning this on only updates configuration. Use Rescan and Reload to run it now.")}),l.lastSecurityScan?e.jsxs("div",{className:"plugin-security-results",children:[e.jsxs("div",{className:"plugin-security-header",children:[e.jsx("span",{className:`plugin-state-badge plugin-security-badge plugin-security-badge--${l.lastSecurityScan.verdict}`,children:l.lastSecurityScan.verdict}),e.jsx("span",{className:"text-muted",children:l.lastSecurityScan.scannedAt})]}),e.jsx("p",{className:"plugin-security-summary",children:l.lastSecurityScan.summary}),e.jsxs("details",{children:[e.jsx("summary",{children:n("plugins.findings","Findings ({{count}})",{count:l.lastSecurityScan.findings.length})}),e.jsx("ul",{className:"plugin-security-findings",children:l.lastSecurityScan.findings.map((s,i)=>e.jsxs("li",{children:[e.jsx("strong",{children:s.severity})," ",s.category," — ",s.file,": ",s.reason]},`${s.file}-${i}`))})]})]}):e.jsx("p",{className:"text-muted",children:n("plugins.noSecurityScan","No security scan has been run yet.")})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h5",{className:"plugin-detail-section-heading",children:n("plugins.settings","Settings")}),l.id==="fusion-plugin-whatsapp-chat"&&e.jsx(gs,{projectId:c,settings:p}),Re?e.jsx("p",{className:"text-muted",children:e.jsx(he,{label:n("plugins.loading","Loading...")})}):(()=>{const s=ps(l);return s&&Object.keys(s).length>0?e.jsxs("div",{className:"plugin-settings-form",children:[(()=>{const{grouped:i,ungrouped:a}=ms(s),o=[];a.length>0&&o.push({title:null,entries:a});for(const[g,u]of i.entries())o.push({title:g,entries:u});return o.map(g=>e.jsxs("div",{className:g.title?"plugin-settings-group":void 0,children:[g.title&&e.jsx("h6",{className:"plugin-settings-group-heading",children:Se[g.title]?n(Se[g.title],g.title):g.title}),g.entries.map(([u,t])=>{const I=`setting-${u}-help`,G=t.label?we[t.label]?n(we[t.label],t.label):t.label:u;return e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:`setting-${u}`,children:[G,t.required&&" *"]}),t.type==="string"&&!t.multiline&&e.jsx("input",{className:"input",type:"text",id:`setting-${u}`,value:p[u]??"",onChange:m=>x({...p,[u]:m.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?I:void 0}),t.type==="string"&&t.multiline&&e.jsx("textarea",{className:"input",id:`setting-${u}`,rows:4,value:p[u]??"",onChange:m=>x({...p,[u]:m.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?I:void 0}),t.type==="password"&&e.jsx("input",{className:"input",type:"password",id:`setting-${u}`,value:p[u]??"",onChange:m=>x({...p,[u]:m.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?I:void 0}),t.type==="number"&&e.jsx("input",{className:"input",type:"number",id:`setting-${u}`,value:p[u]??"",onChange:m=>x({...p,[u]:Number(m.target.value)}),"aria-describedby":t.description&&!t.required?I:void 0}),t.type==="boolean"&&e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:p[u]??!1,onChange:m=>x({...p,[u]:m.target.checked})}),t.description]}),t.type==="enum"&&e.jsxs("select",{className:"select",id:`setting-${u}`,value:p[u]??"",onChange:m=>x({...p,[u]:m.target.value}),"aria-describedby":t.description&&!t.required?I:void 0,children:[e.jsx("option",{value:"",children:n("plugins.selectOption","Select...")}),t.enumValues?.map(m=>e.jsx("option",{value:m,children:m},m))]}),t.type==="array"&&e.jsxs("div",{className:"plugin-settings-array",children:[p[u]?.map((m,v)=>e.jsxs("div",{className:"plugin-settings-array-item",children:[e.jsx("input",{className:"input",type:t.itemType==="number"?"number":"text",value:m??"",onChange:L=>{const A=L.target.value,ge=[...p[u]||[]];ge[v]=t.itemType==="number"?Number(A):A,x({...p,[u]:ge})}}),e.jsx("button",{className:"btn-icon",onClick:()=>{const A=[...p[u]||[]];A.splice(v,1),x({...p,[u]:A})},"aria-label":n("plugins.removeItem","Remove item"),children:e.jsx(me,{size:14})})]},v)),e.jsxs("button",{className:"btn btn-secondary",onClick:()=>{const m=p[u]||[],v=t.itemType==="number"?0:"";x({...p,[u]:[...m,v]})},children:[e.jsx(be,{size:14})," ",n("plugins.addItem","Add Item")]})]}),t.description&&!t.required&&!t.multiline&&e.jsx("span",{id:I,className:"form-help",children:t.description})]},u)})]},g.title??"ungrouped"))})(),e.jsx("button",{className:"btn btn-primary",onClick:Te,children:n("plugins.saveSettings","Save Settings")})]}):e.jsx("p",{className:"text-muted",children:n("plugins.noConfigurableSettings","No configurable settings.")})})()]}),e.jsxs("div",{className:"plugin-detail-actions",children:[l.state==="started"&&e.jsxs("button",{className:"btn btn-secondary",onClick:()=>oe(l),disabled:B===l.id,children:[e.jsx(ye,{size:14,className:B===l.id?"spin":""}),B===l.id?n("plugins.reloading","Reloading..."):n("plugins.reload","Reload")]}),l.enabled?e.jsx("button",{className:"btn btn-secondary",onClick:()=>V(l),children:n("plugins.disableInProject","Disable in Project")}):e.jsx("button",{className:"btn btn-primary",onClick:()=>H(l),children:n("plugins.enableInProject","Enable in Project")}),e.jsxs("button",{className:"btn btn-danger",onClick:()=>ue(l),children:[e.jsx(xe,{size:14})," ",n("plugins.uninstallGlobally","Uninstall Globally")]})]})]})]});const ce=new Map(j.map(s=>[s.id,s])),de=j,_e=()=>e.jsxs("section",{className:"plugin-registry-section","aria-label":n("plugins.browseRegistry","Browse Registry"),children:[e.jsxs("div",{className:"plugin-registry-header",children:[e.jsxs("div",{className:"plugin-registry-heading-copy",children:[e.jsx("h4",{className:"plugin-registry-heading",children:n("plugins.browseRegistry","Browse Registry")}),e.jsx("p",{className:"plugin-registry-description",children:n("plugins.registryDescription","Discover curated runtimes and integrations that can be added to this Fusion workspace.")})]}),e.jsxs("div",{className:"plugin-registry-controls",children:[e.jsxs("label",{className:"plugin-registry-category-label",children:[e.jsx("span",{className:"sr-only",children:n("plugins.registryCategory","Registry category")}),e.jsxs("select",{className:"select plugin-registry-category-select",value:N,onChange:s=>Be(s.target.value),"aria-label":n("plugins.registryCategory","Registry category"),children:[e.jsx("option",{value:"",children:n("plugins.registryCategoryAll","All Categories")}),e.jsx("option",{value:"runtime",children:n("plugins.registryCategoryRuntime","Runtime")}),e.jsx("option",{value:"integration",children:n("plugins.registryCategoryIntegration","Integration")})]})]}),e.jsxs("label",{className:"plugin-registry-search-label",children:[e.jsx("span",{className:"sr-only",children:n("plugins.searchRegistry","Search registry")}),e.jsx("input",{className:"input plugin-registry-search-input",type:"search",value:f,onChange:s=>ke(s.target.value),placeholder:n("plugins.searchRegistryPlaceholder","Search registry plugins")})]})]})]}),Ie?e.jsxs("div",{className:"plugin-registry-state",role:"status",children:[e.jsx(fe,{size:14,className:"spin"}),n("plugins.registryLoading","Loading registry...")]}):ee?e.jsxs("div",{className:"plugin-registry-state plugin-registry-state--error",role:"alert",children:[e.jsx("span",{children:n("plugins.registryLoadFailed","Failed to load registry: {{error}}",{error:ee})}),e.jsx("button",{className:"btn btn-secondary btn-sm plugin-registry-retry",onClick:()=>void E(f,N),children:n("plugins.retry","Retry")})]}):X.length===0?e.jsx("div",{className:"plugin-registry-state",children:f.trim()?n("plugins.registryEmptySearch","No registry plugins match your search."):n("plugins.registryEmpty","No registry plugins are available.")}):e.jsx("div",{className:"plugin-registry-list","aria-label":n("plugins.registryPluginResults","Registry plugin results"),children:X.map(s=>{const i=ce.get(s.id),a=Ae===s.id;return e.jsxs("div",{className:"plugin-registry-item",children:[e.jsxs("div",{className:"plugin-registry-meta",children:[e.jsxs("div",{className:"plugin-registry-title-row",children:[e.jsx("span",{className:"plugin-registry-name",children:s.name}),e.jsxs("span",{className:"plugin-registry-version",children:["v",s.version]}),e.jsx("span",{className:"plugin-registry-badge",children:s.category}),s.installed&&e.jsxs("span",{className:"plugin-registry-status plugin-registry-status--installed",children:[n("plugins.statusInstalled","Installed"),s.installedVersion&&s.installedVersion!==s.version?` · v${s.installedVersion}`:""]})]}),e.jsx("span",{className:"plugin-registry-description-text",children:s.description}),e.jsx("span",{className:"plugin-registry-author",children:n("plugins.registryByAuthor","By {{author}}",{author:s.author})})]}),e.jsx("div",{className:"plugin-registry-actions",children:s.installed?e.jsx("button",{className:"btn btn-secondary btn-sm plugin-registry-action",onClick:()=>{i?W(i):h()},children:n("plugins.manage","Manage")}):s.canInstall?e.jsx("button",{className:"btn btn-primary btn-sm plugin-registry-action",onClick:()=>void $e(s),disabled:a,children:a?n("plugins.installing","Installing..."):n("plugins.installFromRegistry","Install")}):e.jsx("span",{className:"plugin-registry-coming-soon",children:n("plugins.registryComingSoon","Coming Soon")})})]},s.id)})})]}),ze=()=>e.jsxs("section",{className:"plugin-builtins-section","aria-label":n("plugins.builtinPlugins","Built-in Plugins"),children:[e.jsxs("div",{className:"plugin-builtins-header",children:[e.jsx("h4",{className:"plugin-builtins-heading",children:n("plugins.builtinPlugins","Built-in Plugins")}),e.jsx("p",{className:"plugin-builtins-description",children:n("plugins.builtinPluginsCatalog","Built-in plugin catalog for runtimes and integrations.")})]}),e.jsx("div",{className:"plugin-builtins-list","aria-label":n("plugins.builtinPluginRecommendations","Built-in plugin recommendations"),children:ve.map(s=>{const i=ce.get(s.id),a=!!i,o=Fe[s.id],g=!!(o&&"setupCheckDeferred"in o&&o.setupCheckDeferred),u=o&&"status"in o?o.status:void 0,t=a&&s.hasSetup&&o?.hasSetup&&!g&&i?.state==="started"&&(u==="not-installed"||u==="error"),I=a&&o?.hasSetup&&u==="installed",G=Le===s.id,m=!s.path,v=s.category==="runtime",L=i?i.enabled:!0,A=De===s.id;return e.jsxs("div",{className:"plugin-builtins-item",children:[e.jsxs("div",{className:"plugin-builtins-meta",children:[e.jsx("span",{className:"plugin-builtins-name",children:s.name}),s.experimental&&e.jsx("span",{className:"plugin-builtins-runtime-badge",children:n("plugins.experimental","Experimental")}),e.jsx("span",{className:"plugin-builtins-runtime-badge",children:s.category}),e.jsx("span",{className:`plugin-builtins-status ${a?"plugin-builtins-status--installed":"plugin-builtins-status--available"}`,children:a?n("plugins.statusInstalled","Installed"):m?n("plugins.statusBuiltIn","Built in"):n("plugins.statusNotInstalled","Not installed")}),v&&!L&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--warning",children:n("plugins.builtinDisabled","Disabled")}),t&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--warning",children:n("plugins.setupRequired","Setup required")}),I&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--ready",children:n("plugins.setupReady","Setup ready")}),G&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--pending",children:n("plugins.checkingSetup","Checking setup...")}),g&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--deferred",children:n("plugins.startPluginToCheckSetup","Start plugin to check setup")}),e.jsx("span",{className:"plugin-builtins-description-text",children:s.description})]}),e.jsxs("div",{className:"plugin-builtins-actions",children:[v&&e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:L,onChange:()=>void Ue(s,i),disabled:A,"aria-label":L?n("plugins.disablePlugin","Disable {{name}}",{name:s.name}):n("plugins.enablePlugin","Enable {{name}}",{name:s.name})}),e.jsx("span",{className:"toggle-slider"})]}),m?a&&t?e.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void re(s),disabled:U===s.id||G,children:U===s.id?n("plugins.settingUp","Setting up..."):n("plugins.installSetup","Install Setup")}):a&&i?e.jsx("button",{className:"btn btn-secondary btn-sm",onClick:()=>void W(i),children:n("plugins.manage","Manage")}):v?null:e.jsx("span",{className:"plugin-builtins-metadata-only",children:n("plugins.builtinMetadataOnly","Built-in metadata only")}):e.jsx("button",{className:`btn ${a&&!t?"btn-secondary":"btn-primary"} btn-sm`,onClick:()=>{if(!a){Oe(s);return}if(t){re(s);return}i&&W(i)},disabled:J===s.id||U===s.id||G,children:a?t?U===s.id?n("plugins.settingUp","Setting up..."):n("plugins.installSetup","Install Setup"):n("plugins.manage","Manage"):J===s.id?n("plugins.installing","Installing..."):n("plugins.installNamed","Install {{name}}",{name:s.name})})]})]},s.id)})})]});return e.jsxs("div",{className:"plugin-manager","data-testid":"plugin-manager",children:[e.jsxs("div",{className:"plugin-manager-header",children:[e.jsx("span",{className:"plugin-manager-header-title",children:n("plugins.installedPlugins","Installed Plugins")}),e.jsxs("div",{className:"plugin-manager-actions",children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void h(),title:n("plugins.refresh","Refresh"),"aria-label":n("plugins.refreshPluginList","Refresh plugin list"),children:[e.jsx(fe,{size:14,className:C?"spin":""}),n("plugins.refresh","Refresh")]}),e.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>F(!0),children:[e.jsx(be,{size:14})," ",n("plugins.install","Install")]})]})]}),_&&e.jsxs("div",{className:"plugin-install-form",children:[e.jsx("p",{className:"plugin-install-hint",children:n("plugins.installHint","Browse to a plugin package root (contains manifest.json) or a built dist directory.")}),e.jsx(os,{value:S,onChange:P,placeholder:n("plugins.installPathPlaceholder","Absolute path to plugin directory or dist folder"),onInputKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),le())}}),e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:O,onChange:s=>$(s.target.checked)}),n("plugins.enableAiSecurityScan","Enable AI security scan on load")]}),e.jsxs("div",{className:"plugin-install-actions",children:[e.jsx("button",{className:"btn btn-primary",onClick:le,disabled:k||!S.trim(),children:k?n("plugins.installing","Installing..."):n("plugins.installPluginGlobally","Install Plugin Globally")}),e.jsx("button",{className:"btn btn-secondary",onClick:()=>{F(!1),P("")},children:n("plugins.cancel","Cancel")})]})]}),C?e.jsx("div",{className:"settings-empty-state",children:e.jsx(he,{label:n("plugins.loadingPlugins","Loading plugins...")})}):e.jsxs(e.Fragment,{children:[de.length===0?e.jsxs("div",{className:"settings-empty-state",children:[e.jsx(Xe,{size:32,className:"text-muted"}),e.jsx("p",{children:n("plugins.noPluginsInstalled","No plugins installed.")}),e.jsx("p",{className:"text-muted",children:n("plugins.noPluginsHint","Install a plugin to get started, or use the built-in catalog below.")})]}):e.jsx("div",{className:"plugin-list",children:de.map(s=>e.jsxs("div",{className:"plugin-item",children:[e.jsx("div",{className:"plugin-info",children:e.jsxs("div",{className:"plugin-copy",children:[e.jsxs("div",{className:"plugin-copy-header",children:[e.jsx("span",{className:"plugin-name",children:s.name}),e.jsxs("span",{className:"plugin-version text-muted",children:["v",s.version]}),e.jsx("span",{className:"plugin-state-badge",style:{color:T[s.state]||T.installed},children:s.state})]}),Ce(s)]})}),e.jsxs("div",{className:"plugin-actions",children:[s.state==="started"&&e.jsx("button",{className:"btn-icon",onClick:()=>oe(s),disabled:B===s.id,title:n("plugins.reload","Reload"),children:e.jsx(ye,{size:14,className:B===s.id?"spin":""})}),e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>s.enabled?V(s):H(s),"aria-label":s.enabled?n("plugins.disablePlugin","Disable {{name}}",{name:s.name}):n("plugins.enablePlugin","Enable {{name}}",{name:s.name})}),e.jsx("span",{className:"toggle-slider"})]}),e.jsx("button",{className:"btn-icon",onClick:()=>W(s),title:n("plugins.settings","Settings"),children:e.jsx(Ze,{size:14})}),e.jsx("button",{className:"btn-icon",onClick:()=>ue(s),title:n("plugins.uninstallGloballyTitle","Uninstall globally"),children:e.jsx(xe,{size:14})})]})]},s.id))}),ze(),_e()]})]})}export{Ne as AGENT_BROWSER_SETTINGS_SCHEMA,Pe as BUILTIN_AGENT_BROWSER_PLUGIN_ID,ve as BUILTIN_PLUGINS,vs as PluginManager,T as STATE_COLORS};
|