hermes-web-ui 0.6.30-beta.2 → 0.6.30
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/client/assets/js/AppSidebar-B8eJvJ5L.js +1 -0
- package/dist/client/assets/js/{ChannelsView-DMyeoPl6.js → ChannelsView-rBs9Ylzp.js} +1 -1
- package/dist/client/assets/js/{ChatPanel-YZZNE2mg.js → ChatPanel-BjHQvYcw.js} +1 -1
- package/dist/client/assets/js/{ChatView-BSWI-pr1.js → ChatView-xEwjnXLo.js} +1 -1
- package/dist/client/assets/js/{CodingAgentsView-DGweBEVs.js → CodingAgentsView-DcVwegsz.js} +1 -1
- package/dist/client/assets/js/{DefaultCredentialPrompt-DwS2g874.js → DefaultCredentialPrompt-sFeH1odX.js} +1 -1
- package/dist/client/assets/js/{DesktopPetView-C2QyaxNu.js → DesktopPetView-DKYjal2v.js} +1 -1
- package/dist/client/assets/js/{DesktopTitleBar-CMvwjOsN.js → DesktopTitleBar-YzhbwcwX.js} +1 -1
- package/dist/client/assets/js/{DevicesView-3VMSlXCt.js → DevicesView-CnAjn0fI.js} +1 -1
- package/dist/client/assets/js/{FileEditor-Dkxlmokr.js → FileEditor-C_tmKjxI.js} +3 -3
- package/dist/client/assets/js/{FileRenameModal-o3oS6tv2.js → FileRenameModal-BlqJ8jgZ.js} +2 -2
- package/dist/client/assets/js/{FilesView-BlJtiYU7.js → FilesView-Dy8G_exi.js} +1 -1
- package/dist/client/assets/js/{FolderPicker-DYQaj8Cc.js → FolderPicker-DEUyd_JU.js} +1 -1
- package/dist/client/assets/js/{GlobalAgentView-CGRn1ucS.js → GlobalAgentView-C0NgWvKP.js} +1 -1
- package/dist/client/assets/js/{GroupChatView-GXbwwUn9.js → GroupChatView-Mr8SR7nA.js} +2 -2
- package/dist/client/assets/js/{HistoryMessageList-B1UsdtzR.js → HistoryMessageList--MuOQ24m.js} +1 -1
- package/dist/client/assets/js/{HistoryView-DukXpB7A.js → HistoryView-Boy6KWxz.js} +1 -1
- package/dist/client/assets/js/{JobsView-C2IfX4Oo.js → JobsView-5Jun6EjM.js} +2 -2
- package/dist/client/assets/js/{JourneyView-UX14Uvsk.js → JourneyView-DAU7N8iU.js} +1 -1
- package/dist/client/assets/js/{KanbanView-BFLDXNmq.js → KanbanView-CQOeRquP.js} +1 -1
- package/dist/client/assets/js/{LoginView-BMnZx434.js → LoginView-DTdp1xsa.js} +1 -1
- package/dist/client/assets/js/{LogsView-CFxOjMBB.js → LogsView-Dr6gD_kA.js} +1 -1
- package/dist/client/assets/js/{MarkdownRenderer-RUGb4sbQ.js → MarkdownRenderer-DpSiF5gl.js} +3 -3
- package/dist/client/assets/js/{McpManagerView-D46nhm85.js → McpManagerView-BzGj5qqQ.js} +1 -1
- package/dist/client/assets/js/{MemoryView-CGvbW1Yq.js → MemoryView-2gPDgre_.js} +2 -2
- package/dist/client/assets/js/{MessageItem-rIbgU0g3.js → MessageItem-D91t-tiL.js} +2 -2
- package/dist/client/assets/js/{MessageList-7o_1_iPw.js → MessageList-KgA7oDKg.js} +1 -1
- package/dist/client/assets/js/{ModelsView-Cdl5HVlO.js → ModelsView-GVgHBsyL.js} +1 -1
- package/dist/client/assets/js/{OutlinePanel-BmsAdxB0.js → OutlinePanel-DD6XxWAu.js} +1 -1
- package/dist/client/assets/js/{PageSidebarFooter-fp9dcg3s.js → PageSidebarFooter-DFaGG_bk.js} +1 -1
- package/dist/client/assets/js/{PerformanceView-asJG1CAC.js → PerformanceView-YI2ecC28.js} +1 -1
- package/dist/client/assets/js/{PetdexView-CgsImZ2C.js → PetdexView-Bt4e1TDL.js} +1 -1
- package/dist/client/assets/js/{PluginsView-CiiHUv8H.js → PluginsView-BZHzh6V0.js} +1 -1
- package/dist/client/assets/js/{ProfileAvatar-CeGhJamd.js → ProfileAvatar-Du1XMoe0.js} +1 -1
- package/dist/client/assets/js/{ProfilesView-CPcFsEMn.js → ProfilesView-C02GlAXO.js} +1 -1
- package/dist/client/assets/js/{ProviderConfigurationPrompt-CCXQ_nqY.js → ProviderConfigurationPrompt-DbD_q_xl.js} +1 -1
- package/dist/client/assets/js/{SessionSearchModal-Chmtohb_.js → SessionSearchModal-CRoerPzU.js} +1 -1
- package/dist/client/assets/js/{SettingRow-CxdhcC5J.js → SettingRow-CZ1bK2YG.js} +1 -1
- package/dist/client/assets/js/{SettingsCircuitBadge-DmwONg4K.js → SettingsCircuitBadge-2VINGRjT.js} +1 -1
- package/dist/client/assets/js/{SettingsView-Bd02BnM7.js → SettingsView-C63TriKv.js} +1 -1
- package/dist/client/assets/js/{SkillsUsageView-Cvk_dctX.js → SkillsUsageView-DufR6RDh.js} +1 -1
- package/dist/client/assets/js/{SkillsView-BrS15WHY.js → SkillsView-LzeD-ReE.js} +2 -2
- package/dist/client/assets/js/{TerminalView-Betjhhzm.js → TerminalView-j3wokVwS.js} +1 -1
- package/dist/client/assets/js/{UsageView-gENmuPca.js → UsageView-BVdos-wH.js} +1 -1
- package/dist/client/assets/js/{VersionPreviewView-D4wMkRdU.js → VersionPreviewView-D46YOdsc.js} +1 -1
- package/dist/client/assets/js/{WebPet-C-F5hsmU.js → WebPet-PrNf1KLw.js} +1 -1
- package/dist/client/assets/js/{WorkflowView-DCQycw5y.js → WorkflowView-BWG_o4Lg.js} +1 -1
- package/dist/client/assets/js/{abap-Bpce3YCc.js → abap-B5rRrPlH.js} +1 -1
- package/dist/client/assets/js/{apex-BZWMlx8R.js → apex-kxpOZZnW.js} +1 -1
- package/dist/client/assets/js/architecture-7EHR7CIX-BsCtaKPb.js +1 -0
- package/dist/client/assets/js/{architectureDiagram-3BPJPVTR-DgYZW-VJ.js → architectureDiagram-3BPJPVTR-CGR0-xeM.js} +1 -1
- package/dist/client/assets/js/{auth-DAz8TLhP.js → auth-QlZVq-Mb.js} +1 -1
- package/dist/client/assets/js/{azcli-CU70G-wD.js → azcli-BinA5kBH.js} +1 -1
- package/dist/client/assets/js/{bat-_PVMPuXp.js → bat-Cr0qo7tY.js} +1 -1
- package/dist/client/assets/js/{bicep-B1C-nHUL.js → bicep-B4C1_29j.js} +1 -1
- package/dist/client/assets/js/{blockDiagram-GPEHLZMM-D9eCcYUu.js → blockDiagram-GPEHLZMM-DMRT9qE7.js} +1 -1
- package/dist/client/assets/js/{c4Diagram-AAUBKEIU-Cc2j_5Hk.js → c4Diagram-AAUBKEIU-BS013lHX.js} +1 -1
- package/dist/client/assets/js/{cameligo-BRxFWUB9.js → cameligo-DQKQuDHg.js} +1 -1
- package/dist/client/assets/js/{chat-DASgRGiI.js → chat-BHkNRr2D.js} +1 -1
- package/dist/client/assets/js/{chat-input-height-xMpE0zfj.js → chat-input-height-C9XyOGPU.js} +1 -1
- package/dist/client/assets/js/{chat-timestamp-B4kSmeEg.js → chat-timestamp-sj8rR29x.js} +1 -1
- package/dist/client/assets/js/{chunk-2J33WTMH-CIWIJ3Vy.js → chunk-2J33WTMH-BuvstStb.js} +1 -1
- package/dist/client/assets/js/{chunk-3OPIFGDE-D8rNjXTj.js → chunk-3OPIFGDE-DFuFb6Dn.js} +1 -1
- package/dist/client/assets/js/{chunk-4BX2VUAB-Be1NT72j.js → chunk-4BX2VUAB-C8f7FKlW.js} +1 -1
- package/dist/client/assets/js/{chunk-55IACEB6-D9jngYNS.js → chunk-55IACEB6-DoNUYELD.js} +1 -1
- package/dist/client/assets/js/{chunk-5ZQYHXKU-DsBTFfjP.js → chunk-5ZQYHXKU-D0RIlhMr.js} +1 -1
- package/dist/client/assets/js/{chunk-727SXJPM-B4ElG_Of.js → chunk-727SXJPM-Dcg9rcP1.js} +1 -1
- package/dist/client/assets/js/{chunk-AQP2D5EJ-DqmSdc2v.js → chunk-AQP2D5EJ-BrEs3845.js} +1 -1
- package/dist/client/assets/js/{chunk-BSJP7CBP-Dwbw_lcd.js → chunk-BSJP7CBP-2t71L2nD.js} +1 -1
- package/dist/client/assets/js/{chunk-CSCIHK7Q-D0eX0NV1.js → chunk-CSCIHK7Q-jw9fZDC9.js} +3 -3
- package/dist/client/assets/js/{chunk-FMBD7UC4-Ifok5gk4.js → chunk-FMBD7UC4-CC_5MTtl.js} +1 -1
- package/dist/client/assets/js/{chunk-KSCS5N6A-D6b_0Rnx.js → chunk-KSCS5N6A-Ctj260fA.js} +1 -1
- package/dist/client/assets/js/{chunk-L5ZTLDWV-eR6nltId.js → chunk-L5ZTLDWV-CF8sc4Ay.js} +1 -1
- package/dist/client/assets/js/{chunk-LZXEDZCA-h6nPcsB6.js → chunk-LZXEDZCA-BsmuMR5Z.js} +2 -2
- package/dist/client/assets/js/{chunk-ND2GUHAM-vGFiX1jf.js → chunk-ND2GUHAM-CvXXD5FC.js} +1 -1
- package/dist/client/assets/js/{chunk-NZK2D7GU-BQcgYAVF.js → chunk-NZK2D7GU-BQeu8oaR.js} +1 -1
- package/dist/client/assets/js/{chunk-O5CBEL6O-DqGyu-Fq.js → chunk-O5CBEL6O-D9XUSNoV.js} +1 -1
- package/dist/client/assets/js/{chunk-QZHKN3VN-Bf_cn5Px.js → chunk-QZHKN3VN-qz6ukpCd.js} +1 -1
- package/dist/client/assets/js/{chunk-WU5MYG2G-3I1ZwKkc.js → chunk-WU5MYG2G-Cv_QOL8q.js} +1 -1
- package/dist/client/assets/js/{chunk-XPW4576I-DDUD-9JS.js → chunk-XPW4576I-BQK5_1lO.js} +1 -1
- package/dist/client/assets/js/classDiagram-4FO5ZUOK-DudE54ap.js +1 -0
- package/dist/client/assets/js/classDiagram-v2-Q7XG4LA2-7vuaSqRj.js +1 -0
- package/dist/client/assets/js/{clipboard-DbIDy3AT.js → clipboard-DYlTCW_e.js} +1 -1
- package/dist/client/assets/js/{clojure-Dcj6e71m.js → clojure-CdqoJung.js} +1 -1
- package/dist/client/assets/js/{coding-agents-CaDRq0na.js → coding-agents-6iW0O8m3.js} +1 -1
- package/dist/client/assets/js/{codingAgentProviders-D561caSN.js → codingAgentProviders-CcodfSH-.js} +1 -1
- package/dist/client/assets/js/{coffee-CbYrIyIn.js → coffee-BWTAEena.js} +1 -1
- package/dist/client/assets/js/{completion-notification-DsOPieYQ.js → completion-notification-BAmmQT0D.js} +1 -1
- package/dist/client/assets/js/{cose-bilkent-S5V4N54A-DMeSp3o-.js → cose-bilkent-S5V4N54A-DRKeHjkL.js} +1 -1
- package/dist/client/assets/js/{cpp-C285XCcy.js → cpp-BVlDwaOY.js} +1 -1
- package/dist/client/assets/js/{csharp-AOA29tQw.js → csharp-BJ8TvX5x.js} +1 -1
- package/dist/client/assets/js/{csp-BH3dEG6O.js → csp-C4M5VPIw.js} +1 -1
- package/dist/client/assets/js/{css-B57baUKb.js → css-I3bSR4aB.js} +1 -1
- package/dist/client/assets/js/{cssMode-BL-figOg.js → cssMode-D4KFuV7w.js} +1 -1
- package/dist/client/assets/js/{cypher-WtS-OVKo.js → cypher-CRdq7Gis.js} +1 -1
- package/dist/client/assets/js/{cytoscape.esm-D5tsfvvu.js → cytoscape.esm-DkgBNPTq.js} +1 -1
- package/dist/client/assets/js/{dagre-BM42HDAG-ZT4Tyhdh.js → dagre-BM42HDAG-CaadqbBP.js} +1 -1
- package/dist/client/assets/js/{dagre-B9R_qlQx.js → dagre-C8VfHmP4.js} +1 -1
- package/dist/client/assets/js/{dart-DF9gqEcq.js → dart-dwyDElLm.js} +1 -1
- package/dist/client/assets/js/{de-EFWp16Qh.js → de--4CNgQuL.js} +1 -1
- package/dist/client/assets/js/{defineProperty-DuJZezkY.js → defineProperty-BDo2HL0q.js} +1 -1
- package/dist/client/assets/js/{diagram-2AECGRRQ-xaP4EEEl.js → diagram-2AECGRRQ-Cun81Ans.js} +1 -1
- package/dist/client/assets/js/{diagram-5GNKFQAL-DIyCvoeX.js → diagram-5GNKFQAL-CQzVKYOI.js} +1 -1
- package/dist/client/assets/js/{diagram-KO2AKTUF-DUgBO_lP.js → diagram-KO2AKTUF-BPfQv40Z.js} +1 -1
- package/dist/client/assets/js/{diagram-LMA3HP47-7BPLQ2mh.js → diagram-LMA3HP47-D8TC5VV0.js} +1 -1
- package/dist/client/assets/js/{diagram-OG6HWLK6-Bf3loU_i.js → diagram-OG6HWLK6-CRHwtHSe.js} +1 -1
- package/dist/client/assets/js/{dist-B5dYmTWx.js → dist-CfFdo9r8.js} +1 -1
- package/dist/client/assets/js/{dockerfile-Czh5hcPx.js → dockerfile-CILemvfU.js} +1 -1
- package/dist/client/assets/js/{download-D8EaUX1d.js → download-48rHoTgx.js} +1 -1
- package/dist/client/assets/js/{ecl-CX15-2F3.js → ecl-Ealz99xU.js} +1 -1
- package/dist/client/assets/js/{elixir-DAeHVhZ1.js → elixir-shrM9Xh9.js} +1 -1
- package/dist/client/assets/js/{en-Be915fg0.js → en-CJJ1jL_Y.js} +1 -1
- package/dist/client/assets/js/{erDiagram-TEJ5UH35-Cohr37bj.js → erDiagram-TEJ5UH35-BPm-r9Hg.js} +1 -1
- package/dist/client/assets/js/{es-CifdmPsf.js → es-DzGYbRQj.js} +1 -1
- package/dist/client/assets/js/{esm-BnjT8clq.js → esm-BMJNKLtg.js} +1 -1
- package/dist/client/assets/js/eventmodeling-FCH6USID-C3kT7Z0E.js +1 -0
- package/dist/client/assets/js/{files-DaoyoU6g.js → files-hTAbTvaX.js} +1 -1
- package/dist/client/assets/js/{flow9-DbPITgDY.js → flow9-BcjKeG3-.js} +1 -1
- package/dist/client/assets/js/{flowDiagram-I6XJVG4X-B264a192.js → flowDiagram-I6XJVG4X-_BaH5aHT.js} +1 -1
- package/dist/client/assets/js/{fr-cOjPUfRx.js → fr-DcCzCkCs.js} +1 -1
- package/dist/client/assets/js/{freemarker2-DOLmB9KN.js → freemarker2-BNKS-Izq.js} +1 -1
- package/dist/client/assets/js/{fsharp-B-Yt6zK9.js → fsharp-CkihMS6p.js} +1 -1
- package/dist/client/assets/js/{ganttDiagram-6RSMTGT7-Ci7dhsnY.js → ganttDiagram-6RSMTGT7-Cbdw-Bcw.js} +1 -1
- package/dist/client/assets/js/gitGraph-WXDBUCRP-6wOXvHzD.js +1 -0
- package/dist/client/assets/js/{gitGraphDiagram-PVQCEYII-BlLk9eYS.js → gitGraphDiagram-PVQCEYII-B-bpVVPE.js} +1 -1
- package/dist/client/assets/js/{go-BOK2cgny.js → go-T3wwW6GT.js} +1 -1
- package/dist/client/assets/js/{graphlib-D2Mw_i7z.js → graphlib-zy-xgTNe.js} +1 -1
- package/dist/client/assets/js/{graphql-lNO0dhfX.js → graphql-efIwdE3z.js} +1 -1
- package/dist/client/assets/js/{handlebars-CVZmi01T.js → handlebars-I50ARPXc.js} +1 -1
- package/dist/client/assets/js/{hcl-DzR879Fw.js → hcl-1nBprOUg.js} +1 -1
- package/dist/client/assets/js/{highlight-Dj4_XEnA.js → highlight-CEOB4aIv.js} +1 -1
- package/dist/client/assets/js/{html-PlnnXcHR.js → html-Dj-ePZ46.js} +1 -1
- package/dist/client/assets/js/{htmlMode-Fmdr8cyl.js → htmlMode-CaN3hz4S.js} +1 -1
- package/dist/client/assets/js/{http-error-DN0Q0NIV.js → http-error-DzA5OQEf.js} +1 -1
- package/dist/client/assets/js/{index-B41wzfl2.js → index-RJQqJC6n.js} +4 -4
- package/dist/client/assets/js/info-J43DQDTF-BIWBwu_u.js +1 -0
- package/dist/client/assets/js/{infoDiagram-5YYISTIA-NDi7uRio.js → infoDiagram-5YYISTIA-BNXSec0Z.js} +1 -1
- package/dist/client/assets/js/{ini-DrTE-Qjw.js → ini-3Ot_KNDr.js} +1 -1
- package/dist/client/assets/js/{ishikawaDiagram-YF4QCWOH-Bqr4yRKd.js → ishikawaDiagram-YF4QCWOH-g75yRzDd.js} +1 -1
- package/dist/client/assets/js/{ja-24otYQMe.js → ja-CQvWYnv9.js} +1 -1
- package/dist/client/assets/js/{java-M1cOm-yu.js → java-BnfIG6C2.js} +1 -1
- package/dist/client/assets/js/{javascript-BNXq8PNf.js → javascript-CsnYKLbf.js} +1 -1
- package/dist/client/assets/js/{journeyDiagram-JHISSGLW-BEtti5_h.js → journeyDiagram-JHISSGLW-Pz71rJgC.js} +1 -1
- package/dist/client/assets/js/{jsonMode-1QUqmLF3.js → jsonMode-C075GWTu.js} +1 -1
- package/dist/client/assets/js/{julia-dLq8Su3c.js → julia-BZ-d031P.js} +1 -1
- package/dist/client/assets/js/{kanban-definition-UN3LZRKU-B0OINhQN.js → kanban-definition-UN3LZRKU-CM65a4ke.js} +1 -1
- package/dist/client/assets/js/{katex-RcNO5wwe.js → katex-CdfrrN4N.js} +1 -1
- package/dist/client/assets/js/{ko-BAFhhHmu.js → ko-CJGntapN.js} +1 -1
- package/dist/client/assets/js/{kotlin-u5eqp-HC.js → kotlin-Bvrb8ISQ.js} +1 -1
- package/dist/client/assets/js/{less-Bmv3Gp2t.js → less-BmSBm_Oo.js} +1 -1
- package/dist/client/assets/js/{lexon-D4tsg7Zx.js → lexon-DuK8nBv2.js} +1 -1
- package/dist/client/assets/js/{liquid-Bk2yC9hm.js → liquid-BWAc_45a.js} +1 -1
- package/dist/client/assets/js/{lspLanguageFeatures-D43hcBWA.js → lspLanguageFeatures-BiQVZMg4.js} +1 -1
- package/dist/client/assets/js/{lua-p9IseoQp.js → lua-CyRtU9wL.js} +1 -1
- package/dist/client/assets/js/{m3-CP_UPhUb.js → m3-Ew9Azayo.js} +1 -1
- package/dist/client/assets/js/{markdown-EMkhjbsA.js → markdown-DTnF9Yaz.js} +1 -1
- package/dist/client/assets/js/{mdx-CTIqsEU_.js → mdx-B5cGu-wW.js} +1 -1
- package/dist/client/assets/js/{mermaid-parser.core-Ct7VvVNd.js → mermaid-parser.core-H0g6x_iH.js} +3 -3
- package/dist/client/assets/js/{mermaid.core-bZP2CdTT.js → mermaid.core-Diknpn0Z.js} +3 -3
- package/dist/client/assets/js/{mindmap-definition-RKZ34NQL-HwEZyOHT.js → mindmap-definition-RKZ34NQL-CaunhL_H.js} +1 -1
- package/dist/client/assets/js/{mips-CkjAOBJ1.js → mips-Dxi7_29p.js} +1 -1
- package/dist/client/assets/js/{models-IOA_Ybyo.js → models-C1Vzhn4J.js} +1 -1
- package/dist/client/assets/js/{msdax-D3cfIob3.js → msdax-B6Bgb3AK.js} +1 -1
- package/dist/client/assets/js/{mysql-4uHNth4i.js → mysql-BL2x9OzM.js} +1 -1
- package/dist/client/assets/js/{objective-c-CJlpUpN6.js → objective-c-BrRFV0XK.js} +1 -1
- package/dist/client/assets/js/packet-YPE3B663-DQbqBYnW.js +1 -0
- package/dist/client/assets/js/{pascal-CQPmydYD.js → pascal-WA4C_PKB.js} +1 -1
- package/dist/client/assets/js/{pascaligo-BpcHvwdj.js → pascaligo-CJbWHnUY.js} +1 -1
- package/dist/client/assets/js/{perl-CPq40M_6.js → perl-BI9Huzvv.js} +1 -1
- package/dist/client/assets/js/{pets-C2oDgwB5.js → pets-B_-nzG9F.js} +1 -1
- package/dist/client/assets/js/{pgsql-CSQ1ge3t.js → pgsql-CzbvRnWT.js} +1 -1
- package/dist/client/assets/js/{php-DK0RYdED.js → php-CXAgA_El.js} +1 -1
- package/dist/client/assets/js/pie-LRSECV5Y-CIUK74nZ.js +1 -0
- package/dist/client/assets/js/{pieDiagram-4H26LBE5-BmAWShfi.js → pieDiagram-4H26LBE5-CCUnlpIr.js} +1 -1
- package/dist/client/assets/js/{pla-DWm3Ssta.js → pla-C0RuKVEY.js} +1 -1
- package/dist/client/assets/js/{postiats-D6U5CAH_.js → postiats-DrGBuYen.js} +1 -1
- package/dist/client/assets/js/{powerquery-luT1PmkC.js → powerquery-C2Rk0MWx.js} +1 -1
- package/dist/client/assets/js/{powershell-DqsTi5Tp.js → powershell-Co9Oecz_.js} +1 -1
- package/dist/client/assets/js/{profiles-DDKFPE0r.js → profiles-BtECgqqD.js} +1 -1
- package/dist/client/assets/js/{protobuf-xWgh_gwl.js → protobuf-BYEreCAs.js} +1 -1
- package/dist/client/assets/js/{pt-DPgTOGuO.js → pt-BLQB3VhC.js} +1 -1
- package/dist/client/assets/js/{pug-d0a6hBgd.js → pug-DYMxpfbA.js} +1 -1
- package/dist/client/assets/js/{python-SkkpZGKb.js → python-D14JG4Tf.js} +1 -1
- package/dist/client/assets/js/{qsharp-B4xC_SYh.js → qsharp-eGQdTxCC.js} +1 -1
- package/dist/client/assets/js/{quadrantDiagram-W4KKPZXB-DRn55Dz7.js → quadrantDiagram-W4KKPZXB-Do1jBZkB.js} +1 -1
- package/dist/client/assets/js/{r-qamn5sfb.js → r-BpBEd0qf.js} +1 -1
- package/dist/client/assets/js/radar-GUYGQ44K-DamlzFJn.js +1 -0
- package/dist/client/assets/js/{razor-DR9b_EzP.js → razor-DAKZoZ5s.js} +1 -1
- package/dist/client/assets/js/{redis-C46kUKug.js → redis-CecBwldA.js} +1 -1
- package/dist/client/assets/js/{redshift-DI_dWPgP.js → redshift-DxeKWFdZ.js} +1 -1
- package/dist/client/assets/js/{requirementDiagram-4Y6WPE33-Do_KEl0k.js → requirementDiagram-4Y6WPE33-Ccn1EcY0.js} +1 -1
- package/dist/client/assets/js/{restructuredtext-oYQfsBYX.js → restructuredtext-BBhjK4w8.js} +1 -1
- package/dist/client/assets/js/{rough.esm-BjtdUJeF.js → rough.esm-DKpVfK-g.js} +1 -1
- package/dist/client/assets/js/{ru-BGBuhe8j.js → ru-BXep69sk.js} +1 -1
- package/dist/client/assets/js/{ruby-Da1TZ4HB.js → ruby-9YJv-z0v.js} +1 -1
- package/dist/client/assets/js/{rust-GT6xUobW.js → rust-BihIDWCY.js} +1 -1
- package/dist/client/assets/js/{sankeyDiagram-5OEKKPKP-BRnR4W8h.js → sankeyDiagram-5OEKKPKP-BZF9SKVm.js} +1 -1
- package/dist/client/assets/js/{sb-D4kxpCPJ.js → sb-DSz7OJbn.js} +1 -1
- package/dist/client/assets/js/{scala-CY3U_fvs.js → scala-DrL9oxhs.js} +1 -1
- package/dist/client/assets/js/{scheme-DzdFAWU_.js → scheme-Bc0QxXW_.js} +1 -1
- package/dist/client/assets/js/{scss-CTwgV3JD.js → scss-BTsIuYyg.js} +1 -1
- package/dist/client/assets/js/{sequenceDiagram-3UESZ5HK-CoemgPYx.js → sequenceDiagram-3UESZ5HK-BplvirR_.js} +1 -1
- package/dist/client/assets/js/{session-browser-prefs-D3fgv9Yr.js → session-browser-prefs-DnMXaw-N.js} +1 -1
- package/dist/client/assets/js/{sessions-BeO9QOJY.js → sessions-wVroPs5k.js} +1 -1
- package/dist/client/assets/js/{settings-DM3CNjqC.js → settings-Bzod_9RQ.js} +1 -1
- package/dist/client/assets/js/{shell-CUF2wd73.js → shell-DG7-xFwe.js} +1 -1
- package/dist/client/assets/js/{skills-3O8WlKlI.js → skills-CQr0eeFF.js} +1 -1
- package/dist/client/assets/js/{solidity-C3RnBLh_.js → solidity-COxKdecX.js} +1 -1
- package/dist/client/assets/js/{sophia-BA8mP4aY.js → sophia-DtFj5ZDz.js} +1 -1
- package/dist/client/assets/js/{sparql-DcwhST_l.js → sparql-B1TD00SE.js} +1 -1
- package/dist/client/assets/js/{sql-CjGghxho.js → sql-b7qwDUco.js} +1 -1
- package/dist/client/assets/js/{src-Cz8NyTG1.js → src-Ra8Cw6Gr.js} +1 -1
- package/dist/client/assets/js/{st-B8Q32toW.js → st-BtSqB0Hh.js} +1 -1
- package/dist/client/assets/js/{stateDiagram-AJRCARHV-I4DYKB3q.js → stateDiagram-AJRCARHV-DhJkFuW8.js} +1 -1
- package/dist/client/assets/js/stateDiagram-v2-BHNVJYJU-CqTRINz_.js +1 -0
- package/dist/client/assets/js/{swift-Br8oKRCi.js → swift-T2X4Cn4t.js} +1 -1
- package/dist/client/assets/js/{systemverilog-DIL7pkd5.js → systemverilog-DeuLbp4J.js} +1 -1
- package/dist/client/assets/js/{tcl-C7A4eFCv.js → tcl-ZVjhRcKc.js} +1 -1
- package/dist/client/assets/js/{timeline-definition-PNZ67QCA-BnfftsIx.js → timeline-definition-PNZ67QCA-BFAfAvjz.js} +1 -1
- package/dist/client/assets/js/treeView-BLDUP644-H8OPaX_2.js +1 -0
- package/dist/client/assets/js/treemap-LRROVOQU-BhsUhAW8.js +1 -0
- package/dist/client/assets/js/{tsMode-BmS5yGbl.js → tsMode-BK8igQe0.js} +1 -1
- package/dist/client/assets/js/{ttsHelpers-DpzPhrib.js → ttsHelpers-CUglUfpM.js} +1 -1
- package/dist/client/assets/js/{twig-CxeEoeDi.js → twig-B2I_zOb5.js} +1 -1
- package/dist/client/assets/js/{typescript-BPw3e1LN.js → typescript-DqxcEPol.js} +1 -1
- package/dist/client/assets/js/{typespec-dQqbgDyW.js → typespec-DYubob7r.js} +1 -1
- package/dist/client/assets/js/{useSttSettings-Dd2zPJU6.js → useSttSettings-BAz3MWB_.js} +1 -1
- package/dist/client/assets/js/{vb-DpmkDtUb.js → vb-DulIu0AM.js} +1 -1
- package/dist/client/assets/js/{vennDiagram-CIIHVFJN-Bu76Q1QQ.js → vennDiagram-CIIHVFJN-BTMh4zH0.js} +1 -1
- package/dist/client/assets/js/wardley-L42UT6IY-w2cdSduy.js +1 -0
- package/dist/client/assets/js/{wardleyDiagram-YWT4CUSO-BQ7KDw3c.js → wardleyDiagram-YWT4CUSO-CjApV8-0.js} +1 -1
- package/dist/client/assets/js/{wgsl-BzEo-Lwp.js → wgsl-DiXzOVd2.js} +1 -1
- package/dist/client/assets/js/{xml-CNMAb3tW.js → xml-DtDrXyok.js} +1 -1
- package/dist/client/assets/js/{xterm-B-CU1LD3.js → xterm-CdfgdkPC.js} +1 -1
- package/dist/client/assets/js/{xychartDiagram-2RQKCTM6-B1x6n3B3.js → xychartDiagram-2RQKCTM6-DuaP4Pnm.js} +1 -1
- package/dist/client/assets/js/{yaml-DpwMHYi6.js → yaml-9_m3OBnv.js} +1 -1
- package/dist/client/assets/js/{zh-TW-BJY5MjsC.js → zh-TW-CLhifuOg.js} +1 -1
- package/dist/client/assets/js/{zh-CoPU4mYG.js → zh-gGY9f4WM.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/openapi.json +1 -1
- package/package.json +1 -1
- package/dist/client/assets/js/AppSidebar-BHfH59vK.js +0 -1
- package/dist/client/assets/js/architecture-7EHR7CIX-CCBUg0GR.js +0 -1
- package/dist/client/assets/js/classDiagram-4FO5ZUOK-Dr5SR3PA.js +0 -1
- package/dist/client/assets/js/classDiagram-v2-Q7XG4LA2-BeYcryNa.js +0 -1
- package/dist/client/assets/js/eventmodeling-FCH6USID-Cd6TFrci.js +0 -1
- package/dist/client/assets/js/gitGraph-WXDBUCRP-CG4qC9Jw.js +0 -1
- package/dist/client/assets/js/info-J43DQDTF-CFtOWOWw.js +0 -1
- package/dist/client/assets/js/packet-YPE3B663-C0Vs_oOB.js +0 -1
- package/dist/client/assets/js/pie-LRSECV5Y-CAscu7sk.js +0 -1
- package/dist/client/assets/js/radar-GUYGQ44K-CfxS0DQE.js +0 -1
- package/dist/client/assets/js/stateDiagram-v2-BHNVJYJU-BHJGHZeG.js +0 -1
- package/dist/client/assets/js/treeView-BLDUP644-wNgfMdO5.js +0 -1
- package/dist/client/assets/js/treemap-LRROVOQU-Dy2LkAdg.js +0 -1
- package/dist/client/assets/js/wardley-L42UT6IY-BGLmswxh.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/MarkdownRenderer-
|
|
2
|
-
import{$ as Jt,$r as R,Br as xt,Ci as w,Cr as K,Ct as G,E as oe,Er as $t,Fr as F,Ft as Ct,Gi as S,Hr as V,Jr as L,Lt as St,Mi as It,Nr as lt,Pi as c,Qi as t,Qr as i,Ti as nt,Tr as Mt,Ut as B,Vr as Pt,Y as Nt,Yr as z,Z as U,Zr as P,Zt as ne,aa as I,ai as x,an as Tt,ci as Z,ct as it,ea as ie,ei as D,ii as Et,jt as Q,lt as Rt,n as Y,o as Bt,oi as v,ra as u,s as Ft,si as qt,t as X,ti as N,wr as ee,xi as rt,z as re}from"./index-B41wzfl2.js";import{r as Ut,t as Dt}from"./profiles-DDKFPE0r.js";import{n as Ot,t as zt}from"./settings-DM3CNjqC.js";import{l as Vt,s as Ht}from"./skills-3O8WlKlI.js";function H(e){return e.job}function ut(e){return typeof e=="object"&&e!==null}function ae(e,s=""){if(typeof e=="string")return e;if(!ut(e))return s;if(e.kind==="cron")return e.expr||e.display||s;if(e.kind==="once")return e.run_at||e.display||s;if(e.kind==="interval")return e.display||(typeof e.minutes=="number"?`every ${e.minutes}m`:s);const a=e;return a.expr||a.run_at||a.display||s}function At(e,s="—"){if(typeof e=="string")return e;if(!ut(e))return s;if(e.kind==="cron")return e.expr||e.display||s;if(e.kind==="interval"||e.kind==="once")return e.display||ae(e,s);const a=e;return a.display||a.expr||a.run_at||s}function dt(e){return e&&typeof e=="object"?e.times??null:null}function Lt(e,s){const a={},j=ae(e.schedule,e.schedule_display||""),r=dt(e.repeat),h=e.deliver||"origin",_=e.skills||(e.skill?[e.skill]:[]),p=e.model||"",y=e.provider||"";return s.name!==e.name&&(a.name=s.name),s.schedule!==j&&(a.schedule=s.schedule),s.prompt!==(e.prompt||"")&&(a.prompt=s.prompt),s.deliver!==h&&(a.deliver=s.deliver),(s.skills.length!==_.length||s.skills.some((d,f)=>d!==_[f]))&&(a.skills=s.skills),s.repeat_times!==r&&(a.repeat=s.repeat_times),s.model!==p&&(a.model=s.model),s.provider!==y&&(a.provider=s.provider),a}async function Qt(){return(await F("/api/hermes/jobs?include_disabled=true")).jobs}async function Wt(e){return H(await F(`/api/hermes/jobs/${e}`))}async function Gt(e){return H(await F("/api/hermes/jobs",{method:"POST",body:JSON.stringify(e)}))}async function Kt(e,s){return H(await F(`/api/hermes/jobs/${e}`,{method:"PATCH",body:JSON.stringify(s)}))}async function Zt(e){return F(`/api/hermes/jobs/${e}`,{method:"DELETE"})}async function Yt(e){return H(await F(`/api/hermes/jobs/${e}/pause`,{method:"POST"}))}async function Xt(e){return H(await F(`/api/hermes/jobs/${e}/resume`,{method:"POST"}))}async function ea(e){return H(await F(`/api/hermes/jobs/${e}/run`,{method:"POST"}))}var ue=I((()=>{lt()}));function W(e,s){return e.job_id===s||e.id===s}var te,se=I((()=>{Pt(),V(),ue(),te=xt("jobs",()=>{const e=S([]),s=S(!1);async function a(){s.value=!0;try{e.value=await Qt()}catch(d){console.error("Failed to fetch jobs:",d)}finally{s.value=!1}}async function j(d){const f=await Gt(d);return e.value.unshift(f),f}async function r(d,f){const m=await Kt(d,f),J=e.value.findIndex(o=>W(o,d));return J!==-1&&(e.value[J]=m),m}async function h(d){await Zt(d),e.value=e.value.filter(f=>!W(f,d))}async function _(d){const f=await Yt(d),m=e.value.findIndex(J=>W(J,d));m!==-1&&(e.value[m]=f)}async function p(d){const f=await Xt(d),m=e.value.findIndex(J=>W(J,d));m!==-1&&(e.value[m]=f)}async function y(d){const f=await ea(d),m=e.value.findIndex(J=>W(J,d));m!==-1&&(e.value[m]=f)}return{jobs:e,loading:s,fetchJobs:a,createJob:j,updateJob:r,deleteJob:h,pauseJob:_,resumeJob:p,runJob:y}})})),de,ce,ve,be,pe,_e,fe,me,ye,je,he,ge,we,ke,Je,xe,$e,Ce,Se,Ie,Me,Pe,Ne,Te,Ee,ct,Re=I((()=>{V(),oe(),ue(),se(),K(),de={class:"card-header"},ce={class:"job-name"},ve={class:"card-body"},be={class:"info-row"},pe={class:"info-label"},_e={class:"info-value mono"},fe={class:"info-row"},me={class:"info-label"},ye={class:"info-value mono"},je={class:"info-row"},he={class:"info-label"},ge={class:"info-value mono"},we={class:"info-row"},ke={class:"info-label"},Je={class:"info-value"},xe={class:"info-row"},$e={class:"info-label"},Ce={class:"info-value"},Se={class:"info-row"},Ie={class:"info-label"},Me={class:"info-value"},Pe={key:0,class:"info-row"},Ne={class:"info-label"},Te={class:"info-value"},Ee={class:"card-actions"},ct=Z({__name:"JobCard",props:{job:{},selected:{type:Boolean}},emits:["edit","select"],setup(e,{emit:s}){const a=e,j=s,{t:r}=ee(),h=te(),_=it(),p=P(()=>a.job.job_id||a.job.id),y=P(()=>a.job.state==="running"?r("jobs.status.running"):a.job.state==="paused"?r("jobs.status.paused"):a.job.enabled?r("jobs.status.scheduled"):r("jobs.status.disabled")),d=P(()=>a.job.state==="running"?"info":a.job.state==="paused"?"warning":a.job.enabled?"success":"error"),f=P(()=>At(a.job.schedule,a.job.schedule_display||"—")),m=P(()=>a.job.provider||"—"),J=P(()=>a.job.model||"—"),o=$=>$?new Date($).toLocaleString():"—";async function q(){try{await h.pauseJob(p.value),_.success(r("jobs.jobPaused"))}catch($){_.error($.message)}}async function g(){try{await h.resumeJob(p.value),_.success(r("jobs.jobResumed"))}catch($){_.error($.message)}}async function T(){try{await h.runJob(p.value),_.info(r("jobs.jobTriggered"))}catch($){_.error($.message)}}async function k(){try{await h.deleteJob(p.value),_.success(r("jobs.jobDeleted"))}catch($){_.error($.message)}}function E($){$.target.closest(".card-actions")||j("select",p.value)}return($,C)=>(w(),N("div",{class:ie(["job-card",{selected:e.selected}]),onClick:E},[i("div",de,[i("h3",ce,u(e.job.name),1),i("span",{class:ie(["status-badge",d.value])},u(y.value),3)]),i("div",ve,[i("div",be,[i("span",pe,u(t(r)("jobs.info.schedule")),1),i("code",_e,u(f.value),1)]),i("div",fe,[i("span",me,u(t(r)("jobs.info.provider")),1),i("span",ye,u(m.value),1)]),i("div",je,[i("span",he,u(t(r)("jobs.info.model")),1),i("span",ge,u(J.value),1)]),i("div",we,[i("span",ke,u(t(r)("jobs.info.lastRun")),1),i("span",Je,[x(u(o(e.job.last_run_at))+" ",1),e.job.last_status?(w(),N("span",{key:0,class:ie(["run-status",{ok:e.job.last_status==="ok",err:e.job.last_status!=="ok"}])},u(e.job.last_status==="ok"?t(r)("common.ok"):e.job.last_status),3)):D("",!0)])]),i("div",xe,[i("span",$e,u(t(r)("jobs.info.nextRun")),1),i("span",Ce,u(o(e.job.next_run_at)),1)]),i("div",Se,[i("span",Ie,u(t(r)("jobs.info.deliver")),1),i("span",Me,[x(u(e.job.deliver),1),e.job.origin?(w(),N(z,{key:0},[x(" ("+u(e.job.origin.platform)+")",1)],64)):D("",!0)])]),e.job.repeat?(w(),N("div",Pe,[i("span",Ne,u(t(r)("jobs.info.repeat")),1),i("span",Te,[typeof e.job.repeat=="string"?(w(),N(z,{key:0},[x(u(e.job.repeat),1)],64)):(w(),N(z,{key:1},[x(u(e.job.repeat.completed)+" / "+u(e.job.repeat.times??"∞"),1)],64))])])):D("",!0)]),i("div",Ee,[e.job.state!=="paused"&&e.job.enabled?(w(),R(t(G),{key:0},{trigger:c(()=>[v(t(B),{size:"tiny",quaternary:"",onClick:L(q,["stop"])},{default:c(()=>[x(u(t(r)("jobs.action.pause")),1)]),_:1})]),default:c(()=>[x(" "+u(t(r)("jobs.action.pauseJob")),1)]),_:1})):e.job.state==="paused"?(w(),R(t(G),{key:1},{trigger:c(()=>[v(t(B),{size:"tiny",quaternary:"",onClick:L(g,["stop"])},{default:c(()=>[x(u(t(r)("jobs.action.resume")),1)]),_:1})]),default:c(()=>[x(" "+u(t(r)("jobs.action.resumeJob")),1)]),_:1})):D("",!0),v(t(G),null,{trigger:c(()=>[v(t(B),{size:"tiny",quaternary:"",onClick:L(T,["stop"])},{default:c(()=>[x(u(t(r)("jobs.action.runNow")),1)]),_:1})]),default:c(()=>[x(" "+u(t(r)("jobs.action.triggerImmediately")),1)]),_:1}),v(t(B),{size:"tiny",quaternary:"",onClick:C[0]||(C[0]=L(M=>j("edit",p.value),["stop"]))},{default:c(()=>[x(u(t(r)("common.edit")),1)]),_:1}),v(t(B),{size:"tiny",quaternary:"",type:"error",onClick:L(k,["stop"])},{default:c(()=>[x(u(t(r)("common.delete")),1)]),_:1})])],2))}})})),ta=I((()=>{})),vt,aa=I((()=>{Re(),Re(),ta(),Y(),vt=X(ct,[["__scopeId","data-v-d494f827"]])})),Be,Fe,bt,qe=I((()=>{V(),aa(),se(),K(),Be={key:0,class:"empty-state"},Fe={key:1,class:"jobs-grid"},bt=Z({__name:"JobsPanel",props:{selectedJobId:{},sortBy:{},sortAsc:{type:Boolean}},emits:["edit","select"],setup(e,{emit:s}){const a=e,j=s,{t:r}=ee(),h=te(),_=P(()=>{const d=[...h.jobs],f=a.sortBy,m=a.sortAsc;return f==="name"?d.sort((J,o)=>J.name.localeCompare(o.name,"zh-CN")*(m?1:-1)):m||d.reverse(),d});function p(d){j("select",a.selectedJobId===d?null:d)}function y(){a.selectedJobId&&j("select",null)}return(d,f)=>(w(),N(z,null,[t(h).jobs.length===0?(w(),N("div",Be,[f[0]||(f[0]=Et('<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" class="empty-icon" data-v-6bf5dbff><rect x="3" y="4" width="18" height="18" rx="2" ry="2" data-v-6bf5dbff></rect><line x1="16" y1="2" x2="16" y2="6" data-v-6bf5dbff></line><line x1="8" y1="2" x2="8" y2="6" data-v-6bf5dbff></line><line x1="3" y1="10" x2="21" y2="10" data-v-6bf5dbff></line></svg>',1)),i("p",null,u(t(r)("jobs.noJobs")),1)])):(w(),N("div",Fe,[(w(!0),N(z,null,nt(_.value,m=>(w(),R(vt,{key:m.id,job:m,selected:e.selectedJobId===(m.job_id||m.id),onEdit:J=>j("edit",m.id),onSelect:p},null,8,["job","selected","onEdit"]))),128))])),e.selectedJobId?(w(),N("div",{key:2,class:"deselect-overlay",onClick:y})):D("",!0)],64))}})})),oa=I((()=>{})),pt,sa=I((()=>{qe(),qe(),oa(),Y(),pt=X(bt,[["__scopeId","data-v-6bf5dbff"]])}));async function la(e){const s=new URLSearchParams;e&&s.set("jobId",e);const a=s.toString();return(await F(`/api/cron-history${a?`?${a}`:""}`)).runs}async function na(e,s){return F(`/api/cron-history/${encodeURIComponent(e)}/${encodeURIComponent(s)}`)}var ia=I((()=>{lt()})),Ue,De,Oe,ze,Ve,He,_t,Ae=I((()=>{V(),oe(),K(),ia(),$t(),Ue={class:"run-history"},De={class:"history-header"},Oe={class:"history-title"},ze={class:"history-count"},Ve={class:"history-body"},He={class:"run-meta"},_t=Z({__name:"JobRunHistory",props:{selectedJobId:{},jobNameMap:{},profileKey:{}},setup(e){const s=qt(async()=>(await Mt(async()=>{const{default:o}=await import("./MarkdownRenderer-RUGb4sbQ.js");return{default:o}},__vite__mapDeps([0,1,2,3,4,5,6]))).default),a=e,{t:j}=ee(),r=S(!1),h=S([]),_=S({}),p=S({}),y=P(()=>a.selectedJobId?h.value.filter(o=>o.jobId===a.selectedJobId):h.value);async function d(){r.value=!0;try{h.value=await la(a.selectedJobId??void 0)}catch(o){console.error("Failed to fetch cron runs:",o),h.value=[]}finally{r.value=!1}}async function f(o){const q=Array.isArray(o)?o:o!=null?[o]:[];for(const g of q){const T=String(g);if(_.value[T]||p.value[T])continue;const k=y.value.find(E=>`${E.jobId}/${E.fileName}`===T);if(k){p.value[T]=!0;try{const E=await na(k.jobId,k.fileName);_.value[T]=E.content}catch{_.value[T]="[Error loading content]"}finally{p.value[T]=!1}}}}function m(o){return o<1024?`${o}B`:o<1024*1024?`${(o/1024).toFixed(1)}KB`:`${(o/1024/1024).toFixed(1)}MB`}function J(o){return a.jobNameMap[o]||o}return It(()=>[a.selectedJobId,a.profileKey],()=>{_.value={},d()},{immediate:!0}),(o,q)=>(w(),N("div",Ue,[i("div",De,[i("span",Oe,u(t(j)("jobs.runHistory.title")),1),i("span",ze,u(y.value.length)+" "+u(t(j)("jobs.runHistory.runs")),1)]),i("div",Ve,[v(t(re),{show:r.value},{default:c(()=>[!r.value&&y.value.length===0?(w(),R(t(Tt),{key:0,description:t(j)("jobs.runHistory.noRuns")},null,8,["description"])):(w(),R(t(St),{key:1,accordion:"","onUpdate:expandedNames":f},{default:c(()=>[(w(!0),N(z,null,nt(y.value,g=>(w(),R(t(Ct),{key:`${g.jobId}/${g.fileName}`,title:`${J(g.jobId)} — ${g.runTime}`,name:`${g.jobId}/${g.fileName}`},{"header-extra":c(()=>[i("span",He,u(m(g.size)),1)]),default:c(()=>[p.value[`${g.jobId}/${g.fileName}`]?(w(),R(t(re),{key:0,size:"small"})):_.value[`${g.jobId}/${g.fileName}`]?(w(),R(t(s),{key:1,content:_.value[`${g.jobId}/${g.fileName}`]},null,8,["content"])):D("",!0)]),_:2},1032,["title","name"]))),128))]),_:1}))]),_:1},8,["show"])])]))}})})),ra=I((()=>{})),ft,ua=I((()=>{Ae(),Ae(),ra(),Y(),ft=X(_t,[["__scopeId","data-v-5da60fa5"]])})),Le,mt,Qe=I((()=>{V(),oe(),se(),zt(),Bt(),ue(),Vt(),K(),Le={class:"modal-footer"},mt=Z({__name:"JobFormModal",props:{jobId:{}},emits:["close","saved"],setup(e,{emit:s}){const{t:a}=ee(),j=e,r=s,h=te(),_=Ot(),p=Ft(),y=it(),d=S(!0),f=S(!1),m=S(!1),J=S([]),o=S({name:"",schedule:"",prompt:"",deliver:"origin",skills:[],repeat_times:null,provider:"",model:""}),q=S(null),g=P(()=>!!j.jobId),T=P(()=>[{label:a("jobs.presetEveryMinute"),value:"* * * * *"},{label:a("jobs.presetEvery5Min"),value:"*/5 * * * *"},{label:a("jobs.presetEveryHour"),value:"0 * * * *"},{label:a("jobs.presetEveryDay"),value:"0 0 * * *"},{label:a("jobs.presetEveryDay9"),value:"0 9 * * *"},{label:a("jobs.presetEveryMonday"),value:"0 9 * * 1"},{label:a("jobs.presetEveryMonth"),value:"0 9 1 * *"}]);function k(n){return typeof n=="string"&&n.trim().length>0}function E(n){const l=_.platforms[n]||{};switch(n){case"telegram":case"discord":case"slack":return k(l.token);case"whatsapp":return l.enabled===!0||l.enabled==="true";case"matrix":return k(l.token)&&k(l.extra?.homeserver);case"weixin":return k(l.token)&&k(l.extra?.account_id);case"wecom":return k(l.extra?.bot_id)&&k(l.extra?.secret);case"feishu":return k(l.extra?.app_id)&&k(l.extra?.app_secret);case"dingtalk":return k(l.extra?.client_id)&&k(l.extra?.client_secret)||k(l.extra?.app_key)&&k(l.extra?.client_secret);case"qqbot":return k(l.extra?.app_id)&&k(l.extra?.client_secret);default:return!1}}const $=P(()=>{const n=[{label:a("jobs.defaultProvider"),value:""},...p.modelGroups.filter(l=>l.models.length>0).map(l=>({label:l.label||l.provider,value:l.provider}))];return o.value.provider&&!n.some(l=>l.value===o.value.provider)&&n.push({label:o.value.provider,value:o.value.provider}),n}),C=P(()=>{const n=o.value.provider;if(!n)return[{label:a("jobs.defaultModel"),value:""}];const l=p.modelGroups.find(O=>O.provider===n)?.models||[],b=l.map(O=>({label:p.displayModelName(O,n),value:O}));return o.value.model&&!l.includes(o.value.model)&&b.unshift({label:p.displayModelName(o.value.model,n),value:o.value.model}),b});function M(n){if(o.value.provider=n,!n){o.value.model="";return}const l=p.modelGroups.find(b=>b.provider===n);l?.models.includes(o.value.model)||(o.value.model=l?.models[0]||"")}const A=P(()=>{const n=[{label:a("jobs.origin"),value:"origin"},{label:a("jobs.local"),value:"local"}];for(const l of[{key:"telegram",label:"Telegram"},{key:"discord",label:"Discord"},{key:"slack",label:"Slack"},{key:"whatsapp",label:"WhatsApp"},{key:"matrix",label:"Matrix"},{key:"weixin",label:"WeChat"},{key:"wecom",label:"WeCom"},{key:"feishu",label:"Feishu"},{key:"dingtalk",label:"DingTalk"},{key:"qqbot",label:"QQBot"}])n.push({label:l.label,value:l.key,disabled:!E(l.key)});return n}),le=S(null);function ht(n){const l=new Map;for(const b of n)b.enabled!==!1&&(l.has(b.name)||l.set(b.name,b));return[...l.values()].map(b=>({label:b.name,value:b.name})).sort((b,O)=>b.label.localeCompare(O.label))}async function gt(){m.value=!0;try{J.value=ht((await Ht()).categories.flatMap(n=>n.skills||[]))}catch{J.value=[]}finally{m.value=!1}}rt(async()=>{if(Object.keys(_.platforms||{}).length===0&&await _.fetchSettings(),await p.loadModels(),await gt(),j.jobId)try{const n=await Wt(j.jobId);le.value=n,o.value={name:n.name,schedule:ae(n.schedule,n.schedule_display||""),prompt:n.prompt,deliver:n.deliver||"origin",skills:n.skills||(n.skill?[n.skill]:[]),repeat_times:dt(n.repeat),provider:n.provider||"",model:n.model||""}}catch(n){y.error(a("jobs.loadFailed")+": "+n.message)}});async function wt(){if(!o.value.name.trim()){y.warning(a("jobs.nameRequired"));return}if(!o.value.schedule.trim()){y.warning(a("jobs.scheduleRequired"));return}f.value=!0;try{if(g.value){if(!le.value){y.error(a("jobs.loadFailed"));return}const n=Lt(le.value,o.value);if(Object.keys(n).length===0){y.success(a("jobs.jobUpdated")),r("saved");return}await h.updateJob(j.jobId,n),y.success(a("jobs.jobUpdated"))}else{const n={name:o.value.name,schedule:o.value.schedule,prompt:o.value.prompt,deliver:o.value.deliver,skills:o.value.skills,repeat:o.value.repeat_times??void 0,provider:o.value.provider||void 0,model:o.value.model||void 0};await h.createJob(n),y.success(a("jobs.jobCreated"))}r("saved")}catch(n){y.error(n.message)}finally{f.value=!1}}function kt(){d.value=!1,setTimeout(()=>r("close"),200)}return(n,l)=>(w(),R(t(Rt),{show:d.value,"onUpdate:show":l[9]||(l[9]=b=>d.value=b),preset:"card",title:g.value?t(a)("jobs.editJob"):t(a)("jobs.createJob"),style:{width:"min(520px, calc(100vw - 32px))"},"mask-closable":!f.value,onAfterLeave:l[10]||(l[10]=b=>r("close"))},{footer:c(()=>[i("div",Le,[v(t(B),{onClick:kt},{default:c(()=>[x(u(t(a)("common.cancel")),1)]),_:1}),v(t(B),{type:"primary",loading:f.value,onClick:wt},{default:c(()=>[x(u(g.value?t(a)("common.update"):t(a)("common.create")),1)]),_:1},8,["loading"])])]),default:c(()=>[v(t(Jt),{"label-placement":"top"},{default:c(()=>[v(t(U),{label:t(a)("jobs.name"),required:""},{default:c(()=>[v(t(ne),{value:o.value.name,"onUpdate:value":l[0]||(l[0]=b=>o.value.name=b),placeholder:t(a)("jobs.namePlaceholder"),maxlength:"200","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.schedule"),required:""},{default:c(()=>[v(t(ne),{value:o.value.schedule,"onUpdate:value":l[1]||(l[1]=b=>o.value.schedule=b),placeholder:t(a)("jobs.schedulePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.provider")},{default:c(()=>[v(t(Q),{value:o.value.provider,options:$.value,"onUpdate:value":M},null,8,["value","options"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.model")},{default:c(()=>[v(t(Q),{value:o.value.model,"onUpdate:value":l[2]||(l[2]=b=>o.value.model=b),filterable:"",clearable:"",disabled:!o.value.provider,options:C.value,placeholder:t(a)("jobs.modelPlaceholder")},null,8,["value","disabled","options","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.quickPresets")},{default:c(()=>[v(t(Q),{value:q.value,"onUpdate:value":[l[3]||(l[3]=b=>q.value=b),l[4]||(l[4]=b=>o.value.schedule=b)],options:T.value,placeholder:t(a)("jobs.selectPreset")},null,8,["value","options","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.prompt"),required:""},{default:c(()=>[v(t(ne),{value:o.value.prompt,"onUpdate:value":l[5]||(l[5]=b=>o.value.prompt=b),type:"textarea",placeholder:t(a)("jobs.promptPlaceholder"),rows:4,maxlength:"5000","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.skills")},{default:c(()=>[v(t(Q),{value:o.value.skills,"onUpdate:value":l[6]||(l[6]=b=>o.value.skills=b),multiple:"",filterable:"",clearable:"",loading:m.value,options:J.value,placeholder:t(a)("jobs.skillsPlaceholder")},null,8,["value","loading","options","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.deliverTarget")},{default:c(()=>[v(t(Q),{value:o.value.deliver,"onUpdate:value":l[7]||(l[7]=b=>o.value.deliver=b),options:A.value},null,8,["value","options"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.repeatCount")},{default:c(()=>[v(t(Nt),{value:o.value.repeat_times,"onUpdate:value":l[8]||(l[8]=b=>o.value.repeat_times=b),min:1,placeholder:t(a)("jobs.repeatPlaceholder"),clearable:"",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title","mask-closable"]))}})})),da=I((()=>{})),yt,ca=I((()=>{Qe(),Qe(),da(),Y(),yt=X(mt,[["__scopeId","data-v-b5ba2fde"]])})),We,Ge,Ke,Ze,Ye,Xe,et,tt,at,ot,jt,st=I((()=>{V(),oe(),K(),sa(),ua(),ca(),se(),Dt(),We={class:"jobs-view"},Ge={class:"page-header"},Ke={class:"header-title"},Ze={class:"header-actions"},Ye={class:"sort-toggle"},Xe={class:"sort-arrow"},et={class:"sort-arrow"},tt={class:"jobs-split"},at={class:"jobs-top"},ot={class:"jobs-bottom"},jt=Z({__name:"JobsView",setup(e){const{t:s}=ee(),a=te(),j=Ut(),r=S(!1),h=S(null),_=S(null),p=S("name"),y=S(!0),d=P(()=>j.activeProfileName||"default"),f=P(()=>{const C={};for(const M of a.jobs){const A=M.job_id||M.id;C[A]=M.name}return C});async function m(){(!j.activeProfileName||j.profiles.length===0)&&await j.fetchProfiles()}async function J(){_.value=null,a.jobs=[],await m(),await a.fetchJobs()}rt(()=>{J()});function o(){h.value=null,r.value=!0}function q(C){h.value=C,r.value=!0}function g(){r.value=!1,h.value=null}async function T(){await a.fetchJobs(),g()}function k(C){_.value=_.value===C?null:C}function E(C){p.value===C?y.value=!y.value:(p.value=C,y.value=!0)}function $(C){return p.value!==C?"↕":y.value?"↑":"↓"}return(C,M)=>(w(),N("div",We,[i("header",Ge,[i("h2",Ke,u(t(s)("jobs.title")),1),i("div",Ze,[i("div",Ye,[v(t(G),null,{trigger:c(()=>[v(t(B),{size:"tiny",type:p.value==="name"?"primary":"default",onClick:M[0]||(M[0]=A=>E("name"))},{default:c(()=>[x(u(t(s)("jobs.sortByName"))+" ",1),i("span",Xe,u($("name")),1)]),_:1},8,["type"])]),default:c(()=>[x(" "+u(p.value==="name"?y.value?t(s)("jobs.sortAsc"):t(s)("jobs.sortDesc"):t(s)("jobs.sortByNameHint")),1)]),_:1}),v(t(G),null,{trigger:c(()=>[v(t(B),{size:"tiny",type:p.value==="time"?"primary":"default",onClick:M[1]||(M[1]=A=>E("time"))},{default:c(()=>[x(u(t(s)("jobs.sortByTime"))+" ",1),i("span",et,u($("time")),1)]),_:1},8,["type"])]),default:c(()=>[x(" "+u(p.value==="time"?y.value?t(s)("jobs.sortAsc"):t(s)("jobs.sortDesc"):t(s)("jobs.sortByTimeHint")),1)]),_:1})]),M[3]||(M[3]=i("span",{class:"sort-divider"},null,-1)),v(t(B),{type:"primary",size:"small",onClick:o},{icon:c(()=>[...M[2]||(M[2]=[i("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),i("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:c(()=>[x(" "+u(t(s)("jobs.createJob")),1)]),_:1})])]),i("div",tt,[i("div",at,[v(t(re),{show:t(a).loading&&t(a).jobs.length===0},{default:c(()=>[v(pt,{"selected-job-id":_.value,"sort-by":p.value,"sort-asc":y.value,onEdit:q,onSelect:k},null,8,["selected-job-id","sort-by","sort-asc"])]),_:1},8,["show"])]),M[4]||(M[4]=i("div",{class:"splitter"},null,-1)),i("div",ot,[v(ft,{"selected-job-id":_.value,"job-name-map":f.value,"profile-key":d.value},null,8,["selected-job-id","job-name-map","profile-key"])])]),r.value?(w(),R(yt,{key:0,"job-id":h.value,onClose:g,onSaved:T},null,8,["job-id"])):D("",!0)]))}})})),va=I((()=>{})),ba,pa=I((()=>{st(),st(),va(),Y(),ba=X(jt,[["__scopeId","data-v-45581f25"]])}));pa();export{ba as default};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/MarkdownRenderer-DpSiF5gl.js","assets/js/index-RJQqJC6n.js","assets/css/index-CsQvhMiS.css","assets/js/highlight-CEOB4aIv.js","assets/js/clipboard-DYlTCW_e.js","assets/js/download-48rHoTgx.js","assets/css/MarkdownRenderer-riGsdEYy.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as Jt,$r as R,Br as xt,Ci as w,Cr as K,Ct as G,E as oe,Er as $t,Fr as F,Ft as Ct,Gi as S,Hr as V,Jr as L,Lt as St,Mi as It,Nr as lt,Pi as c,Qi as t,Qr as i,Ti as nt,Tr as Mt,Ut as B,Vr as Pt,Y as Nt,Yr as z,Z as U,Zr as P,Zt as ne,aa as I,ai as x,an as Tt,ci as Z,ct as it,ea as ie,ei as D,ii as Et,jt as Q,lt as Rt,n as Y,o as Bt,oi as v,ra as u,s as Ft,si as qt,t as X,ti as N,wr as ee,xi as rt,z as re}from"./index-RJQqJC6n.js";import{r as Ut,t as Dt}from"./profiles-BtECgqqD.js";import{n as Ot,t as zt}from"./settings-Bzod_9RQ.js";import{l as Vt,s as Ht}from"./skills-CQr0eeFF.js";function H(e){return e.job}function ut(e){return typeof e=="object"&&e!==null}function ae(e,s=""){if(typeof e=="string")return e;if(!ut(e))return s;if(e.kind==="cron")return e.expr||e.display||s;if(e.kind==="once")return e.run_at||e.display||s;if(e.kind==="interval")return e.display||(typeof e.minutes=="number"?`every ${e.minutes}m`:s);const a=e;return a.expr||a.run_at||a.display||s}function At(e,s="—"){if(typeof e=="string")return e;if(!ut(e))return s;if(e.kind==="cron")return e.expr||e.display||s;if(e.kind==="interval"||e.kind==="once")return e.display||ae(e,s);const a=e;return a.display||a.expr||a.run_at||s}function dt(e){return e&&typeof e=="object"?e.times??null:null}function Lt(e,s){const a={},j=ae(e.schedule,e.schedule_display||""),r=dt(e.repeat),h=e.deliver||"origin",_=e.skills||(e.skill?[e.skill]:[]),p=e.model||"",y=e.provider||"";return s.name!==e.name&&(a.name=s.name),s.schedule!==j&&(a.schedule=s.schedule),s.prompt!==(e.prompt||"")&&(a.prompt=s.prompt),s.deliver!==h&&(a.deliver=s.deliver),(s.skills.length!==_.length||s.skills.some((d,f)=>d!==_[f]))&&(a.skills=s.skills),s.repeat_times!==r&&(a.repeat=s.repeat_times),s.model!==p&&(a.model=s.model),s.provider!==y&&(a.provider=s.provider),a}async function Qt(){return(await F("/api/hermes/jobs?include_disabled=true")).jobs}async function Wt(e){return H(await F(`/api/hermes/jobs/${e}`))}async function Gt(e){return H(await F("/api/hermes/jobs",{method:"POST",body:JSON.stringify(e)}))}async function Kt(e,s){return H(await F(`/api/hermes/jobs/${e}`,{method:"PATCH",body:JSON.stringify(s)}))}async function Zt(e){return F(`/api/hermes/jobs/${e}`,{method:"DELETE"})}async function Yt(e){return H(await F(`/api/hermes/jobs/${e}/pause`,{method:"POST"}))}async function Xt(e){return H(await F(`/api/hermes/jobs/${e}/resume`,{method:"POST"}))}async function ea(e){return H(await F(`/api/hermes/jobs/${e}/run`,{method:"POST"}))}var ue=I((()=>{lt()}));function W(e,s){return e.job_id===s||e.id===s}var te,se=I((()=>{Pt(),V(),ue(),te=xt("jobs",()=>{const e=S([]),s=S(!1);async function a(){s.value=!0;try{e.value=await Qt()}catch(d){console.error("Failed to fetch jobs:",d)}finally{s.value=!1}}async function j(d){const f=await Gt(d);return e.value.unshift(f),f}async function r(d,f){const m=await Kt(d,f),J=e.value.findIndex(o=>W(o,d));return J!==-1&&(e.value[J]=m),m}async function h(d){await Zt(d),e.value=e.value.filter(f=>!W(f,d))}async function _(d){const f=await Yt(d),m=e.value.findIndex(J=>W(J,d));m!==-1&&(e.value[m]=f)}async function p(d){const f=await Xt(d),m=e.value.findIndex(J=>W(J,d));m!==-1&&(e.value[m]=f)}async function y(d){const f=await ea(d),m=e.value.findIndex(J=>W(J,d));m!==-1&&(e.value[m]=f)}return{jobs:e,loading:s,fetchJobs:a,createJob:j,updateJob:r,deleteJob:h,pauseJob:_,resumeJob:p,runJob:y}})})),de,ce,ve,be,pe,_e,fe,me,ye,je,he,ge,we,ke,Je,xe,$e,Ce,Se,Ie,Me,Pe,Ne,Te,Ee,ct,Re=I((()=>{V(),oe(),ue(),se(),K(),de={class:"card-header"},ce={class:"job-name"},ve={class:"card-body"},be={class:"info-row"},pe={class:"info-label"},_e={class:"info-value mono"},fe={class:"info-row"},me={class:"info-label"},ye={class:"info-value mono"},je={class:"info-row"},he={class:"info-label"},ge={class:"info-value mono"},we={class:"info-row"},ke={class:"info-label"},Je={class:"info-value"},xe={class:"info-row"},$e={class:"info-label"},Ce={class:"info-value"},Se={class:"info-row"},Ie={class:"info-label"},Me={class:"info-value"},Pe={key:0,class:"info-row"},Ne={class:"info-label"},Te={class:"info-value"},Ee={class:"card-actions"},ct=Z({__name:"JobCard",props:{job:{},selected:{type:Boolean}},emits:["edit","select"],setup(e,{emit:s}){const a=e,j=s,{t:r}=ee(),h=te(),_=it(),p=P(()=>a.job.job_id||a.job.id),y=P(()=>a.job.state==="running"?r("jobs.status.running"):a.job.state==="paused"?r("jobs.status.paused"):a.job.enabled?r("jobs.status.scheduled"):r("jobs.status.disabled")),d=P(()=>a.job.state==="running"?"info":a.job.state==="paused"?"warning":a.job.enabled?"success":"error"),f=P(()=>At(a.job.schedule,a.job.schedule_display||"—")),m=P(()=>a.job.provider||"—"),J=P(()=>a.job.model||"—"),o=$=>$?new Date($).toLocaleString():"—";async function q(){try{await h.pauseJob(p.value),_.success(r("jobs.jobPaused"))}catch($){_.error($.message)}}async function g(){try{await h.resumeJob(p.value),_.success(r("jobs.jobResumed"))}catch($){_.error($.message)}}async function T(){try{await h.runJob(p.value),_.info(r("jobs.jobTriggered"))}catch($){_.error($.message)}}async function k(){try{await h.deleteJob(p.value),_.success(r("jobs.jobDeleted"))}catch($){_.error($.message)}}function E($){$.target.closest(".card-actions")||j("select",p.value)}return($,C)=>(w(),N("div",{class:ie(["job-card",{selected:e.selected}]),onClick:E},[i("div",de,[i("h3",ce,u(e.job.name),1),i("span",{class:ie(["status-badge",d.value])},u(y.value),3)]),i("div",ve,[i("div",be,[i("span",pe,u(t(r)("jobs.info.schedule")),1),i("code",_e,u(f.value),1)]),i("div",fe,[i("span",me,u(t(r)("jobs.info.provider")),1),i("span",ye,u(m.value),1)]),i("div",je,[i("span",he,u(t(r)("jobs.info.model")),1),i("span",ge,u(J.value),1)]),i("div",we,[i("span",ke,u(t(r)("jobs.info.lastRun")),1),i("span",Je,[x(u(o(e.job.last_run_at))+" ",1),e.job.last_status?(w(),N("span",{key:0,class:ie(["run-status",{ok:e.job.last_status==="ok",err:e.job.last_status!=="ok"}])},u(e.job.last_status==="ok"?t(r)("common.ok"):e.job.last_status),3)):D("",!0)])]),i("div",xe,[i("span",$e,u(t(r)("jobs.info.nextRun")),1),i("span",Ce,u(o(e.job.next_run_at)),1)]),i("div",Se,[i("span",Ie,u(t(r)("jobs.info.deliver")),1),i("span",Me,[x(u(e.job.deliver),1),e.job.origin?(w(),N(z,{key:0},[x(" ("+u(e.job.origin.platform)+")",1)],64)):D("",!0)])]),e.job.repeat?(w(),N("div",Pe,[i("span",Ne,u(t(r)("jobs.info.repeat")),1),i("span",Te,[typeof e.job.repeat=="string"?(w(),N(z,{key:0},[x(u(e.job.repeat),1)],64)):(w(),N(z,{key:1},[x(u(e.job.repeat.completed)+" / "+u(e.job.repeat.times??"∞"),1)],64))])])):D("",!0)]),i("div",Ee,[e.job.state!=="paused"&&e.job.enabled?(w(),R(t(G),{key:0},{trigger:c(()=>[v(t(B),{size:"tiny",quaternary:"",onClick:L(q,["stop"])},{default:c(()=>[x(u(t(r)("jobs.action.pause")),1)]),_:1})]),default:c(()=>[x(" "+u(t(r)("jobs.action.pauseJob")),1)]),_:1})):e.job.state==="paused"?(w(),R(t(G),{key:1},{trigger:c(()=>[v(t(B),{size:"tiny",quaternary:"",onClick:L(g,["stop"])},{default:c(()=>[x(u(t(r)("jobs.action.resume")),1)]),_:1})]),default:c(()=>[x(" "+u(t(r)("jobs.action.resumeJob")),1)]),_:1})):D("",!0),v(t(G),null,{trigger:c(()=>[v(t(B),{size:"tiny",quaternary:"",onClick:L(T,["stop"])},{default:c(()=>[x(u(t(r)("jobs.action.runNow")),1)]),_:1})]),default:c(()=>[x(" "+u(t(r)("jobs.action.triggerImmediately")),1)]),_:1}),v(t(B),{size:"tiny",quaternary:"",onClick:C[0]||(C[0]=L(M=>j("edit",p.value),["stop"]))},{default:c(()=>[x(u(t(r)("common.edit")),1)]),_:1}),v(t(B),{size:"tiny",quaternary:"",type:"error",onClick:L(k,["stop"])},{default:c(()=>[x(u(t(r)("common.delete")),1)]),_:1})])],2))}})})),ta=I((()=>{})),vt,aa=I((()=>{Re(),Re(),ta(),Y(),vt=X(ct,[["__scopeId","data-v-d494f827"]])})),Be,Fe,bt,qe=I((()=>{V(),aa(),se(),K(),Be={key:0,class:"empty-state"},Fe={key:1,class:"jobs-grid"},bt=Z({__name:"JobsPanel",props:{selectedJobId:{},sortBy:{},sortAsc:{type:Boolean}},emits:["edit","select"],setup(e,{emit:s}){const a=e,j=s,{t:r}=ee(),h=te(),_=P(()=>{const d=[...h.jobs],f=a.sortBy,m=a.sortAsc;return f==="name"?d.sort((J,o)=>J.name.localeCompare(o.name,"zh-CN")*(m?1:-1)):m||d.reverse(),d});function p(d){j("select",a.selectedJobId===d?null:d)}function y(){a.selectedJobId&&j("select",null)}return(d,f)=>(w(),N(z,null,[t(h).jobs.length===0?(w(),N("div",Be,[f[0]||(f[0]=Et('<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" class="empty-icon" data-v-6bf5dbff><rect x="3" y="4" width="18" height="18" rx="2" ry="2" data-v-6bf5dbff></rect><line x1="16" y1="2" x2="16" y2="6" data-v-6bf5dbff></line><line x1="8" y1="2" x2="8" y2="6" data-v-6bf5dbff></line><line x1="3" y1="10" x2="21" y2="10" data-v-6bf5dbff></line></svg>',1)),i("p",null,u(t(r)("jobs.noJobs")),1)])):(w(),N("div",Fe,[(w(!0),N(z,null,nt(_.value,m=>(w(),R(vt,{key:m.id,job:m,selected:e.selectedJobId===(m.job_id||m.id),onEdit:J=>j("edit",m.id),onSelect:p},null,8,["job","selected","onEdit"]))),128))])),e.selectedJobId?(w(),N("div",{key:2,class:"deselect-overlay",onClick:y})):D("",!0)],64))}})})),oa=I((()=>{})),pt,sa=I((()=>{qe(),qe(),oa(),Y(),pt=X(bt,[["__scopeId","data-v-6bf5dbff"]])}));async function la(e){const s=new URLSearchParams;e&&s.set("jobId",e);const a=s.toString();return(await F(`/api/cron-history${a?`?${a}`:""}`)).runs}async function na(e,s){return F(`/api/cron-history/${encodeURIComponent(e)}/${encodeURIComponent(s)}`)}var ia=I((()=>{lt()})),Ue,De,Oe,ze,Ve,He,_t,Ae=I((()=>{V(),oe(),K(),ia(),$t(),Ue={class:"run-history"},De={class:"history-header"},Oe={class:"history-title"},ze={class:"history-count"},Ve={class:"history-body"},He={class:"run-meta"},_t=Z({__name:"JobRunHistory",props:{selectedJobId:{},jobNameMap:{},profileKey:{}},setup(e){const s=qt(async()=>(await Mt(async()=>{const{default:o}=await import("./MarkdownRenderer-DpSiF5gl.js");return{default:o}},__vite__mapDeps([0,1,2,3,4,5,6]))).default),a=e,{t:j}=ee(),r=S(!1),h=S([]),_=S({}),p=S({}),y=P(()=>a.selectedJobId?h.value.filter(o=>o.jobId===a.selectedJobId):h.value);async function d(){r.value=!0;try{h.value=await la(a.selectedJobId??void 0)}catch(o){console.error("Failed to fetch cron runs:",o),h.value=[]}finally{r.value=!1}}async function f(o){const q=Array.isArray(o)?o:o!=null?[o]:[];for(const g of q){const T=String(g);if(_.value[T]||p.value[T])continue;const k=y.value.find(E=>`${E.jobId}/${E.fileName}`===T);if(k){p.value[T]=!0;try{const E=await na(k.jobId,k.fileName);_.value[T]=E.content}catch{_.value[T]="[Error loading content]"}finally{p.value[T]=!1}}}}function m(o){return o<1024?`${o}B`:o<1024*1024?`${(o/1024).toFixed(1)}KB`:`${(o/1024/1024).toFixed(1)}MB`}function J(o){return a.jobNameMap[o]||o}return It(()=>[a.selectedJobId,a.profileKey],()=>{_.value={},d()},{immediate:!0}),(o,q)=>(w(),N("div",Ue,[i("div",De,[i("span",Oe,u(t(j)("jobs.runHistory.title")),1),i("span",ze,u(y.value.length)+" "+u(t(j)("jobs.runHistory.runs")),1)]),i("div",Ve,[v(t(re),{show:r.value},{default:c(()=>[!r.value&&y.value.length===0?(w(),R(t(Tt),{key:0,description:t(j)("jobs.runHistory.noRuns")},null,8,["description"])):(w(),R(t(St),{key:1,accordion:"","onUpdate:expandedNames":f},{default:c(()=>[(w(!0),N(z,null,nt(y.value,g=>(w(),R(t(Ct),{key:`${g.jobId}/${g.fileName}`,title:`${J(g.jobId)} — ${g.runTime}`,name:`${g.jobId}/${g.fileName}`},{"header-extra":c(()=>[i("span",He,u(m(g.size)),1)]),default:c(()=>[p.value[`${g.jobId}/${g.fileName}`]?(w(),R(t(re),{key:0,size:"small"})):_.value[`${g.jobId}/${g.fileName}`]?(w(),R(t(s),{key:1,content:_.value[`${g.jobId}/${g.fileName}`]},null,8,["content"])):D("",!0)]),_:2},1032,["title","name"]))),128))]),_:1}))]),_:1},8,["show"])])]))}})})),ra=I((()=>{})),ft,ua=I((()=>{Ae(),Ae(),ra(),Y(),ft=X(_t,[["__scopeId","data-v-5da60fa5"]])})),Le,mt,Qe=I((()=>{V(),oe(),se(),zt(),Bt(),ue(),Vt(),K(),Le={class:"modal-footer"},mt=Z({__name:"JobFormModal",props:{jobId:{}},emits:["close","saved"],setup(e,{emit:s}){const{t:a}=ee(),j=e,r=s,h=te(),_=Ot(),p=Ft(),y=it(),d=S(!0),f=S(!1),m=S(!1),J=S([]),o=S({name:"",schedule:"",prompt:"",deliver:"origin",skills:[],repeat_times:null,provider:"",model:""}),q=S(null),g=P(()=>!!j.jobId),T=P(()=>[{label:a("jobs.presetEveryMinute"),value:"* * * * *"},{label:a("jobs.presetEvery5Min"),value:"*/5 * * * *"},{label:a("jobs.presetEveryHour"),value:"0 * * * *"},{label:a("jobs.presetEveryDay"),value:"0 0 * * *"},{label:a("jobs.presetEveryDay9"),value:"0 9 * * *"},{label:a("jobs.presetEveryMonday"),value:"0 9 * * 1"},{label:a("jobs.presetEveryMonth"),value:"0 9 1 * *"}]);function k(n){return typeof n=="string"&&n.trim().length>0}function E(n){const l=_.platforms[n]||{};switch(n){case"telegram":case"discord":case"slack":return k(l.token);case"whatsapp":return l.enabled===!0||l.enabled==="true";case"matrix":return k(l.token)&&k(l.extra?.homeserver);case"weixin":return k(l.token)&&k(l.extra?.account_id);case"wecom":return k(l.extra?.bot_id)&&k(l.extra?.secret);case"feishu":return k(l.extra?.app_id)&&k(l.extra?.app_secret);case"dingtalk":return k(l.extra?.client_id)&&k(l.extra?.client_secret)||k(l.extra?.app_key)&&k(l.extra?.client_secret);case"qqbot":return k(l.extra?.app_id)&&k(l.extra?.client_secret);default:return!1}}const $=P(()=>{const n=[{label:a("jobs.defaultProvider"),value:""},...p.modelGroups.filter(l=>l.models.length>0).map(l=>({label:l.label||l.provider,value:l.provider}))];return o.value.provider&&!n.some(l=>l.value===o.value.provider)&&n.push({label:o.value.provider,value:o.value.provider}),n}),C=P(()=>{const n=o.value.provider;if(!n)return[{label:a("jobs.defaultModel"),value:""}];const l=p.modelGroups.find(O=>O.provider===n)?.models||[],b=l.map(O=>({label:p.displayModelName(O,n),value:O}));return o.value.model&&!l.includes(o.value.model)&&b.unshift({label:p.displayModelName(o.value.model,n),value:o.value.model}),b});function M(n){if(o.value.provider=n,!n){o.value.model="";return}const l=p.modelGroups.find(b=>b.provider===n);l?.models.includes(o.value.model)||(o.value.model=l?.models[0]||"")}const A=P(()=>{const n=[{label:a("jobs.origin"),value:"origin"},{label:a("jobs.local"),value:"local"}];for(const l of[{key:"telegram",label:"Telegram"},{key:"discord",label:"Discord"},{key:"slack",label:"Slack"},{key:"whatsapp",label:"WhatsApp"},{key:"matrix",label:"Matrix"},{key:"weixin",label:"WeChat"},{key:"wecom",label:"WeCom"},{key:"feishu",label:"Feishu"},{key:"dingtalk",label:"DingTalk"},{key:"qqbot",label:"QQBot"}])n.push({label:l.label,value:l.key,disabled:!E(l.key)});return n}),le=S(null);function ht(n){const l=new Map;for(const b of n)b.enabled!==!1&&(l.has(b.name)||l.set(b.name,b));return[...l.values()].map(b=>({label:b.name,value:b.name})).sort((b,O)=>b.label.localeCompare(O.label))}async function gt(){m.value=!0;try{J.value=ht((await Ht()).categories.flatMap(n=>n.skills||[]))}catch{J.value=[]}finally{m.value=!1}}rt(async()=>{if(Object.keys(_.platforms||{}).length===0&&await _.fetchSettings(),await p.loadModels(),await gt(),j.jobId)try{const n=await Wt(j.jobId);le.value=n,o.value={name:n.name,schedule:ae(n.schedule,n.schedule_display||""),prompt:n.prompt,deliver:n.deliver||"origin",skills:n.skills||(n.skill?[n.skill]:[]),repeat_times:dt(n.repeat),provider:n.provider||"",model:n.model||""}}catch(n){y.error(a("jobs.loadFailed")+": "+n.message)}});async function wt(){if(!o.value.name.trim()){y.warning(a("jobs.nameRequired"));return}if(!o.value.schedule.trim()){y.warning(a("jobs.scheduleRequired"));return}f.value=!0;try{if(g.value){if(!le.value){y.error(a("jobs.loadFailed"));return}const n=Lt(le.value,o.value);if(Object.keys(n).length===0){y.success(a("jobs.jobUpdated")),r("saved");return}await h.updateJob(j.jobId,n),y.success(a("jobs.jobUpdated"))}else{const n={name:o.value.name,schedule:o.value.schedule,prompt:o.value.prompt,deliver:o.value.deliver,skills:o.value.skills,repeat:o.value.repeat_times??void 0,provider:o.value.provider||void 0,model:o.value.model||void 0};await h.createJob(n),y.success(a("jobs.jobCreated"))}r("saved")}catch(n){y.error(n.message)}finally{f.value=!1}}function kt(){d.value=!1,setTimeout(()=>r("close"),200)}return(n,l)=>(w(),R(t(Rt),{show:d.value,"onUpdate:show":l[9]||(l[9]=b=>d.value=b),preset:"card",title:g.value?t(a)("jobs.editJob"):t(a)("jobs.createJob"),style:{width:"min(520px, calc(100vw - 32px))"},"mask-closable":!f.value,onAfterLeave:l[10]||(l[10]=b=>r("close"))},{footer:c(()=>[i("div",Le,[v(t(B),{onClick:kt},{default:c(()=>[x(u(t(a)("common.cancel")),1)]),_:1}),v(t(B),{type:"primary",loading:f.value,onClick:wt},{default:c(()=>[x(u(g.value?t(a)("common.update"):t(a)("common.create")),1)]),_:1},8,["loading"])])]),default:c(()=>[v(t(Jt),{"label-placement":"top"},{default:c(()=>[v(t(U),{label:t(a)("jobs.name"),required:""},{default:c(()=>[v(t(ne),{value:o.value.name,"onUpdate:value":l[0]||(l[0]=b=>o.value.name=b),placeholder:t(a)("jobs.namePlaceholder"),maxlength:"200","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.schedule"),required:""},{default:c(()=>[v(t(ne),{value:o.value.schedule,"onUpdate:value":l[1]||(l[1]=b=>o.value.schedule=b),placeholder:t(a)("jobs.schedulePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.provider")},{default:c(()=>[v(t(Q),{value:o.value.provider,options:$.value,"onUpdate:value":M},null,8,["value","options"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.model")},{default:c(()=>[v(t(Q),{value:o.value.model,"onUpdate:value":l[2]||(l[2]=b=>o.value.model=b),filterable:"",clearable:"",disabled:!o.value.provider,options:C.value,placeholder:t(a)("jobs.modelPlaceholder")},null,8,["value","disabled","options","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.quickPresets")},{default:c(()=>[v(t(Q),{value:q.value,"onUpdate:value":[l[3]||(l[3]=b=>q.value=b),l[4]||(l[4]=b=>o.value.schedule=b)],options:T.value,placeholder:t(a)("jobs.selectPreset")},null,8,["value","options","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.prompt"),required:""},{default:c(()=>[v(t(ne),{value:o.value.prompt,"onUpdate:value":l[5]||(l[5]=b=>o.value.prompt=b),type:"textarea",placeholder:t(a)("jobs.promptPlaceholder"),rows:4,maxlength:"5000","show-count":""},null,8,["value","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.skills")},{default:c(()=>[v(t(Q),{value:o.value.skills,"onUpdate:value":l[6]||(l[6]=b=>o.value.skills=b),multiple:"",filterable:"",clearable:"",loading:m.value,options:J.value,placeholder:t(a)("jobs.skillsPlaceholder")},null,8,["value","loading","options","placeholder"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.deliverTarget")},{default:c(()=>[v(t(Q),{value:o.value.deliver,"onUpdate:value":l[7]||(l[7]=b=>o.value.deliver=b),options:A.value},null,8,["value","options"])]),_:1},8,["label"]),v(t(U),{label:t(a)("jobs.repeatCount")},{default:c(()=>[v(t(Nt),{value:o.value.repeat_times,"onUpdate:value":l[8]||(l[8]=b=>o.value.repeat_times=b),min:1,placeholder:t(a)("jobs.repeatPlaceholder"),clearable:"",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title","mask-closable"]))}})})),da=I((()=>{})),yt,ca=I((()=>{Qe(),Qe(),da(),Y(),yt=X(mt,[["__scopeId","data-v-b5ba2fde"]])})),We,Ge,Ke,Ze,Ye,Xe,et,tt,at,ot,jt,st=I((()=>{V(),oe(),K(),sa(),ua(),ca(),se(),Dt(),We={class:"jobs-view"},Ge={class:"page-header"},Ke={class:"header-title"},Ze={class:"header-actions"},Ye={class:"sort-toggle"},Xe={class:"sort-arrow"},et={class:"sort-arrow"},tt={class:"jobs-split"},at={class:"jobs-top"},ot={class:"jobs-bottom"},jt=Z({__name:"JobsView",setup(e){const{t:s}=ee(),a=te(),j=Ut(),r=S(!1),h=S(null),_=S(null),p=S("name"),y=S(!0),d=P(()=>j.activeProfileName||"default"),f=P(()=>{const C={};for(const M of a.jobs){const A=M.job_id||M.id;C[A]=M.name}return C});async function m(){(!j.activeProfileName||j.profiles.length===0)&&await j.fetchProfiles()}async function J(){_.value=null,a.jobs=[],await m(),await a.fetchJobs()}rt(()=>{J()});function o(){h.value=null,r.value=!0}function q(C){h.value=C,r.value=!0}function g(){r.value=!1,h.value=null}async function T(){await a.fetchJobs(),g()}function k(C){_.value=_.value===C?null:C}function E(C){p.value===C?y.value=!y.value:(p.value=C,y.value=!0)}function $(C){return p.value!==C?"↕":y.value?"↑":"↓"}return(C,M)=>(w(),N("div",We,[i("header",Ge,[i("h2",Ke,u(t(s)("jobs.title")),1),i("div",Ze,[i("div",Ye,[v(t(G),null,{trigger:c(()=>[v(t(B),{size:"tiny",type:p.value==="name"?"primary":"default",onClick:M[0]||(M[0]=A=>E("name"))},{default:c(()=>[x(u(t(s)("jobs.sortByName"))+" ",1),i("span",Xe,u($("name")),1)]),_:1},8,["type"])]),default:c(()=>[x(" "+u(p.value==="name"?y.value?t(s)("jobs.sortAsc"):t(s)("jobs.sortDesc"):t(s)("jobs.sortByNameHint")),1)]),_:1}),v(t(G),null,{trigger:c(()=>[v(t(B),{size:"tiny",type:p.value==="time"?"primary":"default",onClick:M[1]||(M[1]=A=>E("time"))},{default:c(()=>[x(u(t(s)("jobs.sortByTime"))+" ",1),i("span",et,u($("time")),1)]),_:1},8,["type"])]),default:c(()=>[x(" "+u(p.value==="time"?y.value?t(s)("jobs.sortAsc"):t(s)("jobs.sortDesc"):t(s)("jobs.sortByTimeHint")),1)]),_:1})]),M[3]||(M[3]=i("span",{class:"sort-divider"},null,-1)),v(t(B),{type:"primary",size:"small",onClick:o},{icon:c(()=>[...M[2]||(M[2]=[i("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),i("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:c(()=>[x(" "+u(t(s)("jobs.createJob")),1)]),_:1})])]),i("div",tt,[i("div",at,[v(t(re),{show:t(a).loading&&t(a).jobs.length===0},{default:c(()=>[v(pt,{"selected-job-id":_.value,"sort-by":p.value,"sort-asc":y.value,onEdit:q,onSelect:k},null,8,["selected-job-id","sort-by","sort-asc"])]),_:1},8,["show"])]),M[4]||(M[4]=i("div",{class:"splitter"},null,-1)),i("div",ot,[v(ft,{"selected-job-id":_.value,"job-name-map":f.value,"profile-key":d.value},null,8,["selected-job-id","job-name-map","profile-key"])])]),r.value?(w(),R(yt,{key:0,"job-id":h.value,onClose:g,onSaved:T},null,8,["job-id"])):D("",!0)]))}})})),va=I((()=>{})),ba,pa=I((()=>{st(),st(),va(),Y(),ba=X(jt,[["__scopeId","data-v-45581f25"]])}));pa();export{ba as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$r as jt,Ci as b,Cr as Ka,E as Ga,Fr as Ua,Gi as g,Hr as Za,Mi as zt,Nr as Qa,Pi as R,Qi as f,Qr as s,T as en,Ti as Dt,Ur as tn,Ut as It,Yr as Pt,Zr as p,aa as ge,ai as te,at as an,ci as nn,ct as rn,ea as qe,ei as V,gi as on,n as ln,na as Fe,oi as ae,ra as c,rt as sn,t as un,ti as D,tn as Nt,w as cn,wr as dn,xi as fn,yi as vn,z as yn}from"./index-B41wzfl2.js";import{r as pn,t as hn}from"./profiles-DDKFPE0r.js";import{l as mn,s as gn}from"./skills-3O8WlKlI.js";async function _n(){return Ua("/api/hermes/journey")}var wn=ge((()=>{Qa()}));function fa(ne){return ne==null?"":ne.replace(/\s+/gu," ").trim()}function $t(ne,L=140){if(!Number.isFinite(L))return"";const u=Math.floor(L);if(u<=0)return"";const re=fa(ne);if(!re)return"";const I=Array.from(re);return I.length<=u?re:u===1?"…":`${I.slice(0,u-1).join("").trimEnd()}…`}var xn,kn=ge((()=>{xn=140})),Rt,Bt,Et,Lt,At,Wt,Yt,Xt,Jt,Ot,Vt,qt,Ft,Ht,Kt,Gt,Ut,Zt,Qt,ea,ta,aa,na,ra,oa,la,ia,sa,ua,ca,He,Ke,va,da=ge((()=>{Za(),Ga(),Ka(),wn(),mn(),cn(),hn(),kn(),Rt={class:"journey-view"},Bt={class:"page-header journey-view__header"},Et={class:"header-title"},Lt={class:"journey-view__content"},At={class:"journey-panel"},Wt={class:"journey-toolbar"},Yt=["aria-label"],Xt={class:"node-kind-legend__item"},Jt={class:"node-kind-legend__item"},Ot={class:"galaxy-layout"},Vt=["aria-label"],qt={class:"journey-node-tooltip__name"},Ft={key:0,class:"journey-node-tooltip__description"},Ht={class:"galaxy-hud"},Kt={key:0,class:"category-meter"},Gt=["aria-label"],Ut=["data-category","aria-label","aria-pressed","onMouseenter","onClick"],Zt=["aria-label"],Qt=["data-category","aria-pressed","onMouseenter","onClick"],ea={class:"drawer-title-row"},ta={key:0,class:"memory-card"},aa={class:"detail-card-label"},na={key:1,class:"memory-card"},ra={class:"detail-card-label"},oa={class:"detail-card"},la={class:"detail-grid"},ia={class:"detail-item"},sa={class:"detail-item"},ua={class:"detail-item"},ca={class:"detail-item"},He=.25,Ke=2.4,va=nn({__name:"JourneyView",setup(ne){const L=["#4f8cff","#ff4fa3","#38c976","#f6c542","#9b6cff","#ff7a45","#22c7d8","#e84d5b","#7cb342","#d66efd","#00a884","#ff9f1a"],{t:u}=dn(),re=rn(),{isDark:I}=en(),ya=pn(),A=g(null),_e=g(!1),oe=g(null),we=g(null),h=g(""),P=g(""),W=g(""),M=g([]),q=g(new Map),m=g(""),Y=g({x:0,y:0}),F=g(!1),le=g(-1),N=g(!1),Ge=g(380);let r=null,xe=null,ke=0,S=1,C=1,ie=1,be=-.25,$e=.55,B=1,T=!1,Me=0,Se=0,se=0,Ue=1,Ce=null,ue=null,ce=null,Te="",Ze=0,Qe=0,H=!1,Re=0,K=-1,w=!1,x=0,de=0,X="idle",G=null,fe=!1,ve=!1,U=!1;const k=new Map,J=p(()=>A.value?.graph.nodes||[]),et=p(()=>A.value?.graph.edges||[]),_=p(()=>J.value.find(e=>e.id===h.value)||null),je=p(()=>J.value.map((e,t)=>({node:e,index:t})).sort((e,t)=>{const a=e.node.timestamp,n=t.node.timestamp;return a&&n&&a!==n?a-n:a&&!n?-1:!a&&n?1:e.index-t.index}).map(e=>e.node)),tt=p(()=>le.value<0?null:new Set(je.value.slice(0,le.value+1).map(e=>e.id))),Be=p(()=>{const e=tt.value;return e?et.value.filter(t=>e.has(t.source)&&e.has(t.target)):et.value}),ye=p(()=>{const e=[...new Set(J.value.map(i=>i.category||"general"))].sort(),t=new Map(e.map((i,y)=>[i,y])),a=Math.max(1,t.size),n=new Map,o=Math.min(2.3,Math.max(1,Math.sqrt(Math.max(J.value.length,1)/42))),l=360*o;for(const[i,y]of t){const d=y/a*Math.PI*2,v=(y%5-2)*.42;n.set(i,{x:Math.cos(d)*Math.cos(v)*l,y:Math.sin(v)*l*.72,z:Math.sin(d)*Math.cos(v)*l})}return J.value.map((i,y)=>{const d=i.category||"general",v=n.get(d)||{x:0,y:0,z:0},j=Le(`${i.id}:${y}`),ee=j%6283/1e3,E=(j>>8)%3141/1e3,z=(i.kind==="memory"?125:165)*o;return{...i,x:v.x+Math.cos(ee)*Math.sin(E)*z,y:v.y+Math.cos(E)*z*.85,z:v.z+Math.sin(ee)*Math.sin(E)*z,radius:i.kind==="memory"?6:Math.min(13,5+Math.sqrt(i.useCount||0)*1.7),color:i.kind==="memory"?"#6ba3d6":ga(d)}})}),pe=p(()=>new Map(ye.value.map(e=>[e.id,e]))),Z=p(()=>{const e=tt.value;return e?ye.value.filter(t=>e.has(t.id)):ye.value}),Ee=p(()=>{const e=new Map;for(const t of Z.value){const a=t.category||"general",n=e.get(a);n?n.count+=1:e.set(a,{category:a,label:t.category||u("journey.noCategory"),color:t.color,count:1})}return[...e.values()].sort((t,a)=>a.count-t.count||t.label.localeCompare(a.label))}),at=p(()=>Math.max(1,Z.value.length)),Q=p(()=>new Set(M.value)),ze=p(()=>{const e=new Set(M.value);return W.value&&e.add(W.value),e}),De=p(()=>m.value&&pe.value.get(m.value)||null),pa=p(()=>De.value?.label||De.value?.id||""),nt=p(()=>{const e=De.value;return e?O(e)?$t(Ae(e)):$t(ot(e)):""}),rt=p(()=>{const e=_.value;return e&&!O(e)?ot(e):""}),ha=p(()=>`${u("journey.title")}. ${Z.value.length} ${u("journey.nodes")}. ${u("journey.canvasInstructions")}`),ma=p(()=>{const a=Y.value.x+14+320<=S?Y.value.x+14:Math.max(8,Y.value.x-320-14),n=Y.value.y>C-150;return{left:`${a}px`,top:`${Math.max(8,Y.value.y+(n?-14:14))}px`,transform:n?"translateY(-100%)":void 0}});function Le(e){let t=2166136261;for(let a=0;a<e.length;a+=1)t^=e.charCodeAt(a),t=Math.imul(t,16777619);return t>>>0}function ga(e){const t=[...new Set(J.value.map(a=>a.category||"general"))].sort().indexOf(e);return t>=0?L[t%L.length]:L[Le(e)%L.length]}function _a(e){return e?new Date(e*1e3).toLocaleString():"-"}function O(e){return e?.kind==="memory"}function wa(e){return O(e)?e.category||u("journey.memories"):e.label||e.id}function xa(e){const t=Number(e.id.split(":").pop());return Number.isInteger(t)&&t>=0?t:null}function ka(e){if(!e||!O(e))return null;const t=A.value?.graph.memory||[],a=xa(e);if(a!==null){const n=t[a];if(n&&(!e.memorySource||!n.source||n.source===e.memorySource))return n}return t.find(n=>(!e.memorySource||!n.source||n.source===e.memorySource)&&(!e.timestamp||!n.timestamp||n.timestamp===e.timestamp))||null}function Ae(e){const t=ka(e);return t?.body||t?.title||e.label||""}function We(e,t){return`category:${e}\0${t}`}function Ye(e){return`name:${e}`}function ot(e){const t=e.category||"general",a=e.id.replace(/^skill:/,"");return fa(q.value.get(We(t,e.label))||q.value.get(We(t,a))||q.value.get(Ye(e.label))||q.value.get(Ye(a))||"")}function ba(e){const t=new Map,a=new Map,n=(o,l)=>{const i=a.get(o);a.set(o,{count:(i?.count||0)+1,description:i?.description||l})};for(const o of e.categories||[])for(const l of o.skills||[])t.set(We(o.name,l.name),l.description||""),n(l.name,l.description||"");for(const o of e.archived||[])n(o.name,o.description||"");for(const[o,l]of a)l.count===1&&t.set(Ye(o),l.description);return t}function lt(e){q.value=new Map,de=e,X="idle",G=null}function it(e=x){if(w||e!==x)return;if(de!==e&<(e),X==="loaded"||X==="failed"||X==="loading")return G||void 0;X="loading";const t=gn().then(a=>{w||e!==x||e!==de||(q.value=ba(a),X="loaded")}).catch(()=>{w||e!==x||e!==de||(X="failed")});return G=t,t.finally(()=>{e===de&&G===t&&(G=null)}),t}function Xe(e){O(e)||it()}function Ie(){ce!==null&&window.clearTimeout(ce),ce=null,Te=""}function $(e=!1){Ie(),m.value="",e&&(P.value="")}function Ma(e,t){if(Y.value=t,P.value=e?.id||"",!e){$();return}if(T){$(!0);return}if(m.value===e.id||Te===e.id)return;Ie(),m.value="";const a=e.id;Te=a,ce=window.setTimeout(()=>{ce=null,Te="",!w&&!T&&P.value===a&&(m.value=a,Xe(e))},250)}function st(e){M.value=Q.value.has(e)?M.value.filter(t=>t!==e):[...M.value,e]}function ut(){me(),he(),K=-1,h.value="",P.value="",W.value="",M.value=[],$(),le.value=-1,N.value=!1}function Sa(e){const t=Math.cos($e),a=Math.sin($e),n=Math.cos(be),o=Math.sin(be),l=e.x*t-e.z*a,i=e.x*a+e.z*t;return{x:l,y:e.y*n-i*o,z:e.y*o+i*n}}function ct(e){const t=Sa(e),a=860/B,n=a/(a+t.z),o=Math.max(2,e.radius*n*B);return{...e,sx:S/2+t.x*n*B,sy:C/2+t.y*n*B,depth:t.z,size:o,visible:n>0}}function dt(e=performance.now()){if(!r||w)return;r.clearRect(0,0,S,C),Ca();const t=Z.value.map(ct).filter(l=>l.visible),a=new Map(t.map(l=>[l.id,l])),n=new Set;h.value&&n.add(h.value),P.value&&n.add(P.value);const o=new Set;for(const l of Be.value)n.has(l.source)&&o.add(l.target),n.has(l.target)&&o.add(l.source);Ta(a,n,o,ze.value,e),t.sort((l,i)=>l.depth-i.depth).forEach(l=>Pa(l,n,o,ze.value,Q.value,e)),ke=requestAnimationFrame(dt),U=!0}function Ca(){if(!r)return;const e=r.createRadialGradient(S*.5,C*.42,10,S*.5,C*.5,Math.max(S,C)*.68);e.addColorStop(0,"rgba(74, 144, 217, 0.14)"),e.addColorStop(.46,"rgba(120, 120, 120, 0.05)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),r.fillStyle=e,r.fillRect(0,0,S,C)}function Ta(e,t,a,n,o){if(!r)return;r.save();const l=.5+Math.sin(o*.012)*.5;for(const i of Be.value){const y=e.get(i.source),d=e.get(i.target);if(!y||!d)continue;const v=t.has(i.source)||t.has(i.target),j=n.has(y.category||"general")||n.has(d.category||"general"),ee=a.has(i.source)||a.has(i.target),E=v?.62+l*.28:j?.46:ee?.4:I.value?.1:.22;r.lineWidth=I.value?1:1.15,r.shadowColor="transparent",r.shadowBlur=0,r.strokeStyle=I.value?`rgba(180, 210, 255, ${E})`:`rgba(42, 58, 78, ${E})`;const z=ja(y,d,`${i.source}:${i.target}`);za(y,d,z),v&&Da(y,d,z,l,o)}r.restore()}function ja(e,t,a){const n=t.sx-e.sx,o=t.sy-e.sy,l=Math.sqrt(n*n+o*o);if(l<2)return null;const i=-o/l,y=n/l,d=Le(a)%2===0?1:-1,v=Math.min(58,Math.max(10,l*.12))*d;return{cx:(e.sx+t.sx)/2+i*v,cy:(e.sy+t.sy)/2+y*v}}function za(e,t,a){!r||!a||(r.beginPath(),r.moveTo(e.sx,e.sy),r.quadraticCurveTo(a.cx,a.cy,t.sx,t.sy),r.stroke())}function Da(e,t,a,n,o){if(!r||!a)return;const l=o*.0018%1,i=Math.max(0,l-.24),y=Ia(e,t,a,1-l,1-i,18).reverse(),d=I.value?"rgba(180, 225, 255, 0.92)":"rgba(74, 144, 217, 0.78)",v=I.value?"rgba(255, 255, 255, 0.96)":"rgba(255, 255, 255, 0.9)";r.save(),r.lineJoin="round",r.lineCap="round",r.shadowColor=d,r.shadowBlur=7+n*9,r.strokeStyle=d,r.lineWidth=2.2+n*1.2,ft(y),r.shadowBlur=2+n*4,r.strokeStyle=v,r.lineWidth=.75+n*.65,ft(y),r.restore()}function Ia(e,t,a,n,o,l){const i=[];for(let y=0;y<=l;y+=1){const d=n+(o-n)*(y/l),v=1-d;i.push({x:v*v*e.sx+2*v*d*a.cx+d*d*t.sx,y:v*v*e.sy+2*v*d*a.cy+d*d*t.sy})}return i}function ft(e){if(!(!r||!e.length)){r.beginPath(),r.moveTo(e[0].x,e[0].y);for(let t=1;t<e.length;t+=1)r.lineTo(e[t].x,e[t].y);r.stroke()}}function vt(e){return e.kind==="memory"?"diamond":"circle"}function Pe(e,t=0){if(!r)return;const a=Math.max(0,e.size+t);if(r.beginPath(),vt(e)==="diamond"){const n=a*1.12,o=a*1.3;r.moveTo(e.sx,e.sy-o),r.lineTo(e.sx+n,e.sy),r.lineTo(e.sx,e.sy+o),r.lineTo(e.sx-n,e.sy),r.lineTo(e.sx,e.sy-o);return}r.arc(e.sx,e.sy,a,0,Math.PI*2)}function Pa(e,t,a,n,o,l){if(!r)return;const i=t.has(e.id),y=a.has(e.id),d=e.category||"general",v=n.has(d),j=o.has(d),ee=t.size>0||n.size>0,E=i||y||v||!ee?1:.24,z=i?.5+Math.sin(l*.005)*.5:0,Tt=i?20+z*24:j?16:e.createdBy==="agent"?12:e.pinned?10:0,Ha=I.value?"#1a1a1a":"#fafafa";r.save(),r.globalAlpha=1,r.fillStyle=Ha,Pe(e,-.25),r.fill(),r.globalAlpha=E,Tt&&(r.shadowColor=e.color,r.shadowBlur=Tt),r.fillStyle=e.color,Pe(e),r.fill(),(e.pinned||i||j)&&(r.shadowBlur=0,r.strokeStyle=i?"rgba(255,255,255,0.9)":j?e.color:"rgba(255, 190, 90, 0.85)",r.lineWidth=i?2:j?2.2:1.4,Pe(e,j?6:5),r.stroke()),i&&(r.shadowBlur=0,r.globalAlpha=.28+z*.32,r.strokeStyle=e.color,r.lineWidth=2,Pe(e,10+z*14),r.stroke()),r.restore()}function yt(){const e=oe.value,t=we.value;if(!e||!t)return;const a=t.getBoundingClientRect();ie=window.devicePixelRatio||1,S=Math.max(1,a.width),C=Math.max(1,a.height),e.width=Math.floor(S*ie),e.height=Math.floor(C*ie),e.style.width=`${S}px`,e.style.height=`${C}px`,r=e.getContext("2d"),r?.setTransform(ie,0,0,ie,0,0)}function Je(){Ge.value=window.innerWidth<=640?window.innerWidth:380}function Na(){fe||(window.addEventListener("resize",Je),fe=!0)}function $a(){fe&&(window.removeEventListener("resize",Je),fe=!1)}function Ra(){ve||!we.value||(xe=new ResizeObserver(yt),xe.observe(we.value),ve=!0)}function Ba(){ve&&(xe?.disconnect(),xe=null,ve=!1)}function Oe(){return Z.value.map(ct).filter(e=>e.visible)}function Ea(e,t,a){const n=t-e.sx,o=a-e.sy,l=e.size+8;return vt(e)==="diamond"?Math.abs(n)/(l*1.12)+Math.abs(o)/(l*1.3)<=1:Math.sqrt(n*n+o*o)<=l}function pt(e,t){const a=Oe();let n=null;for(const o of a)Ea(o,e,t)&&(!n||o.depth>n.depth)&&(n=o);return n}function ht(e){const t=oe.value?.getBoundingClientRect();return{x:e.clientX-(t?.left||0),y:e.clientY-(t?.top||0)}}function La(e){if(K=-1,$(!0),k.set(e.pointerId,{x:e.clientX,y:e.clientY}),k.size===2){const t=[...k.values()];se=gt(t[0],t[1]),Ue=B,H=!0,T=!0}else Ze=e.clientX,Qe=e.clientY,H=!1,T=!0;Me=e.clientX,Se=e.clientY,oe.value?.setPointerCapture(e.pointerId)}function Aa(e){if(k.has(e.pointerId)&&(Math.hypot(e.clientX-Ze,e.clientY-Qe)>4&&(H=!0),k.set(e.pointerId,{x:e.clientX,y:e.clientY})),k.size>=2){T=!0,$(!0);const o=[...k.values()],l=gt(o[0],o[1]);se>0&&(B=Math.max(He,Math.min(Ke,Ue*(l/se))));return}const t=ht(e);if(Ma(pt(t.x,t.y),t),!T)return;const a=e.clientX-Me,n=e.clientY-Se;$e+=a*.006,be=Math.max(-1.2,Math.min(1.2,be+n*.006)),Me=e.clientX,Se=e.clientY}function mt(e){const t=e.type==="pointercancel";if((H||t)&&(Re=performance.now()+200),k.delete(e.pointerId),t)k.clear(),T=!1,H=!1,se=0,$(!0);else if(k.size===1){const n=[...k.values()][0];Me=n.x,Se=n.y,T=!0}else T=!1,H=!1,se=0;const a=oe.value;a?.hasPointerCapture(e.pointerId)&&a.releasePointerCapture(e.pointerId)}function Wa(){T||$(!0)}function gt(e,t){const a=e.x-t.x,n=e.y-t.y;return Math.sqrt(a*a+n*n)}function Ne(e,t){const a=Oe();if(!a.length)return;let n=a.findIndex(l=>l.id===m.value);n<0&&(n=K>=0?K:e>0?-1:0),K=t===void 0?(n+e+a.length)%a.length:Math.max(0,Math.min(a.length-1,t));const o=a[K];Xe(o),Ie(),P.value=o.id,m.value=o.id,Y.value={x:o.sx,y:o.sy}}function _t(e){const t=pe.value.get(e);if(t&&Xe(t),h.value===e&&N.value){h.value="",N.value=!1;return}h.value=e,N.value=!0}function wt(e){e.key==="Escape"&&(ut(),e.preventDefault())}function Ya(e){if(e.key==="ArrowRight"||e.key==="ArrowDown"){e.preventDefault(),Ne(1);return}if(e.key==="ArrowLeft"||e.key==="ArrowUp"){e.preventDefault(),Ne(-1);return}if(e.key==="Home"||e.key==="End"){e.preventDefault(),Ne(0,e.key==="Home"?0:Oe().length-1);return}if(e.key==="Enter"||e.key===" "){m.value||Ne(1),m.value&&_t(m.value),e.preventDefault();return}}function Xa(e){if(performance.now()<Re){Re=0;return}const t=ht(e),a=pt(t.x,t.y);if($(!0),!a){h.value="",M.value=[],N.value=!1;return}_t(a.id)}function Ja(e){e.preventDefault(),B=Math.max(He,Math.min(Ke,B+(e.deltaY>0?-.08:.08)))}function Ve(){Ce&&(window.clearTimeout(Ce),Ce=null)}function he(){ue&&(window.clearTimeout(ue),ue=null)}function me(){Ve(),F.value=!1}function xt(e){const t=je.value[e];if(!t){me();return}le.value=e,h.value=t.id,P.value=""}function kt(){Ve(),Ce=window.setTimeout(()=>{const e=le.value+1;if(e>=je.value.length){me(),he(),ue=window.setTimeout(()=>{h.value="",P.value="",ue=null},1e3);return}xt(e),kt()},150)}function Oa(){if(F.value){me();return}je.value.length&&(he(),F.value=!0,xt(0),kt())}async function bt(e={}){const t=++x;me(),he(),lt(t),e.resetInteraction&&ut(),e.clearData&&(A.value=null),_e.value=!0;try{const a=await _n();if(w||t!==x)return t;A.value=a}catch(a){if(w||t!==x)return t;re.error(a?.message||u("journey.loadFailed"))}finally{!w&&t===x&&(_e.value=!1)}return t}function Mt(){return fe&&ve&&U}function Va(){Je(),Na(),Ra(),U||Fa()}async function St(e={}){const t=await bt(e);w||t!==x||Mt()||(await on(),!(w||t!==x||Mt())&&Va())}async function qa(){const e=await bt();if(w||e!==x)return;const t=new Set;N.value&&h.value&&t.add(h.value),m.value&&t.add(m.value),[...t].some(a=>{const n=pe.value.get(a);return n&&!O(n)})&&await it(e)}function Ct(){U&&(cancelAnimationFrame(ke),ke=0,U=!1)}function Fa(){Ct(),yt(),ke=requestAnimationFrame(dt),U=!0}return fn(()=>{window.addEventListener("keydown",wt),St()}),vn(()=>{w=!0,x+=1,window.removeEventListener("keydown",wt),Ct(),Ve(),he(),Ie(),$a(),Ba(),k.clear(),r=null}),zt(()=>ya.activeProfileName||"default",(e,t)=>{e!==t&&St({clearData:!0,resetInteraction:!0})}),zt(ye,()=>{h.value&&!pe.value.has(h.value)&&(h.value="",N.value=!1),m.value&&!pe.value.has(m.value)&&$(!0);const e=new Set(ye.value.map(a=>a.category||"general")),t=M.value.filter(a=>e.has(a));t.length!==M.value.length&&(M.value=t)}),(e,t)=>(b(),D("div",Rt,[s("header",Bt,[s("h2",Et,c(f(u)("journey.title")),1)]),s("div",Lt,[s("div",At,[s("div",Wt,[s("div",{class:"node-kind-legend","aria-label":f(u)("journey.nodeKinds")},[s("span",Xt,[t[3]||(t[3]=s("i",{class:"node-kind-marker node-kind-marker--skill node-kind-marker--circle","aria-hidden":"true"},null,-1)),te(" "+c(f(u)("journey.skills")),1)]),s("span",Jt,[t[4]||(t[4]=s("i",{class:"node-kind-marker node-kind-marker--memory node-kind-marker--diamond","aria-hidden":"true"},null,-1)),te(" "+c(f(u)("journey.memories")),1)])],8,Yt),ae(f(It),{size:"small",disabled:!J.value.length,"aria-label":F.value?f(u)("journey.pause"):f(u)("journey.play"),title:F.value?f(u)("journey.pause"):f(u)("journey.play"),onClick:Oa},{default:R(()=>[s("span",{class:qe(["playback-icon",{playing:F.value}]),"aria-hidden":"true"},null,2)]),_:1},8,["disabled","aria-label","title"]),ae(f(It),{size:"small",loading:_e.value,onClick:qa},{default:R(()=>[te(c(f(u)("journey.refresh")),1)]),_:1},8,["loading"])]),ae(f(yn),{show:_e.value&&!A.value,class:"journey-spin"},{default:R(()=>[s("main",Ot,[s("section",{ref_key:"canvasWrapRef",ref:we,class:"galaxy-canvas-wrap"},[s("canvas",{ref_key:"canvasRef",ref:oe,class:"galaxy-canvas",tabindex:"0",role:"group","aria-label":ha.value,onKeydown:Ya,onPointerdown:La,onPointermove:Aa,onPointerup:mt,onPointercancel:mt,onPointerleave:Wa,onClick:Xa,onWheel:Ja},null,40,Vt),ae(tn,{name:"journey-tooltip"},{default:R(()=>[De.value?(b(),D("div",{key:0,class:"journey-node-tooltip",role:"tooltip",style:Fe(ma.value)},[s("div",qt,c(pa.value),1),nt.value?(b(),D("div",Ft,c(nt.value),1)):V("",!0)],4)):V("",!0)]),_:1}),s("div",Ht,[s("span",null,c(A.value?.profile||"-"),1),s("span",null,c(Z.value.length)+" "+c(f(u)("journey.nodes")),1),s("span",null,c(Be.value.length)+" "+c(f(u)("journey.edges")),1)]),Ee.value.length?(b(),D("div",Kt,[s("div",{class:"category-bar",role:"group","aria-label":f(u)("journey.categorySelection")},[(b(!0),D(Pt,null,Dt(Ee.value,a=>(b(),D("button",{key:a.category,type:"button",class:qe(["category-bar-segment",{active:ze.value.has(a.category),selected:Q.value.has(a.category)}]),style:Fe({"--category-color":a.color,flexGrow:a.count}),"data-category":a.category,"aria-label":`${a.label} ${a.count} / ${Math.round(a.count/at.value*100)}%`,"aria-pressed":Q.value.has(a.category),onMouseenter:n=>W.value=a.category,onMouseleave:t[0]||(t[0]=n=>W.value=""),onClick:n=>st(a.category)},null,46,Ut))),128))],8,Gt),s("div",{class:"category-legend",role:"group","aria-label":f(u)("journey.categorySelection")},[(b(!0),D(Pt,null,Dt(Ee.value,a=>(b(),D("button",{key:a.category,type:"button",class:qe({active:ze.value.has(a.category),selected:Q.value.has(a.category)}),"data-category":a.category,"aria-pressed":Q.value.has(a.category),onMouseenter:n=>W.value=a.category,onMouseleave:t[1]||(t[1]=n=>W.value=""),onClick:n=>st(a.category)},[s("i",{style:Fe({backgroundColor:a.color})},null,4),te(" "+c(a.label)+" "+c(a.count)+" / "+c(Math.round(a.count/at.value*100))+"% ",1)],42,Qt))),128))],8,Zt)])):V("",!0)],512)])]),_:1},8,["show"]),ae(f(an),{show:N.value,"onUpdate:show":t[2]||(t[2]=a=>N.value=a),width:Ge.value,placement:"right"},{default:R(()=>[_.value?(b(),jt(f(sn),{key:0,class:"journey-detail-drawer","native-scrollbar":!1,closable:""},{header:R(()=>[s("div",ea,[s("span",null,c(wa(_.value)),1),ae(f(Nt),{size:"small",type:_.value.kind==="memory"?"info":"success",bordered:!1},{default:R(()=>[te(c(_.value.kind),1)]),_:1},8,["type"])])]),default:R(()=>[O(_.value)&&Ae(_.value)?(b(),D("div",ta,[s("span",aa,c(f(u)("journey.memories")),1),s("p",null,c(Ae(_.value)),1)])):V("",!0),rt.value?(b(),D("div",na,[s("span",ra,c(f(u)("journey.description")),1),s("p",null,c(rt.value),1)])):V("",!0),s("div",oa,[t[5]||(t[5]=s("span",{class:"detail-card-label"},"ID",-1)),s("code",null,c(_.value.id),1)]),s("div",la,[s("div",ia,[s("span",null,c(f(u)("journey.category")),1),s("strong",null,c(_.value.category||"-"),1)]),s("div",sa,[s("span",null,c(f(u)("journey.useCount")),1),s("strong",null,c(_.value.useCount??0),1)]),s("div",ua,[s("span",null,c(f(u)("journey.createdBy")),1),s("strong",null,c(_.value.createdBy||"-"),1)]),s("div",ca,[s("span",null,c(f(u)("journey.timestamp")),1),s("strong",null,c(_a(_.value.timestamp)),1)])]),_.value.pinned?(b(),jt(f(Nt),{key:2,size:"small",type:"warning",bordered:!1},{default:R(()=>[te(c(f(u)("journey.pinned")),1)]),_:1})):V("",!0)]),_:1})):V("",!0)]),_:1},8,["show","width"])])])]))}})})),bn=ge((()=>{})),Mn,Sn=ge((()=>{da(),da(),bn(),ln(),Mn=un(va,[["__scopeId","data-v-4aa9335b"]])}));Sn();export{Mn as default};
|
|
1
|
+
import{$r as jt,Ci as b,Cr as Ka,E as Ga,Fr as Ua,Gi as g,Hr as Za,Mi as zt,Nr as Qa,Pi as R,Qi as f,Qr as s,T as en,Ti as Dt,Ur as tn,Ut as It,Yr as Pt,Zr as p,aa as ge,ai as te,at as an,ci as nn,ct as rn,ea as qe,ei as V,gi as on,n as ln,na as Fe,oi as ae,ra as c,rt as sn,t as un,ti as D,tn as Nt,w as cn,wr as dn,xi as fn,yi as vn,z as yn}from"./index-RJQqJC6n.js";import{r as pn,t as hn}from"./profiles-BtECgqqD.js";import{l as mn,s as gn}from"./skills-CQr0eeFF.js";async function _n(){return Ua("/api/hermes/journey")}var wn=ge((()=>{Qa()}));function fa(ne){return ne==null?"":ne.replace(/\s+/gu," ").trim()}function $t(ne,L=140){if(!Number.isFinite(L))return"";const u=Math.floor(L);if(u<=0)return"";const re=fa(ne);if(!re)return"";const I=Array.from(re);return I.length<=u?re:u===1?"…":`${I.slice(0,u-1).join("").trimEnd()}…`}var xn,kn=ge((()=>{xn=140})),Rt,Bt,Et,Lt,At,Wt,Yt,Xt,Jt,Ot,Vt,qt,Ft,Ht,Kt,Gt,Ut,Zt,Qt,ea,ta,aa,na,ra,oa,la,ia,sa,ua,ca,He,Ke,va,da=ge((()=>{Za(),Ga(),Ka(),wn(),mn(),cn(),hn(),kn(),Rt={class:"journey-view"},Bt={class:"page-header journey-view__header"},Et={class:"header-title"},Lt={class:"journey-view__content"},At={class:"journey-panel"},Wt={class:"journey-toolbar"},Yt=["aria-label"],Xt={class:"node-kind-legend__item"},Jt={class:"node-kind-legend__item"},Ot={class:"galaxy-layout"},Vt=["aria-label"],qt={class:"journey-node-tooltip__name"},Ft={key:0,class:"journey-node-tooltip__description"},Ht={class:"galaxy-hud"},Kt={key:0,class:"category-meter"},Gt=["aria-label"],Ut=["data-category","aria-label","aria-pressed","onMouseenter","onClick"],Zt=["aria-label"],Qt=["data-category","aria-pressed","onMouseenter","onClick"],ea={class:"drawer-title-row"},ta={key:0,class:"memory-card"},aa={class:"detail-card-label"},na={key:1,class:"memory-card"},ra={class:"detail-card-label"},oa={class:"detail-card"},la={class:"detail-grid"},ia={class:"detail-item"},sa={class:"detail-item"},ua={class:"detail-item"},ca={class:"detail-item"},He=.25,Ke=2.4,va=nn({__name:"JourneyView",setup(ne){const L=["#4f8cff","#ff4fa3","#38c976","#f6c542","#9b6cff","#ff7a45","#22c7d8","#e84d5b","#7cb342","#d66efd","#00a884","#ff9f1a"],{t:u}=dn(),re=rn(),{isDark:I}=en(),ya=pn(),A=g(null),_e=g(!1),oe=g(null),we=g(null),h=g(""),P=g(""),W=g(""),M=g([]),q=g(new Map),m=g(""),Y=g({x:0,y:0}),F=g(!1),le=g(-1),N=g(!1),Ge=g(380);let r=null,xe=null,ke=0,S=1,C=1,ie=1,be=-.25,$e=.55,B=1,T=!1,Me=0,Se=0,se=0,Ue=1,Ce=null,ue=null,ce=null,Te="",Ze=0,Qe=0,H=!1,Re=0,K=-1,w=!1,x=0,de=0,X="idle",G=null,fe=!1,ve=!1,U=!1;const k=new Map,J=p(()=>A.value?.graph.nodes||[]),et=p(()=>A.value?.graph.edges||[]),_=p(()=>J.value.find(e=>e.id===h.value)||null),je=p(()=>J.value.map((e,t)=>({node:e,index:t})).sort((e,t)=>{const a=e.node.timestamp,n=t.node.timestamp;return a&&n&&a!==n?a-n:a&&!n?-1:!a&&n?1:e.index-t.index}).map(e=>e.node)),tt=p(()=>le.value<0?null:new Set(je.value.slice(0,le.value+1).map(e=>e.id))),Be=p(()=>{const e=tt.value;return e?et.value.filter(t=>e.has(t.source)&&e.has(t.target)):et.value}),ye=p(()=>{const e=[...new Set(J.value.map(i=>i.category||"general"))].sort(),t=new Map(e.map((i,y)=>[i,y])),a=Math.max(1,t.size),n=new Map,o=Math.min(2.3,Math.max(1,Math.sqrt(Math.max(J.value.length,1)/42))),l=360*o;for(const[i,y]of t){const d=y/a*Math.PI*2,v=(y%5-2)*.42;n.set(i,{x:Math.cos(d)*Math.cos(v)*l,y:Math.sin(v)*l*.72,z:Math.sin(d)*Math.cos(v)*l})}return J.value.map((i,y)=>{const d=i.category||"general",v=n.get(d)||{x:0,y:0,z:0},j=Le(`${i.id}:${y}`),ee=j%6283/1e3,E=(j>>8)%3141/1e3,z=(i.kind==="memory"?125:165)*o;return{...i,x:v.x+Math.cos(ee)*Math.sin(E)*z,y:v.y+Math.cos(E)*z*.85,z:v.z+Math.sin(ee)*Math.sin(E)*z,radius:i.kind==="memory"?6:Math.min(13,5+Math.sqrt(i.useCount||0)*1.7),color:i.kind==="memory"?"#6ba3d6":ga(d)}})}),pe=p(()=>new Map(ye.value.map(e=>[e.id,e]))),Z=p(()=>{const e=tt.value;return e?ye.value.filter(t=>e.has(t.id)):ye.value}),Ee=p(()=>{const e=new Map;for(const t of Z.value){const a=t.category||"general",n=e.get(a);n?n.count+=1:e.set(a,{category:a,label:t.category||u("journey.noCategory"),color:t.color,count:1})}return[...e.values()].sort((t,a)=>a.count-t.count||t.label.localeCompare(a.label))}),at=p(()=>Math.max(1,Z.value.length)),Q=p(()=>new Set(M.value)),ze=p(()=>{const e=new Set(M.value);return W.value&&e.add(W.value),e}),De=p(()=>m.value&&pe.value.get(m.value)||null),pa=p(()=>De.value?.label||De.value?.id||""),nt=p(()=>{const e=De.value;return e?O(e)?$t(Ae(e)):$t(ot(e)):""}),rt=p(()=>{const e=_.value;return e&&!O(e)?ot(e):""}),ha=p(()=>`${u("journey.title")}. ${Z.value.length} ${u("journey.nodes")}. ${u("journey.canvasInstructions")}`),ma=p(()=>{const a=Y.value.x+14+320<=S?Y.value.x+14:Math.max(8,Y.value.x-320-14),n=Y.value.y>C-150;return{left:`${a}px`,top:`${Math.max(8,Y.value.y+(n?-14:14))}px`,transform:n?"translateY(-100%)":void 0}});function Le(e){let t=2166136261;for(let a=0;a<e.length;a+=1)t^=e.charCodeAt(a),t=Math.imul(t,16777619);return t>>>0}function ga(e){const t=[...new Set(J.value.map(a=>a.category||"general"))].sort().indexOf(e);return t>=0?L[t%L.length]:L[Le(e)%L.length]}function _a(e){return e?new Date(e*1e3).toLocaleString():"-"}function O(e){return e?.kind==="memory"}function wa(e){return O(e)?e.category||u("journey.memories"):e.label||e.id}function xa(e){const t=Number(e.id.split(":").pop());return Number.isInteger(t)&&t>=0?t:null}function ka(e){if(!e||!O(e))return null;const t=A.value?.graph.memory||[],a=xa(e);if(a!==null){const n=t[a];if(n&&(!e.memorySource||!n.source||n.source===e.memorySource))return n}return t.find(n=>(!e.memorySource||!n.source||n.source===e.memorySource)&&(!e.timestamp||!n.timestamp||n.timestamp===e.timestamp))||null}function Ae(e){const t=ka(e);return t?.body||t?.title||e.label||""}function We(e,t){return`category:${e}\0${t}`}function Ye(e){return`name:${e}`}function ot(e){const t=e.category||"general",a=e.id.replace(/^skill:/,"");return fa(q.value.get(We(t,e.label))||q.value.get(We(t,a))||q.value.get(Ye(e.label))||q.value.get(Ye(a))||"")}function ba(e){const t=new Map,a=new Map,n=(o,l)=>{const i=a.get(o);a.set(o,{count:(i?.count||0)+1,description:i?.description||l})};for(const o of e.categories||[])for(const l of o.skills||[])t.set(We(o.name,l.name),l.description||""),n(l.name,l.description||"");for(const o of e.archived||[])n(o.name,o.description||"");for(const[o,l]of a)l.count===1&&t.set(Ye(o),l.description);return t}function lt(e){q.value=new Map,de=e,X="idle",G=null}function it(e=x){if(w||e!==x)return;if(de!==e&<(e),X==="loaded"||X==="failed"||X==="loading")return G||void 0;X="loading";const t=gn().then(a=>{w||e!==x||e!==de||(q.value=ba(a),X="loaded")}).catch(()=>{w||e!==x||e!==de||(X="failed")});return G=t,t.finally(()=>{e===de&&G===t&&(G=null)}),t}function Xe(e){O(e)||it()}function Ie(){ce!==null&&window.clearTimeout(ce),ce=null,Te=""}function $(e=!1){Ie(),m.value="",e&&(P.value="")}function Ma(e,t){if(Y.value=t,P.value=e?.id||"",!e){$();return}if(T){$(!0);return}if(m.value===e.id||Te===e.id)return;Ie(),m.value="";const a=e.id;Te=a,ce=window.setTimeout(()=>{ce=null,Te="",!w&&!T&&P.value===a&&(m.value=a,Xe(e))},250)}function st(e){M.value=Q.value.has(e)?M.value.filter(t=>t!==e):[...M.value,e]}function ut(){me(),he(),K=-1,h.value="",P.value="",W.value="",M.value=[],$(),le.value=-1,N.value=!1}function Sa(e){const t=Math.cos($e),a=Math.sin($e),n=Math.cos(be),o=Math.sin(be),l=e.x*t-e.z*a,i=e.x*a+e.z*t;return{x:l,y:e.y*n-i*o,z:e.y*o+i*n}}function ct(e){const t=Sa(e),a=860/B,n=a/(a+t.z),o=Math.max(2,e.radius*n*B);return{...e,sx:S/2+t.x*n*B,sy:C/2+t.y*n*B,depth:t.z,size:o,visible:n>0}}function dt(e=performance.now()){if(!r||w)return;r.clearRect(0,0,S,C),Ca();const t=Z.value.map(ct).filter(l=>l.visible),a=new Map(t.map(l=>[l.id,l])),n=new Set;h.value&&n.add(h.value),P.value&&n.add(P.value);const o=new Set;for(const l of Be.value)n.has(l.source)&&o.add(l.target),n.has(l.target)&&o.add(l.source);Ta(a,n,o,ze.value,e),t.sort((l,i)=>l.depth-i.depth).forEach(l=>Pa(l,n,o,ze.value,Q.value,e)),ke=requestAnimationFrame(dt),U=!0}function Ca(){if(!r)return;const e=r.createRadialGradient(S*.5,C*.42,10,S*.5,C*.5,Math.max(S,C)*.68);e.addColorStop(0,"rgba(74, 144, 217, 0.14)"),e.addColorStop(.46,"rgba(120, 120, 120, 0.05)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),r.fillStyle=e,r.fillRect(0,0,S,C)}function Ta(e,t,a,n,o){if(!r)return;r.save();const l=.5+Math.sin(o*.012)*.5;for(const i of Be.value){const y=e.get(i.source),d=e.get(i.target);if(!y||!d)continue;const v=t.has(i.source)||t.has(i.target),j=n.has(y.category||"general")||n.has(d.category||"general"),ee=a.has(i.source)||a.has(i.target),E=v?.62+l*.28:j?.46:ee?.4:I.value?.1:.22;r.lineWidth=I.value?1:1.15,r.shadowColor="transparent",r.shadowBlur=0,r.strokeStyle=I.value?`rgba(180, 210, 255, ${E})`:`rgba(42, 58, 78, ${E})`;const z=ja(y,d,`${i.source}:${i.target}`);za(y,d,z),v&&Da(y,d,z,l,o)}r.restore()}function ja(e,t,a){const n=t.sx-e.sx,o=t.sy-e.sy,l=Math.sqrt(n*n+o*o);if(l<2)return null;const i=-o/l,y=n/l,d=Le(a)%2===0?1:-1,v=Math.min(58,Math.max(10,l*.12))*d;return{cx:(e.sx+t.sx)/2+i*v,cy:(e.sy+t.sy)/2+y*v}}function za(e,t,a){!r||!a||(r.beginPath(),r.moveTo(e.sx,e.sy),r.quadraticCurveTo(a.cx,a.cy,t.sx,t.sy),r.stroke())}function Da(e,t,a,n,o){if(!r||!a)return;const l=o*.0018%1,i=Math.max(0,l-.24),y=Ia(e,t,a,1-l,1-i,18).reverse(),d=I.value?"rgba(180, 225, 255, 0.92)":"rgba(74, 144, 217, 0.78)",v=I.value?"rgba(255, 255, 255, 0.96)":"rgba(255, 255, 255, 0.9)";r.save(),r.lineJoin="round",r.lineCap="round",r.shadowColor=d,r.shadowBlur=7+n*9,r.strokeStyle=d,r.lineWidth=2.2+n*1.2,ft(y),r.shadowBlur=2+n*4,r.strokeStyle=v,r.lineWidth=.75+n*.65,ft(y),r.restore()}function Ia(e,t,a,n,o,l){const i=[];for(let y=0;y<=l;y+=1){const d=n+(o-n)*(y/l),v=1-d;i.push({x:v*v*e.sx+2*v*d*a.cx+d*d*t.sx,y:v*v*e.sy+2*v*d*a.cy+d*d*t.sy})}return i}function ft(e){if(!(!r||!e.length)){r.beginPath(),r.moveTo(e[0].x,e[0].y);for(let t=1;t<e.length;t+=1)r.lineTo(e[t].x,e[t].y);r.stroke()}}function vt(e){return e.kind==="memory"?"diamond":"circle"}function Pe(e,t=0){if(!r)return;const a=Math.max(0,e.size+t);if(r.beginPath(),vt(e)==="diamond"){const n=a*1.12,o=a*1.3;r.moveTo(e.sx,e.sy-o),r.lineTo(e.sx+n,e.sy),r.lineTo(e.sx,e.sy+o),r.lineTo(e.sx-n,e.sy),r.lineTo(e.sx,e.sy-o);return}r.arc(e.sx,e.sy,a,0,Math.PI*2)}function Pa(e,t,a,n,o,l){if(!r)return;const i=t.has(e.id),y=a.has(e.id),d=e.category||"general",v=n.has(d),j=o.has(d),ee=t.size>0||n.size>0,E=i||y||v||!ee?1:.24,z=i?.5+Math.sin(l*.005)*.5:0,Tt=i?20+z*24:j?16:e.createdBy==="agent"?12:e.pinned?10:0,Ha=I.value?"#1a1a1a":"#fafafa";r.save(),r.globalAlpha=1,r.fillStyle=Ha,Pe(e,-.25),r.fill(),r.globalAlpha=E,Tt&&(r.shadowColor=e.color,r.shadowBlur=Tt),r.fillStyle=e.color,Pe(e),r.fill(),(e.pinned||i||j)&&(r.shadowBlur=0,r.strokeStyle=i?"rgba(255,255,255,0.9)":j?e.color:"rgba(255, 190, 90, 0.85)",r.lineWidth=i?2:j?2.2:1.4,Pe(e,j?6:5),r.stroke()),i&&(r.shadowBlur=0,r.globalAlpha=.28+z*.32,r.strokeStyle=e.color,r.lineWidth=2,Pe(e,10+z*14),r.stroke()),r.restore()}function yt(){const e=oe.value,t=we.value;if(!e||!t)return;const a=t.getBoundingClientRect();ie=window.devicePixelRatio||1,S=Math.max(1,a.width),C=Math.max(1,a.height),e.width=Math.floor(S*ie),e.height=Math.floor(C*ie),e.style.width=`${S}px`,e.style.height=`${C}px`,r=e.getContext("2d"),r?.setTransform(ie,0,0,ie,0,0)}function Je(){Ge.value=window.innerWidth<=640?window.innerWidth:380}function Na(){fe||(window.addEventListener("resize",Je),fe=!0)}function $a(){fe&&(window.removeEventListener("resize",Je),fe=!1)}function Ra(){ve||!we.value||(xe=new ResizeObserver(yt),xe.observe(we.value),ve=!0)}function Ba(){ve&&(xe?.disconnect(),xe=null,ve=!1)}function Oe(){return Z.value.map(ct).filter(e=>e.visible)}function Ea(e,t,a){const n=t-e.sx,o=a-e.sy,l=e.size+8;return vt(e)==="diamond"?Math.abs(n)/(l*1.12)+Math.abs(o)/(l*1.3)<=1:Math.sqrt(n*n+o*o)<=l}function pt(e,t){const a=Oe();let n=null;for(const o of a)Ea(o,e,t)&&(!n||o.depth>n.depth)&&(n=o);return n}function ht(e){const t=oe.value?.getBoundingClientRect();return{x:e.clientX-(t?.left||0),y:e.clientY-(t?.top||0)}}function La(e){if(K=-1,$(!0),k.set(e.pointerId,{x:e.clientX,y:e.clientY}),k.size===2){const t=[...k.values()];se=gt(t[0],t[1]),Ue=B,H=!0,T=!0}else Ze=e.clientX,Qe=e.clientY,H=!1,T=!0;Me=e.clientX,Se=e.clientY,oe.value?.setPointerCapture(e.pointerId)}function Aa(e){if(k.has(e.pointerId)&&(Math.hypot(e.clientX-Ze,e.clientY-Qe)>4&&(H=!0),k.set(e.pointerId,{x:e.clientX,y:e.clientY})),k.size>=2){T=!0,$(!0);const o=[...k.values()],l=gt(o[0],o[1]);se>0&&(B=Math.max(He,Math.min(Ke,Ue*(l/se))));return}const t=ht(e);if(Ma(pt(t.x,t.y),t),!T)return;const a=e.clientX-Me,n=e.clientY-Se;$e+=a*.006,be=Math.max(-1.2,Math.min(1.2,be+n*.006)),Me=e.clientX,Se=e.clientY}function mt(e){const t=e.type==="pointercancel";if((H||t)&&(Re=performance.now()+200),k.delete(e.pointerId),t)k.clear(),T=!1,H=!1,se=0,$(!0);else if(k.size===1){const n=[...k.values()][0];Me=n.x,Se=n.y,T=!0}else T=!1,H=!1,se=0;const a=oe.value;a?.hasPointerCapture(e.pointerId)&&a.releasePointerCapture(e.pointerId)}function Wa(){T||$(!0)}function gt(e,t){const a=e.x-t.x,n=e.y-t.y;return Math.sqrt(a*a+n*n)}function Ne(e,t){const a=Oe();if(!a.length)return;let n=a.findIndex(l=>l.id===m.value);n<0&&(n=K>=0?K:e>0?-1:0),K=t===void 0?(n+e+a.length)%a.length:Math.max(0,Math.min(a.length-1,t));const o=a[K];Xe(o),Ie(),P.value=o.id,m.value=o.id,Y.value={x:o.sx,y:o.sy}}function _t(e){const t=pe.value.get(e);if(t&&Xe(t),h.value===e&&N.value){h.value="",N.value=!1;return}h.value=e,N.value=!0}function wt(e){e.key==="Escape"&&(ut(),e.preventDefault())}function Ya(e){if(e.key==="ArrowRight"||e.key==="ArrowDown"){e.preventDefault(),Ne(1);return}if(e.key==="ArrowLeft"||e.key==="ArrowUp"){e.preventDefault(),Ne(-1);return}if(e.key==="Home"||e.key==="End"){e.preventDefault(),Ne(0,e.key==="Home"?0:Oe().length-1);return}if(e.key==="Enter"||e.key===" "){m.value||Ne(1),m.value&&_t(m.value),e.preventDefault();return}}function Xa(e){if(performance.now()<Re){Re=0;return}const t=ht(e),a=pt(t.x,t.y);if($(!0),!a){h.value="",M.value=[],N.value=!1;return}_t(a.id)}function Ja(e){e.preventDefault(),B=Math.max(He,Math.min(Ke,B+(e.deltaY>0?-.08:.08)))}function Ve(){Ce&&(window.clearTimeout(Ce),Ce=null)}function he(){ue&&(window.clearTimeout(ue),ue=null)}function me(){Ve(),F.value=!1}function xt(e){const t=je.value[e];if(!t){me();return}le.value=e,h.value=t.id,P.value=""}function kt(){Ve(),Ce=window.setTimeout(()=>{const e=le.value+1;if(e>=je.value.length){me(),he(),ue=window.setTimeout(()=>{h.value="",P.value="",ue=null},1e3);return}xt(e),kt()},150)}function Oa(){if(F.value){me();return}je.value.length&&(he(),F.value=!0,xt(0),kt())}async function bt(e={}){const t=++x;me(),he(),lt(t),e.resetInteraction&&ut(),e.clearData&&(A.value=null),_e.value=!0;try{const a=await _n();if(w||t!==x)return t;A.value=a}catch(a){if(w||t!==x)return t;re.error(a?.message||u("journey.loadFailed"))}finally{!w&&t===x&&(_e.value=!1)}return t}function Mt(){return fe&&ve&&U}function Va(){Je(),Na(),Ra(),U||Fa()}async function St(e={}){const t=await bt(e);w||t!==x||Mt()||(await on(),!(w||t!==x||Mt())&&Va())}async function qa(){const e=await bt();if(w||e!==x)return;const t=new Set;N.value&&h.value&&t.add(h.value),m.value&&t.add(m.value),[...t].some(a=>{const n=pe.value.get(a);return n&&!O(n)})&&await it(e)}function Ct(){U&&(cancelAnimationFrame(ke),ke=0,U=!1)}function Fa(){Ct(),yt(),ke=requestAnimationFrame(dt),U=!0}return fn(()=>{window.addEventListener("keydown",wt),St()}),vn(()=>{w=!0,x+=1,window.removeEventListener("keydown",wt),Ct(),Ve(),he(),Ie(),$a(),Ba(),k.clear(),r=null}),zt(()=>ya.activeProfileName||"default",(e,t)=>{e!==t&&St({clearData:!0,resetInteraction:!0})}),zt(ye,()=>{h.value&&!pe.value.has(h.value)&&(h.value="",N.value=!1),m.value&&!pe.value.has(m.value)&&$(!0);const e=new Set(ye.value.map(a=>a.category||"general")),t=M.value.filter(a=>e.has(a));t.length!==M.value.length&&(M.value=t)}),(e,t)=>(b(),D("div",Rt,[s("header",Bt,[s("h2",Et,c(f(u)("journey.title")),1)]),s("div",Lt,[s("div",At,[s("div",Wt,[s("div",{class:"node-kind-legend","aria-label":f(u)("journey.nodeKinds")},[s("span",Xt,[t[3]||(t[3]=s("i",{class:"node-kind-marker node-kind-marker--skill node-kind-marker--circle","aria-hidden":"true"},null,-1)),te(" "+c(f(u)("journey.skills")),1)]),s("span",Jt,[t[4]||(t[4]=s("i",{class:"node-kind-marker node-kind-marker--memory node-kind-marker--diamond","aria-hidden":"true"},null,-1)),te(" "+c(f(u)("journey.memories")),1)])],8,Yt),ae(f(It),{size:"small",disabled:!J.value.length,"aria-label":F.value?f(u)("journey.pause"):f(u)("journey.play"),title:F.value?f(u)("journey.pause"):f(u)("journey.play"),onClick:Oa},{default:R(()=>[s("span",{class:qe(["playback-icon",{playing:F.value}]),"aria-hidden":"true"},null,2)]),_:1},8,["disabled","aria-label","title"]),ae(f(It),{size:"small",loading:_e.value,onClick:qa},{default:R(()=>[te(c(f(u)("journey.refresh")),1)]),_:1},8,["loading"])]),ae(f(yn),{show:_e.value&&!A.value,class:"journey-spin"},{default:R(()=>[s("main",Ot,[s("section",{ref_key:"canvasWrapRef",ref:we,class:"galaxy-canvas-wrap"},[s("canvas",{ref_key:"canvasRef",ref:oe,class:"galaxy-canvas",tabindex:"0",role:"group","aria-label":ha.value,onKeydown:Ya,onPointerdown:La,onPointermove:Aa,onPointerup:mt,onPointercancel:mt,onPointerleave:Wa,onClick:Xa,onWheel:Ja},null,40,Vt),ae(tn,{name:"journey-tooltip"},{default:R(()=>[De.value?(b(),D("div",{key:0,class:"journey-node-tooltip",role:"tooltip",style:Fe(ma.value)},[s("div",qt,c(pa.value),1),nt.value?(b(),D("div",Ft,c(nt.value),1)):V("",!0)],4)):V("",!0)]),_:1}),s("div",Ht,[s("span",null,c(A.value?.profile||"-"),1),s("span",null,c(Z.value.length)+" "+c(f(u)("journey.nodes")),1),s("span",null,c(Be.value.length)+" "+c(f(u)("journey.edges")),1)]),Ee.value.length?(b(),D("div",Kt,[s("div",{class:"category-bar",role:"group","aria-label":f(u)("journey.categorySelection")},[(b(!0),D(Pt,null,Dt(Ee.value,a=>(b(),D("button",{key:a.category,type:"button",class:qe(["category-bar-segment",{active:ze.value.has(a.category),selected:Q.value.has(a.category)}]),style:Fe({"--category-color":a.color,flexGrow:a.count}),"data-category":a.category,"aria-label":`${a.label} ${a.count} / ${Math.round(a.count/at.value*100)}%`,"aria-pressed":Q.value.has(a.category),onMouseenter:n=>W.value=a.category,onMouseleave:t[0]||(t[0]=n=>W.value=""),onClick:n=>st(a.category)},null,46,Ut))),128))],8,Gt),s("div",{class:"category-legend",role:"group","aria-label":f(u)("journey.categorySelection")},[(b(!0),D(Pt,null,Dt(Ee.value,a=>(b(),D("button",{key:a.category,type:"button",class:qe({active:ze.value.has(a.category),selected:Q.value.has(a.category)}),"data-category":a.category,"aria-pressed":Q.value.has(a.category),onMouseenter:n=>W.value=a.category,onMouseleave:t[1]||(t[1]=n=>W.value=""),onClick:n=>st(a.category)},[s("i",{style:Fe({backgroundColor:a.color})},null,4),te(" "+c(a.label)+" "+c(a.count)+" / "+c(Math.round(a.count/at.value*100))+"% ",1)],42,Qt))),128))],8,Zt)])):V("",!0)],512)])]),_:1},8,["show"]),ae(f(an),{show:N.value,"onUpdate:show":t[2]||(t[2]=a=>N.value=a),width:Ge.value,placement:"right"},{default:R(()=>[_.value?(b(),jt(f(sn),{key:0,class:"journey-detail-drawer","native-scrollbar":!1,closable:""},{header:R(()=>[s("div",ea,[s("span",null,c(wa(_.value)),1),ae(f(Nt),{size:"small",type:_.value.kind==="memory"?"info":"success",bordered:!1},{default:R(()=>[te(c(_.value.kind),1)]),_:1},8,["type"])])]),default:R(()=>[O(_.value)&&Ae(_.value)?(b(),D("div",ta,[s("span",aa,c(f(u)("journey.memories")),1),s("p",null,c(Ae(_.value)),1)])):V("",!0),rt.value?(b(),D("div",na,[s("span",ra,c(f(u)("journey.description")),1),s("p",null,c(rt.value),1)])):V("",!0),s("div",oa,[t[5]||(t[5]=s("span",{class:"detail-card-label"},"ID",-1)),s("code",null,c(_.value.id),1)]),s("div",la,[s("div",ia,[s("span",null,c(f(u)("journey.category")),1),s("strong",null,c(_.value.category||"-"),1)]),s("div",sa,[s("span",null,c(f(u)("journey.useCount")),1),s("strong",null,c(_.value.useCount??0),1)]),s("div",ua,[s("span",null,c(f(u)("journey.createdBy")),1),s("strong",null,c(_.value.createdBy||"-"),1)]),s("div",ca,[s("span",null,c(f(u)("journey.timestamp")),1),s("strong",null,c(_a(_.value.timestamp)),1)])]),_.value.pinned?(b(),jt(f(Nt),{key:2,size:"small",type:"warning",bordered:!1},{default:R(()=>[te(c(f(u)("journey.pinned")),1)]),_:1})):V("",!0)]),_:1})):V("",!0)]),_:1},8,["show","width"])])])]))}})})),bn=ge((()=>{})),Mn,Sn=ge((()=>{da(),da(),bn(),ln(),Mn=un(va,[["__scopeId","data-v-4aa9335b"]])}));Sn();export{Mn as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as bs,$r as ne,Ar as _s,Br as hs,Ci as _,Cr as Ne,Ct as ys,E as ze,Fr as N,Ft as gs,Gi as y,Hr as Re,Lr as Wt,Lt as ws,Mi as Oe,Nr as Ht,Pi as g,Qi as e,Qr as i,Rr as Ss,Si as Ts,Ti as be,Ut as D,Vr as Cs,Y as Ze,Yr as ue,Z as oe,Zr as U,Zt as de,aa as ae,ai as A,at as $s,ci as De,ct as We,ea as _e,ei as P,jt as we,kr as Bs,lt as He,n as Le,oi as b,ra as r,rt as xs,t as Ee,ti as B,wr as Ke,xi as Gt,z as Je,zr as Qt,zt as je}from"./index-B41wzfl2.js";import{r as Is,t as Ps}from"./profiles-DDKFPE0r.js";import{n as Rs,t as As}from"./ProfileAvatar-CeGhJamd.js";import{l as Us,s as Os}from"./skills-3O8WlKlI.js";import{n as Ns,t as zs}from"./HistoryMessageList-B1UsdtzR.js";var Xe,ea,aa,ta,sa,Yt,na=ae((()=>{Re(),ze(),Ne(),Rs(),Xe={class:"card-title"},ea={class:"card-meta"},aa={class:"meta-tag assignee-tag"},ta={class:"meta-time"},sa={key:0,class:"card-body-preview"},Yt=De({__name:"KanbanTaskCard",props:{task:{},assigneeAvatar:{}},emits:["click"],setup(t,{emit:n}){const m=t,f=n,{t:c}=Ke(),p=U(()=>{const a=Date.now()/1e3-m.task.created_at;return a<60?c("kanban.card.timeAgo.justNow"):a<3600?c("kanban.card.timeAgo.minutes",{count:Math.floor(a/60)}):a<86400?c("kanban.card.timeAgo.hours",{count:Math.floor(a/3600)}):c("kanban.card.timeAgo.days",{count:Math.floor(a/86400)})}),x=U(()=>m.task.priority>=3?"high":m.task.priority===2?"medium":"low"),I=U(()=>c(`kanban.card.priority.${x.value}`));return(a,K)=>(_(),B("div",{class:_e(["kanban-task-card",`status-${t.task.status}`]),onClick:K[0]||(K[0]=O=>f("click",t.task.id))},[i("div",Xe,r(t.task.title),1),i("div",ea,[t.task.assignee?(_(),ne(e(ys),{key:0,trigger:"hover"},{trigger:g(()=>[i("span",aa,[b(As,{class:"assignee-profile-avatar",name:t.task.assignee,avatar:t.assigneeAvatar,size:18,"aria-hidden":"true"},null,8,["name","avatar"]),i("span",null,r(t.task.assignee),1)])]),default:g(()=>[A(" "+r(e(c)("kanban.card.assigneeTooltip")),1)]),_:1})):P("",!0),t.task.priority>=2?(_(),B("span",{key:1,class:_e(["meta-tag priority-tag",x.value])},r(I.value),3)):P("",!0),i("span",ta,r(p.value),1)]),t.task.body?(_(),B("div",sa,r(t.task.body.slice(0,80))+r(t.task.body.length>80?"...":""),1)):P("",!0)],2))}})})),Ds=ae((()=>{})),Zt,Ls=ae((()=>{na(),na(),Ds(),Le(),Zt=Ee(Yt,[["__scopeId","data-v-11436d7e"]])}));function Es(t){return t?.trim()||"default"}function Ks(){try{return localStorage.getItem("hermes_active_profile_name")}catch{return null}}function M(t,n){const m=n.toString();return m?`${t}?${m}`:t}function q(t){const n=new URLSearchParams;return n.set("board",Es(t)),n}function la(t){return t?t.startsWith("https")?"wss:":"ws:":location.protocol==="https:"?"wss:":"ws:"}function Fs(t){const n=_s(),m=q(t?.board),f=Bs();f&&m.set("token",f);const c=Ks();c&&m.set("profile",c);const p=`/api/hermes/kanban/events?${m.toString()}`;if(n)return`${la(n)}//${new URL(n).host}${p}`;const x=location.host;return`${la()}//${x}${p}`}function Ms(t){return new WebSocket(Fs(t))}async function qs(t){const n=new URLSearchParams;return t?.includeArchived&&n.set("includeArchived","true"),(await N(M("/api/hermes/kanban/boards",n))).boards}async function Vs(t){return(await N("/api/hermes/kanban/boards",{method:"POST",body:JSON.stringify(t)})).board}async function Js(t){return N(`/api/hermes/kanban/boards/${encodeURIComponent(t)}`,{method:"DELETE"})}async function Ws(){return(await N("/api/hermes/kanban/capabilities")).capabilities}async function Hs(t){const n=q(t?.board);return t?.status&&n.set("status",t.status),t?.assignee&&n.set("assignee",t.assignee),t?.tenant&&n.set("tenant",t.tenant),t?.includeArchived&&n.set("includeArchived","true"),(await N(M("/api/hermes/kanban",n))).tasks}async function Ue(t,n){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}`,q(n?.board)))}async function Gs(t,n){return(await N(M("/api/hermes/kanban",q(n?.board)),{method:"POST",body:JSON.stringify(t)})).task}async function Qs(t,n,m){return N(M("/api/hermes/kanban/complete",q(m?.board)),{method:"POST",body:JSON.stringify({task_ids:t,summary:n})})}async function Ys(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/block`,q(m?.board)),{method:"POST",body:JSON.stringify({reason:n})})}async function Zs(t,n){return N(M("/api/hermes/kanban/unblock",q(n?.board)),{method:"POST",body:JSON.stringify({task_ids:t})})}async function js(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/assign`,q(m?.board)),{method:"POST",body:JSON.stringify({profile:n})})}async function Xs(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/comments`,q(m?.board)),{method:"POST",body:JSON.stringify(n)})}async function en(t,n){return N(M("/api/hermes/kanban/links",q(n?.board)),{method:"POST",body:JSON.stringify(t)})}async function an(t,n){const m=q(n?.board);return m.set("parent_id",t.parent_id),m.set("child_id",t.child_id),N(M("/api/hermes/kanban/links",m),{method:"DELETE"})}async function tn(t,n){return N(M("/api/hermes/kanban/tasks/bulk",q(n?.board)),{method:"POST",body:JSON.stringify(t)})}async function sn(t,n){const m=q(n?.board);return n?.tail!==void 0&&m.set("tail",String(n.tail)),N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/log`,m))}async function nn(t){const n=q(t?.board);return t?.task&&n.set("task",t.task),t?.severity&&n.set("severity",t.severity),(await N(M("/api/hermes/kanban/diagnostics",n))).diagnostics}async function ln(t,n){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/reclaim`,q(n?.board)),{method:"POST",body:JSON.stringify({reason:n?.reason})})}async function rn(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/reassign`,q(m?.board)),{method:"POST",body:JSON.stringify({profile:n,reclaim:m?.reclaim,reason:m?.reason})})}async function on(t,n){return(await N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/specify`,q(n?.board)),{method:"POST",body:JSON.stringify({author:n?.author})})).results}async function un(t){return(await N(M("/api/hermes/kanban/dispatch",q(t?.board)),{method:"POST",body:JSON.stringify({dryRun:t?.dryRun,max:t?.max,failureLimit:t?.failureLimit})})).result}async function dn(t){return(await N(M("/api/hermes/kanban/stats",q(t?.board)))).stats}async function cn(t){return(await N(M("/api/hermes/kanban/assignees",q(t?.board)))).assignees}var jt=ae((()=>{Ht()}));function vn(t){if(typeof window>"u")return null;try{return window.localStorage.getItem(t)}catch{return null}}function fn(t,n){if(!(typeof window>"u"))try{window.localStorage.setItem(t,n)}catch{}}function qe(t){const n=t?.trim().toLowerCase();return n&&Xt.test(n)?n:Se}var Ve,Se,Xt,Fe,Ge=ae((()=>{Cs(),Re(),jt(),Ve="hermes.kanban.selectedBoard",Se="default",Xt=/^[a-z0-9][a-z0-9_-]{0,63}$/,Fe=hs("kanban",()=>{const t=y([]),n=y(null),m=y([]),f=y([]),c=y(null),p=y(!1),x=y(!1),I=y(null),a=y(qe(vn(Ve))),K=y(null),O=y(null);let z=0,R=0,W=0,H=0,L=0,V=0,Z=0,E=null,F=null,J=null,G=!1;const Q=U(()=>{const s=f.value.filter(l=>!l.archived);return s.some(l=>l.slug==="default")?s:[{slug:Se,name:"Default",description:"",icon:"",color:"",created_at:null,archived:!1,counts:{},total:0},...s]});function ie(s){if(!c.value)return!1;const l=c.value.capabilities?.find(v=>v.key===s);return l?l.status==="supported":c.value.missing?.includes(s)?!1:c.value.supports?.[s]===!0}function Y(s){if(!ie(s))throw new Error(`Kanban capability "${s}" is not supported by the current Hermes backend`)}function ke(s,l){const v=c.value?.capabilities?.find(C=>C.key===s);return v?l.includes(v.status):l.includes("supported")?ie(s):!1}function re(s,l){if(!ke(s,l))throw new Error(`Kanban capability "${s}" is not available with the required status`)}function ce(s){return Q.value.some(l=>l.slug===s)}function ee(s){const l=qe(s);return f.value.length>0&&!ce(l)?Se:l}function he(){t.value=[],n.value=null,m.value=[]}function S(){F&&clearTimeout(F),J&&clearTimeout(J),F=null,J=null}function $(){if(!E)return;const s=E;E=null,s.onclose=null,s.onerror=null,s.onmessage=null;try{s.close()}catch{}}function T(){G=!1,Z++,S(),$()}function ve(s,l,v){J&&clearTimeout(J),J=setTimeout(()=>{!G||v!==Z||l!==z||s!==a.value||Promise.all([h(),le(!0),j(),ye()])},100)}function fe(s,l,v){F&&clearTimeout(F),F=setTimeout(()=>{!G||v!==Z||l!==z||s!==a.value||me(s,l,v)},3e3)}function me(s,l,v){$();let C;try{C=Ms({board:s})}catch(X){console.error("Failed to open kanban event stream:",X),fe(s,l,v);return}E=C,C.onmessage=X=>{if(!(!G||v!==Z||l!==z||s!==a.value))try{JSON.parse(String(X.data))?.type==="event"&&ve(s,l,v)}catch{ve(s,l,v)}},C.onerror=()=>{E===C&&console.error("Kanban event stream error")},C.onclose=()=>{E===C&&(E=null,fe(s,l,v))}}function pe(){const s=c.value?.capabilities?.find(l=>l.key==="events")?.status;return s==="supported"||s==="partial"||ie("events")}function Te(){if(!pe())return!1;G=!0;const s=++Z,l=z,v=a.value;return S(),me(v,l,s),!0}function Pe(){G&&Te()}function te(s){const l=ee(s),v=a.value!==l;return a.value=l,fn(Ve,l),I.value=null,v&&(he(),z++,Pe()),l}function Be(s){const l=qe(s),v=ee(l),C=v!==l;return te(v),C&&(I.value=`Board "${l}" is unavailable; fell back to "${v}".`),{board:v,recovered:C}}function Ce(s){return{seq:s(),generation:z,board:a.value}}function k(s,l,v,C){return s===C&&l===z&&v===a.value}async function h(s=!1){const l=++R;x.value=!0;try{const v=await qs({includeArchived:s});if(l!==R)return;f.value=v,ee(a.value)!==a.value&&Be(a.value)}catch(v){l===R&&console.error("Failed to fetch kanban boards:",v)}finally{l===R&&(x.value=!1)}}async function w(){try{c.value=await Ws()}catch(s){console.error("Failed to fetch kanban capabilities:",s)}}async function se(s){const l=await Vs(s);return await h(),te(l.slug),await Me(),l}async function $e(){const s=a.value;if(s==="default")throw new Error("Cannot archive the default kanban board");await Js(s),await h(),te(Se),await Me()}async function le(s=!1){const{seq:l,generation:v,board:C}=Ce(()=>++W),X=s?0:++V;s||(p.value=!0);try{const ge=await Hs({board:C,status:K.value||void 0,assignee:O.value||void 0,includeArchived:!0});k(l,v,C,W)&&(t.value=ge)}catch(ge){k(l,v,C,W)&&console.error("Failed to fetch kanban tasks:",ge)}finally{!s&&X===V&&(p.value=!1)}}async function j(){const{seq:s,generation:l,board:v}=Ce(()=>++H);try{const C=await dn({board:v});k(s,l,v,H)&&(n.value=C)}catch(C){k(s,l,v,H)&&console.error("Failed to fetch kanban stats:",C)}}async function ye(){const{seq:s,generation:l,board:v}=Ce(()=>++L);try{const C=await cn({board:v});k(s,l,v,L)&&(m.value=C)}catch(C){k(s,l,v,L)&&console.error("Failed to fetch kanban assignees:",C)}}async function Ae(s){const l=a.value,v=await Gs(s,{board:l});return l===a.value&&(t.value.unshift(v),await Promise.all([j(),h()])),v}async function o(s,l){const v=a.value;if(await Qs(s,l,{board:v}),v===a.value){for(const C of s){const X=t.value.find(ge=>ge.id===C);X&&(X.status="done")}await Promise.all([j(),h()])}}async function u(s,l){const v=a.value;if(await Ys(s,l,{board:v}),v===a.value){const C=t.value.find(X=>X.id===s);C&&(C.status="blocked"),await Promise.all([j(),h()])}}async function d(s){const l=a.value;if(await Zs(s,{board:l}),l===a.value){for(const v of s){const C=t.value.find(X=>X.id===v);C&&(C.status="ready")}await Promise.all([j(),h()])}}async function xe(s,l){const v=a.value;if(await js(s,l,{board:v}),v===a.value){const C=t.value.find(X=>X.id===s);C&&(C.assignee=l),await Promise.all([j(),ye()])}}async function ls(s,l,v){return Y("commentsWrite"),Xs(s,{body:l,author:v},{board:a.value})}async function is(s,l){Y("links");const v=a.value,C=await en({parent_id:s,child_id:l},{board:v});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function rs(s,l){Y("links");const v=a.value,C=await an({parent_id:s,child_id:l},{board:v});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function os(s){re("bulk",["supported","partial"]);const l=a.value,v=await tn(s,{board:l});return l===a.value&&await Promise.all([le(!0),j(),h(),ye()]),v}async function us(s,l){return Y("taskLog"),sn(s,{board:a.value,tail:l})}async function ds(s={}){return Y("diagnostics"),nn({...s,board:a.value})}async function cs(s,l){Y("reclaim");const v=a.value,C=await ln(s,{board:v,reason:l});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function vs(s,l,v={}){Y("reassign");const C=a.value,X=await rn(s,l,{board:C,...v});if(C===a.value){const ge=t.value.find(ps=>ps.id===s);ge&&(ge.assignee=l==="none"?null:l),await Promise.all([j(),ye()])}return X}async function fs(s,l){Y("specify");const v=a.value,C=await on(s,{board:v,author:l});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function ks(s={}){Y("dispatch");const l=a.value,v=await un({...s,board:l});return l===a.value&&await Promise.all([le(!0),j(),h()]),v}function ms(s,l){s==="status"?K.value=l:O.value=l}async function Me(){await Promise.all([h(),le(),j(),ye()])}return{tasks:t,stats:n,assignees:m,boards:f,capabilities:c,activeBoards:Q,isCapabilitySupported:ie,loading:p,boardsLoading:x,boardWarning:I,selectedBoard:a,filterStatus:K,filterAssignee:O,fetchBoards:h,fetchCapabilities:w,fetchTasks:le,fetchStats:j,fetchAssignees:ye,createTask:Ae,createBoard:se,archiveSelectedBoard:$e,completeTasks:o,blockTask:u,unblockTasks:d,assignTask:xe,addComment:ls,linkTasks:is,unlinkTasks:rs,bulkUpdateTasks:os,getTaskLog:us,getDiagnostics:ds,reclaimTask:cs,reassignTask:vs,specifyTask:fs,dispatch:ks,setFilter:ms,setSelectedBoard:te,startEventStream:Te,stopEventStream:T,recoverSelectedBoard:Be,resolveAvailableBoard:ee,clearBoardScopedState:he,refreshAll:Me}})}));function Qe(t,n={}){const m=n.default||0;return t.map(f=>f.name!=="default"||f.counts?f:{...f,counts:{total:m}})}var kn,Ye=ae((()=>{kn="default"})),ia,ra,oa,ua,da,ca,va,fa,ka,ma,pa,ba,_a,ha,ya,ga,wa,Sa,Ta,Ca,$a,Ba,xa,Ia,Pa,Ra,Aa,Ua,Oa,Na,za,Da,La,Ea,Ka,Fa,Ma,qa,Va,Ja,Wa,Ha,Ga,Qa,Ya,Za,ja,Xa,et,at,tt,st,nt,lt,it,rt,ot,ut,dt,ct,vt,ft,kt,mt,pt,bt,_t,ht,yt,gt,wt,St,Tt,Ct,$t,Ie,es,Bt=ae((()=>{Re(),ze(),Ne(),Wt(),Ht(),jt(),Ge(),Ye(),Ns(),ia={class:"detail-section"},ra={class:"detail-row"},oa={class:"detail-label"},ua={class:"detail-row"},da={class:"detail-value task-id-value"},ca={key:0,class:"detail-row"},va={class:"detail-value"},fa=["onClick"],ka={key:1,class:"detail-row"},ma={class:"detail-value"},pa=["onClick"],ba={class:"detail-row"},_a={class:"detail-label"},ha={class:"detail-value"},ya={class:"detail-row"},ga={class:"detail-label"},wa={class:"detail-value"},Sa={class:"detail-row"},Ta={class:"detail-label"},Ca={class:"detail-value"},$a={class:"detail-row"},Ba={class:"detail-label"},xa={class:"detail-value"},Ia={key:2,class:"detail-row"},Pa={class:"detail-label"},Ra={class:"detail-value"},Aa={key:3,class:"detail-row"},Ua={class:"detail-label"},Oa={class:"detail-value"},Na={key:0,class:"detail-section"},za={class:"section-title"},Da={class:"detail-body"},La={key:1,class:"detail-section"},Ea={class:"section-title"},Ka={key:2,class:"detail-section"},Fa={class:"section-title"},Ma={class:"action-group"},qa={key:1,class:"complete-input"},Va={key:1,class:"block-input"},Ja={key:0,class:"assign-group"},Wa={class:"recovery-group"},Ha={key:3,class:"detail-section"},Ga={key:0,class:"session-list"},Qa=["onClick"],Ya={class:"session-title"},Za={class:"session-meta"},ja={key:1,class:"column-empty"},Xa={key:4,class:"detail-section"},et={class:"section-title run-history-title"},at={class:"run-history-range"},tt={key:0,class:"run-history-controls"},st={class:"run-header"},nt={class:"run-profile"},lt={class:"run-time"},it={key:0,class:"run-summary"},rt={key:1,class:"run-error"},ot={key:5,class:"detail-section"},ut={class:"section-title"},dt={class:"comment-header"},ct={class:"comment-author"},vt={class:"comment-time"},ft={class:"comment-body"},kt={key:6,class:"detail-section"},mt={class:"section-title"},pt={class:"comment-input"},bt={class:"detail-section"},_t={class:"section-title"},ht={class:"action-group"},yt={key:0,class:"log-output"},gt={key:1,class:"log-output"},wt={key:7,class:"detail-section"},St={class:"section-title"},Tt={class:"event-kind"},Ct={class:"event-time"},$t={class:"messages-modal-body"},Ie=10,es=De({__name:"KanbanTaskDrawer",props:{taskId:{}},emits:["close","updated","navigate"],setup(t,{emit:n}){const m=t,f=n,{t:c}=Ke(),p=Qt(),x=We(),I=Fe(),a=y(null),K=y(!1),O=y(null),z=y(""),R=y(!1),W=y(""),H=y(!1),L=y(!1),V=y(""),Z=y(null),E=y(!1),F=y(null),J=y(!1),G=y(""),Q=y(1),ie=U(()=>a.value&&(a.value.task.result||a.value.latest_summary)||""),Y=U(()=>a.value?c(`kanban.columns.${a.value.task.status}`,a.value.task.status):""),ke=U(()=>{const o=a.value?.task.status;return o!=="done"&&o!=="archived"}),re=y([]),ce=y(!1),ee=y(!1),he=U(()=>a.value&&[...a.value.runs].reverse().find(o=>o.profile)?.profile||null);function S(o,u){return m.taskId===o&&I.selectedBoard===u}function $(){O.value=null,z.value="",R.value=!1,W.value="",H.value=!1,L.value=!1,V.value="",Z.value=null,E.value=!1,F.value=null,J.value=!1,G.value="",Q.value=1,re.value=[],ce.value=!1,ee.value=!1}async function T(){if(!a.value)return;const o=a.value.task.id,u=I.selectedBoard,d=he.value;if(d&&(ee.value=!ee.value,!!ee.value)){ce.value=!0;try{const xe=await N(`/api/hermes/kanban/search-sessions?task_id=${encodeURIComponent(o)}&profile=${encodeURIComponent(d)}&board=${encodeURIComponent(u)}`);S(o,u)&&(re.value=xe.results)}catch{S(o,u)&&(re.value=[])}finally{S(o,u)&&(ce.value=!1)}}}function ve(){a.value?.session&&(L.value=!0)}const fe=U(()=>{const o=a.value?.session;return o?{id:o.id,title:o.title||"",source:o.source,messages:o.messages.filter(u=>u.role==="user"||u.role==="assistant").map(u=>({id:String(u.id),role:u.role,content:u.content,timestamp:u.timestamp})),createdAt:o.started_at,updatedAt:o.ended_at||o.started_at,model:o.model,messageCount:o.messages.length,endedAt:o.ended_at}:null}),me=U(()=>Qe(I.assignees,I.stats?.by_assignee||{}).map(o=>({label:o.name,value:o.name}))),pe=U(()=>{const o=a.value?.runs.length||0;return Math.max(1,Math.ceil(o/Ie))}),Te=U(()=>{const o=a.value?.runs||[],u=(Q.value-1)*Ie;return o.slice(u,u+Ie)}),Pe=U(()=>{const o=a.value?.runs.length||0;if(!o)return"";const u=(Q.value-1)*Ie+1;return`${u}-${Math.min(u+Ie-1,o)} / ${o}`});Oe(()=>[m.taskId,I.selectedBoard],async([o,u])=>{if($(),!o){a.value=null;return}K.value=!0;try{const d=await Ue(o,{board:u});S(o,u)&&(a.value=d)}catch{S(o,u)&&x.error(c("kanban.message.loadFailed"))}finally{S(o,u)&&(K.value=!1)}},{immediate:!0}),Oe(()=>a.value?.runs.length||0,()=>{Q.value>pe.value&&(Q.value=pe.value)});function te(o){return o?new Date(o*1e3).toLocaleString():"—"}async function Be(){if(m.taskId){if(!H.value){H.value=!0;return}try{await I.completeTasks([m.taskId],W.value.trim()||void 0),x.success(c("kanban.message.taskCompleted")),H.value=!1,W.value="",f("updated"),f("close")}catch(o){x.error(o.message)}}}async function Ce(){if(!(!m.taskId||!z.value.trim()))try{await I.blockTask(m.taskId,z.value.trim()),x.success(c("kanban.message.taskBlocked")),R.value=!1,z.value="",f("updated"),f("close")}catch(o){x.error(o.message)}}async function k(){if(m.taskId)try{await I.unblockTasks([m.taskId]),x.success(c("kanban.message.taskUnblocked")),f("updated"),f("close")}catch(o){x.error(o.message)}}async function h(){if(!m.taskId||!O.value)return;const o=m.taskId,u=I.selectedBoard;try{if(await I.assignTask(o,O.value),S(o,u)&&(x.success(c("kanban.message.taskAssigned")),O.value=null),a.value){const d=await Ue(o,{board:u});S(o,u)&&(a.value=d)}f("updated")}catch(d){S(o,u)&&x.error(d.message)}}async function w(){if(!m.taskId||!V.value.trim())return;const o=m.taskId,u=I.selectedBoard;try{await I.addComment(o,V.value.trim());const d=await Ue(o,{board:u});S(o,u)&&(V.value="",a.value=d,x.success(c("kanban.message.commentAdded"))),f("updated")}catch(d){S(o,u)&&x.error(d.message)}}async function se(){if(!m.taskId)return;const o=m.taskId,u=I.selectedBoard;E.value=!0;try{const d=await I.getTaskLog(o,2e4);S(o,u)&&(Z.value=d.exists?d.content:c("kanban.detail.noLog"))}catch(d){S(o,u)&&x.error(d.message)}finally{S(o,u)&&(E.value=!1)}}async function $e(){if(!m.taskId)return;const o=m.taskId,u=I.selectedBoard;J.value=!0;try{const d=await I.getDiagnostics({task:o,severity:"warning"});S(o,u)&&(F.value=d)}catch(d){S(o,u)&&x.error(d.message)}finally{S(o,u)&&(J.value=!1)}}async function le(){if(m.taskId)try{await I.reclaimTask(m.taskId,G.value.trim()||void 0),x.success(c("kanban.message.taskReclaimed")),f("updated"),f("close")}catch(o){x.error(o.message)}}async function j(){if(!(!m.taskId||!O.value))try{await I.reassignTask(m.taskId,O.value,{reclaim:a.value?.task.status==="running",reason:G.value.trim()||void 0}),x.success(c("kanban.message.taskReassigned")),f("updated"),f("close")}catch(o){x.error(o.message)}}async function ye(){if(!m.taskId)return;const o=m.taskId,u=I.selectedBoard;try{await I.specifyTask(o);const d=await Ue(o,{board:u});S(o,u)&&(x.success(c("kanban.message.taskSpecified")),a.value=d),f("updated")}catch(d){x.error(d.message)}}function Ae(o){f("updated"),f("navigate",o)}return(o,u)=>(_(),B(ue,null,[b(e($s),{show:!!t.taskId,width:420,placement:"right","onUpdate:show":u[10]||(u[10]=d=>{d||f("close")})},{default:g(()=>[b(e(xs),{title:a.value?.task.title||"",closable:""},{default:g(()=>[b(e(Je),{show:K.value},{default:g(()=>[a.value?(_(),B(ue,{key:0},[i("div",ia,[i("div",ra,[i("span",oa,r(e(c)("kanban.detail.status")),1),i("span",{class:_e(["detail-value status-badge",a.value.task.status])},r(Y.value),3)]),i("div",ua,[u[12]||(u[12]=i("span",{class:"detail-label"},"Task ID",-1)),i("span",da,r(a.value.task.id),1)]),a.value.parents?.length?(_(),B("div",ca,[u[13]||(u[13]=i("span",{class:"detail-label"},"Parent",-1)),i("span",va,[(_(!0),B(ue,null,be(a.value.parents,d=>(_(),B("a",{key:d,class:"task-link",onClick:xe=>Ae(d)},r(d),9,fa))),128))])])):P("",!0),a.value.children?.length?(_(),B("div",ka,[u[14]||(u[14]=i("span",{class:"detail-label"},"Children",-1)),i("span",ma,[(_(!0),B(ue,null,be(a.value.children,d=>(_(),B("a",{key:d,class:"task-link",onClick:xe=>Ae(d)},r(d),9,pa))),128))])])):P("",!0),i("div",ba,[i("span",_a,r(e(c)("kanban.detail.assignee")),1),i("span",ha,r(a.value.task.assignee||"—"),1)]),i("div",ya,[i("span",ga,r(e(c)("kanban.detail.priority")),1),i("span",wa,r(a.value.task.priority),1)]),i("div",Sa,[i("span",Ta,r(e(c)("kanban.detail.tenant")),1),i("span",Ca,r(a.value.task.tenant||"—"),1)]),i("div",$a,[i("span",Ba,r(e(c)("kanban.detail.createdAt")),1),i("span",xa,r(te(a.value.task.created_at)),1)]),a.value.task.started_at?(_(),B("div",Ia,[i("span",Pa,r(e(c)("kanban.detail.startedAt")),1),i("span",Ra,r(te(a.value.task.started_at)),1)])):P("",!0),a.value.task.completed_at?(_(),B("div",Aa,[i("span",Ua,r(e(c)("kanban.detail.completedAt")),1),i("span",Oa,r(te(a.value.task.completed_at)),1)])):P("",!0)]),a.value.task.body?(_(),B("div",Na,[i("div",za,r(e(c)("kanban.form.body")),1),i("div",Da,r(a.value.task.body),1)])):P("",!0),ie.value?(_(),B("div",La,[i("div",Ea,r(e(c)("kanban.detail.result")),1),i("div",{class:"result-summary",onClick:ve},r(ie.value),1)])):P("",!0),ke.value?(_(),B("div",Ka,[i("div",Fa,r(e(c)("kanban.action.title")),1),i("div",Ma,[H.value?(_(),B("div",qa,[b(e(de),{value:W.value,"onUpdate:value":u[1]||(u[1]=d=>W.value=d),size:"small",placeholder:e(c)("kanban.action.completeSummary")},null,8,["value","placeholder"]),b(e(D),{size:"small",type:"primary",onClick:Be},{default:g(()=>[A(r(e(c)("common.ok")),1)]),_:1}),b(e(D),{size:"small",onClick:u[2]||(u[2]=d=>{H.value=!1,W.value=""})},{default:g(()=>[A(r(e(c)("common.cancel")),1)]),_:1})])):(_(),ne(e(D),{key:0,size:"small",onClick:u[0]||(u[0]=d=>H.value=!0)},{default:g(()=>[A(r(e(c)("kanban.action.complete")),1)]),_:1})),a.value.task.status==="blocked"?(_(),ne(e(D),{key:2,size:"small",onClick:k},{default:g(()=>[A(r(e(c)("kanban.action.unblock")),1)]),_:1})):(_(),B(ue,{key:3},[R.value?(_(),B("div",Va,[b(e(de),{value:z.value,"onUpdate:value":u[4]||(u[4]=d=>z.value=d),size:"small",placeholder:e(c)("kanban.action.blockReason")},null,8,["value","placeholder"]),b(e(D),{size:"small",type:"primary",onClick:Ce},{default:g(()=>[A(r(e(c)("common.ok")),1)]),_:1})])):(_(),ne(e(D),{key:0,size:"small",onClick:u[3]||(u[3]=d=>R.value=!0)},{default:g(()=>[A(r(e(c)("kanban.action.block")),1)]),_:1}))],64))]),a.value.task.status!=="running"?(_(),B("div",Ja,[b(e(we),{value:O.value,"onUpdate:value":u[5]||(u[5]=d=>O.value=d),options:me.value,size:"small",placeholder:e(c)("kanban.action.assignTo"),style:{flex:"1"}},null,8,["value","options","placeholder"]),b(e(D),{size:"small",disabled:!O.value,onClick:h},{default:g(()=>[A(r(e(c)("kanban.action.assign")),1)]),_:1},8,["disabled"])])):P("",!0),i("div",Wa,[b(e(de),{value:G.value,"onUpdate:value":u[6]||(u[6]=d=>G.value=d),size:"small",placeholder:e(c)("kanban.action.recoveryReason")},null,8,["value","placeholder"]),b(e(D),{size:"small",secondary:"",onClick:le},{default:g(()=>[A(r(e(c)("kanban.action.reclaim")),1)]),_:1}),b(e(D),{size:"small",secondary:"",disabled:!O.value,onClick:j},{default:g(()=>[A(r(e(c)("kanban.action.reassign")),1)]),_:1},8,["disabled"]),a.value.task.status==="triage"?(_(),ne(e(D),{key:0,size:"small",secondary:"",onClick:ye},{default:g(()=>[A(r(e(c)("kanban.action.specify")),1)]),_:1})):P("",!0)])])):P("",!0),a.value.runs.length>0?(_(),B("div",Ha,[i("div",{class:"section-title",style:{cursor:"pointer"},onClick:T},[A(r(e(c)("kanban.detail.sessions"))+" ",1),ce.value?(_(),ne(e(Je),{key:0,size:12,style:{"margin-left":"6px"}})):P("",!0)]),ee.value&&re.value.length>0?(_(),B("div",Ga,[(_(!0),B(ue,null,be(re.value,d=>(_(),B("div",{key:d.id,class:"session-item",onClick:xe=>e(p).push({name:"hermes.chat",query:{session:d.id}})},[i("div",Ya,r(d.title||d.id),1),i("div",Za,[i("span",null,r(d.source),1),i("span",null,r(d.model),1),i("span",null,r(te(d.started_at)),1)])],8,Qa))),128))])):P("",!0),ee.value&&!ce.value&&re.value.length===0?(_(),B("div",ja,r(e(c)("kanban.detail.noSessions")),1)):P("",!0)])):P("",!0),a.value.runs.length>0?(_(),B("div",Xa,[i("div",et,[i("span",null,r(e(c)("kanban.detail.runs")),1),i("span",at,r(Pe.value),1),pe.value>1?(_(),B("div",tt,[b(e(D),{size:"tiny",secondary:"",disabled:Q.value<=1,onClick:u[7]||(u[7]=d=>Q.value-=1)},{default:g(()=>[...u[15]||(u[15]=[A("‹",-1)])]),_:1},8,["disabled"]),b(e(D),{size:"tiny",secondary:"",disabled:Q.value>=pe.value,onClick:u[8]||(u[8]=d=>Q.value+=1)},{default:g(()=>[...u[16]||(u[16]=[A("›",-1)])]),_:1},8,["disabled"])])):P("",!0)]),(_(!0),B(ue,null,be(Te.value,d=>(_(),B("div",{key:d.id,class:"run-item"},[i("div",st,[i("span",{class:_e(["run-status",d.status])},r(d.status),3),i("span",nt,r(d.profile||"—"),1),i("span",lt,r(te(d.started_at)),1)]),d.summary?(_(),B("div",it,r(d.summary),1)):P("",!0),d.error?(_(),B("div",rt,r(d.error),1)):P("",!0)]))),128))])):P("",!0),a.value.comments.length>0?(_(),B("div",ot,[i("div",ut,r(e(c)("kanban.detail.comments")),1),(_(!0),B(ue,null,be(a.value.comments,d=>(_(),B("div",{key:d.id,class:"comment-item"},[i("div",dt,[i("span",ct,r(d.author),1),i("span",vt,r(te(d.created_at)),1)]),i("div",ft,r(d.body),1)]))),128))])):P("",!0),ke.value?(_(),B("div",kt,[i("div",mt,r(e(c)("kanban.detail.addComment")),1),i("div",pt,[b(e(de),{value:V.value,"onUpdate:value":u[9]||(u[9]=d=>V.value=d),type:"textarea",rows:3,placeholder:e(c)("kanban.detail.commentPlaceholder")},null,8,["value","placeholder"]),b(e(D),{size:"small",type:"primary",disabled:!V.value.trim(),onClick:w},{default:g(()=>[A(r(e(c)("common.add")),1)]),_:1},8,["disabled"])])])):P("",!0),i("div",bt,[i("div",_t,r(e(c)("kanban.detail.operations")),1),i("div",ht,[b(e(D),{size:"small",secondary:"",loading:E.value,onClick:se},{default:g(()=>[A(r(e(c)("kanban.action.loadLog")),1)]),_:1},8,["loading"]),b(e(D),{size:"small",secondary:"",loading:J.value,onClick:$e},{default:g(()=>[A(r(e(c)("kanban.action.loadDiagnostics")),1)]),_:1},8,["loading"])]),Z.value!==null?(_(),B("pre",yt,r(Z.value),1)):P("",!0),F.value!==null?(_(),B("pre",gt,r(JSON.stringify(F.value,null,2)),1)):P("",!0)]),a.value.events.length>0?(_(),B("div",wt,[i("div",St,r(e(c)("kanban.detail.events")),1),(_(!0),B(ue,null,be(a.value.events.slice(-10),d=>(_(),B("div",{key:d.id,class:"event-item"},[i("span",Tt,r(d.kind),1),i("span",Ct,r(te(d.created_at)),1)]))),128))])):P("",!0)],64)):P("",!0)]),_:1},8,["show"])]),_:1},8,["title"])]),_:1},8,["show"]),fe.value?(_(),ne(e(He),{key:0,show:L.value,preset:"card",title:a.value?.task.title||"",style:{width:"900px",maxWidth:"calc(100vw - 48px)"},onClose:u[11]||(u[11]=d=>L.value=!1)},{default:g(()=>[i("div",$t,[b(zs,{session:fe.value},null,8,["session"])])]),_:1},8,["show","title"])):P("",!0)],64))}})})),mn=ae((()=>{})),as,pn=ae((()=>{Bt(),Bt(),mn(),Le(),as=Ee(es,[["__scopeId","data-v-289879fe"]])})),xt,It,ts,Pt=ae((()=>{Re(),ze(),Ne(),Ge(),Ye(),Us(),xt={class:"advanced-row"},It={class:"advanced-grid"},ts=De({__name:"KanbanCreateForm",emits:["close","created"],setup(t,{emit:n}){const m=n,{t:f}=Ke(),c=We(),p=Fe(),x=y(""),I=y(""),a=y(null),K=y(null),O=y(""),z=y(!1),R=y("scratch"),W=y(""),H=y(""),L=y([]),V=y(""),Z=y(null),E=y(!1),F=y(null),J=y(!1),G=y(!1),Q=y([]),ie=U(()=>[{label:f("kanban.card.priority.low"),value:1},{label:f("kanban.card.priority.medium"),value:2},{label:f("kanban.card.priority.high"),value:3}]),Y=U(()=>Qe(p.assignees,p.stats?.by_assignee||{}).map(S=>({label:S.name,value:S.name}))),ke=U(()=>[{label:f("kanban.form.workspaceScratch"),value:"scratch"},{label:f("kanban.form.workspaceDir"),value:"dir"},{label:f("kanban.form.workspaceWorktree"),value:"worktree"}]);function re(){if(R.value==="scratch")return;const S=W.value.trim();return S?`${R.value}:${S}`:R.value}function ce(){return L.value.length?L.value:void 0}function ee(S){const $=new Map;for(const T of S)T.enabled!==!1&&($.has(T.name)||$.set(T.name,T));return[...$.values()].map(T=>({label:T.name,value:T.name})).sort((T,ve)=>T.label.localeCompare(ve.label))}Gt(async()=>{G.value=!0;try{Q.value=ee((await Os()).categories.flatMap(S=>S.skills||[]))}catch{Q.value=[]}finally{G.value=!1}});async function he(){if(!x.value.trim()){c.warning(f("kanban.form.titleRequired"));return}J.value=!0;try{const S={title:x.value.trim(),body:I.value.trim()||void 0,assignee:a.value||void 0,priority:K.value??void 0},$=O.value.trim(),T=re(),ve=H.value.trim(),fe=ce(),me=V.value.trim();$&&(S.tenant=$),z.value&&(S.triage=!0),T&&(S.workspace=T),R.value==="worktree"&&ve&&(S.branch=ve),fe&&(S.skills=fe),me&&(S.maxRuntime=me),Z.value!==null&&(S.maxRetries=Z.value),E.value&&(S.goalMode=!0,F.value!==null&&(S.goalMaxTurns=F.value)),await p.createTask(S),c.success(f("kanban.message.taskCreated")),m("created"),m("close")}catch(S){c.error(S.message)}finally{J.value=!1}}return(S,$)=>(_(),ne(e(He),{show:!0,preset:"dialog",title:e(f)("kanban.createTask"),style:{width:"480px"},onClose:$[15]||($[15]=T=>m("close"))},{action:g(()=>[b(e(D),{onClick:$[14]||($[14]=T=>m("close"))},{default:g(()=>[A(r(e(f)("common.cancel")),1)]),_:1}),b(e(D),{type:"primary",loading:J.value,onClick:he},{default:g(()=>[A(r(e(f)("common.create")),1)]),_:1},8,["loading"])]),default:g(()=>[b(e(bs),{"label-placement":"top"},{default:g(()=>[b(e(oe),{label:e(f)("kanban.form.title")},{default:g(()=>[b(e(de),{value:x.value,"onUpdate:value":$[0]||($[0]=T=>x.value=T),placeholder:e(f)("kanban.form.titlePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.body")},{default:g(()=>[b(e(de),{value:I.value,"onUpdate:value":$[1]||($[1]=T=>I.value=T),type:"textarea",rows:3,placeholder:e(f)("kanban.form.bodyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.assignee")},{default:g(()=>[b(e(we),{value:a.value,"onUpdate:value":$[2]||($[2]=T=>a.value=T),options:Y.value,placeholder:e(f)("kanban.form.selectAssignee"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.priority")},{default:g(()=>[b(e(we),{value:K.value,"onUpdate:value":$[3]||($[3]=T=>K.value=T),options:ie.value,placeholder:e(f)("kanban.form.selectPriority"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.tenant")},{default:g(()=>[b(e(de),{value:O.value,"onUpdate:value":$[4]||($[4]=T=>O.value=T),placeholder:e(f)("kanban.form.tenantPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.workspace")},{default:g(()=>[b(e(we),{value:R.value,"onUpdate:value":$[5]||($[5]=T=>R.value=T),options:ke.value},null,8,["value","options"])]),_:1},8,["label"]),R.value!=="scratch"?(_(),ne(e(oe),{key:0,label:e(f)("kanban.form.workspacePath")},{default:g(()=>[b(e(de),{value:W.value,"onUpdate:value":$[6]||($[6]=T=>W.value=T),placeholder:e(f)("kanban.form.workspacePathPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])):P("",!0),R.value==="worktree"?(_(),ne(e(oe),{key:1,label:e(f)("kanban.form.branch")},{default:g(()=>[b(e(de),{value:H.value,"onUpdate:value":$[7]||($[7]=T=>H.value=T),placeholder:e(f)("kanban.form.branchPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])):P("",!0),b(e(oe),{label:e(f)("kanban.form.skills")},{default:g(()=>[b(e(we),{value:L.value,"onUpdate:value":$[8]||($[8]=T=>L.value=T),multiple:"",filterable:"",clearable:"",loading:G.value,options:Q.value,placeholder:e(f)("kanban.form.skillsPlaceholder")},null,8,["value","loading","options","placeholder"])]),_:1},8,["label"]),i("div",xt,[b(e(je),{checked:z.value,"onUpdate:checked":$[9]||($[9]=T=>z.value=T)},{default:g(()=>[A(r(e(f)("kanban.form.triage")),1)]),_:1},8,["checked"]),b(e(je),{checked:E.value,"onUpdate:checked":$[10]||($[10]=T=>E.value=T)},{default:g(()=>[A(r(e(f)("kanban.form.goalMode")),1)]),_:1},8,["checked"])]),i("div",It,[b(e(oe),{label:e(f)("kanban.form.maxRuntime")},{default:g(()=>[b(e(de),{value:V.value,"onUpdate:value":$[11]||($[11]=T=>V.value=T),placeholder:e(f)("kanban.form.maxRuntimePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.maxRetries")},{default:g(()=>[b(e(Ze),{value:Z.value,"onUpdate:value":$[12]||($[12]=T=>Z.value=T),min:1,max:100,precision:0,placeholder:e(f)("kanban.form.maxRetriesPlaceholder"),clearable:""},null,8,["value","placeholder"])]),_:1},8,["label"]),E.value?(_(),ne(e(oe),{key:0,label:e(f)("kanban.form.goalMaxTurns")},{default:g(()=>[b(e(Ze),{value:F.value,"onUpdate:value":$[13]||($[13]=T=>F.value=T),min:1,max:100,precision:0,placeholder:e(f)("kanban.form.goalMaxTurnsPlaceholder"),clearable:""},null,8,["value","placeholder"])]),_:1},8,["label"])):P("",!0)])]),_:1})]),_:1},8,["title"]))}})})),bn=ae((()=>{})),ss,_n=ae((()=>{Pt(),Pt(),bn(),Le(),ss=Ee(ts,[["__scopeId","data-v-721fc143"]])})),Rt,At,Ut,Ot,Nt,zt,Dt,Lt,Et,Kt,Ft,Mt,qt,Vt,ns,Jt=ae((()=>{Re(),ze(),Ne(),Wt(),Ls(),pn(),_n(),Ge(),Ps(),Ye(),Rt={class:"kanban-view"},At={class:"page-header"},Ut={class:"header-title"},Ot={class:"header-actions"},Nt={key:0,class:"stats-bar"},zt=["aria-pressed","onClick"],Dt={class:"stat-count"},Lt={class:"stat-label"},Et=["aria-pressed"],Kt={class:"stat-count"},Ft={class:"stat-label"},Mt={class:"kanban-board"},qt={key:0,class:"column-empty"},Vt={class:"board-form"},ns=De({__name:"KanbanView",setup(t){const{t:n}=Ke(),m=Ss(),f=Qt(),c=We(),p=Fe(),x=Is(),I=y(!1),a=y(!1),K=y(null),O=y(""),z=y(""),R=y(!1),W=y(null),H=y(!1),L=["triage","todo","scheduled","ready","running","blocked","review","done","archived"],V=y([...L]);function Z(k){return Array.isArray(k)?typeof k[0]=="string"?k[0]:null:typeof k=="string"?k:null}function E(){return Z(m.query.board)}async function F(k){E()!==k&&await f.replace({query:{...m.query,board:k}})}async function J(k,h=!0,w=!1){const se=p.selectedBoard,{board:$e,recovered:le}=p.recoverSelectedBoard(k||p.selectedBoard||"default");K.value=null,I.value=!1,a.value=!1,h&&le&&p.boardWarning&&c.warning(p.boardWarning),await F($e),(w||$e!==se)&&await p.refreshAll()}function G(k){return`${n("kanban.stats.tasks")}: ${k}`}const Q=U(()=>p.activeBoards.map(k=>{const h=typeof k.total=="number"?k.total:0;return{label:`${n("kanban.title")}: ${k.icon?`${k.icon} `:""}${k.name||k.slug} · ${G(h)}`,value:k.slug}})),ie=U({get:()=>p.selectedBoard,set:k=>{J(k||"default")}}),Y=U(()=>{const k={};for(const h of L)k[h]=p.tasks.filter(w=>w.status===h).sort((w,se)=>se.created_at-w.created_at);return k}),ke=U(()=>{const k=p.filterStatus;return k&&L.includes(k)?[k]:L}),re=U(()=>Qe(p.assignees,p.stats?.by_assignee||{})),ce=U(()=>Object.fromEntries(x.profiles.map(k=>[k.name,k.avatar||null]))),ee=U(()=>[{label:n("kanban.allStatuses"),value:""},...L.map(k=>({label:n(`kanban.columns.${k}`,k),value:k}))]),he=U(()=>[{label:n("kanban.allAssignees"),value:""},...re.value.map(k=>({label:k.name,value:k.name}))]),S=U({get:()=>p.filterStatus||"",set:k=>p.setFilter("status",k||null)}),$=U({get:()=>p.filterAssignee||"",set:k=>p.setFilter("assignee",k||null)});Oe(()=>m.query.board,async()=>{H.value&&await J(E(),!1)}),Oe(ke,k=>{V.value=[...k]},{immediate:!0}),Gt(async()=>{await Promise.all([p.fetchBoards(),p.fetchCapabilities(),x.profiles.length===0?x.fetchProfiles():Promise.resolve()]),await J(E(),!0,!0),p.startEventStream(),H.value=!0,W.value=setInterval(()=>{document.visibilityState==="visible"&&Promise.all([p.fetchBoards(),p.fetchTasks(!0),p.fetchStats()])},15e3)}),Ts(()=>{p.stopEventStream(),W.value&&clearInterval(W.value)});function T(k){K.value=k}function ve(){K.value=null}async function fe(){await Promise.all([p.fetchTasks(),p.fetchStats()])}function me(k){K.value=k}async function pe(){await p.fetchTasks()}async function Te(k){p.setFilter("status",k),V.value=k?[k]:[...L],await p.fetchTasks()}async function Pe(){await Promise.all([p.fetchTasks(),p.fetchStats(),p.fetchBoards()])}async function te(){const k=O.value.trim();if(!k){c.warning(n("kanban.board.slugRequired"));return}R.value=!0;try{const h=await p.createBoard({slug:k,name:z.value.trim()||void 0});O.value="",z.value="",a.value=!1,await F(h.slug),c.success(n("kanban.board.created"))}catch(h){c.error(h.message)}finally{R.value=!1}}async function Be(){if(p.selectedBoard!=="default"&&window.confirm(n("kanban.board.archiveConfirm"))){R.value=!0;try{await p.archiveSelectedBoard(),await F(Se),c.success(n("kanban.board.archived"))}catch(k){c.error(k.message)}finally{R.value=!1}}}async function Ce(){R.value=!0;try{await p.dispatch(),await p.refreshAll(),c.success(n("kanban.message.dispatchNudged"))}catch(k){c.error(k.message)}finally{R.value=!1}}return(k,h)=>(_(),B("div",Rt,[i("header",At,[i("h2",Ut,r(e(n)("kanban.title")),1),i("div",Ot,[b(e(we),{value:ie.value,"onUpdate:value":h[0]||(h[0]=w=>ie.value=w),options:Q.value,loading:e(p).boardsLoading,size:"small",style:{width:"260px"}},null,8,["value","options","loading"]),b(e(D),{size:"small",loading:R.value,onClick:h[1]||(h[1]=w=>a.value=!0)},{default:g(()=>[A(r(e(n)("common.add")),1)]),_:1},8,["loading"]),b(e(D),{size:"small",secondary:"",disabled:e(p).selectedBoard===e(Se),loading:R.value,onClick:Be},{default:g(()=>[A(r(e(n)("kanban.board.archive")),1)]),_:1},8,["disabled","loading"]),b(e(D),{size:"small",secondary:"",loading:R.value,onClick:Ce},{default:g(()=>[A(r(e(n)("kanban.action.dispatch")),1)]),_:1},8,["loading"]),b(e(we),{value:S.value,"onUpdate:value":[h[2]||(h[2]=w=>S.value=w),pe],options:ee.value,size:"small",style:{width:"150px"}},null,8,["value","options"]),b(e(we),{value:$.value,"onUpdate:value":[h[3]||(h[3]=w=>$.value=w),pe],options:he.value,size:"small",style:{width:"170px"}},null,8,["value","options"]),b(e(D),{type:"primary",size:"small",onClick:h[4]||(h[4]=w=>I.value=!0)},{icon:g(()=>[...h[12]||(h[12]=[i("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),i("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:g(()=>[A(" "+r(e(n)("kanban.createTask")),1)]),_:1})])]),e(p).stats?(_(),B("div",Nt,[(_(),B(ue,null,be(L,w=>i("button",{key:w,type:"button",class:_e(["stat-chip",[w,{active:e(p).filterStatus===w}]]),"aria-pressed":e(p).filterStatus===w,onClick:se=>Te(w)},[i("span",Dt,r(e(p).stats.by_status[w]||0),1),i("span",Lt,r(e(n)(`kanban.columns.${w}`,w)),1)],10,zt)),64)),i("button",{type:"button",class:_e(["stat-chip total",{active:!e(p).filterStatus}]),"aria-pressed":!e(p).filterStatus,onClick:h[5]||(h[5]=w=>Te(null))},[i("span",Kt,r(e(p).stats.total),1),i("span",Ft,r(e(n)("kanban.stats.total")),1)],10,Et)])):P("",!0),b(e(Je),{show:e(p).loading&&e(p).tasks.length===0},{default:g(()=>[i("div",Mt,[b(e(ws),{"expanded-names":V.value,"onUpdate:expandedNames":h[6]||(h[6]=w=>V.value=w)},{default:g(()=>[(_(!0),B(ue,null,be(ke.value,w=>(_(),ne(e(gs),{key:w,title:`${e(n)(`kanban.columns.${w}`,w)} (${Y.value[w].length})`,name:w,class:_e(["kanban-column",`status-${w}`])},{header:g(()=>[i("span",{class:_e(["column-header",`status-${w}`])},[h[13]||(h[13]=i("span",{class:"status-dot","aria-hidden":"true"},null,-1)),i("span",null,r(e(n)(`kanban.columns.${w}`,w))+" ("+r(Y.value[w].length)+")",1)],2)]),default:g(()=>[i("div",{class:_e(["task-list",`status-${w}`])},[(_(!0),B(ue,null,be(Y.value[w],se=>(_(),ne(Zt,{key:se.id,task:se,"assignee-avatar":se.assignee&&ce.value[se.assignee]||null,onClick:$e=>T(se.id)},null,8,["task","assignee-avatar","onClick"]))),128)),Y.value[w].length===0?(_(),B("div",qt,r(e(n)("kanban.noTasks")),1)):P("",!0)],2)]),_:2},1032,["title","name","class"]))),128))]),_:1},8,["expanded-names"])])]),_:1},8,["show"]),b(as,{"task-id":K.value,onClose:ve,onUpdated:fe,onNavigate:me},null,8,["task-id"]),b(e(He),{show:a.value,"onUpdate:show":h[10]||(h[10]=w=>a.value=w),preset:"dialog",title:e(n)("kanban.board.create"),style:{width:"420px"}},{action:g(()=>[b(e(D),{onClick:h[9]||(h[9]=w=>a.value=!1)},{default:g(()=>[A(r(e(n)("common.cancel")),1)]),_:1}),b(e(D),{type:"primary",loading:R.value,onClick:te},{default:g(()=>[A(r(e(n)("common.create")),1)]),_:1},8,["loading"])]),default:g(()=>[i("div",Vt,[b(e(de),{value:O.value,"onUpdate:value":h[7]||(h[7]=w=>O.value=w),placeholder:e(n)("kanban.board.slugPlaceholder")},null,8,["value","placeholder"]),b(e(de),{value:z.value,"onUpdate:value":h[8]||(h[8]=w=>z.value=w),placeholder:e(n)("kanban.board.namePlaceholder")},null,8,["value","placeholder"])])]),_:1},8,["show","title"]),I.value?(_(),ne(ss,{key:1,onClose:h[11]||(h[11]=w=>I.value=!1),onCreated:Pe})):P("",!0)]))}})})),hn=ae((()=>{})),yn,gn=ae((()=>{Jt(),Jt(),hn(),Le(),yn=Ee(ns,[["__scopeId","data-v-77df4897"]])}));gn();export{yn as default};
|
|
1
|
+
import{$ as bs,$r as ne,Ar as _s,Br as hs,Ci as _,Cr as Ne,Ct as ys,E as ze,Fr as N,Ft as gs,Gi as y,Hr as Re,Lr as Wt,Lt as ws,Mi as Oe,Nr as Ht,Pi as g,Qi as e,Qr as i,Rr as Ss,Si as Ts,Ti as be,Ut as D,Vr as Cs,Y as Ze,Yr as ue,Z as oe,Zr as U,Zt as de,aa as ae,ai as A,at as $s,ci as De,ct as We,ea as _e,ei as P,jt as we,kr as Bs,lt as He,n as Le,oi as b,ra as r,rt as xs,t as Ee,ti as B,wr as Ke,xi as Gt,z as Je,zr as Qt,zt as je}from"./index-RJQqJC6n.js";import{r as Is,t as Ps}from"./profiles-BtECgqqD.js";import{n as Rs,t as As}from"./ProfileAvatar-Du1XMoe0.js";import{l as Us,s as Os}from"./skills-CQr0eeFF.js";import{n as Ns,t as zs}from"./HistoryMessageList--MuOQ24m.js";var Xe,ea,aa,ta,sa,Yt,na=ae((()=>{Re(),ze(),Ne(),Rs(),Xe={class:"card-title"},ea={class:"card-meta"},aa={class:"meta-tag assignee-tag"},ta={class:"meta-time"},sa={key:0,class:"card-body-preview"},Yt=De({__name:"KanbanTaskCard",props:{task:{},assigneeAvatar:{}},emits:["click"],setup(t,{emit:n}){const m=t,f=n,{t:c}=Ke(),p=U(()=>{const a=Date.now()/1e3-m.task.created_at;return a<60?c("kanban.card.timeAgo.justNow"):a<3600?c("kanban.card.timeAgo.minutes",{count:Math.floor(a/60)}):a<86400?c("kanban.card.timeAgo.hours",{count:Math.floor(a/3600)}):c("kanban.card.timeAgo.days",{count:Math.floor(a/86400)})}),x=U(()=>m.task.priority>=3?"high":m.task.priority===2?"medium":"low"),I=U(()=>c(`kanban.card.priority.${x.value}`));return(a,K)=>(_(),B("div",{class:_e(["kanban-task-card",`status-${t.task.status}`]),onClick:K[0]||(K[0]=O=>f("click",t.task.id))},[i("div",Xe,r(t.task.title),1),i("div",ea,[t.task.assignee?(_(),ne(e(ys),{key:0,trigger:"hover"},{trigger:g(()=>[i("span",aa,[b(As,{class:"assignee-profile-avatar",name:t.task.assignee,avatar:t.assigneeAvatar,size:18,"aria-hidden":"true"},null,8,["name","avatar"]),i("span",null,r(t.task.assignee),1)])]),default:g(()=>[A(" "+r(e(c)("kanban.card.assigneeTooltip")),1)]),_:1})):P("",!0),t.task.priority>=2?(_(),B("span",{key:1,class:_e(["meta-tag priority-tag",x.value])},r(I.value),3)):P("",!0),i("span",ta,r(p.value),1)]),t.task.body?(_(),B("div",sa,r(t.task.body.slice(0,80))+r(t.task.body.length>80?"...":""),1)):P("",!0)],2))}})})),Ds=ae((()=>{})),Zt,Ls=ae((()=>{na(),na(),Ds(),Le(),Zt=Ee(Yt,[["__scopeId","data-v-11436d7e"]])}));function Es(t){return t?.trim()||"default"}function Ks(){try{return localStorage.getItem("hermes_active_profile_name")}catch{return null}}function M(t,n){const m=n.toString();return m?`${t}?${m}`:t}function q(t){const n=new URLSearchParams;return n.set("board",Es(t)),n}function la(t){return t?t.startsWith("https")?"wss:":"ws:":location.protocol==="https:"?"wss:":"ws:"}function Fs(t){const n=_s(),m=q(t?.board),f=Bs();f&&m.set("token",f);const c=Ks();c&&m.set("profile",c);const p=`/api/hermes/kanban/events?${m.toString()}`;if(n)return`${la(n)}//${new URL(n).host}${p}`;const x=location.host;return`${la()}//${x}${p}`}function Ms(t){return new WebSocket(Fs(t))}async function qs(t){const n=new URLSearchParams;return t?.includeArchived&&n.set("includeArchived","true"),(await N(M("/api/hermes/kanban/boards",n))).boards}async function Vs(t){return(await N("/api/hermes/kanban/boards",{method:"POST",body:JSON.stringify(t)})).board}async function Js(t){return N(`/api/hermes/kanban/boards/${encodeURIComponent(t)}`,{method:"DELETE"})}async function Ws(){return(await N("/api/hermes/kanban/capabilities")).capabilities}async function Hs(t){const n=q(t?.board);return t?.status&&n.set("status",t.status),t?.assignee&&n.set("assignee",t.assignee),t?.tenant&&n.set("tenant",t.tenant),t?.includeArchived&&n.set("includeArchived","true"),(await N(M("/api/hermes/kanban",n))).tasks}async function Ue(t,n){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}`,q(n?.board)))}async function Gs(t,n){return(await N(M("/api/hermes/kanban",q(n?.board)),{method:"POST",body:JSON.stringify(t)})).task}async function Qs(t,n,m){return N(M("/api/hermes/kanban/complete",q(m?.board)),{method:"POST",body:JSON.stringify({task_ids:t,summary:n})})}async function Ys(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/block`,q(m?.board)),{method:"POST",body:JSON.stringify({reason:n})})}async function Zs(t,n){return N(M("/api/hermes/kanban/unblock",q(n?.board)),{method:"POST",body:JSON.stringify({task_ids:t})})}async function js(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/assign`,q(m?.board)),{method:"POST",body:JSON.stringify({profile:n})})}async function Xs(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/comments`,q(m?.board)),{method:"POST",body:JSON.stringify(n)})}async function en(t,n){return N(M("/api/hermes/kanban/links",q(n?.board)),{method:"POST",body:JSON.stringify(t)})}async function an(t,n){const m=q(n?.board);return m.set("parent_id",t.parent_id),m.set("child_id",t.child_id),N(M("/api/hermes/kanban/links",m),{method:"DELETE"})}async function tn(t,n){return N(M("/api/hermes/kanban/tasks/bulk",q(n?.board)),{method:"POST",body:JSON.stringify(t)})}async function sn(t,n){const m=q(n?.board);return n?.tail!==void 0&&m.set("tail",String(n.tail)),N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/log`,m))}async function nn(t){const n=q(t?.board);return t?.task&&n.set("task",t.task),t?.severity&&n.set("severity",t.severity),(await N(M("/api/hermes/kanban/diagnostics",n))).diagnostics}async function ln(t,n){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/reclaim`,q(n?.board)),{method:"POST",body:JSON.stringify({reason:n?.reason})})}async function rn(t,n,m){return N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/reassign`,q(m?.board)),{method:"POST",body:JSON.stringify({profile:n,reclaim:m?.reclaim,reason:m?.reason})})}async function on(t,n){return(await N(M(`/api/hermes/kanban/${encodeURIComponent(t)}/specify`,q(n?.board)),{method:"POST",body:JSON.stringify({author:n?.author})})).results}async function un(t){return(await N(M("/api/hermes/kanban/dispatch",q(t?.board)),{method:"POST",body:JSON.stringify({dryRun:t?.dryRun,max:t?.max,failureLimit:t?.failureLimit})})).result}async function dn(t){return(await N(M("/api/hermes/kanban/stats",q(t?.board)))).stats}async function cn(t){return(await N(M("/api/hermes/kanban/assignees",q(t?.board)))).assignees}var jt=ae((()=>{Ht()}));function vn(t){if(typeof window>"u")return null;try{return window.localStorage.getItem(t)}catch{return null}}function fn(t,n){if(!(typeof window>"u"))try{window.localStorage.setItem(t,n)}catch{}}function qe(t){const n=t?.trim().toLowerCase();return n&&Xt.test(n)?n:Se}var Ve,Se,Xt,Fe,Ge=ae((()=>{Cs(),Re(),jt(),Ve="hermes.kanban.selectedBoard",Se="default",Xt=/^[a-z0-9][a-z0-9_-]{0,63}$/,Fe=hs("kanban",()=>{const t=y([]),n=y(null),m=y([]),f=y([]),c=y(null),p=y(!1),x=y(!1),I=y(null),a=y(qe(vn(Ve))),K=y(null),O=y(null);let z=0,R=0,W=0,H=0,L=0,V=0,Z=0,E=null,F=null,J=null,G=!1;const Q=U(()=>{const s=f.value.filter(l=>!l.archived);return s.some(l=>l.slug==="default")?s:[{slug:Se,name:"Default",description:"",icon:"",color:"",created_at:null,archived:!1,counts:{},total:0},...s]});function ie(s){if(!c.value)return!1;const l=c.value.capabilities?.find(v=>v.key===s);return l?l.status==="supported":c.value.missing?.includes(s)?!1:c.value.supports?.[s]===!0}function Y(s){if(!ie(s))throw new Error(`Kanban capability "${s}" is not supported by the current Hermes backend`)}function ke(s,l){const v=c.value?.capabilities?.find(C=>C.key===s);return v?l.includes(v.status):l.includes("supported")?ie(s):!1}function re(s,l){if(!ke(s,l))throw new Error(`Kanban capability "${s}" is not available with the required status`)}function ce(s){return Q.value.some(l=>l.slug===s)}function ee(s){const l=qe(s);return f.value.length>0&&!ce(l)?Se:l}function he(){t.value=[],n.value=null,m.value=[]}function S(){F&&clearTimeout(F),J&&clearTimeout(J),F=null,J=null}function $(){if(!E)return;const s=E;E=null,s.onclose=null,s.onerror=null,s.onmessage=null;try{s.close()}catch{}}function T(){G=!1,Z++,S(),$()}function ve(s,l,v){J&&clearTimeout(J),J=setTimeout(()=>{!G||v!==Z||l!==z||s!==a.value||Promise.all([h(),le(!0),j(),ye()])},100)}function fe(s,l,v){F&&clearTimeout(F),F=setTimeout(()=>{!G||v!==Z||l!==z||s!==a.value||me(s,l,v)},3e3)}function me(s,l,v){$();let C;try{C=Ms({board:s})}catch(X){console.error("Failed to open kanban event stream:",X),fe(s,l,v);return}E=C,C.onmessage=X=>{if(!(!G||v!==Z||l!==z||s!==a.value))try{JSON.parse(String(X.data))?.type==="event"&&ve(s,l,v)}catch{ve(s,l,v)}},C.onerror=()=>{E===C&&console.error("Kanban event stream error")},C.onclose=()=>{E===C&&(E=null,fe(s,l,v))}}function pe(){const s=c.value?.capabilities?.find(l=>l.key==="events")?.status;return s==="supported"||s==="partial"||ie("events")}function Te(){if(!pe())return!1;G=!0;const s=++Z,l=z,v=a.value;return S(),me(v,l,s),!0}function Pe(){G&&Te()}function te(s){const l=ee(s),v=a.value!==l;return a.value=l,fn(Ve,l),I.value=null,v&&(he(),z++,Pe()),l}function Be(s){const l=qe(s),v=ee(l),C=v!==l;return te(v),C&&(I.value=`Board "${l}" is unavailable; fell back to "${v}".`),{board:v,recovered:C}}function Ce(s){return{seq:s(),generation:z,board:a.value}}function k(s,l,v,C){return s===C&&l===z&&v===a.value}async function h(s=!1){const l=++R;x.value=!0;try{const v=await qs({includeArchived:s});if(l!==R)return;f.value=v,ee(a.value)!==a.value&&Be(a.value)}catch(v){l===R&&console.error("Failed to fetch kanban boards:",v)}finally{l===R&&(x.value=!1)}}async function w(){try{c.value=await Ws()}catch(s){console.error("Failed to fetch kanban capabilities:",s)}}async function se(s){const l=await Vs(s);return await h(),te(l.slug),await Me(),l}async function $e(){const s=a.value;if(s==="default")throw new Error("Cannot archive the default kanban board");await Js(s),await h(),te(Se),await Me()}async function le(s=!1){const{seq:l,generation:v,board:C}=Ce(()=>++W),X=s?0:++V;s||(p.value=!0);try{const ge=await Hs({board:C,status:K.value||void 0,assignee:O.value||void 0,includeArchived:!0});k(l,v,C,W)&&(t.value=ge)}catch(ge){k(l,v,C,W)&&console.error("Failed to fetch kanban tasks:",ge)}finally{!s&&X===V&&(p.value=!1)}}async function j(){const{seq:s,generation:l,board:v}=Ce(()=>++H);try{const C=await dn({board:v});k(s,l,v,H)&&(n.value=C)}catch(C){k(s,l,v,H)&&console.error("Failed to fetch kanban stats:",C)}}async function ye(){const{seq:s,generation:l,board:v}=Ce(()=>++L);try{const C=await cn({board:v});k(s,l,v,L)&&(m.value=C)}catch(C){k(s,l,v,L)&&console.error("Failed to fetch kanban assignees:",C)}}async function Ae(s){const l=a.value,v=await Gs(s,{board:l});return l===a.value&&(t.value.unshift(v),await Promise.all([j(),h()])),v}async function o(s,l){const v=a.value;if(await Qs(s,l,{board:v}),v===a.value){for(const C of s){const X=t.value.find(ge=>ge.id===C);X&&(X.status="done")}await Promise.all([j(),h()])}}async function u(s,l){const v=a.value;if(await Ys(s,l,{board:v}),v===a.value){const C=t.value.find(X=>X.id===s);C&&(C.status="blocked"),await Promise.all([j(),h()])}}async function d(s){const l=a.value;if(await Zs(s,{board:l}),l===a.value){for(const v of s){const C=t.value.find(X=>X.id===v);C&&(C.status="ready")}await Promise.all([j(),h()])}}async function xe(s,l){const v=a.value;if(await js(s,l,{board:v}),v===a.value){const C=t.value.find(X=>X.id===s);C&&(C.assignee=l),await Promise.all([j(),ye()])}}async function ls(s,l,v){return Y("commentsWrite"),Xs(s,{body:l,author:v},{board:a.value})}async function is(s,l){Y("links");const v=a.value,C=await en({parent_id:s,child_id:l},{board:v});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function rs(s,l){Y("links");const v=a.value,C=await an({parent_id:s,child_id:l},{board:v});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function os(s){re("bulk",["supported","partial"]);const l=a.value,v=await tn(s,{board:l});return l===a.value&&await Promise.all([le(!0),j(),h(),ye()]),v}async function us(s,l){return Y("taskLog"),sn(s,{board:a.value,tail:l})}async function ds(s={}){return Y("diagnostics"),nn({...s,board:a.value})}async function cs(s,l){Y("reclaim");const v=a.value,C=await ln(s,{board:v,reason:l});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function vs(s,l,v={}){Y("reassign");const C=a.value,X=await rn(s,l,{board:C,...v});if(C===a.value){const ge=t.value.find(ps=>ps.id===s);ge&&(ge.assignee=l==="none"?null:l),await Promise.all([j(),ye()])}return X}async function fs(s,l){Y("specify");const v=a.value,C=await on(s,{board:v,author:l});return v===a.value&&await Promise.all([le(!0),j(),h()]),C}async function ks(s={}){Y("dispatch");const l=a.value,v=await un({...s,board:l});return l===a.value&&await Promise.all([le(!0),j(),h()]),v}function ms(s,l){s==="status"?K.value=l:O.value=l}async function Me(){await Promise.all([h(),le(),j(),ye()])}return{tasks:t,stats:n,assignees:m,boards:f,capabilities:c,activeBoards:Q,isCapabilitySupported:ie,loading:p,boardsLoading:x,boardWarning:I,selectedBoard:a,filterStatus:K,filterAssignee:O,fetchBoards:h,fetchCapabilities:w,fetchTasks:le,fetchStats:j,fetchAssignees:ye,createTask:Ae,createBoard:se,archiveSelectedBoard:$e,completeTasks:o,blockTask:u,unblockTasks:d,assignTask:xe,addComment:ls,linkTasks:is,unlinkTasks:rs,bulkUpdateTasks:os,getTaskLog:us,getDiagnostics:ds,reclaimTask:cs,reassignTask:vs,specifyTask:fs,dispatch:ks,setFilter:ms,setSelectedBoard:te,startEventStream:Te,stopEventStream:T,recoverSelectedBoard:Be,resolveAvailableBoard:ee,clearBoardScopedState:he,refreshAll:Me}})}));function Qe(t,n={}){const m=n.default||0;return t.map(f=>f.name!=="default"||f.counts?f:{...f,counts:{total:m}})}var kn,Ye=ae((()=>{kn="default"})),ia,ra,oa,ua,da,ca,va,fa,ka,ma,pa,ba,_a,ha,ya,ga,wa,Sa,Ta,Ca,$a,Ba,xa,Ia,Pa,Ra,Aa,Ua,Oa,Na,za,Da,La,Ea,Ka,Fa,Ma,qa,Va,Ja,Wa,Ha,Ga,Qa,Ya,Za,ja,Xa,et,at,tt,st,nt,lt,it,rt,ot,ut,dt,ct,vt,ft,kt,mt,pt,bt,_t,ht,yt,gt,wt,St,Tt,Ct,$t,Ie,es,Bt=ae((()=>{Re(),ze(),Ne(),Wt(),Ht(),jt(),Ge(),Ye(),Ns(),ia={class:"detail-section"},ra={class:"detail-row"},oa={class:"detail-label"},ua={class:"detail-row"},da={class:"detail-value task-id-value"},ca={key:0,class:"detail-row"},va={class:"detail-value"},fa=["onClick"],ka={key:1,class:"detail-row"},ma={class:"detail-value"},pa=["onClick"],ba={class:"detail-row"},_a={class:"detail-label"},ha={class:"detail-value"},ya={class:"detail-row"},ga={class:"detail-label"},wa={class:"detail-value"},Sa={class:"detail-row"},Ta={class:"detail-label"},Ca={class:"detail-value"},$a={class:"detail-row"},Ba={class:"detail-label"},xa={class:"detail-value"},Ia={key:2,class:"detail-row"},Pa={class:"detail-label"},Ra={class:"detail-value"},Aa={key:3,class:"detail-row"},Ua={class:"detail-label"},Oa={class:"detail-value"},Na={key:0,class:"detail-section"},za={class:"section-title"},Da={class:"detail-body"},La={key:1,class:"detail-section"},Ea={class:"section-title"},Ka={key:2,class:"detail-section"},Fa={class:"section-title"},Ma={class:"action-group"},qa={key:1,class:"complete-input"},Va={key:1,class:"block-input"},Ja={key:0,class:"assign-group"},Wa={class:"recovery-group"},Ha={key:3,class:"detail-section"},Ga={key:0,class:"session-list"},Qa=["onClick"],Ya={class:"session-title"},Za={class:"session-meta"},ja={key:1,class:"column-empty"},Xa={key:4,class:"detail-section"},et={class:"section-title run-history-title"},at={class:"run-history-range"},tt={key:0,class:"run-history-controls"},st={class:"run-header"},nt={class:"run-profile"},lt={class:"run-time"},it={key:0,class:"run-summary"},rt={key:1,class:"run-error"},ot={key:5,class:"detail-section"},ut={class:"section-title"},dt={class:"comment-header"},ct={class:"comment-author"},vt={class:"comment-time"},ft={class:"comment-body"},kt={key:6,class:"detail-section"},mt={class:"section-title"},pt={class:"comment-input"},bt={class:"detail-section"},_t={class:"section-title"},ht={class:"action-group"},yt={key:0,class:"log-output"},gt={key:1,class:"log-output"},wt={key:7,class:"detail-section"},St={class:"section-title"},Tt={class:"event-kind"},Ct={class:"event-time"},$t={class:"messages-modal-body"},Ie=10,es=De({__name:"KanbanTaskDrawer",props:{taskId:{}},emits:["close","updated","navigate"],setup(t,{emit:n}){const m=t,f=n,{t:c}=Ke(),p=Qt(),x=We(),I=Fe(),a=y(null),K=y(!1),O=y(null),z=y(""),R=y(!1),W=y(""),H=y(!1),L=y(!1),V=y(""),Z=y(null),E=y(!1),F=y(null),J=y(!1),G=y(""),Q=y(1),ie=U(()=>a.value&&(a.value.task.result||a.value.latest_summary)||""),Y=U(()=>a.value?c(`kanban.columns.${a.value.task.status}`,a.value.task.status):""),ke=U(()=>{const o=a.value?.task.status;return o!=="done"&&o!=="archived"}),re=y([]),ce=y(!1),ee=y(!1),he=U(()=>a.value&&[...a.value.runs].reverse().find(o=>o.profile)?.profile||null);function S(o,u){return m.taskId===o&&I.selectedBoard===u}function $(){O.value=null,z.value="",R.value=!1,W.value="",H.value=!1,L.value=!1,V.value="",Z.value=null,E.value=!1,F.value=null,J.value=!1,G.value="",Q.value=1,re.value=[],ce.value=!1,ee.value=!1}async function T(){if(!a.value)return;const o=a.value.task.id,u=I.selectedBoard,d=he.value;if(d&&(ee.value=!ee.value,!!ee.value)){ce.value=!0;try{const xe=await N(`/api/hermes/kanban/search-sessions?task_id=${encodeURIComponent(o)}&profile=${encodeURIComponent(d)}&board=${encodeURIComponent(u)}`);S(o,u)&&(re.value=xe.results)}catch{S(o,u)&&(re.value=[])}finally{S(o,u)&&(ce.value=!1)}}}function ve(){a.value?.session&&(L.value=!0)}const fe=U(()=>{const o=a.value?.session;return o?{id:o.id,title:o.title||"",source:o.source,messages:o.messages.filter(u=>u.role==="user"||u.role==="assistant").map(u=>({id:String(u.id),role:u.role,content:u.content,timestamp:u.timestamp})),createdAt:o.started_at,updatedAt:o.ended_at||o.started_at,model:o.model,messageCount:o.messages.length,endedAt:o.ended_at}:null}),me=U(()=>Qe(I.assignees,I.stats?.by_assignee||{}).map(o=>({label:o.name,value:o.name}))),pe=U(()=>{const o=a.value?.runs.length||0;return Math.max(1,Math.ceil(o/Ie))}),Te=U(()=>{const o=a.value?.runs||[],u=(Q.value-1)*Ie;return o.slice(u,u+Ie)}),Pe=U(()=>{const o=a.value?.runs.length||0;if(!o)return"";const u=(Q.value-1)*Ie+1;return`${u}-${Math.min(u+Ie-1,o)} / ${o}`});Oe(()=>[m.taskId,I.selectedBoard],async([o,u])=>{if($(),!o){a.value=null;return}K.value=!0;try{const d=await Ue(o,{board:u});S(o,u)&&(a.value=d)}catch{S(o,u)&&x.error(c("kanban.message.loadFailed"))}finally{S(o,u)&&(K.value=!1)}},{immediate:!0}),Oe(()=>a.value?.runs.length||0,()=>{Q.value>pe.value&&(Q.value=pe.value)});function te(o){return o?new Date(o*1e3).toLocaleString():"—"}async function Be(){if(m.taskId){if(!H.value){H.value=!0;return}try{await I.completeTasks([m.taskId],W.value.trim()||void 0),x.success(c("kanban.message.taskCompleted")),H.value=!1,W.value="",f("updated"),f("close")}catch(o){x.error(o.message)}}}async function Ce(){if(!(!m.taskId||!z.value.trim()))try{await I.blockTask(m.taskId,z.value.trim()),x.success(c("kanban.message.taskBlocked")),R.value=!1,z.value="",f("updated"),f("close")}catch(o){x.error(o.message)}}async function k(){if(m.taskId)try{await I.unblockTasks([m.taskId]),x.success(c("kanban.message.taskUnblocked")),f("updated"),f("close")}catch(o){x.error(o.message)}}async function h(){if(!m.taskId||!O.value)return;const o=m.taskId,u=I.selectedBoard;try{if(await I.assignTask(o,O.value),S(o,u)&&(x.success(c("kanban.message.taskAssigned")),O.value=null),a.value){const d=await Ue(o,{board:u});S(o,u)&&(a.value=d)}f("updated")}catch(d){S(o,u)&&x.error(d.message)}}async function w(){if(!m.taskId||!V.value.trim())return;const o=m.taskId,u=I.selectedBoard;try{await I.addComment(o,V.value.trim());const d=await Ue(o,{board:u});S(o,u)&&(V.value="",a.value=d,x.success(c("kanban.message.commentAdded"))),f("updated")}catch(d){S(o,u)&&x.error(d.message)}}async function se(){if(!m.taskId)return;const o=m.taskId,u=I.selectedBoard;E.value=!0;try{const d=await I.getTaskLog(o,2e4);S(o,u)&&(Z.value=d.exists?d.content:c("kanban.detail.noLog"))}catch(d){S(o,u)&&x.error(d.message)}finally{S(o,u)&&(E.value=!1)}}async function $e(){if(!m.taskId)return;const o=m.taskId,u=I.selectedBoard;J.value=!0;try{const d=await I.getDiagnostics({task:o,severity:"warning"});S(o,u)&&(F.value=d)}catch(d){S(o,u)&&x.error(d.message)}finally{S(o,u)&&(J.value=!1)}}async function le(){if(m.taskId)try{await I.reclaimTask(m.taskId,G.value.trim()||void 0),x.success(c("kanban.message.taskReclaimed")),f("updated"),f("close")}catch(o){x.error(o.message)}}async function j(){if(!(!m.taskId||!O.value))try{await I.reassignTask(m.taskId,O.value,{reclaim:a.value?.task.status==="running",reason:G.value.trim()||void 0}),x.success(c("kanban.message.taskReassigned")),f("updated"),f("close")}catch(o){x.error(o.message)}}async function ye(){if(!m.taskId)return;const o=m.taskId,u=I.selectedBoard;try{await I.specifyTask(o);const d=await Ue(o,{board:u});S(o,u)&&(x.success(c("kanban.message.taskSpecified")),a.value=d),f("updated")}catch(d){x.error(d.message)}}function Ae(o){f("updated"),f("navigate",o)}return(o,u)=>(_(),B(ue,null,[b(e($s),{show:!!t.taskId,width:420,placement:"right","onUpdate:show":u[10]||(u[10]=d=>{d||f("close")})},{default:g(()=>[b(e(xs),{title:a.value?.task.title||"",closable:""},{default:g(()=>[b(e(Je),{show:K.value},{default:g(()=>[a.value?(_(),B(ue,{key:0},[i("div",ia,[i("div",ra,[i("span",oa,r(e(c)("kanban.detail.status")),1),i("span",{class:_e(["detail-value status-badge",a.value.task.status])},r(Y.value),3)]),i("div",ua,[u[12]||(u[12]=i("span",{class:"detail-label"},"Task ID",-1)),i("span",da,r(a.value.task.id),1)]),a.value.parents?.length?(_(),B("div",ca,[u[13]||(u[13]=i("span",{class:"detail-label"},"Parent",-1)),i("span",va,[(_(!0),B(ue,null,be(a.value.parents,d=>(_(),B("a",{key:d,class:"task-link",onClick:xe=>Ae(d)},r(d),9,fa))),128))])])):P("",!0),a.value.children?.length?(_(),B("div",ka,[u[14]||(u[14]=i("span",{class:"detail-label"},"Children",-1)),i("span",ma,[(_(!0),B(ue,null,be(a.value.children,d=>(_(),B("a",{key:d,class:"task-link",onClick:xe=>Ae(d)},r(d),9,pa))),128))])])):P("",!0),i("div",ba,[i("span",_a,r(e(c)("kanban.detail.assignee")),1),i("span",ha,r(a.value.task.assignee||"—"),1)]),i("div",ya,[i("span",ga,r(e(c)("kanban.detail.priority")),1),i("span",wa,r(a.value.task.priority),1)]),i("div",Sa,[i("span",Ta,r(e(c)("kanban.detail.tenant")),1),i("span",Ca,r(a.value.task.tenant||"—"),1)]),i("div",$a,[i("span",Ba,r(e(c)("kanban.detail.createdAt")),1),i("span",xa,r(te(a.value.task.created_at)),1)]),a.value.task.started_at?(_(),B("div",Ia,[i("span",Pa,r(e(c)("kanban.detail.startedAt")),1),i("span",Ra,r(te(a.value.task.started_at)),1)])):P("",!0),a.value.task.completed_at?(_(),B("div",Aa,[i("span",Ua,r(e(c)("kanban.detail.completedAt")),1),i("span",Oa,r(te(a.value.task.completed_at)),1)])):P("",!0)]),a.value.task.body?(_(),B("div",Na,[i("div",za,r(e(c)("kanban.form.body")),1),i("div",Da,r(a.value.task.body),1)])):P("",!0),ie.value?(_(),B("div",La,[i("div",Ea,r(e(c)("kanban.detail.result")),1),i("div",{class:"result-summary",onClick:ve},r(ie.value),1)])):P("",!0),ke.value?(_(),B("div",Ka,[i("div",Fa,r(e(c)("kanban.action.title")),1),i("div",Ma,[H.value?(_(),B("div",qa,[b(e(de),{value:W.value,"onUpdate:value":u[1]||(u[1]=d=>W.value=d),size:"small",placeholder:e(c)("kanban.action.completeSummary")},null,8,["value","placeholder"]),b(e(D),{size:"small",type:"primary",onClick:Be},{default:g(()=>[A(r(e(c)("common.ok")),1)]),_:1}),b(e(D),{size:"small",onClick:u[2]||(u[2]=d=>{H.value=!1,W.value=""})},{default:g(()=>[A(r(e(c)("common.cancel")),1)]),_:1})])):(_(),ne(e(D),{key:0,size:"small",onClick:u[0]||(u[0]=d=>H.value=!0)},{default:g(()=>[A(r(e(c)("kanban.action.complete")),1)]),_:1})),a.value.task.status==="blocked"?(_(),ne(e(D),{key:2,size:"small",onClick:k},{default:g(()=>[A(r(e(c)("kanban.action.unblock")),1)]),_:1})):(_(),B(ue,{key:3},[R.value?(_(),B("div",Va,[b(e(de),{value:z.value,"onUpdate:value":u[4]||(u[4]=d=>z.value=d),size:"small",placeholder:e(c)("kanban.action.blockReason")},null,8,["value","placeholder"]),b(e(D),{size:"small",type:"primary",onClick:Ce},{default:g(()=>[A(r(e(c)("common.ok")),1)]),_:1})])):(_(),ne(e(D),{key:0,size:"small",onClick:u[3]||(u[3]=d=>R.value=!0)},{default:g(()=>[A(r(e(c)("kanban.action.block")),1)]),_:1}))],64))]),a.value.task.status!=="running"?(_(),B("div",Ja,[b(e(we),{value:O.value,"onUpdate:value":u[5]||(u[5]=d=>O.value=d),options:me.value,size:"small",placeholder:e(c)("kanban.action.assignTo"),style:{flex:"1"}},null,8,["value","options","placeholder"]),b(e(D),{size:"small",disabled:!O.value,onClick:h},{default:g(()=>[A(r(e(c)("kanban.action.assign")),1)]),_:1},8,["disabled"])])):P("",!0),i("div",Wa,[b(e(de),{value:G.value,"onUpdate:value":u[6]||(u[6]=d=>G.value=d),size:"small",placeholder:e(c)("kanban.action.recoveryReason")},null,8,["value","placeholder"]),b(e(D),{size:"small",secondary:"",onClick:le},{default:g(()=>[A(r(e(c)("kanban.action.reclaim")),1)]),_:1}),b(e(D),{size:"small",secondary:"",disabled:!O.value,onClick:j},{default:g(()=>[A(r(e(c)("kanban.action.reassign")),1)]),_:1},8,["disabled"]),a.value.task.status==="triage"?(_(),ne(e(D),{key:0,size:"small",secondary:"",onClick:ye},{default:g(()=>[A(r(e(c)("kanban.action.specify")),1)]),_:1})):P("",!0)])])):P("",!0),a.value.runs.length>0?(_(),B("div",Ha,[i("div",{class:"section-title",style:{cursor:"pointer"},onClick:T},[A(r(e(c)("kanban.detail.sessions"))+" ",1),ce.value?(_(),ne(e(Je),{key:0,size:12,style:{"margin-left":"6px"}})):P("",!0)]),ee.value&&re.value.length>0?(_(),B("div",Ga,[(_(!0),B(ue,null,be(re.value,d=>(_(),B("div",{key:d.id,class:"session-item",onClick:xe=>e(p).push({name:"hermes.chat",query:{session:d.id}})},[i("div",Ya,r(d.title||d.id),1),i("div",Za,[i("span",null,r(d.source),1),i("span",null,r(d.model),1),i("span",null,r(te(d.started_at)),1)])],8,Qa))),128))])):P("",!0),ee.value&&!ce.value&&re.value.length===0?(_(),B("div",ja,r(e(c)("kanban.detail.noSessions")),1)):P("",!0)])):P("",!0),a.value.runs.length>0?(_(),B("div",Xa,[i("div",et,[i("span",null,r(e(c)("kanban.detail.runs")),1),i("span",at,r(Pe.value),1),pe.value>1?(_(),B("div",tt,[b(e(D),{size:"tiny",secondary:"",disabled:Q.value<=1,onClick:u[7]||(u[7]=d=>Q.value-=1)},{default:g(()=>[...u[15]||(u[15]=[A("‹",-1)])]),_:1},8,["disabled"]),b(e(D),{size:"tiny",secondary:"",disabled:Q.value>=pe.value,onClick:u[8]||(u[8]=d=>Q.value+=1)},{default:g(()=>[...u[16]||(u[16]=[A("›",-1)])]),_:1},8,["disabled"])])):P("",!0)]),(_(!0),B(ue,null,be(Te.value,d=>(_(),B("div",{key:d.id,class:"run-item"},[i("div",st,[i("span",{class:_e(["run-status",d.status])},r(d.status),3),i("span",nt,r(d.profile||"—"),1),i("span",lt,r(te(d.started_at)),1)]),d.summary?(_(),B("div",it,r(d.summary),1)):P("",!0),d.error?(_(),B("div",rt,r(d.error),1)):P("",!0)]))),128))])):P("",!0),a.value.comments.length>0?(_(),B("div",ot,[i("div",ut,r(e(c)("kanban.detail.comments")),1),(_(!0),B(ue,null,be(a.value.comments,d=>(_(),B("div",{key:d.id,class:"comment-item"},[i("div",dt,[i("span",ct,r(d.author),1),i("span",vt,r(te(d.created_at)),1)]),i("div",ft,r(d.body),1)]))),128))])):P("",!0),ke.value?(_(),B("div",kt,[i("div",mt,r(e(c)("kanban.detail.addComment")),1),i("div",pt,[b(e(de),{value:V.value,"onUpdate:value":u[9]||(u[9]=d=>V.value=d),type:"textarea",rows:3,placeholder:e(c)("kanban.detail.commentPlaceholder")},null,8,["value","placeholder"]),b(e(D),{size:"small",type:"primary",disabled:!V.value.trim(),onClick:w},{default:g(()=>[A(r(e(c)("common.add")),1)]),_:1},8,["disabled"])])])):P("",!0),i("div",bt,[i("div",_t,r(e(c)("kanban.detail.operations")),1),i("div",ht,[b(e(D),{size:"small",secondary:"",loading:E.value,onClick:se},{default:g(()=>[A(r(e(c)("kanban.action.loadLog")),1)]),_:1},8,["loading"]),b(e(D),{size:"small",secondary:"",loading:J.value,onClick:$e},{default:g(()=>[A(r(e(c)("kanban.action.loadDiagnostics")),1)]),_:1},8,["loading"])]),Z.value!==null?(_(),B("pre",yt,r(Z.value),1)):P("",!0),F.value!==null?(_(),B("pre",gt,r(JSON.stringify(F.value,null,2)),1)):P("",!0)]),a.value.events.length>0?(_(),B("div",wt,[i("div",St,r(e(c)("kanban.detail.events")),1),(_(!0),B(ue,null,be(a.value.events.slice(-10),d=>(_(),B("div",{key:d.id,class:"event-item"},[i("span",Tt,r(d.kind),1),i("span",Ct,r(te(d.created_at)),1)]))),128))])):P("",!0)],64)):P("",!0)]),_:1},8,["show"])]),_:1},8,["title"])]),_:1},8,["show"]),fe.value?(_(),ne(e(He),{key:0,show:L.value,preset:"card",title:a.value?.task.title||"",style:{width:"900px",maxWidth:"calc(100vw - 48px)"},onClose:u[11]||(u[11]=d=>L.value=!1)},{default:g(()=>[i("div",$t,[b(zs,{session:fe.value},null,8,["session"])])]),_:1},8,["show","title"])):P("",!0)],64))}})})),mn=ae((()=>{})),as,pn=ae((()=>{Bt(),Bt(),mn(),Le(),as=Ee(es,[["__scopeId","data-v-289879fe"]])})),xt,It,ts,Pt=ae((()=>{Re(),ze(),Ne(),Ge(),Ye(),Us(),xt={class:"advanced-row"},It={class:"advanced-grid"},ts=De({__name:"KanbanCreateForm",emits:["close","created"],setup(t,{emit:n}){const m=n,{t:f}=Ke(),c=We(),p=Fe(),x=y(""),I=y(""),a=y(null),K=y(null),O=y(""),z=y(!1),R=y("scratch"),W=y(""),H=y(""),L=y([]),V=y(""),Z=y(null),E=y(!1),F=y(null),J=y(!1),G=y(!1),Q=y([]),ie=U(()=>[{label:f("kanban.card.priority.low"),value:1},{label:f("kanban.card.priority.medium"),value:2},{label:f("kanban.card.priority.high"),value:3}]),Y=U(()=>Qe(p.assignees,p.stats?.by_assignee||{}).map(S=>({label:S.name,value:S.name}))),ke=U(()=>[{label:f("kanban.form.workspaceScratch"),value:"scratch"},{label:f("kanban.form.workspaceDir"),value:"dir"},{label:f("kanban.form.workspaceWorktree"),value:"worktree"}]);function re(){if(R.value==="scratch")return;const S=W.value.trim();return S?`${R.value}:${S}`:R.value}function ce(){return L.value.length?L.value:void 0}function ee(S){const $=new Map;for(const T of S)T.enabled!==!1&&($.has(T.name)||$.set(T.name,T));return[...$.values()].map(T=>({label:T.name,value:T.name})).sort((T,ve)=>T.label.localeCompare(ve.label))}Gt(async()=>{G.value=!0;try{Q.value=ee((await Os()).categories.flatMap(S=>S.skills||[]))}catch{Q.value=[]}finally{G.value=!1}});async function he(){if(!x.value.trim()){c.warning(f("kanban.form.titleRequired"));return}J.value=!0;try{const S={title:x.value.trim(),body:I.value.trim()||void 0,assignee:a.value||void 0,priority:K.value??void 0},$=O.value.trim(),T=re(),ve=H.value.trim(),fe=ce(),me=V.value.trim();$&&(S.tenant=$),z.value&&(S.triage=!0),T&&(S.workspace=T),R.value==="worktree"&&ve&&(S.branch=ve),fe&&(S.skills=fe),me&&(S.maxRuntime=me),Z.value!==null&&(S.maxRetries=Z.value),E.value&&(S.goalMode=!0,F.value!==null&&(S.goalMaxTurns=F.value)),await p.createTask(S),c.success(f("kanban.message.taskCreated")),m("created"),m("close")}catch(S){c.error(S.message)}finally{J.value=!1}}return(S,$)=>(_(),ne(e(He),{show:!0,preset:"dialog",title:e(f)("kanban.createTask"),style:{width:"480px"},onClose:$[15]||($[15]=T=>m("close"))},{action:g(()=>[b(e(D),{onClick:$[14]||($[14]=T=>m("close"))},{default:g(()=>[A(r(e(f)("common.cancel")),1)]),_:1}),b(e(D),{type:"primary",loading:J.value,onClick:he},{default:g(()=>[A(r(e(f)("common.create")),1)]),_:1},8,["loading"])]),default:g(()=>[b(e(bs),{"label-placement":"top"},{default:g(()=>[b(e(oe),{label:e(f)("kanban.form.title")},{default:g(()=>[b(e(de),{value:x.value,"onUpdate:value":$[0]||($[0]=T=>x.value=T),placeholder:e(f)("kanban.form.titlePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.body")},{default:g(()=>[b(e(de),{value:I.value,"onUpdate:value":$[1]||($[1]=T=>I.value=T),type:"textarea",rows:3,placeholder:e(f)("kanban.form.bodyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.assignee")},{default:g(()=>[b(e(we),{value:a.value,"onUpdate:value":$[2]||($[2]=T=>a.value=T),options:Y.value,placeholder:e(f)("kanban.form.selectAssignee"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.priority")},{default:g(()=>[b(e(we),{value:K.value,"onUpdate:value":$[3]||($[3]=T=>K.value=T),options:ie.value,placeholder:e(f)("kanban.form.selectPriority"),clearable:""},null,8,["value","options","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.tenant")},{default:g(()=>[b(e(de),{value:O.value,"onUpdate:value":$[4]||($[4]=T=>O.value=T),placeholder:e(f)("kanban.form.tenantPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.workspace")},{default:g(()=>[b(e(we),{value:R.value,"onUpdate:value":$[5]||($[5]=T=>R.value=T),options:ke.value},null,8,["value","options"])]),_:1},8,["label"]),R.value!=="scratch"?(_(),ne(e(oe),{key:0,label:e(f)("kanban.form.workspacePath")},{default:g(()=>[b(e(de),{value:W.value,"onUpdate:value":$[6]||($[6]=T=>W.value=T),placeholder:e(f)("kanban.form.workspacePathPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])):P("",!0),R.value==="worktree"?(_(),ne(e(oe),{key:1,label:e(f)("kanban.form.branch")},{default:g(()=>[b(e(de),{value:H.value,"onUpdate:value":$[7]||($[7]=T=>H.value=T),placeholder:e(f)("kanban.form.branchPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])):P("",!0),b(e(oe),{label:e(f)("kanban.form.skills")},{default:g(()=>[b(e(we),{value:L.value,"onUpdate:value":$[8]||($[8]=T=>L.value=T),multiple:"",filterable:"",clearable:"",loading:G.value,options:Q.value,placeholder:e(f)("kanban.form.skillsPlaceholder")},null,8,["value","loading","options","placeholder"])]),_:1},8,["label"]),i("div",xt,[b(e(je),{checked:z.value,"onUpdate:checked":$[9]||($[9]=T=>z.value=T)},{default:g(()=>[A(r(e(f)("kanban.form.triage")),1)]),_:1},8,["checked"]),b(e(je),{checked:E.value,"onUpdate:checked":$[10]||($[10]=T=>E.value=T)},{default:g(()=>[A(r(e(f)("kanban.form.goalMode")),1)]),_:1},8,["checked"])]),i("div",It,[b(e(oe),{label:e(f)("kanban.form.maxRuntime")},{default:g(()=>[b(e(de),{value:V.value,"onUpdate:value":$[11]||($[11]=T=>V.value=T),placeholder:e(f)("kanban.form.maxRuntimePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),b(e(oe),{label:e(f)("kanban.form.maxRetries")},{default:g(()=>[b(e(Ze),{value:Z.value,"onUpdate:value":$[12]||($[12]=T=>Z.value=T),min:1,max:100,precision:0,placeholder:e(f)("kanban.form.maxRetriesPlaceholder"),clearable:""},null,8,["value","placeholder"])]),_:1},8,["label"]),E.value?(_(),ne(e(oe),{key:0,label:e(f)("kanban.form.goalMaxTurns")},{default:g(()=>[b(e(Ze),{value:F.value,"onUpdate:value":$[13]||($[13]=T=>F.value=T),min:1,max:100,precision:0,placeholder:e(f)("kanban.form.goalMaxTurnsPlaceholder"),clearable:""},null,8,["value","placeholder"])]),_:1},8,["label"])):P("",!0)])]),_:1})]),_:1},8,["title"]))}})})),bn=ae((()=>{})),ss,_n=ae((()=>{Pt(),Pt(),bn(),Le(),ss=Ee(ts,[["__scopeId","data-v-721fc143"]])})),Rt,At,Ut,Ot,Nt,zt,Dt,Lt,Et,Kt,Ft,Mt,qt,Vt,ns,Jt=ae((()=>{Re(),ze(),Ne(),Wt(),Ls(),pn(),_n(),Ge(),Ps(),Ye(),Rt={class:"kanban-view"},At={class:"page-header"},Ut={class:"header-title"},Ot={class:"header-actions"},Nt={key:0,class:"stats-bar"},zt=["aria-pressed","onClick"],Dt={class:"stat-count"},Lt={class:"stat-label"},Et=["aria-pressed"],Kt={class:"stat-count"},Ft={class:"stat-label"},Mt={class:"kanban-board"},qt={key:0,class:"column-empty"},Vt={class:"board-form"},ns=De({__name:"KanbanView",setup(t){const{t:n}=Ke(),m=Ss(),f=Qt(),c=We(),p=Fe(),x=Is(),I=y(!1),a=y(!1),K=y(null),O=y(""),z=y(""),R=y(!1),W=y(null),H=y(!1),L=["triage","todo","scheduled","ready","running","blocked","review","done","archived"],V=y([...L]);function Z(k){return Array.isArray(k)?typeof k[0]=="string"?k[0]:null:typeof k=="string"?k:null}function E(){return Z(m.query.board)}async function F(k){E()!==k&&await f.replace({query:{...m.query,board:k}})}async function J(k,h=!0,w=!1){const se=p.selectedBoard,{board:$e,recovered:le}=p.recoverSelectedBoard(k||p.selectedBoard||"default");K.value=null,I.value=!1,a.value=!1,h&&le&&p.boardWarning&&c.warning(p.boardWarning),await F($e),(w||$e!==se)&&await p.refreshAll()}function G(k){return`${n("kanban.stats.tasks")}: ${k}`}const Q=U(()=>p.activeBoards.map(k=>{const h=typeof k.total=="number"?k.total:0;return{label:`${n("kanban.title")}: ${k.icon?`${k.icon} `:""}${k.name||k.slug} · ${G(h)}`,value:k.slug}})),ie=U({get:()=>p.selectedBoard,set:k=>{J(k||"default")}}),Y=U(()=>{const k={};for(const h of L)k[h]=p.tasks.filter(w=>w.status===h).sort((w,se)=>se.created_at-w.created_at);return k}),ke=U(()=>{const k=p.filterStatus;return k&&L.includes(k)?[k]:L}),re=U(()=>Qe(p.assignees,p.stats?.by_assignee||{})),ce=U(()=>Object.fromEntries(x.profiles.map(k=>[k.name,k.avatar||null]))),ee=U(()=>[{label:n("kanban.allStatuses"),value:""},...L.map(k=>({label:n(`kanban.columns.${k}`,k),value:k}))]),he=U(()=>[{label:n("kanban.allAssignees"),value:""},...re.value.map(k=>({label:k.name,value:k.name}))]),S=U({get:()=>p.filterStatus||"",set:k=>p.setFilter("status",k||null)}),$=U({get:()=>p.filterAssignee||"",set:k=>p.setFilter("assignee",k||null)});Oe(()=>m.query.board,async()=>{H.value&&await J(E(),!1)}),Oe(ke,k=>{V.value=[...k]},{immediate:!0}),Gt(async()=>{await Promise.all([p.fetchBoards(),p.fetchCapabilities(),x.profiles.length===0?x.fetchProfiles():Promise.resolve()]),await J(E(),!0,!0),p.startEventStream(),H.value=!0,W.value=setInterval(()=>{document.visibilityState==="visible"&&Promise.all([p.fetchBoards(),p.fetchTasks(!0),p.fetchStats()])},15e3)}),Ts(()=>{p.stopEventStream(),W.value&&clearInterval(W.value)});function T(k){K.value=k}function ve(){K.value=null}async function fe(){await Promise.all([p.fetchTasks(),p.fetchStats()])}function me(k){K.value=k}async function pe(){await p.fetchTasks()}async function Te(k){p.setFilter("status",k),V.value=k?[k]:[...L],await p.fetchTasks()}async function Pe(){await Promise.all([p.fetchTasks(),p.fetchStats(),p.fetchBoards()])}async function te(){const k=O.value.trim();if(!k){c.warning(n("kanban.board.slugRequired"));return}R.value=!0;try{const h=await p.createBoard({slug:k,name:z.value.trim()||void 0});O.value="",z.value="",a.value=!1,await F(h.slug),c.success(n("kanban.board.created"))}catch(h){c.error(h.message)}finally{R.value=!1}}async function Be(){if(p.selectedBoard!=="default"&&window.confirm(n("kanban.board.archiveConfirm"))){R.value=!0;try{await p.archiveSelectedBoard(),await F(Se),c.success(n("kanban.board.archived"))}catch(k){c.error(k.message)}finally{R.value=!1}}}async function Ce(){R.value=!0;try{await p.dispatch(),await p.refreshAll(),c.success(n("kanban.message.dispatchNudged"))}catch(k){c.error(k.message)}finally{R.value=!1}}return(k,h)=>(_(),B("div",Rt,[i("header",At,[i("h2",Ut,r(e(n)("kanban.title")),1),i("div",Ot,[b(e(we),{value:ie.value,"onUpdate:value":h[0]||(h[0]=w=>ie.value=w),options:Q.value,loading:e(p).boardsLoading,size:"small",style:{width:"260px"}},null,8,["value","options","loading"]),b(e(D),{size:"small",loading:R.value,onClick:h[1]||(h[1]=w=>a.value=!0)},{default:g(()=>[A(r(e(n)("common.add")),1)]),_:1},8,["loading"]),b(e(D),{size:"small",secondary:"",disabled:e(p).selectedBoard===e(Se),loading:R.value,onClick:Be},{default:g(()=>[A(r(e(n)("kanban.board.archive")),1)]),_:1},8,["disabled","loading"]),b(e(D),{size:"small",secondary:"",loading:R.value,onClick:Ce},{default:g(()=>[A(r(e(n)("kanban.action.dispatch")),1)]),_:1},8,["loading"]),b(e(we),{value:S.value,"onUpdate:value":[h[2]||(h[2]=w=>S.value=w),pe],options:ee.value,size:"small",style:{width:"150px"}},null,8,["value","options"]),b(e(we),{value:$.value,"onUpdate:value":[h[3]||(h[3]=w=>$.value=w),pe],options:he.value,size:"small",style:{width:"170px"}},null,8,["value","options"]),b(e(D),{type:"primary",size:"small",onClick:h[4]||(h[4]=w=>I.value=!0)},{icon:g(()=>[...h[12]||(h[12]=[i("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),i("line",{x1:"5",y1:"12",x2:"19",y2:"12"})],-1)])]),default:g(()=>[A(" "+r(e(n)("kanban.createTask")),1)]),_:1})])]),e(p).stats?(_(),B("div",Nt,[(_(),B(ue,null,be(L,w=>i("button",{key:w,type:"button",class:_e(["stat-chip",[w,{active:e(p).filterStatus===w}]]),"aria-pressed":e(p).filterStatus===w,onClick:se=>Te(w)},[i("span",Dt,r(e(p).stats.by_status[w]||0),1),i("span",Lt,r(e(n)(`kanban.columns.${w}`,w)),1)],10,zt)),64)),i("button",{type:"button",class:_e(["stat-chip total",{active:!e(p).filterStatus}]),"aria-pressed":!e(p).filterStatus,onClick:h[5]||(h[5]=w=>Te(null))},[i("span",Kt,r(e(p).stats.total),1),i("span",Ft,r(e(n)("kanban.stats.total")),1)],10,Et)])):P("",!0),b(e(Je),{show:e(p).loading&&e(p).tasks.length===0},{default:g(()=>[i("div",Mt,[b(e(ws),{"expanded-names":V.value,"onUpdate:expandedNames":h[6]||(h[6]=w=>V.value=w)},{default:g(()=>[(_(!0),B(ue,null,be(ke.value,w=>(_(),ne(e(gs),{key:w,title:`${e(n)(`kanban.columns.${w}`,w)} (${Y.value[w].length})`,name:w,class:_e(["kanban-column",`status-${w}`])},{header:g(()=>[i("span",{class:_e(["column-header",`status-${w}`])},[h[13]||(h[13]=i("span",{class:"status-dot","aria-hidden":"true"},null,-1)),i("span",null,r(e(n)(`kanban.columns.${w}`,w))+" ("+r(Y.value[w].length)+")",1)],2)]),default:g(()=>[i("div",{class:_e(["task-list",`status-${w}`])},[(_(!0),B(ue,null,be(Y.value[w],se=>(_(),ne(Zt,{key:se.id,task:se,"assignee-avatar":se.assignee&&ce.value[se.assignee]||null,onClick:$e=>T(se.id)},null,8,["task","assignee-avatar","onClick"]))),128)),Y.value[w].length===0?(_(),B("div",qt,r(e(n)("kanban.noTasks")),1)):P("",!0)],2)]),_:2},1032,["title","name","class"]))),128))]),_:1},8,["expanded-names"])])]),_:1},8,["show"]),b(as,{"task-id":K.value,onClose:ve,onUpdated:fe,onNavigate:me},null,8,["task-id"]),b(e(He),{show:a.value,"onUpdate:show":h[10]||(h[10]=w=>a.value=w),preset:"dialog",title:e(n)("kanban.board.create"),style:{width:"420px"}},{action:g(()=>[b(e(D),{onClick:h[9]||(h[9]=w=>a.value=!1)},{default:g(()=>[A(r(e(n)("common.cancel")),1)]),_:1}),b(e(D),{type:"primary",loading:R.value,onClick:te},{default:g(()=>[A(r(e(n)("common.create")),1)]),_:1},8,["loading"])]),default:g(()=>[i("div",Vt,[b(e(de),{value:O.value,"onUpdate:value":h[7]||(h[7]=w=>O.value=w),placeholder:e(n)("kanban.board.slugPlaceholder")},null,8,["value","placeholder"]),b(e(de),{value:z.value,"onUpdate:value":h[8]||(h[8]=w=>z.value=w),placeholder:e(n)("kanban.board.namePlaceholder")},null,8,["value","placeholder"])])]),_:1},8,["show","title"]),I.value?(_(),ne(ss,{key:1,onClose:h[11]||(h[11]=w=>I.value=!1),onCreated:Pe})):P("",!0)]))}})})),hn=ae((()=>{})),yn,gn=ae((()=>{Jt(),Jt(),hn(),Le(),yn=Ee(ns,[["__scopeId","data-v-77df4897"]])}));gn();export{yn as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ci as n,Cr as I,Dr as N,Fi as y,Gi as o,Gr as w,Hr as q,Ir as z,Jr as F,Lr as G,Mr as Q,Nr as U,Qi as s,Qr as e,Yr as W,a as E,aa as v,br as J,ci as T,ei as b,i as Y,n as $,qr as j,ra as a,t as O,ti as r,wr as X,xi as Z,zr as ee}from"./index-
|
|
1
|
+
import{Ci as n,Cr as I,Dr as N,Fi as y,Gi as o,Gr as w,Hr as q,Ir as z,Jr as F,Lr as G,Mr as Q,Nr as U,Qi as s,Qr as e,Yr as W,a as E,aa as v,br as J,ci as T,ei as b,i as Y,n as $,qr as j,ra as a,t as O,ti as r,wr as X,xi as Z,zr as ee}from"./index-RJQqJC6n.js";import{a as ie,d as te,u as se}from"./auth-QlZVq-Mb.js";var k,L,V,x,H,M,C,R,A,K,S,P,D=v((()=>{q(),J(),G(),I(),U(),se(),Y(),k={class:"login-view"},L={class:"login-card"},V={class:"login-title"},x={class:"login-desc"},H={class:"login-default-hint"},M=["placeholder"],C=["placeholder"],R={key:0,class:"login-error"},A={key:1,class:"login-lock-hint"},K={key:0},S=["disabled"],P=T({__name:"LoginView",setup(oe){const{t:i}=X(),m=ee(),u=o(""),_=o(""),d=o(!1),l=o(""),c=o(!1),h=E();h?N():Q()&&m.replace("/hermes/chat"),Z(async()=>{try{await ie()}catch{}});async function f(){await B()}async function B(){if(!u.value.trim()||!_.value){l.value=i("login.credentialsRequired");return}d.value=!0,l.value="",c.value=!1;try{z(await te(u.value.trim(),_.value)),m.replace("/hermes/chat")}catch(p){p.status===429||p.status===503?(l.value=i("login.tooManyAttempts"),c.value=!0):l.value=p.message||i("login.invalidCredentials")}finally{d.value=!1}}return(p,t)=>(n(),r("div",k,[e("div",L,[t[4]||(t[4]=e("div",{class:"login-logo"},[e("img",{src:"/logo.png",alt:"Hermes",width:"80",height:"80"})],-1)),e("h1",V,a(s(i)("login.title")),1),e("p",x,a(s(i)("login.description")),1),e("p",H,a(s(i)("login.defaultCredentialsHint")),1),e("form",{class:"login-form",onSubmit:F(f,["prevent"])},[y(e("input",{"onUpdate:modelValue":t[0]||(t[0]=g=>u.value=g),type:"text",class:"login-input",placeholder:s(i)("login.usernamePlaceholder"),autofocus:""},null,8,M),[[w,u.value]]),y(e("input",{"onUpdate:modelValue":t[1]||(t[1]=g=>_.value=g),type:"password",class:"login-input",placeholder:s(i)("login.passwordPlaceholder"),onKeyup:j(f,["enter"])},null,40,C),[[w,_.value]]),l.value?(n(),r("div",R,a(l.value),1)):b("",!0),c.value?(n(),r("div",A,[s(h)?(n(),r("span",K,a(s(i)("login.desktopLockResetHint")),1)):(n(),r(W,{key:1},[e("span",null,a(s(i)("login.lockResetHint")),1),t[2]||(t[2]=e("code",null,"hermes-web-ui clear-login-locks --restart",-1)),e("span",null,a(s(i)("login.defaultLoginResetHint")),1),t[3]||(t[3]=e("code",null,"hermes-web-ui reset-default-login",-1))],64))])):b("",!0),e("button",{type:"submit",class:"login-btn",disabled:d.value},a(d.value?"...":s(i)("login.submit")),9,S)],32)])]))}})})),ae=v((()=>{})),le,ne=v((()=>{D(),D(),ae(),$(),le=O(P,[["__scopeId","data-v-258c6881"]])}));ne();export{le as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ci as r,Cr as J,E as K,Fi as X,Fr as A,Gi as u,Gr as ee,Hr as se,Nr as le,Pi as E,Qi as n,Qr as t,Ti as ae,Ut as te,Yr as B,Zr as C,aa as f,ai as ie,ci as ne,ct as oe,ea as N,ei as ue,jt as R,n as re,oi as m,ra as i,t as _e,ti as _,wr as ce,xi as ve,z as de}from"./index-
|
|
1
|
+
import{Ci as r,Cr as J,E as K,Fi as X,Fr as A,Gi as u,Gr as ee,Hr as se,Nr as le,Pi as E,Qi as n,Qr as t,Ti as ae,Ut as te,Yr as B,Zr as C,aa as f,ai as ie,ci as ne,ct as oe,ea as N,ei as ue,jt as R,n as re,oi as m,ra as i,t as _e,ti as _,wr as ce,xi as ve,z as de}from"./index-RJQqJC6n.js";async function ge(){return(await A("/api/hermes/logs")).files}async function pe(y,a){const o=new URLSearchParams;a?.lines&&o.set("lines",String(a.lines)),a?.level&&o.set("level",a.level),a?.session&&o.set("session",a.session),a?.since&&o.set("since",a.since);const c=o.toString();return(await A(`/api/hermes/logs/${y}${c?`?${c}`:""}`)).entries.filter(v=>v!==null)}var me=f((()=>{le()})),S,U,z,F,G,O,k,I,T,$,D,M,W,P,q=f((()=>{se(),K(),J(),me(),S={class:"logs-view"},U={class:"page-header"},z={class:"header-title"},F={class:"header-actions"},G=["placeholder"],O={class:"logs-body"},k={key:0,class:"logs-empty"},I={class:"log-list"},T={class:"log-time"},$={class:"log-logger"},D={class:"access-method"},M={class:"access-path"},W={key:1,class:"log-message"},P=ne({__name:"LogsView",setup(y){const{t:a}=ce(),o=oe(),c=u([]),v=u("agent"),w=u([]),d=u(!1),b=u(100),L=u(""),h=u(""),Q=C(()=>c.value.map(s=>({label:`${s.name} (${s.size})`,value:s.name}))),H=C(()=>[{label:a("logs.all"),value:""},{label:"ERROR",value:"ERROR"},{label:"WARNING",value:"WARNING"},{label:"INFO",value:"INFO"},{label:"DEBUG",value:"DEBUG"}]),j=[{label:"50",value:50},{label:"100",value:100},{label:"200",value:200},{label:"500",value:500}],V=C(()=>{if(!h.value)return w.value;const s=h.value.toLowerCase();return w.value.filter(e=>e.message.toLowerCase().includes(s)||e.logger.toLowerCase().includes(s)||e.raw.toLowerCase().includes(s))});function x(s){switch(s){case"ERROR":return"level-error";case"WARNING":return"level-warning";case"DEBUG":return"level-debug";default:return"level-info"}}function Y(s){const e=s.match(/\d{2}:\d{2}:\d{2}/);return e?e[0]:s}function g(s){const e=s.match(/"(\w+)\s+(\S+)\s+HTTP\/[^"]+"\s+(\d+)/);return e?{method:e[1],path:e[2],status:e[3]}:null}async function p(){d.value=!0;try{w.value=(await pe(v.value,{lines:b.value,level:L.value||void 0})).filter(s=>s!==null)}catch(s){o.error(s.message)}finally{d.value=!1}}return ve(async()=>{c.value=await ge(),await p()}),(s,e)=>(r(),_("div",S,[t("header",U,[t("h2",z,i(n(a)("logs.title")),1),t("div",F,[m(n(R),{value:v.value,"onUpdate:value":[e[0]||(e[0]=l=>v.value=l),p],options:Q.value,size:"small",class:"input-md"},null,8,["value","options"]),m(n(R),{value:L.value,options:H.value,size:"small",class:"input-sm","onUpdate:value":e[1]||(e[1]=l=>{L.value=l,p()})},null,8,["value","options"]),m(n(R),{value:b.value,options:j,size:"small",class:"input-sm","onUpdate:value":e[2]||(e[2]=l=>{b.value=l,p()})},null,8,["value"]),X(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>h.value=l),class:"search-input",placeholder:n(a)("logs.searchPlaceholder")},null,8,G),[[ee,h.value]]),m(n(te),{size:"small",loading:d.value,onClick:p},{default:E(()=>[ie(i(n(a)("logs.refresh")),1)]),_:1},8,["loading"])])]),t("div",O,[m(n(de),{show:d.value,class:"logs-spin"},{default:E(()=>[V.value.length===0&&!d.value?(r(),_("div",k,i(n(a)("logs.noEntries")),1)):ue("",!0),t("div",I,[(r(!0),_(B,null,ae(V.value,(l,Z)=>(r(),_("div",{key:Z,class:N(["log-entry",x(l.level)])},[t("span",T,i(Y(l.timestamp)),1),t("span",{class:N(["log-level",x(l.level)])},i(l.level),3),t("span",$,i(l.logger),1),g(l.message)?(r(),_(B,{key:0},[t("span",D,i(g(l.message).method),1),t("span",M,i(g(l.message).path),1),t("span",{class:N(["access-status","status-"+(g(l.message).status?.[0]||"x")])},i(g(l.message).status),3)],64)):(r(),_("span",W,i(l.message),1))],2))),128))])]),_:1},8,["show"])])]))}})})),he=f((()=>{})),fe,we=f((()=>{q(),q(),he(),re(),fe=_e(P,[["__scopeId","data-v-a840928e"]])}));we();export{fe as default};
|