@shawnstack/quickforge 1.7.2 → 1.7.4
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/README.md +1 -0
- package/bin/quickforge.mjs +2 -21
- package/dist/assets/AgentProfilesPage-B84w-r9S.js +1 -0
- package/dist/assets/{ChatPanelHost-Cld9HcVz.js → ChatPanelHost-CyO8fEoj.js} +98 -98
- package/dist/assets/{PluginsPage-DEMqwhOA.js → PluginsPage-D2862wul.js} +1 -1
- package/dist/assets/{ScheduledTasksPage-DTP_gedp.js → ScheduledTasksPage-GqbiJDPX.js} +2 -2
- package/dist/assets/SettingsWorkspacePage-B53_eDf2.js +1628 -0
- package/dist/assets/SharedConversationPage-Cw2QFnbC.js +1 -0
- package/dist/assets/TerminalDock-Dgg-_ZmU.js +2 -0
- package/dist/assets/WorkspaceInspector-3uLiu6Bv.js +13 -0
- package/dist/assets/{abnfDiagram-VRR7QNED-Dl_Fvlqg.js → abnfDiagram-VRR7QNED-Dy7veffk.js} +1 -1
- package/dist/assets/{arc-Bhg4c0ht.js → arc-Bo3p2lGy.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-7FQo5GbP.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-BuojN27B.js → architectureDiagram-ZJ3FMSHR-Cwx8qOvu.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-alDLbrR1.js → blockDiagram-677ZJIJ3-BiuaAOFa.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-D1lKa4VT.js → c4Diagram-LMCZKHZV-BTcGfhK2.js} +1 -1
- package/dist/assets/channel-DToA8d-4.js +1 -0
- package/dist/assets/chunk-2Q5K7J3B-D_Wxpk-T.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-CwWLNjMZ.js → chunk-32BRIVSS-B9PuF_RF.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-Be569m7d.js → chunk-52WLFC77-3zGItfIM.js} +1 -1
- package/dist/assets/{chunk-5FCAYU7R-BSvoiWV1.js → chunk-5FCAYU7R-DQ66qlmt.js} +1 -1
- package/dist/assets/{chunk-5HE753X5-CRgsy8WS.js → chunk-5HE753X5-CLqTO-VF.js} +1 -1
- package/dist/assets/{chunk-5JV3BV7I-CdW477UR.js → chunk-5JV3BV7I-Csxv1jr6.js} +1 -1
- package/dist/assets/{chunk-5TONJI2A-CdtKzSmp.js → chunk-5TONJI2A-BCQttpBr.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-BKjjssLZ.js → chunk-5VM5RSS4-DEWJGSTb.js} +1 -1
- package/dist/assets/{chunk-7BUUIJ7U-ByAXiXdn.js → chunk-7BUUIJ7U-DNorm9MM.js} +1 -1
- package/dist/assets/{chunk-BIQX33UG-DeG8SCT1.js → chunk-BIQX33UG-DgvY_BOT.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-D_zHT68Q.js → chunk-C7G6YPKG-DMvn9IPs.js} +1 -1
- package/dist/assets/{chunk-CQNSW5MT-CHpHoUSu.js → chunk-CQNSW5MT-Dq2duUgr.js} +1 -1
- package/dist/assets/{chunk-CYSBUYHQ-CRP50Vov.js → chunk-CYSBUYHQ-BovYyc4Y.js} +1 -1
- package/dist/assets/{chunk-EMLP6XTP-DX6uQQ2v.js → chunk-EMLP6XTP-BMDOpuYN.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-DAJRNkHR.js → chunk-EX3LRPZG-6eP2UPOf.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-XbM5yomC.js → chunk-FWX5IMBZ-D4q-wTSy.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-Ci0ljnb1.js → chunk-HOUHSVGY-XjIcuzH7.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-Dy2WJ71z.js → chunk-ICXQ74PX-YBXbanq9.js} +1 -1
- package/dist/assets/{chunk-JG7HCLWE-2PrkzHkt.js → chunk-JG7HCLWE-CcN3uNXF.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-D32uacSM.js → chunk-JWPE2WC7-Cwg6AUAt.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-DIAFLtiS.js → chunk-MOJQB5TN-NNspcGIU.js} +1 -1
- package/dist/assets/{chunk-MOZMSUNE-BbscOaEz.js → chunk-MOZMSUNE-pMJ_jMos.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-ivBVxzKe.js → chunk-OGEWGWER-CJy-3Ldv.js} +1 -1
- package/dist/assets/{chunk-OSBZ3O6U-frD0hkdx.js → chunk-OSBZ3O6U-D7cLHHOA.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-B-37Rxae.js → chunk-PUDLZKDR-D5YBi1Pi.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-Y90m2RTe.js → chunk-Q4XR5HBZ-DYmqQdIf.js} +1 -1
- package/dist/assets/{chunk-QBLGF6JB-DixBqslB.js → chunk-QBLGF6JB-Bfcx00X0.js} +1 -1
- package/dist/assets/{chunk-R7FJI6CG-DXS1UXn_.js → chunk-R7FJI6CG-oXzadpZY.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-n4JxhNd0.js → chunk-RYQCIY6F-Dt3-8yUh.js} +1 -1
- package/dist/assets/{chunk-U6XO7XAA-yHlgxMmn.js → chunk-U6XO7XAA-B55eSvpx.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-Z6kuZfbl.js → chunk-V7JOEXUC-Btk4JwCt.js} +1 -1
- package/dist/assets/chunk-VAUOI2AC-CIZseNLi.js +1 -0
- package/dist/assets/{chunk-VR4S4FIN-Cs_SIQma.js → chunk-VR4S4FIN-DgaSiVOY.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-CGExYbV-.js → chunk-WYO6CB5R-rRDZ_Tta.js} +3 -3
- package/dist/assets/chunk-XXDRQBXY-Do-XYxat.js +1 -0
- package/dist/assets/{chunk-YOTPTUD7-DopPXWSl.js → chunk-YOTPTUD7-BnFxj5o4.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-CJHOeqMb.js → chunk-ZGVPDNZ5-CrnlPlmJ.js} +1 -1
- package/dist/assets/{chunk-ZIRB5QZD-BBVc5mf6.js → chunk-ZIRB5QZD-BYTiATIH.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-Bu24Sy-k.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-DKhh5HSW.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-DLjV-dTm.js → cose-bilkent-JH36ORCC-BORKJRwF.js} +1 -1
- package/dist/assets/cynefin-VYW2F7L2-oyiAgYC4.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-BfH3zVS-.js → cynefinDiagram-TSTJHNR4-BXKeaSl8.js} +1 -1
- package/dist/assets/{dagre-CY3D84Cl.js → dagre-CrA0XVwJ.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-BIhwZCIZ.js → dagre-VKFMJZFB-ouq_lA1a.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-BHnzNM2w.js → diagram-FQU43EPY-BxR5kUiQ.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-C7-ZlmFT.js → diagram-G47NLZAW-DWonk1sL.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-C-P9Y7IR.js → diagram-NH7WQ7WH-fmV_wV5e.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-Ci5lZ_T5.js → diagram-OA4YK3LP-DvOSRRiV.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-C1xuK2bs.js → diagram-WEI45ONY-Bp-xb3uS.js} +1 -1
- package/dist/assets/dist-DLKC_odd.js +1 -0
- package/dist/assets/{ebnfDiagram-CCIWWBDH-DKQ5NWMD.js → ebnfDiagram-CCIWWBDH-BTlnwneA.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-HAWySadP.js → erDiagram-Q63AITRT-C3fFWGCm.js} +1 -1
- package/dist/assets/esm-oa69b5u4.js +2 -0
- package/dist/assets/eventmodeling-45OFAUF4-YB_0MefX.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-Bc73xdBd.js +1 -0
- package/dist/assets/{ganttDiagram-NO4QXBWP-C1hwIcOA.js → ganttDiagram-NO4QXBWP-DzAiojNi.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-Bvp27L0n.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-DYUYxs1R.js → gitGraphDiagram-IHSO6WYX-Cv57oNEA.js} +1 -1
- package/dist/assets/icons-cTkqD_Gi.js +1 -0
- package/dist/assets/index-B48prgLL.js +65 -0
- package/dist/assets/index-DQhwHHer.css +3 -0
- package/dist/assets/info-DKCQHKI2-BsLOivgq.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-CnIL6tv4.js → infoDiagram-FWYZ7A6U-B5Z_O3Ro.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-B7WXNycQ.js → ishikawaDiagram-FXEZZL3T-CKTK_TKV.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-D4HvioyY.js → journeyDiagram-5HDEW3XC-Cm9k4ywW.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-CDs763eS.js → kanban-definition-HUTT4EX6-DzNteLwx.js} +1 -1
- package/dist/assets/{line-ikKkQiFp.js → line-BG78c_WJ.js} +1 -1
- package/dist/assets/{linear-GqPyxQkN.js → linear-1X20_EGu.js} +1 -1
- package/dist/assets/{map-CJwjCvwr.js → map-CCI8WZkS.js} +1 -1
- package/dist/assets/{mcp-servers-dialog-Bp6kbIup.js → mcp-servers-dialog-GXXD9K0U.js} +2 -2
- package/dist/assets/{mermaid-parser.core-CoE8cccr.js → mermaid-parser.core-Bb8HI_OS.js} +2 -2
- package/dist/assets/{mermaid-renderer-BmbSAmpG.js → mermaid-renderer-PIaNiXAz.js} +2 -2
- package/dist/assets/{mermaid.core-DlFSL90j.js → mermaid.core-DUHOIwL5.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-DLdq0K9C.js → mindmap-definition-LN4V7U3C-Tnbszo7b.js} +1 -1
- package/dist/assets/{monaco-BTsVCDWS.js → monaco-BVtCspYZ.js} +1 -1
- package/dist/assets/{ordinal-CibZU3PM.js → ordinal-v4prQcuq.js} +1 -1
- package/dist/assets/{otel-BNGM50C-.js → otel-D1LswXpM.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-BKQkXRtk.js +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-Cm1kPRC2.js → pegDiagram-2B236MQR-CX824Kd0.js} +1 -1
- package/dist/assets/{pi-ai-Cr3rpCXT.js → pi-ai-DAJlO9ZB.js} +2 -2
- package/dist/assets/{pi-web-ui-DoRGtREc.js → pi-web-ui-B-RJSxjR.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-BTiTN5Ge.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-Df05wjjo.js → pieDiagram-ENE6RG2P-BT04VWPQ.js} +1 -1
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-BjCwGxJC.js → quadrantDiagram-ABIIQ3AL-BvOZxkBr.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-BU-oVjKM.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-7H2hxNbL.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-Mx6wf6XQ.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-BgXSKhYy.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-DTEl2rAC.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-CTUvpKkv.js → railroadDiagram-RFXS5EU6-DnTU--BV.js} +1 -1
- package/dist/assets/{react-vendor-Dr5xvL-e.js → react-vendor-eWH0QhNU.js} +1 -1
- package/dist/assets/{requirementDiagram-TGXJPOKE-BU1kvEku.js → requirementDiagram-TGXJPOKE--MZX_yEv.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-BHmvxVqH.js → sankeyDiagram-HTMAVEWB-SEZkHhYn.js} +1 -1
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-CTpwICgg.js → sequenceDiagram-DBY2YBRQ-BhC2OHiz.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-BbLhGaa4.js → sizeCapture-X5ZJPWSS-Ci5LeToV.js} +1 -1
- package/dist/assets/{skills-dialog-DiJAUfvW.js → skills-dialog-DDh1h8eH.js} +3 -1
- package/dist/assets/{src-B4Tvg3gT.js → src-CovulcRC.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-BxuDwIgT.js → stateDiagram-2N3HPSRC-DKK5tFT4.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-D8x3mkni.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-EkZsiylV.js → swimlanes-5IMT3BWC-DxxGCk67.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-C4nOBNp8.js +8 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-C9ewOCTa.js → timeline-definition-FHXFAJF6-BPXB3Sue.js} +1 -1
- package/dist/assets/treeView-QDETBFTQ-DOE6NSdf.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-Ca7QD_b4.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-CR49Y4Lp.js → vennDiagram-L72KCM5P-CxcBCKye.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-D9O4RKRm.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-Cn0GgwWi.js → wardleyDiagram-EHGQE667-DEL6Yes5.js} +1 -1
- package/dist/assets/web-RgX7H-OH.js +1 -0
- package/dist/assets/{xychartDiagram-FW5EYKEG-DlmPNAvd.js → xychartDiagram-FW5EYKEG-N8cPbcjC.js} +1 -1
- package/dist/index.html +12 -11
- package/dist/mobile-error.html +24 -0
- package/package.json +7 -1
- package/server/acp/server.mjs +14 -9
- package/server/agent-manager.mjs +215 -20
- package/server/ai-http-logger.mjs +69 -12
- package/server/ai-provider-options.mjs +11 -0
- package/server/channels/channel-logs.mjs +13 -0
- package/server/channels/event-relay.mjs +33 -0
- package/server/channels/process-channel.mjs +29 -0
- package/server/channels/providers/wechat.mjs +9 -3
- package/server/channels/registry.mjs +5 -1
- package/server/index.mjs +43 -25
- package/server/lan-access-store.mjs +93 -3
- package/server/network-proxy.mjs +449 -0
- package/server/plugins/registry.mjs +64 -4
- package/server/public-api.mjs +10 -2
- package/server/routes/agent-profiles.mjs +4 -2
- package/server/routes/agent.mjs +28 -0
- package/server/routes/channels.mjs +47 -0
- package/server/routes/lan-access.mjs +246 -21
- package/server/routes/models.mjs +7 -3
- package/server/routes/project.mjs +19 -1
- package/server/routes/scheduled-tasks.mjs +4 -2
- package/server/routes/static.mjs +26 -1
- package/server/routes/system.mjs +37 -0
- package/server/routes/terminal.mjs +7 -2
- package/server/routes/workspace.mjs +62 -9
- package/server/session-utils.mjs +4 -2
- package/server/subagents.mjs +1 -1
- package/server/terminal/terminal-manager.mjs +2 -4
- package/server/tools/definitions.mjs +2 -2
- package/server/tools/index.mjs +5 -3
- package/server/utils/package-update.mjs +70 -47
- package/server/utils/process-env.mjs +7 -0
- package/server/utils/response.mjs +2 -2
- package/dist/assets/AgentProfilesPage-BFgyFa5e.js +0 -1
- package/dist/assets/SettingsWorkspacePage-Dr9zT5Bs.js +0 -1495
- package/dist/assets/SharedConversationPage-op3DRwcw.js +0 -1
- package/dist/assets/TerminalDock-BL_UovwU.js +0 -2
- package/dist/assets/WorkspaceInspector-73dhAime.js +0 -13
- package/dist/assets/architecture-TIHT7OUA-BgP-IMeo.js +0 -1
- package/dist/assets/channel-Rz20dKTK.js +0 -1
- package/dist/assets/chunk-2Q5K7J3B-Cb14ZF_k.js +0 -1
- package/dist/assets/chunk-VAUOI2AC-BOZvd2Sn.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-CD_EGCtT.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-C_ozTKCt.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-FOfFbbZF.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-BzPhLtd5.js +0 -1
- package/dist/assets/eventmodeling-45OFAUF4-BcgGbVJ-.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-dtkzcC8E.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-VByWboBU.js +0 -1
- package/dist/assets/icons-BP8YOS-Z.js +0 -1
- package/dist/assets/index-Cu2bBHLv.css +0 -3
- package/dist/assets/index-yV1wtqTr.js +0 -66
- package/dist/assets/info-DKCQHKI2-CZeDLZxx.js +0 -1
- package/dist/assets/packet-7NZHBO7P-decrrxyX.js +0 -1
- package/dist/assets/pie-RZYD4A2V-J1CasQZl.js +0 -1
- package/dist/assets/radar-I7S5WNFK-B-sZytUA.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-BSaqNPm8.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-lzZR7PxT.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-DQtz1Fh9.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-CpMsuGY3.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BGLshxcY.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-CqdqxA-b.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-Byb71heW.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-CMV1SJsq.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-DtCHtr2V.js +0 -1
- /package/dist/assets/{array-CYkMkqnU.js → array-DqLCdDFv.js} +0 -0
- /package/dist/assets/{chunk-KEIR6QF5-77hsebd7.js → chunk-KEIR6QF5-s7Qq-R3i.js} +0 -0
- /package/dist/assets/{chunk-Y2CYZVJY-CQltPwYk.js → chunk-Y2CYZVJY-BgISNSiw.js} +0 -0
- /package/dist/assets/{css-utils-rkE68RDy.js → css-utils-31qzCXsk.js} +0 -0
- /package/dist/assets/{cytoscape.esm-DwdZnGOm.js → cytoscape.esm-iekjSZ2n.js} +0 -0
- /package/dist/assets/{defaultLocale-Beh6XjaL.js → defaultLocale-CrJzLgRD.js} +0 -0
- /package/dist/assets/{dist-DelZBZpK.js → dist-zzfqk5hx.js} +0 -0
- /package/dist/assets/{graphlib-CAISHZh4.js → graphlib-CIz_CfxW.js} +0 -0
- /package/dist/assets/{init-Rr1s_RiX.js → init-C0r9Gk5G.js} +0 -0
- /package/dist/assets/{lit-vendor-Dr3cpBGF.js → lit-vendor-DvaQX_UQ.js} +0 -0
- /package/dist/assets/{logger-B65Akg8A.js → logger-8REuLPGK.js} +0 -0
- /package/dist/assets/{path-BAQ3hXlG.js → path-DIKpVbHL.js} +0 -0
- /package/dist/assets/{plugin-api-BbUkYm3Y.js → plugin-api-C8hMT5W6.js} +0 -0
- /package/dist/assets/{rough.esm-Djo4Abte.js → rough.esm-BMOtDaaS.js} +0 -0
- /package/dist/assets/{xterm-CGiQzDiR.js → xterm-BFzZ1FH4.js} +0 -0
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{
|
|
2
|
-
`)??``}function
|
|
3
|
-
`)}function
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{It as t}from"./icons-cTkqD_Gi.js";import{n}from"./react-vendor-eWH0QhNU.js";import{d as r,p as i,t as a}from"./lit-vendor-DvaQX_UQ.js";import{g as o,h as s,y as c}from"./pi-web-ui-B-RJSxjR.js";import{t as l}from"./logger-8REuLPGK.js";import{$ as u,It as d,W as f,X as p,Y as m,Z as h,ft as g,g as _,gt as v,ht as y,mt as b,pt as x,s as S}from"./index-B48prgLL.js";import{t as C}from"./plugin-api-C8hMT5W6.js";import{n as w,r as T,t as E}from"./mermaid-renderer-PIaNiXAz.js";var D=e(t(),1);function ee(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function te(e,t,n){if(!e||e.isError||t||!ee(e.details))return``;let r=e.details.action,i=e.details.status,a=e.details.markdown;if(typeof a!=`string`)return``;if(r===`read`){if(a)return a;if(i===`empty`||i===void 0)return n(`memoryContentEmpty`)}return r===`write`&&(i===`saved`||i===void 0)?n(`memoryContentSaved`):``}function O(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function ne(e){let t=new Set;for(let n of e)!O(n)||n.role!==`assistant`||!Array.isArray(n.content)||n.content.forEach(e=>{O(e)&&e.type===`toolCall`&&typeof e.id==`string`&&t.add(e.id)});return e.filter(e=>O(e)&&(e.role===`assistant`||e.role===`toolResult`&&typeof e.toolCallId==`string`&&t.has(e.toolCallId)))}var re=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.(?:png|jpg|webp|gif)$/i,k=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]);function A(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function j(e){if(!A(e)||e.type!==`generated_image_result`||typeof e.sessionId!=`string`||!e.sessionId||typeof e.prompt!=`string`||typeof e.model!=`string`||!Array.isArray(e.assets))return null;let t=e.assets.flatMap(e=>!A(e)||typeof e.assetId!=`string`||!re.test(e.assetId)||typeof e.mimeType!=`string`||!k.has(e.mimeType)||typeof e.size!=`number`||!Number.isFinite(e.size)||e.size<0?[]:[{assetId:e.assetId,mimeType:e.mimeType,size:e.size}]);return t.length?{type:`generated_image_result`,sessionId:e.sessionId,prompt:e.prompt,model:e.model,assets:t,...typeof e.text==`string`&&e.text?{text:e.text}:{}}:null}function ie(e,t,n=window.location.pathname){let r=n.match(/^\/share\/([^/]+)\/?$/)?.[1];return r?`/api/shared/${encodeURIComponent(decodeURIComponent(r))}/assets/${encodeURIComponent(t.assetId)}`:`/api/session-assets/${encodeURIComponent(e.sessionId)}/${encodeURIComponent(t.assetId)}`}var M={maxHeight:`28rem`,overflow:`auto`,border:`1px solid color-mix(in oklab, var(--border) 75%, transparent)`,borderRadius:`0.75rem`,background:`color-mix(in oklab, var(--muted) 28%, transparent)`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.78rem`,lineHeight:`1.45`},N={minHeight:`1.35em`,padding:`0 0.75rem`,whiteSpace:`pre`},P={display:`inline-flex`,alignItems:`center`,borderRadius:`999px`,padding:`0.05rem 0.45rem`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.72rem`,fontWeight:`650`};function F(e,t){let n=R(e?.details)?e.details:void 0;return e?.isError||n?.aborted===!0||n?.timedOut===!0?`error`:t?`running`:e?`done`:`called`}function I(e){if(e==null)return``;if(typeof e==`string`)try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function L(e){return e?.content?.filter(e=>e.type===`text`).map(e=>e.text??``).join(`
|
|
2
|
+
`)??``}function R(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function ae(e,t){if(e.running===!0||t)return`Status: running`;let n=[e.timedOut?`timed out`:null,e.aborted?`aborted`:null].filter(Boolean),r=n.length?` (${n.join(`, `)})`:``;return`Exit code: ${e.code??`unknown`}${typeof e.signal==`string`&&e.signal?`, signal: ${e.signal}`:``}${r}`}function oe(e,t,n){let r=R(t)?t:void 0,i=typeof r?.command==`string`?r.command:typeof e?.command==`string`?e.command:``;if(!i||!r)return``;let a=typeof r?.stdout_preview==`string`?r.stdout_preview:typeof r?.stdout==`string`?r.stdout:``,o=typeof r?.stderr_preview==`string`?r.stderr_preview:typeof r?.stderr==`string`?r.stderr:``,s=!!(a||o),c=r.running===!0||r.code!==void 0||r.signal!==void 0||r.timedOut===!0||r.aborted===!0;return!s&&!c&&!n?``:[`Command: ${i}`,ae(r,n),``,`STDOUT:`,a||`(empty)`,``,`STDERR:`,o||`(empty)`].join(`
|
|
3
|
+
`)}function z(e,t,n,r){let i=L(n);return e===`manage_global_memory`?te(n,r,d)||i:i||(e===`run_command`?oe(t,n?.details,r):``)}function B(e,t){return R(e)&&typeof e[t]==`string`?e[t]:``}function se(e,t,n){if(!t&&!n?.details)return``;if(e===`run_command`&&typeof t?.command==`string`)return t.command;if(e===`generate_image`){let e=typeof t?.prompt==`string`?t.prompt.trim():``;return e.length>100?`${e.slice(0,100)}…`:e}if(e===`present_files`){let e=(Array.isArray(t?.files)?t.files:Array.isArray(n?.details&&n.details.files)?(n?.details).files:[]).map(e=>typeof e==`string`?e:R(e)&&typeof e.path==`string`?e.path:``).filter(Boolean);return e.length?e.slice(0,3).join(`, `)+(e.length>3?` +${e.length-3}`:``):``}if(e===`grep_files`){let e=typeof t?.query==`string`&&t.query?t.query:B(n?.details,`query`),r=typeof t?.path==`string`&&t.path?t.path:B(n?.details,`path`)||`.`,i=t?.regex||R(n?.details)&&R(n.details.searchOptions)&&n.details.searchOptions.regex?`regex`:`text`,a=r&&r!==`.`?` in ${r}`:` in current workspace`;return e?`${i}: ${e}${a}`:`searching${a}`}return e===`activate_skill`&&typeof t?.name==`string`?t.name:e===`read_skill_resource`&&typeof t?.path==`string`||t&&`path`in t&&typeof t.path==`string`?t.path:t&&`query`in t&&typeof t.query==`string`?t.query:t&&`search_query`in t&&typeof t.search_query==`string`?t.search_query:``}function ce(e){if(!e||typeof e!=`object`)return;let t=e.diff;if(!t||typeof t!=`object`)return;let n=t;return typeof n.text==`string`?n:void 0}function le(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.diff;if(!n||typeof n!=`object`)return e;let{text:r,...i}=n;return{...t,diff:i}}function ue(e){if(!e||typeof e!=`object`)return{};let t=e;return{sessionId:typeof t.sessionId==`string`?t.sessionId:void 0,toolCallId:typeof t.toolCallId==`string`?t.toolCallId:void 0}}async function de(e,t,n){let r=n.getAttribute(`aria-label`)||d(`terminateCommand`);n.disabled=!0,n.setAttribute(`aria-label`,d(`commandTerminateRequested`)),n.setAttribute(`title`,d(`commandTerminateRequested`));try{let n=await fetch(`/api/agents/${encodeURIComponent(e)}/abort-tool`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t})});if(!n.ok)throw Error(`HTTP ${n.status}`)}catch{n.disabled=!1,n.setAttribute(`aria-label`,r),n.setAttribute(`title`,d(`terminateCommandTitle`))}}function fe(e){return e.startsWith(`+++`)||e.startsWith(`---`)?`quickforge-diff-file`:e.startsWith(`@@`)?`quickforge-diff-hunk`:e.startsWith(`+`)?`quickforge-diff-add`:e.startsWith(`-`)?`quickforge-diff-del`:`quickforge-diff-context`}function pe(e){return e.startsWith(`+++`)||e.startsWith(`---`)?{...N,background:`color-mix(in oklab, var(--muted) 48%, transparent)`,color:`color-mix(in oklab, var(--muted-foreground) 88%, transparent)`}:e.startsWith(`@@`)?{...N,background:`color-mix(in oklab, rgb(37 99 235) 10%, transparent)`,color:`rgb(37 99 235)`}:e.startsWith(`+`)?{...N,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`}:e.startsWith(`-`)?{...N,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`}:{...N,color:`var(--foreground)`}}function me(e,t){if(e!==`write_file`&&e!==`edit_file`||!t)return r;let n=Number(t.addedLines??0),o=Number(t.removedLines??0);return i`
|
|
4
4
|
<span class="quickforge-tool-meta-hover shrink-0 inline-flex items-center gap-1" title="+${n} -${o}">
|
|
5
5
|
<span
|
|
6
6
|
class="quickforge-diff-badge quickforge-diff-badge-add"
|
|
7
|
-
style=${a({...
|
|
7
|
+
style=${a({...P,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`})}
|
|
8
8
|
>+${n}</span>
|
|
9
9
|
<span
|
|
10
10
|
class="quickforge-diff-badge quickforge-diff-badge-del"
|
|
11
|
-
style=${a({...
|
|
11
|
+
style=${a({...P,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`})}
|
|
12
12
|
>-${o}</span>
|
|
13
13
|
</span>
|
|
14
|
-
`}function
|
|
14
|
+
`}function he(e){let t=e.text?.split(`
|
|
15
15
|
`)??[],n=Number(e.addedLines??0),o=Number(e.removedLines??0);return i`
|
|
16
16
|
<div>
|
|
17
17
|
<div class="mb-1 flex items-center gap-2 text-xs font-medium text-muted-foreground">
|
|
18
18
|
<span>Diff</span>
|
|
19
19
|
<span
|
|
20
20
|
class="quickforge-diff-badge quickforge-diff-badge-add"
|
|
21
|
-
style=${a({...
|
|
21
|
+
style=${a({...P,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`})}
|
|
22
22
|
>+${n}</span>
|
|
23
23
|
<span
|
|
24
24
|
class="quickforge-diff-badge quickforge-diff-badge-del"
|
|
25
|
-
style=${a({...
|
|
25
|
+
style=${a({...P,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`})}
|
|
26
26
|
>-${o}</span>
|
|
27
27
|
${e.truncated?i`<span class="text-muted-foreground/80">truncated</span>`:r}
|
|
28
28
|
</div>
|
|
29
|
-
<div class="quickforge-diff-block" style=${a(
|
|
30
|
-
<div class=${
|
|
29
|
+
<div class="quickforge-diff-block" style=${a(M)}>${t.map(e=>i`
|
|
30
|
+
<div class=${fe(e)} style=${a(pe(e))}>${e||` `}</div>
|
|
31
31
|
`)}</div>
|
|
32
32
|
</div>
|
|
33
|
-
`}function
|
|
33
|
+
`}function ge(e){if(!Number.isFinite(e)||e<0)return``;if(e<1e3)return`${Math.max(0,Math.round(e))}ms`;let t=e/1e3;return t<10?`${t.toFixed(1)}s`:t<60?`${Math.round(t)}s`:`${Math.floor(t/60)}m ${Math.floor(t%60).toString().padStart(2,`0`)}s`}function _e(e){if(e){if(typeof e.durationMs==`number`)return e.durationMs;if(typeof e.startedAt==`number`)return Date.now()-e.startedAt}}var ve=class extends HTMLElement{timer;static get observedAttributes(){return[`duration-ms`,`running`,`started-at`]}connectedCallback(){this.render(),this.syncTimer()}disconnectedCallback(){this.stopTimer()}attributeChangedCallback(){this.render(),this.syncTimer()}readNumberAttribute(e){let t=this.getAttribute(e);if(t===null||t.trim()===``)return;let n=Number(t);return Number.isFinite(n)&&n>=0?n:void 0}syncTimer(){this.getAttribute(`running`)===`true`&&this.readNumberAttribute(`duration-ms`)===void 0?this.timer||=setInterval(()=>this.render(),500):this.stopTimer()}stopTimer(){this.timer&&=(clearInterval(this.timer),void 0)}render(){let e=this.readNumberAttribute(`duration-ms`),t=this.readNumberAttribute(`started-at`),n=e===void 0?t!==void 0&&t>0?Date.now()-t:0:e;this.textContent=ge(n)}};customElements.get(`quickforge-elapsed-time`)||customElements.define(`quickforge-elapsed-time`,ve);function V(e,t){return _e(e)===void 0?r:i`
|
|
34
34
|
<quickforge-elapsed-time
|
|
35
35
|
class="quickforge-tool-meta-hover text-xs text-muted-foreground/70"
|
|
36
36
|
started-at=${String(e?.startedAt??``)}
|
|
37
37
|
duration-ms=${typeof e?.durationMs==`number`?String(e.durationMs):``}
|
|
38
38
|
running=${String(t===`running`)}
|
|
39
39
|
></quickforge-elapsed-time>
|
|
40
|
-
`}function
|
|
41
|
-
<span class="${e===`done`?`quickforge-tool-meta-hover`:`quickforge-tool-meta-important`} shrink-0 inline-flex items-center gap-1.5" title=${
|
|
42
|
-
${
|
|
40
|
+
`}function H(){return`text-muted-foreground/60`}function U(e){let t=`quickforge-tool-type-icon shrink-0 ${H()}`;return e===`manage_global_memory`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 18V5"/><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"/><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"/><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"/><path d="M18 18a4 4 0 0 0 2-7.464"/><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"/><path d="M6 18a4 4 0 0 1-2-7.464"/><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"/></svg>`:e===`edit_file`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.4 2.6a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4Z"/></svg>`:e===`write_file`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"/><path d="M14 2v6h6"/><path d="M12 18v-6"/><path d="M9 15h6"/></svg>`:e===`read_file`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"/><path d="M14 2v6h6"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></svg>`:e===`grep_files`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>`:e===`present_files`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"/><path d="M14 2v6h6"/><path d="M10 13.5 8 16l2 2.5"/><path d="m14 13.5 2 2.5-2 2.5"/></svg>`:e===`generate_image`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.1-3.1a2 2 0 0 0-2.8 0L6 21"/><path d="m14 19.5-2-2a2 2 0 0 0-2.8 0L5.5 21"/></svg>`:e===`read_skill_resource`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 7v14"/><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3Z"/></svg>`:e===`run_command`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="4 17 10 11 4 5"/><line x1="12" x2="20" y1="19" y2="19"/></svg>`:e===`run_subagent`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 8V4H8"/><rect width="16" height="12" x="4" y="8" rx="2"/><path d="M2 14h2"/><path d="M20 14h2"/><path d="M15 13v2"/><path d="M9 13v2"/></svg>`:e===`activate_skill`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.9 2.1 8.5 8.5 2.1 9.9l6.4 1.4 1.4 6.4 1.4-6.4 6.4-1.4-6.4-1.4Z"/><path d="M19 15v4"/><path d="M21 17h-4"/></svg>`:i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.8-3.8a6 6 0 0 1-7.9 7.9l-6.9 6.9a2.1 2.1 0 0 1-3-3l6.9-6.9a6 6 0 0 1 7.9-7.9Z"/></svg>`}function ye(e){return e===`error`?`text-destructive`:e===`running`?`text-primary animate-spin`:e===`done`?`text-emerald-600 dark:text-emerald-500`:`text-muted-foreground/70`}function be(e){let t=`quickforge-tool-status-icon shrink-0 ${ye(e)}`,n=d(e);return e===`running`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><path d="M21 12a9 9 0 1 1-6.2-8.6"/></svg>`:e===`done`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><path d="M22 11.1V12a10 10 0 1 1-5.9-9.1"/><path d="m9 11 3 3L22 4"/></svg>`:e===`error`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><circle cx="12" cy="12" r="10"/><path d="m15 9-6 6"/><path d="m9 9 6 6"/></svg>`:i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="2" fill="currentColor" stroke="none"/></svg>`}function xe(e,t){return i`
|
|
41
|
+
<span class="${e===`done`?`quickforge-tool-meta-hover`:`quickforge-tool-meta-important`} shrink-0 inline-flex items-center gap-1.5" title=${d(e)}>
|
|
42
|
+
${be(e)}${V(t,e)}
|
|
43
43
|
</span>
|
|
44
|
-
`}function
|
|
44
|
+
`}function Se(e,t,n){if(e!==`run_command`||t!==`running`)return r;let{sessionId:a,toolCallId:o}=ue(n);return!a||!o?r:i`
|
|
45
45
|
<button
|
|
46
46
|
type="button"
|
|
47
47
|
class="shrink-0 inline-flex size-5 items-center justify-center text-foreground transition-opacity hover:opacity-70 disabled:cursor-not-allowed disabled:opacity-40"
|
|
48
|
-
title=${
|
|
49
|
-
aria-label=${
|
|
50
|
-
@click=${e=>{e.preventDefault(),e.stopPropagation(),
|
|
48
|
+
title=${d(`terminateCommandTitle`)}
|
|
49
|
+
aria-label=${d(`terminateCommandTitle`)}
|
|
50
|
+
@click=${e=>{e.preventDefault(),e.stopPropagation(),de(a,o,e.currentTarget)}}
|
|
51
51
|
><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="7" width="10" height="10" rx="2.4"/></svg></button>
|
|
52
|
-
`}var
|
|
52
|
+
`}var Ce=`quickforge:preview-artifact`;function W(e,t){let n=t===`html`||t===`image`||t===`markdown`||t===`code`||t===`unknown`?t:void 0;return S(e,n)?{path:e,kind:n}:void 0}function we(e,t){if(e===`write_file`||e===`edit_file`){let e=t&&`path`in t&&typeof t.path==`string`?t.path:``;return e?W(e):void 0}if(e===`present_files`){let e=(t&&Array.isArray(t.files)?t.files:[]).map(e=>{if(typeof e==`string`)return{path:e,kind:void 0};if(!(!R(e)||typeof e.path!=`string`))return{path:e.path,kind:typeof e.kind==`string`?e.kind:void 0}}).filter(e=>!!e),n=t&&typeof t.defaultPreview==`string`?t.defaultPreview:``,r=e.find(e=>e.path===n);if(r){let e=W(r.path,r.kind);if(e)return e}for(let t of e){let e=W(t.path,t.kind);if(e)return e}}}function G(e,t){let n=we(e,t);return n?i`
|
|
53
53
|
<button
|
|
54
54
|
type="button"
|
|
55
55
|
class="shrink-0 inline-flex size-5 items-center justify-center text-muted-foreground transition-colors hover:text-foreground"
|
|
56
|
-
title=${
|
|
57
|
-
aria-label=${
|
|
58
|
-
@click=${e=>{e.preventDefault(),e.stopPropagation(),window.dispatchEvent(new CustomEvent(
|
|
56
|
+
title=${d(`previewArtifact`)}
|
|
57
|
+
aria-label=${d(`previewArtifact`)}
|
|
58
|
+
@click=${e=>{e.preventDefault(),e.stopPropagation(),window.dispatchEvent(new CustomEvent(Ce,{detail:n}))}}
|
|
59
59
|
><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg></button>
|
|
60
|
-
`:r}function
|
|
60
|
+
`:r}function Te(e,t){return R(t)&&typeof t.label==`string`&&t.label?t.label:e===`general`?d(`subagentGeneral`):e===`explore`?d(`subagentExplore`):e||d(`runSubagent`)}function Ee(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function De(e){return Array.isArray(e)?e:[]}var K=new Map,q=200;function J(e,t){if(e){if(!K.has(e)&&K.size>=q){let e=K.keys().next().value;e&&K.delete(e)}K.set(e,t)}}function Oe(e,t,n){let{toolCallId:r}=ue(n);return r||`${e}:${I(t)}`}var ke=new Map,Ae=100;function je(e,t){if(e){if(!ke.has(e)&&ke.size>=Ae){let e=ke.keys().next().value;e&&ke.delete(e)}ke.set(e,t)}}var Me=class{render(e,t,n){let a=F(t,n),o=u(t?.details),s=R(t?.details)?t.details:void 0,c=typeof e?.subagent==`string`?e.subagent:typeof s?.subagent==`string`?s.subagent:``,l=Te(c,s),p=typeof e?.task==`string`?e.task:``,m=typeof e?.context==`string`?e.context:``,h=typeof e?.expectedOutput==`string`?e.expectedOutput:``,g=typeof s?.toolCalls==`number`?s.toolCalls:void 0,_=Ee(s?.allowedTools),v=De(s?.messages),y=De(s?.tools),b=new Set(Ee(s?.pendingToolCalls)),x=f().toolDisplayMode===`detailed`,S=ne(v),C=x?I(e):``,w=x?I(t?.details):``,T=L(t),E=typeof s?.sessionId==`string`?s.sessionId:`${c}:${p}`,D=ke.get(E)??x,ee=a===`running`?d(`subagentRunning`,{name:l}):a===`done`?d(`subagentCompleted`,{name:l}):a===`error`?d(`subagentFailed`,{name:l}):d(`runSubagent`);return{isCustom:!1,content:i`
|
|
61
61
|
<details class="group/tool quickforge-subagent-tool" ?open=${D} @toggle=${e=>{e.isTrusted&&je(E,e.currentTarget.open)}}>
|
|
62
62
|
<summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
|
|
63
|
-
${
|
|
63
|
+
${U(`run_subagent`)}
|
|
64
64
|
<span class="quickforge-subagent-title min-w-0">
|
|
65
65
|
<span class="quickforge-subagent-label">${ee}</span>
|
|
66
66
|
<svg class="quickforge-subagent-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
|
|
67
|
-
${
|
|
67
|
+
${xe(a,o)}
|
|
68
68
|
</span>
|
|
69
69
|
</summary>
|
|
70
70
|
<div class="mt-3 space-y-3">
|
|
71
|
-
${
|
|
72
|
-
${
|
|
73
|
-
${
|
|
74
|
-
${
|
|
71
|
+
${p||m||h?i`<div class="quickforge-subagent-task space-y-1 rounded-lg border border-border bg-background/60 px-3 py-2 text-xs leading-relaxed text-muted-foreground/70">
|
|
72
|
+
${p?i`<div><span class="font-medium text-foreground/75">${d(`subagentTask`)}:</span> ${p}</div>`:r}
|
|
73
|
+
${m?i`<div><span class="font-medium text-foreground/75">${d(`subagentContext`)}:</span> ${m}</div>`:r}
|
|
74
|
+
${h?i`<div><span class="font-medium text-foreground/75">${d(`subagentExpectedOutput`)}:</span> ${h}</div>`:r}
|
|
75
75
|
</div>`:r}
|
|
76
|
-
${
|
|
76
|
+
${x?i`<div class="quickforge-subagent-summary rounded-lg border border-border/75 bg-muted/20 px-3 py-2.5 text-sm">
|
|
77
77
|
<div class="flex flex-wrap items-center gap-x-3 gap-y-1 text-muted-foreground">
|
|
78
78
|
<span class="font-medium text-foreground/85">${l}</span>
|
|
79
|
-
${
|
|
80
|
-
${o?i`<span>${
|
|
79
|
+
${g===void 0?r:i`<span>${d(`subagentToolCalls`)}: ${g}</span>`}
|
|
80
|
+
${o?i`<span>${V(o,a)}</span>`:r}
|
|
81
81
|
</div>
|
|
82
|
-
${
|
|
82
|
+
${_.length>0?i`<div class="mt-2 flex flex-wrap gap-1.5">${_.map(e=>i`<span class="rounded-full bg-background/80 px-2 py-0.5 text-[11px] text-muted-foreground/80">${e}</span>`)}</div>`:r}
|
|
83
83
|
</div>`:r}
|
|
84
|
-
${
|
|
85
|
-
${T&&
|
|
86
|
-
${C?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${
|
|
87
|
-
${w?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${
|
|
84
|
+
${S.length>0?i`<div class="quickforge-subagent-trace rounded-lg border border-border bg-background/60 p-2.5"><message-list data-quickforge-subagent-process="true" data-quickforge-subagent-streaming=${String(a===`running`)} .messages=${S} .tools=${y} .pendingToolCalls=${b} .isStreaming=${!1}></message-list></div>`:r}
|
|
85
|
+
${T&&S.length===0?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`subagentResult`)}</div><code-block .code=${T} language="text"></code-block></div>`:r}
|
|
86
|
+
${C?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`input`)}</div><code-block .code=${C} language="json"></code-block></div>`:r}
|
|
87
|
+
${w?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`details`)}</div><code-block .code=${w} language="json"></code-block></div>`:r}
|
|
88
88
|
</div>
|
|
89
89
|
</details>
|
|
90
|
-
`}}},Ne=class{render(e,t,n){let a=
|
|
90
|
+
`}}},Ne=class{render(e,t,n){let a=F(t,n),o=u(t?.details),s=j(t?.details),c=se(`generate_image`,e,t),l=L(t),f=s?.model||(typeof e?.model==`string`?e.model:``);return{isCustom:!0,content:i`
|
|
91
91
|
<div class="quickforge-generated-image-tool space-y-3">
|
|
92
92
|
<div class="flex items-center gap-2 text-sm text-muted-foreground">
|
|
93
|
-
${
|
|
94
|
-
<span class="min-w-0 flex-1 truncate">${
|
|
95
|
-
${
|
|
93
|
+
${U(`generate_image`)}
|
|
94
|
+
<span class="min-w-0 flex-1 truncate">${d(`generateImage`)}${c?i`<span class="text-muted-foreground/70"> · ${c}</span>`:r}</span>
|
|
95
|
+
${xe(a,o)}
|
|
96
96
|
</div>
|
|
97
97
|
${s?i`
|
|
98
98
|
<div class=${s.assets.length>1?`grid grid-cols-1 gap-3 sm:grid-cols-2`:`grid grid-cols-1 gap-3`}>
|
|
99
|
-
${s.assets.map((e,t)=>{let n=
|
|
99
|
+
${s.assets.map((e,t)=>{let n=ie(s,e),r=d(`generatedImageAlt`,{index:t+1});return i`
|
|
100
100
|
<figure class="overflow-hidden rounded-lg border border-border bg-background/60">
|
|
101
|
-
<a href=${n} target="_blank" rel="noopener noreferrer" title=${
|
|
101
|
+
<a href=${n} target="_blank" rel="noopener noreferrer" title=${d(`openGeneratedImage`)} aria-label=${d(`openGeneratedImage`)}>
|
|
102
102
|
<img class="block max-h-[32rem] w-full object-contain" src=${n} alt=${r} loading="lazy" referrerpolicy="no-referrer" />
|
|
103
103
|
</a>
|
|
104
104
|
<figcaption class="flex items-center gap-2 border-t border-border px-3 py-2 text-xs text-muted-foreground">
|
|
105
|
-
<span class="min-w-0 flex-1 truncate">${
|
|
106
|
-
<a class="text-muted-foreground transition-colors hover:text-foreground" href=${n} download=${e.assetId} title=${
|
|
105
|
+
<span class="min-w-0 flex-1 truncate">${f||e.mimeType}</span>
|
|
106
|
+
<a class="text-muted-foreground transition-colors hover:text-foreground" href=${n} download=${e.assetId} title=${d(`downloadGeneratedImage`)} aria-label=${d(`downloadGeneratedImage`)}>${d(`downloadGeneratedImage`)}</a>
|
|
107
107
|
</figcaption>
|
|
108
108
|
</figure>
|
|
109
109
|
`})}
|
|
110
110
|
</div>
|
|
111
111
|
${s.text?i`<div class="text-sm leading-relaxed text-muted-foreground">${s.text}</div>`:r}
|
|
112
112
|
`:a===`running`?i`
|
|
113
|
-
<div class="rounded-lg border border-border bg-background/60 px-3 py-6 text-center text-sm text-muted-foreground">${
|
|
113
|
+
<div class="rounded-lg border border-border bg-background/60 px-3 py-6 text-center text-sm text-muted-foreground">${d(`generatingImage`)}</div>
|
|
114
114
|
`:l?i`<code-block .code=${l} language="text"></code-block>`:r}
|
|
115
115
|
</div>
|
|
116
|
-
`}}},Pe=class{toolName;labelKey;constructor(e,t){this.toolName=e,this.labelKey=t}render(e,t,n){let r=
|
|
117
|
-
<details class="group/tool quickforge-local-tool" ?open=${
|
|
116
|
+
`}}},Pe=class{toolName;labelKey;constructor(e,t){this.toolName=e,this.labelKey=t}render(e,t,n){let r=F(t,n),a=u(t?.details),o=se(this.toolName,e,t),s=f().toolDisplayMode===`detailed`,c=s?I(e):``,l=z(this.toolName,e,t,n),p=ce(t?.details),m=s?I(p?le(t?.details):t?.details):``,h=Oe(this.toolName,e,t?.details),g=K.get(h)??s,_=t?.isError?`error`:`default`;return{isCustom:!0,content:i`
|
|
117
|
+
<details class="group/tool quickforge-local-tool" ?open=${g} @toggle=${e=>{e.isTrusted&&J(h,e.currentTarget.open)}}>
|
|
118
118
|
<summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
|
|
119
|
-
${
|
|
119
|
+
${U(this.toolName)}
|
|
120
120
|
<span class="quickforge-tool-title min-w-0">
|
|
121
|
-
<span class="quickforge-tool-label">${
|
|
121
|
+
<span class="quickforge-tool-label">${d(this.labelKey)}${o?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${o}</span>`:``}</span>
|
|
122
122
|
<svg class="quickforge-tool-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
|
|
123
|
-
${
|
|
124
|
-
${
|
|
123
|
+
${me(this.toolName,p)}
|
|
124
|
+
${xe(r,a)}
|
|
125
125
|
</span>
|
|
126
126
|
<span class="quickforge-tool-actions ml-auto inline-flex shrink-0 items-center gap-1">
|
|
127
|
-
${
|
|
128
|
-
${
|
|
127
|
+
${G(this.toolName,e)}
|
|
128
|
+
${Se(this.toolName,r,t?.details)}
|
|
129
129
|
</span>
|
|
130
130
|
</summary>
|
|
131
131
|
<div class="mt-3 space-y-3">
|
|
132
|
-
${c?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${
|
|
133
|
-
${l?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${
|
|
134
|
-
${
|
|
135
|
-
${
|
|
132
|
+
${c?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`input`)}</div><code-block .code=${c} language="json"></code-block></div>`:``}
|
|
133
|
+
${l?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`output`)}</div>${this.toolName===`run_command`?i`<console-block .content=${l} .variant=${_}></console-block>`:i`<code-block .code=${l} language="text"></code-block>`}</div>`:``}
|
|
134
|
+
${p?he(p):``}
|
|
135
|
+
${m?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`details`)}</div><code-block .code=${m} language="json"></code-block></div>`:``}
|
|
136
136
|
</div>
|
|
137
137
|
</details>
|
|
138
|
-
`}}};function Fe(e){if(!e.startsWith(`mcp__`))return null;let t=e.slice(5),n=t.indexOf(`__`);return n<=0||n>=t.length-2?null:{serverName:t.slice(0,n),toolName:t.slice(n+2)}}function Ie(e,t){let n=Fe(e),r=
|
|
139
|
-
<details class="group/tool quickforge-mcp-tool" ?open=${
|
|
138
|
+
`}}};function Fe(e){if(!e.startsWith(`mcp__`))return null;let t=e.slice(5),n=t.indexOf(`__`);return n<=0||n>=t.length-2?null:{serverName:t.slice(0,n),toolName:t.slice(n+2)}}function Ie(e,t){let n=Fe(e),r=R(t)?t:void 0,i=typeof r?.server==`string`&&r.server?r.server:n?.serverName??``,a=typeof r?.tool==`string`&&r.tool?r.tool:n?.toolName??e;return n||r?.mcp===!0?{serverName:i,toolName:a}:null}function Le(e){if(!e)return`text`;try{return JSON.parse(e),`json`}catch{return`text`}}var Re=class{toolName;label;constructor(e,t){this.toolName=e,this.label=t}render(e,t,n){let a=F(t,n),o=u(t?.details),s=Ie(this.toolName,t?.details)??Fe(this.toolName),c=s?.serverName??``,l=s?.toolName??this.toolName,p=se(this.toolName,e,t),m=f().toolDisplayMode===`detailed`,h=m?I(e):``,g=z(this.toolName,e,t,n),_=m?I(t?.details):``,v=Oe(this.toolName,e,t?.details),y=K.get(v)??m,b=this.label&&this.label!==l?`${this.label} (${l})`:l;return{isCustom:!1,content:i`
|
|
139
|
+
<details class="group/tool quickforge-mcp-tool" ?open=${y} @toggle=${e=>{e.isTrusted&&J(v,e.currentTarget.open)}}>
|
|
140
140
|
<summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
|
|
141
|
-
${
|
|
141
|
+
${U(this.toolName)}
|
|
142
142
|
<span class="quickforge-tool-title min-w-0">
|
|
143
|
-
<span class="quickforge-tool-label">MCP${c?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${c}</span>`:r}<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${
|
|
143
|
+
<span class="quickforge-tool-label">MCP${c?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${c}</span>`:r}<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${b}</span>${p?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${p}</span>`:r}</span>
|
|
144
144
|
<svg class="quickforge-tool-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
|
|
145
|
-
${
|
|
145
|
+
${xe(a,o)}
|
|
146
146
|
</span>
|
|
147
147
|
</summary>
|
|
148
148
|
<div class="mt-3 space-y-3">
|
|
149
|
-
${
|
|
150
|
-
${
|
|
151
|
-
${
|
|
149
|
+
${h?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`input`)}</div><code-block .code=${h} language="json"></code-block></div>`:r}
|
|
150
|
+
${g?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`output`)}</div><code-block .code=${g} language=${Le(g)}></code-block></div>`:r}
|
|
151
|
+
${_?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${d(`details`)}</div><code-block .code=${_} language="json"></code-block></div>`:r}
|
|
152
152
|
</div>
|
|
153
153
|
</details>
|
|
154
|
-
`}}},ze=new Set;function Be(e){for(let t of e){if(!
|
|
154
|
+
`}}},ze=new Set;function Be(e){for(let t of e){if(!R(t)||typeof t.name!=`string`||!Fe(t.name)||ze.has(t.name))continue;let e=typeof t.label==`string`?t.label:typeof t.description==`string`?t.description.replace(/^\[MCP:[^\]]+\]\s*/,``):void 0;c(t.name,new Re(t.name,e)),ze.add(t.name)}}for(let[e,t]of[[`manage_global_memory`,`manageGlobalMemory`],[`read_file`,`readFile`],[`grep_files`,`searchFiles`],[`write_file`,`writeFile`],[`edit_file`,`editFile`],[`run_command`,`runCommand`],[`present_files`,`presentFiles`],[`activate_skill`,`activateSkill`],[`read_skill_resource`,`readSkillResource`]])c(e,new Pe(e,t));c(`run_subagent`,new Me),c(`generate_image`,new Ne);function Ve(e=[]){return Be(e),e}function He({panel:e}){let t=!0,n,r=0,i,a=-1/0,o=-1/0,s,c=()=>e.querySelector(`agent-interface .overflow-y-auto`),l=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=80,u=t=>{e.querySelector(`agent-interface`)?.setAutoScroll?.(t)},d=()=>{let e=Math.max(a,o);return window.performance.now()-e<=500},f=()=>{n!==void 0&&(window.cancelAnimationFrame(n),n=void 0),t=!1,u(!1)},p=()=>{a=window.performance.now(),f()},m=()=>{o=window.performance.now()},h=()=>{let e=c();if(!e||!t)return;let n=e.scrollHeight-e.clientHeight;if(Math.abs(e.scrollTop-n)<=1){r=e.scrollTop;return}e.scrollTop=e.scrollHeight,r=e.scrollTop},g=()=>{n===void 0&&(n=window.requestAnimationFrame(()=>{n=void 0,h(),window.requestAnimationFrame(h)}))},_=()=>{t=!0,u(!0),g()},v=()=>{let e=c();if(!e)return;let n=e.scrollTop,i=n<r-1,a=i&&d();if(i&&t&&!a&&!l(e)){r=n,g();return}a?f():l(e)&&(t=!0,u(!0)),r=n},y=e=>{e.deltaY<0&&p()},b=e=>{e.target===e.currentTarget&&m()},x=e=>{(e.key===`ArrowUp`||e.key===`PageUp`||e.key===`Home`)&&p()},S=e=>{i=e.touches[0]?.clientY},C=e=>{let t=e.touches[0]?.clientY;t===void 0||i===void 0||(t>i+1&&p(),i=t)};return{get isEnabled(){return t},enable:_,disable:f,scheduleScrollToBottom:g,setup:()=>{let n=c();if(!n||s)return;r=n.scrollTop,n.addEventListener(`scroll`,v,{passive:!0}),n.addEventListener(`wheel`,y,{passive:!0}),n.addEventListener(`pointerdown`,b,{passive:!0}),n.addEventListener(`keydown`,x),n.addEventListener(`touchstart`,S,{passive:!0}),n.addEventListener(`touchmove`,C,{passive:!0}),s=new ResizeObserver(()=>{t&&g()}),s.observe(n);let i=n.querySelector(`.max-w-3xl`);i&&s.observe(i);let a=e.querySelector(`.quickforge-composer-dock`);a&&s.observe(a),_()},cleanup:()=>{let e=c();e?.removeEventListener(`scroll`,v),e?.removeEventListener(`wheel`,y),e?.removeEventListener(`pointerdown`,b),e?.removeEventListener(`keydown`,x),e?.removeEventListener(`touchstart`,S),e?.removeEventListener(`touchmove`,C),s?.disconnect(),s=void 0,n!==void 0&&(window.cancelAnimationFrame(n),n=void 0)}}}function Ue({panel:e,getCustomCommands:t,restoreDraftIntoComposer:n}){let r=e=>`/${e.name}${e.argumentHint?` ${e.argumentHint}`:``}`,i=()=>[{name:`init`,description:d(`initCommandDescription`),argumentHint:``},{name:`plan`,description:d(`planCommandDescription`),argumentHint:`[task]`},{name:`review`,description:d(`reviewCommandDescription`),argumentHint:`[scope]`},{name:`summary`,description:d(`summaryCommandDescription`),argumentHint:``},{name:`compact`,description:d(`compactCommandDescription`),argumentHint:``},{name:`clear`,description:d(`clearCommandDescription`),argumentHint:``},{name:`help`,description:d(`helpCommandDescription`),argumentHint:``}],a=()=>{let n=(e.querySelector(`.quickforge-command-suggestions`)?.querySelector(`.quickforge-command-suggestion-item`))?.dataset.quickforgeCommandName;if(n)return[...i(),...t()].find(e=>e.name===n)},o=()=>{let t=e.querySelector(`.quickforge-command-suggestions`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove()},s=t=>{let r=e.querySelector(`message-editor`),i=`/${t.name}${t.argumentHint?` `:``}`;n({text:i,attachments:[]});let a=r?.querySelector(`textarea`);a?.focus(),a&&(a.selectionStart=i.length,a.selectionEnd=i.length),o()};return{update:n=>{let a=e.querySelector(`message-editor`),c=n??a?.value??a?.querySelector(`textarea`)?.value??``,l=a?.querySelector(`textarea`),u=e.querySelector(`.quickforge-command-suggestions`);if(!a||!l||!c.startsWith(`/`)){u?.remove();return}let f=c.slice(1).trim().toLowerCase(),p=t(),m=[...i(),...p].filter(e=>e.name.includes(f)||e.description?.toLowerCase().includes(f));if(m.length===0){u?.remove();return}let h=u??document.createElement(`div`);h.className=`quickforge-command-suggestions`,h.setAttribute(`role`,`listbox`),h.innerHTML=``;let g=document.createElement(`div`);g.className=`quickforge-command-suggestions-header`,g.textContent=d(p.length?`customCommandsHint`:`customCommandsEmptyHint`),h.append(g);for(let e of m){let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-command-suggestion-item`,t.dataset.quickforgeCommandName=e.name,t.setAttribute(`role`,`option`),t.innerHTML=`
|
|
155
155
|
<span class="quickforge-command-suggestion-name"></span>
|
|
156
156
|
<span class="quickforge-command-suggestion-description"></span>
|
|
157
|
-
`,t.querySelector(`.quickforge-command-suggestion-name`).textContent=r(e),t.querySelector(`.quickforge-command-suggestion-description`).textContent=e.description??``,t.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),s(e)},
|
|
157
|
+
`,t.querySelector(`.quickforge-command-suggestion-name`).textContent=r(e),t.querySelector(`.quickforge-command-suggestion-description`).textContent=e.description??``,t.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),s(e)},h.append(t)}u||a.parentElement?.insertBefore(h,a),h.__quickforgeDismissHandler||(h.__quickforgeDismissHandler=e=>{h.contains(e.target)||a.contains(e.target)||o()},document.addEventListener(`pointerdown`,h.__quickforgeDismissHandler,!0))},remove:o,setupTextareaHandler:e=>{let t=e?.querySelector(`textarea`);if(!t)return;let n=t;n.__quickforgeCommandCompleteHandler&&n.removeEventListener(`keydown`,n.__quickforgeCommandCompleteHandler,!0),n.__quickforgeCommandCompleteHandler=t=>{if(t.isComposing||t.key===`Process`)return;if(t.key===`Enter`&&t.shiftKey){t.stopImmediatePropagation();return}if(t.key!==`Tab`||!(e?.value??n.value??``).startsWith(`/`)||t.shiftKey)return;let r=a();r&&(t.preventDefault(),t.stopPropagation(),s(r))},n.addEventListener(`keydown`,n.__quickforgeCommandCompleteHandler,!0)},cleanupTextareaHandler:()=>{let t=e.querySelector(`message-editor textarea`);t?.__quickforgeCommandCompleteHandler&&t.removeEventListener(`keydown`,t.__quickforgeCommandCompleteHandler,!0)}}}var We={plugin:`
|
|
158
158
|
<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
159
159
|
<path d="M7.4 3.2h5.2a1.2 1.2 0 0 1 1.2 1.2v2.1h.9a2.1 2.1 0 1 1 0 4.2h-.9v2.1a1.2 1.2 0 0 1-1.2 1.2h-2.1v.7a2.1 2.1 0 1 1-4.2 0V14H4.4a1.2 1.2 0 0 1-1.2-1.2V9.9h.8a1.8 1.8 0 1 0 0-3.6h-.8V4.4a1.2 1.2 0 0 1 1.2-1.2h2.1v-.8a1.8 1.8 0 1 1 3.6 0v.8Z" />
|
|
160
160
|
</svg>`,document:`
|
|
@@ -188,7 +188,7 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Pt as t}from"./icons-B
|
|
|
188
188
|
<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
189
189
|
<path d="m5 6 4 4-4 4" />
|
|
190
190
|
<path d="M10.5 14h4.5" />
|
|
191
|
-
</svg>`};function Ge(e){return e.split(/[-_/\\]+/).filter(Boolean).map(e=>e&&`${e[0].toUpperCase()}${e.slice(1)}`).join(` `)}function Ke(e){switch(e.name){case`openai-documents`:return{label:
|
|
191
|
+
</svg>`};function Ge(e){return e.split(/[-_/\\]+/).filter(Boolean).map(e=>e&&`${e[0].toUpperCase()}${e.slice(1)}`).join(` `)}function Ke(e){switch(e.name){case`openai-documents`:return{label:d(`pluginOpenaiDocumentsName`),description:d(`pluginOpenaiDocumentsDescription`),mention:`Documents`,iconKind:`document`};case`openai-spreadsheets`:return{label:d(`pluginOpenaiSpreadsheetsName`),description:d(`pluginOpenaiSpreadsheetsDescription`),mention:`Spreadsheets`,iconKind:`spreadsheet`};case`openai-presentations`:return{label:d(`pluginOpenaiPresentationsName`),description:d(`pluginOpenaiPresentationsDescription`),mention:`Presentations`,iconKind:`presentation`};default:return null}}function qe(e){let t=Ke(e);return t?t.label:(e.displayName||Ge(e.name.replace(/^openai-/,``))).replace(/^OpenAI\s+/i,``)}function Je(e){let t=Ke(e),n=t?.label??qe(e),r=t?.mention??n.replace(/\s+/g,``);return[{type:`plugin`,iconKind:t?.iconKind??`plugin`,pluginName:e.name,name:e.name,label:n,mention:r,insertText:r,description:t?.description??e.description}]}function Ye(e,t){let n=e.slice(0,t),r=/(^|\s)@([^\s@]*)$/.exec(n);if(!r)return null;let i=r[1]?.length??0;return{start:n.length-r[0].length+i,end:t,query:r[2]??``}}function Xe(e){let t=new Set,n=/(^|\s)@([\p{L}\p{N}_-]+)/gu,r;for(;r=n.exec(e);)t.add((r[2]||``).toLowerCase());return t}function Ze({panel:e,restoreDraftIntoComposer:t,onSelectionChange:n}){let r=[],i=null,a=new Map,o=()=>n?.([...a.values()]),s=()=>i||(i=C().then(e=>{r=(e.plugins??[]).filter(e=>e.enabled&&e.status===`loaded`)}).catch(()=>{r=[]}).finally(()=>{i=null}),i);s();let c=()=>r.flatMap(Je),l=()=>{let t=(e.querySelector(`.quickforge-capability-suggestions`)?.querySelector(`.quickforge-capability-suggestion-item`))?.dataset.quickforgeCapabilityKey;if(t)return c().find(e=>Qe(e)===t)},u=()=>{let t=e.querySelector(`.quickforge-capability-suggestions`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove()},f=(n,r)=>{let i=e.querySelector(`message-editor`),s=i?.querySelector(`textarea`),c=i?.value??s?.value??``,l=s?.selectionStart??c.length,d=r??Ye(c,l),f=`@${n.insertText}`,p=d?`${c.slice(0,d.start)}${f} ${c.slice(d.end)}`:`${c}${c.endsWith(` `)||c.length===0?``:` `}${f} `,m=d?d.start+f.length+1:p.length;a.set(Qe(n),n),o(),t({text:p,attachments:i?.attachments?[...i.attachments]:[]});let h=i?.querySelector(`textarea`);h?.focus(),h&&(h.selectionStart=m,h.selectionEnd=m),u()},p=e=>{let t=()=>{let t=c().find(t=>t.insertText===e);t&&f(t)};if(r.length===0){s().then(t);return}t()},m=t=>{let n=e.querySelector(`message-editor`),i=n?.querySelector(`textarea`),a=t??n?.value??i?.value??``,o=Ye(a,i?.selectionStart??a.length),l=e.querySelector(`.quickforge-capability-suggestions`);if(!n||!i||!o){l?.remove();return}r.length===0&&s().then(()=>m(t));let p=o.query.toLowerCase(),h=c().filter(e=>[e.label,e.name,e.pluginName,e.description].filter(Boolean).join(` `).toLowerCase().includes(p)).slice(0,8);if(h.length===0){l?.remove();return}let g=l??document.createElement(`div`);g.className=`quickforge-capability-suggestions`,g.setAttribute(`role`,`listbox`),g.innerHTML=``;let _=document.createElement(`div`);_.className=`quickforge-capability-suggestions-header`,_.textContent=d(`pluginMentionHeader`),g.append(_);for(let e of h){let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-capability-suggestion-item`,t.dataset.quickforgeCapabilityKey=Qe(e),t.dataset.quickforgePluginName=e.pluginName,t.setAttribute(`role`,`option`),t.innerHTML=`
|
|
192
192
|
<span class="quickforge-capability-suggestion-icon quickforge-capability-suggestion-icon-${e.iconKind}">${We[e.iconKind]}</span>
|
|
193
193
|
<span class="quickforge-capability-suggestion-main">
|
|
194
194
|
<span class="quickforge-capability-suggestion-line">
|
|
@@ -196,56 +196,56 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Pt as t}from"./icons-B
|
|
|
196
196
|
</span>
|
|
197
197
|
<span class="quickforge-capability-suggestion-description"></span>
|
|
198
198
|
</span>
|
|
199
|
-
`,t.querySelector(`.quickforge-capability-suggestion-name`).textContent=e.label,t.querySelector(`.quickforge-capability-suggestion-description`).textContent=e.description??e.pluginName,t.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),
|
|
199
|
+
`,t.querySelector(`.quickforge-capability-suggestion-name`).textContent=e.label,t.querySelector(`.quickforge-capability-suggestion-description`).textContent=e.description??e.pluginName,t.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),f(e,o)},g.append(t)}l||n.parentElement?.insertBefore(g,n),g.__quickforgeDismissHandler||(g.__quickforgeDismissHandler=e=>{g.contains(e.target)||n.contains(e.target)||u()},document.addEventListener(`pointerdown`,g.__quickforgeDismissHandler,!0))};return{update:m,remove:u,setupTextareaHandler:e=>{let t=e?.querySelector(`textarea`);if(!t)return;let n=t;n.__quickforgeCapabilityCompleteHandler&&n.removeEventListener(`keydown`,n.__quickforgeCapabilityCompleteHandler,!0),n.__quickforgeCapabilityCompleteHandler=t=>{if(t.isComposing||t.key===`Process`)return;if(t.key===`Escape`){u();return}if(t.key!==`Tab`&&t.key!==`Enter`)return;let r=e?.value??n.value??``,i=Ye(r,n.selectionStart??r.length);if(!i||t.shiftKey)return;let a=l();a&&(t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),f(a,i))},n.addEventListener(`keydown`,n.__quickforgeCapabilityCompleteHandler,!0)},cleanupTextareaHandler:()=>{let t=e.querySelector(`message-editor textarea`);t?.__quickforgeCapabilityCompleteHandler&&t.removeEventListener(`keydown`,t.__quickforgeCapabilityCompleteHandler,!0)},consumeSelectedCapabilities:e=>{let t=Xe(e),n=[...a.values()].filter(e=>t.has(e.mention.toLowerCase())),r=c().filter(e=>t.has(e.insertText.toLowerCase())||t.has(e.label.replace(/\s+/g,``).toLowerCase())),i=new Map;for(let e of[...n,...r])i.set(Qe(e),e);return a=new Map,o(),[...i.values()].slice(0,4)},insertBuiltinPluginMention:p}}function Qe(e){return`${e.type}:${e.pluginName}:${e.name}`}var Y=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`,$e=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>`,et=`<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/></svg>`,tt=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M18 9v1a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9"/><path d="M12 12v3"/></svg>`,nt=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 2v6h-6"/><path d="M3 12a9 9 0 0 1 15.36-5.64L21 9"/><path d="M3 22v-6h6"/><path d="M21 12a9 9 0 0 1-15.36 5.64L3 15"/></svg>`,rt=`<svg class="quickforge-plan-mode-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h1"/><path d="M4 12h1"/><path d="M4 18h1"/><path d="M9 6h11"/><path d="M9 12h11"/><path d="M9 18h11"/></svg>`,it=`<svg class="quickforge-plan-remove-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`,at=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14"/><path d="M5 12h14"/></svg>`,ot=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/></svg>`,st=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7.5 4.5h5a1.5 1.5 0 0 1 1.5 1.5v2h1a2.5 2.5 0 0 1 0 5h-1v2a1.5 1.5 0 0 1-1.5 1.5h-2v1a2.5 2.5 0 0 1-5 0v-1h-2A1.5 1.5 0 0 1 2 15.5v-3h1a2 2 0 1 0 0-4H2v-2A1.5 1.5 0 0 1 3.5 5h2v-1a2.5 2.5 0 0 1 5 0v.5Z"/></svg>`,ct=`<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round"><path d="M5.4 2.8h6.1L15.8 7v10.2H5.4z"/><path d="M11.4 2.9V7h4.1"/><path d="M7.6 10.2h5"/><path d="M7.6 13h4.3"/></svg>`,lt=`<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="4" width="13.2" height="12.2" rx="1.5"/><path d="M3.4 8h13.2"/><path d="M7.8 4v12.2"/><path d="M12.2 4v12.2"/><path d="M3.4 12h13.2"/></svg>`,ut=`<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round"><path d="M3 4.2h14"/><rect x="4.2" y="4.2" width="11.6" height="8.4" rx="1.2"/><path d="M10 12.6v3.2"/><path d="m7.2 17 2.8-1.2 2.8 1.2"/><path d="M7.1 9.5 9 7.7l1.5 1.3 2.4-2.5"/></svg>`,dt=`<svg class="quickforge-agent-access-trigger-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3 19 6v5c0 4.5-2.8 8.4-7 10-4.2-1.6-7-5.5-7-10V6l7-3Z"/><path d="M9 12h6"/></svg>`,ft=`<svg class="quickforge-agent-access-option-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>`,pt=`<svg class="quickforge-agent-access-check" xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>`,mt=`<svg class="quickforge-agent-access-chevron" xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>`;function ht(e){return d(e===`full-access`?`agentAccessFullLabel`:`agentAccessDefaultLabel`)}function gt(e){let t=document.querySelector(`.quickforge-agent-access-menu`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),document.removeEventListener(`keydown`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`resize`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`scroll`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove(),e.querySelector(`.quickforge-agent-access-inline`)?.setAttribute(`aria-expanded`,`false`)}function _t(e,t,n){let r=e===t,i=document.createElement(`button`);return i.type=`button`,i.className=`quickforge-agent-access-item`,i.setAttribute(`role`,`menuitemradio`),i.setAttribute(`aria-checked`,String(r)),i.dataset.quickforgeAgentAccessMode=e,i.innerHTML=`
|
|
200
200
|
<span class="quickforge-agent-access-check-slot">${r?pt:``}</span>
|
|
201
201
|
<span class="quickforge-agent-access-option-icon-wrap">${e===`full-access`?ft:dt}</span>
|
|
202
202
|
<span class="quickforge-agent-access-item-label"></span>
|
|
203
|
-
`,i.querySelector(`.quickforge-agent-access-item-label`).textContent=ht(e),i.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),n(e)},i}function vt(e){let{panel:t,trigger:n,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}=e;if(document.querySelector(`.quickforge-agent-access-menu`)){gt(t);return}a(),gt(t);let o=document.createElement(`div`);o.className=`quickforge-agent-access-menu`,o.setAttribute(`role`,`menu`),o.setAttribute(`aria-label`,
|
|
203
|
+
`,i.querySelector(`.quickforge-agent-access-item-label`).textContent=ht(e),i.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),n(e)},i}function vt(e){let{panel:t,trigger:n,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}=e;if(document.querySelector(`.quickforge-agent-access-menu`)){gt(t);return}a(),gt(t);let o=document.createElement(`div`);o.className=`quickforge-agent-access-menu`,o.setAttribute(`role`,`menu`),o.setAttribute(`aria-label`,d(`agentAccessMenuLabel`));let s=e=>{gt(t),e!==r&&i(e)};o.append(_t(`default`,r,s),_t(`full-access`,r,s));let c=()=>{let e=n.getBoundingClientRect(),t=Math.min(196,window.innerWidth-24);o.style.width=`${t}px`;let r=o.offsetHeight||96,i=Math.max(12,Math.min(e.left,window.innerWidth-t-12)),a=Math.max(12,e.top-r-8);o.style.left=`${i}px`,o.style.top=`${a}px`},l=e=>{if(e.type===`resize`||e.type===`scroll`){c();return}if(e instanceof KeyboardEvent){if(e.key!==`Escape`)return;e.preventDefault()}else{let t=e.target;if(o.contains(t)||n.contains(t))return}gt(t)};o.__quickforgeDismissHandler=l,o.addEventListener(`pointerdown`,e=>e.stopPropagation()),document.addEventListener(`pointerdown`,l,!0),document.addEventListener(`keydown`,l,!0),window.addEventListener(`resize`,l,!0),window.addEventListener(`scroll`,l,!0),document.body.append(o),c(),n.setAttribute(`aria-expanded`,`true`)}function yt(e){let{panel:t,leftControls:n,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}=e;n.classList.add(`quickforge-composer-left-controls`),t.querySelector(`.quickforge-yolo-inline`)?.remove();let o=ht(r),s=d(r===`full-access`?`agentAccessFullTitle`:`agentAccessDefaultTitle`),c=`${r===`full-access`?ft:dt}<span class="quickforge-agent-access-label"></span>${mt}`,l=`quickforge-agent-access-inline inline-flex h-8 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 text-xs font-medium text-muted-foreground${r===`full-access`?` quickforge-agent-access-inline-full`:``}`,u=n.querySelector(`.quickforge-agent-access-inline`),f=e=>{y(e,c),e.querySelector(`.quickforge-agent-access-label`).textContent=o,e.title=s,e.setAttribute(`aria-label`,s),e.setAttribute(`aria-haspopup`,`menu`),e.setAttribute(`aria-expanded`,document.querySelector(`.quickforge-agent-access-menu`)?`true`:`false`),e.dataset.quickforgeAgentAccessMode=r,e.className=l,e.onpointerdown=n=>{n.preventDefault(),n.stopPropagation(),vt({panel:t,trigger:e,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a})},e.onclick=e=>{e.preventDefault(),e.stopPropagation()},e.onkeydown=n=>{n.key!==`Enter`&&n.key!==` `&&n.key!==`ArrowDown`||(n.preventDefault(),vt({panel:t,trigger:e,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}))}};if(u)f(u);else{let e=document.createElement(`button`);e.type=`button`,f(e),n.append(e)}let p=n.querySelector(`.quickforge-agent-access-inline`),m=n.querySelector(`.quickforge-plan-inline`);p&&m&&p.nextSibling!==m&&n.insertBefore(m,p.nextSibling)}var bt=[{mention:`Documents`,nameKey:`pluginOpenaiDocumentsName`,descriptionKey:`pluginOpenaiDocumentsDescription`,pluginName:`openai-documents`,icon:ct},{mention:`Spreadsheets`,nameKey:`pluginOpenaiSpreadsheetsName`,descriptionKey:`pluginOpenaiSpreadsheetsDescription`,pluginName:`openai-spreadsheets`,icon:lt},{mention:`Presentations`,nameKey:`pluginOpenaiPresentationsName`,descriptionKey:`pluginOpenaiPresentationsDescription`,pluginName:`openai-presentations`,icon:ut}];function xt(e){let t=e.querySelector(`.quickforge-plus-popover`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove(),e.querySelector(`.quickforge-plus-inline`)?.setAttribute(`aria-expanded`,`false`)}function St(e,t){e.querySelectorAll(`.quickforge-native-attachment-hidden`).forEach(e=>{t.contains(e)||e.classList.remove(`quickforge-native-attachment-hidden`)})}function Ct(e){return e.querySelector(`.quickforge-native-attachment-hidden`)||Array.from(e.querySelectorAll(`button`)).find(e=>!e.classList.contains(`quickforge-plus-inline`)&&!e.classList.contains(`quickforge-agent-access-inline`)&&!e.classList.contains(`quickforge-yolo-inline`)&&!e.classList.contains(`quickforge-plan-inline`))}function wt(e,t){let n=e.querySelector(`input[type="file"]`);if(n){n.click();return}Ct(t)?.click()}function Tt({className:e,icon:t,label:n,description:r,pluginName:i,onSelect:a}){let o=document.createElement(`button`);o.type=`button`,o.className=`quickforge-plus-popover-item${e?` ${e}`:``}`,i&&(o.dataset.quickforgePluginName=i),o.innerHTML=`
|
|
204
204
|
<span class="quickforge-plus-popover-item-icon">${t}</span>
|
|
205
205
|
<span class="quickforge-plus-popover-item-main">
|
|
206
206
|
<span class="quickforge-plus-popover-item-label"></span>
|
|
207
207
|
${r?`<span class="quickforge-plus-popover-item-description"></span>`:``}
|
|
208
208
|
</span>
|
|
209
|
-
`,o.querySelector(`.quickforge-plus-popover-item-label`).textContent=n;let s=o.querySelector(`.quickforge-plus-popover-item-description`);return s&&r&&(s.textContent=r),o.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),a()},o}function Et(e,t){let{panel:n,editor:r,leftControls:i,insertBuiltinPluginMention:a,removeCommandSuggestions:o,removeCapabilitySuggestions:s}=e;o(),s();let c=n.querySelector(`.quickforge-plus-popover`)??document.createElement(`div`);c.className=`quickforge-plus-popover`,c.setAttribute(`role`,`menu`),c.innerHTML=``;let l=document.createElement(`div`);if(l.className=`quickforge-plus-popover-header`,l.textContent=
|
|
210
|
-
`).map(e=>{let t=
|
|
209
|
+
`,o.querySelector(`.quickforge-plus-popover-item-label`).textContent=n;let s=o.querySelector(`.quickforge-plus-popover-item-description`);return s&&r&&(s.textContent=r),o.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),a()},o}function Et(e,t){let{panel:n,editor:r,leftControls:i,insertBuiltinPluginMention:a,removeCommandSuggestions:o,removeCapabilitySuggestions:s}=e;o(),s();let c=n.querySelector(`.quickforge-plus-popover`)??document.createElement(`div`);c.className=`quickforge-plus-popover`,c.setAttribute(`role`,`menu`),c.innerHTML=``;let l=document.createElement(`div`);if(l.className=`quickforge-plus-popover-header`,l.textContent=d(t===`plugins`?`composerAddPlugins`:`composerAddMenu`),c.append(l),t===`main`)c.append(Tt({icon:ot,label:d(`composerAddAttachment`),onSelect:()=>{xt(n),wt(r,i)}}),Tt({icon:st,label:d(`composerAddPlugins`),onSelect:()=>Et(e,`plugins`)}));else{let t=Tt({className:`quickforge-plus-popover-back`,icon:`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 18-6-6 6-6"/></svg>`,label:d(`composerAddBack`),onSelect:()=>Et(e,`main`)});c.append(t);for(let e of bt)c.append(Tt({icon:e.icon,label:d(e.nameKey),description:d(e.descriptionKey),pluginName:e.pluginName,onSelect:()=>{a(e.mention),xt(n)}}))}c.isConnected||r.parentElement?.insertBefore(c,r),c.__quickforgeDismissHandler&&document.removeEventListener(`pointerdown`,c.__quickforgeDismissHandler,!0),c.__quickforgeDismissHandler=e=>{let t=e.target;c.contains(t)||n.querySelector(`.quickforge-plus-inline`)?.contains(t)||xt(n)},document.addEventListener(`pointerdown`,c.__quickforgeDismissHandler,!0),n.querySelector(`.quickforge-plus-inline`)?.setAttribute(`aria-expanded`,`true`)}function Dt(e){let{panel:t,editor:n,leftControls:r}=e;St(n,r),Ct(r)?.classList.add(`quickforge-native-attachment-hidden`);let i=r.querySelector(`.quickforge-plus-inline`),a=n=>{n.type=`button`,y(n,at),n.title=d(`composerAddMenu`),n.setAttribute(`aria-label`,d(`composerAddMenu`)),n.setAttribute(`aria-haspopup`,`menu`),n.setAttribute(`aria-expanded`,t.querySelector(`.quickforge-plus-popover`)?`true`:`false`),n.className=`quickforge-plus-inline inline-flex h-8 w-8 items-center justify-center rounded-md border border-transparent text-muted-foreground`,n.onpointerdown=n=>{n.preventDefault(),n.stopPropagation(),t.querySelector(`.quickforge-plus-popover`)?xt(t):Et(e,`main`)},n.onclick=e=>{e.preventDefault(),e.stopPropagation()}};if(i){a(i);return}let o=document.createElement(`button`);a(o),r.prepend(o)}function Ot(e){switch(e){case`low`:return d(`thinkingLow`);case`medium`:return d(`thinkingMedium`);case`high`:return d(`thinkingHigh`);case`xhigh`:return d(`thinkingXHigh`);default:return d(`thinkingOff`)}}function kt(e,t){let n=e,r=n?.currentModel;t.querySelector(`[data-quickforge-thinking-badge]`)?.remove();let i=Array.from(t.querySelectorAll(`button:not(.quickforge-agent-access-inline):not(.quickforge-yolo-inline):not(.quickforge-plan-inline)`)).find(e=>!!(r?.id&&e.textContent?.includes(r.id)));i&&(i.classList.add(`quickforge-model-trigger`),i.setAttribute(`aria-haspopup`,`menu`),i.setAttribute(`aria-expanded`,document.querySelector(`.quickforge-model-menu`)?`true`:`false`),r?.reasoning?i.dataset.quickforgeThinkingLevel=`· ${Ot(n?.thinkingLevel)}`:delete i.dataset.quickforgeThinkingLevel)}function At(e,t,n){let r=e?.querySelector(`textarea`);if(!r)return;let i=r;i.__quickforgePlanModeHandler&&i.removeEventListener(`keydown`,i.__quickforgePlanModeHandler,!0),i.__quickforgePlanModeHandler=e=>{e.isComposing||e.key===`Process`||e.key!==`Tab`||!e.shiftKey||(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),n())},i.addEventListener(`keydown`,i.__quickforgePlanModeHandler,!0),e&&(e.dataset.quickforgePlanMode=String(t))}function jt(e){let{panel:t,leftControls:n,planMode:r,onTogglePlanMode:i}=e,a=d(`planModeEnabledTitle`),o=`${rt}${it}<span>${d(`planModeLabel`)}</span>`,s=e=>{e.preventDefault(),e.stopPropagation(),i()},c=e=>{e.key!==`Enter`&&e.key!==` `||s(e)},l=t.querySelector(`.quickforge-plan-inline`),u=e=>{y(e,o),e.title=a,e.setAttribute(`aria-label`,a),e.setAttribute(`aria-pressed`,String(r)),e.className=`quickforge-plan-inline inline-flex h-8 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 text-xs font-medium text-muted-foreground`,e.onpointerdown=s,e.onclick=e=>{e.preventDefault(),e.stopPropagation()},e.onkeydown=c};if(!r)l?.remove();else if(l)u(l);else{let e=document.createElement(`button`);e.type=`button`,u(e);let t=n.querySelector(`.quickforge-agent-access-inline`);t?n.insertBefore(e,t.nextSibling):n.append(e)}}function Mt(e){let{rightControls:t,isStreaming:n,abort:r,removeCommandSuggestions:i}=e,a=t.querySelector(`button:last-child`);if(!a)return;let o=()=>{a.__quickforgeStopHandler&&=(a.removeEventListener(`pointerdown`,a.__quickforgeStopHandler,!0),a.removeEventListener(`click`,a.__quickforgeStopHandler,!0),void 0)};if(n())a.disabled=!1,a.classList.remove(`quickforge-send-button`),a.classList.add(`quickforge-stop-button`),a.title=`Stop`,a.setAttribute(`aria-label`,`Stop`),delete a.dataset.quickforgeSendIcon,v(a,`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><rect x="6" y="6" width="12" height="12" rx="2"/></svg>`),a.__quickforgeStopHandler||(a.__quickforgeStopHandler=e=>{e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),i(),r()},a.addEventListener(`pointerdown`,a.__quickforgeStopHandler,!0),a.addEventListener(`click`,a.__quickforgeStopHandler,!0));else if(o(),a.classList.remove(`quickforge-stop-button`),a.classList.add(`quickforge-send-button`),a.dataset.quickforgeSendIcon!==`arrow-up`){a.dataset.quickforgeSendIcon=`arrow-up`,v(a,`<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5"/><path d="m5 12 7-7 7 7"/></svg>`);let e=a.querySelector(`svg`)?.parentElement;e&&e!==a&&e.style.transform&&(e.style.transform=``)}}function Nt(e){let{editor:t,onInput:n,onFilesChange:r,removeCommandSuggestions:i,updateCommandSuggestions:a,removeCapabilitySuggestions:o,updateCapabilitySuggestions:s,onBeforeSend:c}=e;if(!t)return;t.onInput=e=>{n(e),a(e),s(e)},t.onFilesChange=e=>{r(e?[...e]:[])};let l=t.onSend;l&&l!==t.__quickforgePlanWrappedOnSend&&(t.__quickforgePlanBaseOnSend=l);let u=t.__quickforgePlanBaseOnSend;if(u){let e=(e,t)=>{let n=String(e??``);n.trim().length>0&&c?.(n),i(),o(),u(n,t)};t.__quickforgePlanWrappedOnSend=e,t.onSend=e}a(),s()}function Pt(e){let t=e.querySelector(`message-editor`),n=t?.querySelector(`textarea`);return{text:t?.value??n?.value??``,attachments:t?.attachments?[...t.attachments]:[]}}function Ft(e,t,n){let r=Pt(e);b(r)?t.set(n,r):t.delete(n)}function It(e,t,n,r){if(!b(t))return!1;let i={text:t.text,attachments:t.attachments?[...t.attachments]:[]},a=e.querySelector(`message-editor`),o=a?.querySelector(`textarea`);return!a&&!o?!1:(a&&(a.value=i.text,a.attachments=i.attachments,a.requestUpdate?.(),a.onInput?.(i.text),a.onFilesChange?.(i.attachments)),o&&(o.value=i.text,o.dispatchEvent(new Event(`input`,{bubbles:!0})),o.focus()),n.set(r,i),!0)}function Lt(e,t,n,r,i={}){let a=!0,o,s=new Set,c=()=>{o!==void 0&&(window.cancelAnimationFrame(o),o=void 0);for(let e of s)window.clearTimeout(e);s.clear()},l=()=>{a&&(a=!1,c())},u=()=>{if(a){if(i.shouldApply&&!i.shouldApply()){l();return}i.onApplyStart?.();try{if(!It(e,t,n,r))return;i.onApplied?.(),l()}finally{i.onApplyEnd?.()}}};if(u(),a){o=window.requestAnimationFrame(u);for(let e of[0,50,150,300,600]){let t=window.setTimeout(()=>{s.delete(t),u()},e);s.add(t)}i.updateComplete?.then(u)}return{cancel:l}}function X(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function Rt(e){return e.split(`
|
|
210
|
+
`).map(e=>{let t=X(e);return e.startsWith(`+`)?`<span style="color:rgb(22 101 52);background:rgba(34,197,94,.14);display:block;">${t}</span>`:e.startsWith(`-`)?`<span style="color:rgb(153 27 27);background:rgba(239,68,68,.12);display:block;">${t}</span>`:e.startsWith(`@@`)?`<span style="color:rgb(37 99 235);background:rgba(37,99,235,.10);display:block;">${t}</span>`:`<span style="display:block;">${t||` `}</span>`}).join(`
|
|
211
211
|
`)}function zt(e,t){let n=e.split(`
|
|
212
212
|
`),r=t.split(`
|
|
213
|
-
`),i=[];for(let e of n)i.push(`<span style="color:rgb(153 27 27);background:rgba(239,68,68,.12);display:block;">- ${
|
|
213
|
+
`),i=[];for(let e of n)i.push(`<span style="color:rgb(153 27 27);background:rgba(239,68,68,.12);display:block;">- ${X(e)}</span>`);for(let e of r)i.push(`<span style="color:rgb(22 101 52);background:rgba(34,197,94,.14);display:block;">+ ${X(e)}</span>`);return i.join(`
|
|
214
214
|
`)}var Bt=`.quickforge-approval-card`;function Vt(e){if(typeof e!=`string`||!e.startsWith(`mcp__`))return null;let t=e.slice(5),n=t.indexOf(`__`);return n<=0||n>=t.length-2?null:{serverName:t.slice(0,n),toolName:t.slice(n+2)}}function Ht(e,t){return typeof t.summary==`string`?t.summary:e===`run_command`&&typeof t.command==`string`?t.command:e===`activate_skill`&&typeof t.name==`string`?t.name:e===`read_skill_resource`&&typeof t.path==`string`||typeof t.path==`string`?t.path:typeof t.query==`string`?t.query:typeof t.name==`string`?t.name:``}function Ut(e,t){let n=Ht(e,t);return`
|
|
215
|
-
${n?`<div class="text-xs text-muted-foreground mb-1">${
|
|
216
|
-
<div class="text-xs bg-background border rounded p-2 text-muted-foreground">${
|
|
217
|
-
`}function Wt(e,t,n,r,i){let{panel:a,onApprove:o,onReject:s}=e;if(a.querySelector(`.quickforge-approval-card[data-tool-call-id="${CSS.escape(n)}"]`))return;Gt(a);let c=document.createElement(`div`);c.className=`quickforge-approval-card pointer-events-auto mb-4 mx-4 rounded-lg border border-amber-300 dark:border-amber-700 bg-amber-50 dark:bg-amber-950/30 p-4`,c.dataset.toolCallId=n;let l=Vt(t),u=l?`MCP · ${l.serverName} · ${l.toolName}`:t,
|
|
215
|
+
${n?`<div class="text-xs text-muted-foreground mb-1">${X(d(`toolArgsSummary`))}: ${X(n)}</div>`:``}
|
|
216
|
+
<div class="text-xs bg-background border rounded p-2 text-muted-foreground">${X(d(`toolDetailsHidden`))}</div>
|
|
217
|
+
`}function Wt(e,t,n,r,i){let{panel:a,onApprove:o,onReject:s}=e;if(a.querySelector(`.quickforge-approval-card[data-tool-call-id="${CSS.escape(n)}"]`))return;Gt(a);let c=document.createElement(`div`);c.className=`quickforge-approval-card pointer-events-auto mb-4 mx-4 rounded-lg border border-amber-300 dark:border-amber-700 bg-amber-50 dark:bg-amber-950/30 p-4`,c.dataset.toolCallId=n;let l=Vt(t),u=l?`MCP · ${l.serverName} · ${l.toolName}`:t,p=i?.type===`subagent`?i.label||i.subagent||`Subagent`:``,m=document.createElement(`div`);if(m.className=`flex items-center gap-2 mb-3 text-sm font-medium text-amber-800 dark:text-amber-300`,m.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>`,m.append(` ${p?d(`subagentToolApprovalWaiting`,{source:p,toolName:u}):d(`toolApprovalWaiting`,{toolName:u})}`),c.append(m),p){let e=document.createElement(`div`);e.className=`mb-3 rounded-md border border-amber-200/80 bg-background/65 px-2.5 py-1.5 text-xs text-amber-800/85 dark:border-amber-800/70 dark:text-amber-200/85`,e.textContent=d(`toolApprovalSourceSubagent`,{source:p}),c.append(e)}let h=document.createElement(`div`);h.className=`quickforge-approval-preview mb-3`;let g=f().toolDisplayMode===`detailed`;if(l)h.innerHTML=`
|
|
218
218
|
<div class="rounded-md border bg-background/70 p-2 text-xs text-muted-foreground">
|
|
219
219
|
<div><span class="font-medium text-foreground">Source:</span> MCP</div>
|
|
220
|
-
<div><span class="font-medium text-foreground">Server:</span> ${
|
|
221
|
-
<div><span class="font-medium text-foreground">Tool:</span> ${
|
|
220
|
+
<div><span class="font-medium text-foreground">Server:</span> ${X(l.serverName)}</div>
|
|
221
|
+
<div><span class="font-medium text-foreground">Tool:</span> ${X(l.toolName)}</div>
|
|
222
222
|
</div>
|
|
223
|
-
${
|
|
224
|
-
`;else if(t===`write_file`){let e=String(r.path??``),t=String(r.content??``),n=t.length>800;
|
|
225
|
-
<div class="text-xs text-muted-foreground mb-1">📁 ${
|
|
226
|
-
<pre class="text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">${Rt(t.slice(0,800))}${n?`\n${
|
|
227
|
-
`}else if(t===`edit_file`){let e=String(r.path??``),t=zt(String(r.oldText??``),String(r.newText??``));
|
|
228
|
-
<div class="text-xs text-muted-foreground mb-1">📁 ${
|
|
223
|
+
${g?`<pre class="mt-2 text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">${X(JSON.stringify(r,null,2))}</pre>`:Ut(t,r)}
|
|
224
|
+
`;else if(t===`write_file`){let e=String(r.path??``),t=String(r.content??``),n=t.length>800;h.innerHTML=`
|
|
225
|
+
<div class="text-xs text-muted-foreground mb-1">📁 ${X(e)}</div>
|
|
226
|
+
<pre class="text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">${Rt(t.slice(0,800))}${n?`\n${X(d(`toolApprovalTruncated`))}`:``}</pre>
|
|
227
|
+
`}else if(t===`edit_file`){let e=String(r.path??``),t=zt(String(r.oldText??``),String(r.newText??``));h.innerHTML=`
|
|
228
|
+
<div class="text-xs text-muted-foreground mb-1">📁 ${X(e)}</div>
|
|
229
229
|
<pre class="text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">${t}</pre>
|
|
230
|
-
`}else if(t===`run_command`){let e=String(r.command??``);
|
|
231
|
-
<div class="text-xs text-muted-foreground mb-1">⏱️ ${
|
|
232
|
-
<pre class="text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">$ ${
|
|
233
|
-
`}else typeof r.description==`string`?
|
|
230
|
+
`}else if(t===`run_command`){let e=String(r.command??``);h.innerHTML=`
|
|
231
|
+
<div class="text-xs text-muted-foreground mb-1">⏱️ ${d(`toolApprovalTimeout`)}: ${X(`30m`)}</div>
|
|
232
|
+
<pre class="text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">$ ${X(e)}</pre>
|
|
233
|
+
`}else typeof r.description==`string`?h.innerHTML=`<div class="text-xs bg-background border rounded p-2 text-muted-foreground">${X(r.description)}</div>`:h.innerHTML=g?`<pre class="text-xs bg-background border rounded p-2 max-h-40 overflow-auto font-mono whitespace-pre-wrap">${X(JSON.stringify(r,null,2))}</pre>`:Ut(t,r);c.append(h);let _=document.createElement(`div`);_.className=`mb-2 hidden text-xs text-red-700 dark:text-red-400`,c.append(_);let v=document.createElement(`div`);v.className=`flex items-center gap-2`;let y=e=>{x.disabled=e,S.disabled=e,x.classList.toggle(`opacity-60`,e),S.classList.toggle(`opacity-60`,e),x.textContent=d(e?`toolApprovalSubmitting`:`toolApprovalAccept`)},b=async e=>{_.classList.add(`hidden`),_.textContent=``,y(!0);try{await e()}catch(e){_.textContent=e instanceof Error?e.message:d(`toolApprovalFailed`),_.classList.remove(`hidden`),y(!1)}},x=document.createElement(`button`);x.type=`button`,x.className=`inline-flex items-center gap-1.5 rounded-md bg-emerald-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-emerald-700 transition-colors cursor-pointer disabled:cursor-not-allowed`,x.textContent=d(`toolApprovalAccept`),x.addEventListener(`click`,e=>{e.stopPropagation(),e.preventDefault(),b(o)});let S=document.createElement(`button`);S.type=`button`,S.className=`inline-flex items-center gap-1.5 rounded-md border border-red-300 dark:border-red-700 px-3 py-1.5 text-xs font-medium text-red-700 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-950/30 transition-colors cursor-pointer disabled:cursor-not-allowed`,S.textContent=d(`toolApprovalReject`),S.addEventListener(`click`,e=>{e.stopPropagation(),e.preventDefault(),b(s)}),v.append(x,S),c.append(v);let C=a.querySelector(`message-list`);C?C.append(c):a.querySelector(`agent-interface`)?.append(c),c.scrollIntoView({behavior:`smooth`,block:`end`})}function Gt(e){e.querySelectorAll(Bt).forEach(e=>e.remove())}function Kt(e,t,n){let r=d(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),v(e,$e),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{v(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function qt(e){return e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`}function Jt(e){let t=e.querySelector(`message-list`);return t?Array.from(t.querySelectorAll(`user-message, assistant-message`)).filter(e=>e.closest(`message-list`)===t):[]}function Yt(e,t,n,r){let i=Jt(e),a=0;for(let e=0;e<t.length;e++)if(qt(t[e])){if(e===n){let e=i[a];if(e){r.nextElementSibling!==e&&e.before(r);return}break}a+=1}let o=e.querySelector(`message-list`);o&&o.firstElementChild!==r&&o.prepend(r)}function Xt(e){let t=e,n=t?.role===`assistant`?m(t):h(t);return(n.match(/<compact_summary>\s*([\s\S]*?)\s*<\/compact_summary>/i)?.[1]??n).trim()}function Zt(e,t,n=!1){let r=e.querySelector(`.quickforge-context-compaction-details`),i=e.querySelector(`.quickforge-context-compaction-summary`),a=e.querySelector(`.quickforge-context-compaction-toggle-label`),o=e.querySelector(`[data-quickforge-action="copy-compact-summary"]`);r&&(r.open=n);let s=()=>{a&&r&&(a.textContent=r.open?d(`contextCompactedHideSummary`):d(`contextCompactedViewSummary`))};i&&!i.dataset.quickforgeCompactionBound&&(i.dataset.quickforgeCompactionBound=`true`,i.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),r&&(r.open=!r.open,s())})),r&&!r.dataset.quickforgeCompactionBound&&(r.dataset.quickforgeCompactionBound=`true`,r.addEventListener(`toggle`,s)),s(),o&&(o.onclick=async e=>{e.preventDefault(),e.stopPropagation(),await p(t),Kt(o,d(`contextCompactedCopySummary`),Y)})}function Qt(e){let{panel:t,getMessages:n,getContextCompaction:r}=e,i=r(),a=n(),o=t.querySelector(`.quickforge-context-compaction-notice`);if(!i||a.length===0){o?.remove();return}let s=Math.min(a.length,Math.max(0,Number(i.compactedUpToIndex)||0));if(s<=0){o?.remove();return}let c=i.summaryMessage?Xt(i.summaryMessage):``,l=o?.querySelector(`.quickforge-context-compaction-details`)?.open??!1,u=o??document.createElement(`div`),f=u.dataset.summaryText??``,p=u.dataset.hasSummary===`true`,m=!o||f!==c||p!==!!c;u.className=`quickforge-context-compaction-notice`,u.dataset.tailStart=String(s),u.dataset.summaryText=c,u.dataset.hasSummary=String(!!c),u.title=d(`contextCompactedTooltip`),u.setAttribute(`aria-label`,d(`contextCompactedTooltip`)),m&&(u.innerHTML=c?`
|
|
234
234
|
<details class="quickforge-context-compaction-details">
|
|
235
235
|
<summary class="quickforge-context-compaction-summary">
|
|
236
236
|
<div class="quickforge-context-compaction-line"></div>
|
|
237
237
|
<div class="quickforge-context-compaction-pill">
|
|
238
238
|
<span class="quickforge-context-compaction-dot" aria-hidden="true"></span>
|
|
239
|
-
<span><strong>${
|
|
239
|
+
<span><strong>${X(d(`contextCompactedLabel`))}</strong> · ${X(d(`contextCompactedTimelineLabel`))} · <span class="quickforge-context-compaction-toggle-label"></span></span>
|
|
240
240
|
</div>
|
|
241
241
|
<div class="quickforge-context-compaction-line"></div>
|
|
242
242
|
</summary>
|
|
243
243
|
<div class="quickforge-context-compaction-card">
|
|
244
244
|
<div class="quickforge-context-compaction-card-header">
|
|
245
|
-
<span>${
|
|
246
|
-
<button type="button" class="quickforge-context-compaction-copy" data-quickforge-action="copy-compact-summary">${
|
|
245
|
+
<span>${X(d(`contextCompactedSummaryTitle`))}</span>
|
|
246
|
+
<button type="button" class="quickforge-context-compaction-copy" data-quickforge-action="copy-compact-summary">${Y}<span>${X(d(`contextCompactedCopySummary`))}</span></button>
|
|
247
247
|
</div>
|
|
248
|
-
<pre class="quickforge-context-compaction-text">${
|
|
248
|
+
<pre class="quickforge-context-compaction-text">${X(c)}</pre>
|
|
249
249
|
</div>
|
|
250
250
|
</details>
|
|
251
251
|
`:`
|
|
@@ -253,11 +253,11 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Pt as t}from"./icons-B
|
|
|
253
253
|
<div class="quickforge-context-compaction-line"></div>
|
|
254
254
|
<div class="quickforge-context-compaction-pill">
|
|
255
255
|
<span class="quickforge-context-compaction-dot" aria-hidden="true"></span>
|
|
256
|
-
<span><strong>${
|
|
256
|
+
<span><strong>${X(d(`contextCompactedLabel`))}</strong> · ${X(d(`contextCompactedTimelineLabel`))}</span>
|
|
257
257
|
</div>
|
|
258
258
|
<div class="quickforge-context-compaction-line"></div>
|
|
259
259
|
</div>
|
|
260
|
-
`),c&&Zt(u,c,l),Yt(t,a,s,u)}var
|
|
260
|
+
`),c&&Zt(u,c,l),Yt(t,a,s,u)}var Z=`.quickforge-process-group`,$t=`.quickforge-process-body`,en=`.quickforge-process-tools`,tn=`.quickforge-process-tools-body`,nn=`.quickforge-process-stage`,rn=`.quickforge-process-stage-body`,an=`thinking-block, tool-message`,on=`thinking-block, tool-message, markdown-block`,sn=`data-quickforge-process-final-summary`,cn=`data-quickforge-process-folded`,ln=500,un=new Set([`edit_file`,`write_file`]),dn=new WeakMap,fn=new WeakMap,pn=new WeakMap,mn=1;function hn(e){let t=dn.get(e);return t||(t=new Map,dn.set(e,t)),t}function gn(e,t,n){let r=hn(e);if(r.set(t,n),r.size<=ln)return;let i=r.keys().next().value;i&&r.delete(i)}function _n(e){return e.findIndex(e=>e.connected)}function vn(e){let t=fn.get(e);return t===void 0&&(t=mn++,fn.set(e,t)),t}function yn(e,t,n){let r=wn(t[0]?.message?.timestamp);return`scope:${vn(e)}:turn:${n}:started:${r??`unknown`}`}function bn(e,t,n,r){return e===void 0?t?n:r:e}function xn(e,t,n,r=!1){let i=t.dataset.quickforgeProcessKey;t.dataset.quickforgeProcessKey=n;let a=hn(e).get(n),o=bn(a,i===n,t.dataset.expanded===`true`,r);t.dataset.expanded=String(o),a===void 0&&r&&gn(e,n,o)}function Sn(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function Cn(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function wn(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=e.trim();if(!t)return;let n=Number(t);if(Number.isFinite(n))return n;let r=Date.parse(t);return Number.isNaN(r)?void 0:r}}function Tn(e){if(!Sn(e))return;let t=e.details;if(!Sn(t))return;let n=t.quickforgeTiming;if(Sn(n))return{startedAt:Cn(n.startedAt),finishedAt:Cn(n.finishedAt),durationMs:Cn(n.durationMs)}}function En(e){let t=Tn(e.result);if(t?.finishedAt!==void 0)return t.finishedAt;if(t?.startedAt!==void 0&&t.durationMs!==void 0)return t.startedAt+t.durationMs}function Dn(e){return Tn(e.result)?.startedAt}function On(e){if(Sn(e.details))return wn(e.details.quickforgeProcessFinishedAt)}function kn(e){let t=e.map(On).filter(e=>e!==void 0);return t.length>0?Math.max(...t):void 0}function An(e){if(e===void 0||e<1e3)return``;let t=Math.max(1,Math.round(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?d(`processDurationMinutesSeconds`,{minutes:n,seconds:r}):d(`processDurationSeconds`,{seconds:r})}function jn(e){return e.tool?.name||e.toolCall?.name||``}function Mn(e){return e!==`run_subagent`&&e!==`generate_image`}function Nn(e){return e.tagName.toLowerCase()===`tool-message`&&Mn(jn(e))}function Pn(e){return e.aborted?!0:Sn(e.result)&&e.result.isError===!0}function Fn(e){if(!un.has(jn(e)))return;let t=e.toolCall?.arguments?.path;if(typeof t==`string`&&t.trim())return t.trim();let n=Sn(e.result)?e.result.details:void 0,r=Sn(n)?n.path:void 0;return typeof r==`string`&&r.trim()?r.trim():void 0}function In(e){let t=Array.from(e),n=t.map(Fn),r=new Set(n.filter(e=>!!e)),i=t.length>0&&t.every(e=>un.has(jn(e))),a=n.every(e=>e!==void 0);return{count:t.length,errorCount:t.filter(Pn).length,commandsOnly:t.length>0&&t.every(e=>jn(e)===`run_command`),...i&&a?{editedFileCount:r.size}:{}}}function Ln(e){let t=Array.from(e),n=t.map(Fn),r=new Set(n.filter(e=>!!e));return{toolCallCount:t.length,commandCount:t.filter(e=>jn(e)===`run_command`).length,editedFileCount:r.size}}function Rn(e,t){let n=[];e.toolCallCount>0&&n.push(d(`processGroupToolsCalled`,{count:e.toolCallCount})),e.commandCount>0&&n.push(d(`processGroupCommandsRan`,{count:e.commandCount})),e.editedFileCount>0&&n.push(d(`processGroupFilesEdited`,{count:e.editedFileCount}));let r=d(t?`processExecuting`:`processExecuted`);return n.length>0?`${r} ${n.join(` · `)}`:r}function zn(e){let t=d(e.commandsOnly?`processCommandsRan`:e.editedFileCount===void 0?`processToolsCalled`:`processFilesEdited`,{count:e.editedFileCount??e.count});return e.errorCount>0?`${t} · ${d(`processToolsFailedCount`,{count:e.errorCount})}`:t}function Bn(e,t){return[e,t].filter(Boolean).join(` · `)}function Vn(e,t,n){let r=xr(t).map(({node:e})=>e).filter(e=>e.tagName.toLowerCase()===`tool-message`),i=[...e.map(e=>wn(e.message?.timestamp)),...r.map(Dn)].filter(e=>e!==void 0),a=[kn(e.map(e=>e.message??{})),...r.map(En)].filter(e=>e!==void 0),o=i.length>0?Math.min(...i):void 0,s=a.length>0?Math.max(...a):void 0;if(n)s=Date.now();else{let e=wn(t.dataset.quickforgeFinishedAt);e!==void 0&&e>0?s=e:(s??=Date.now(),t.dataset.quickforgeFinishedAt=String(s))}let c=o!==void 0&&s!==void 0?An(Math.max(0,s-o)):``,l=[...e].reverse().find(e=>e.message?.stopReason)?.message?.stopReason;return Bn(d(l===`error`?`processFailed`:l===`aborted`?`processAborted`:n?`processExecuting`:`processExecuted`),c)}function Hn(e){return e.closest(`message-list`)}function Un(e,t){return e.closest(`message-list`)===Hn(t)&&cr(e)}function Wn(e){return Array.from(e.querySelectorAll(Z)).filter(t=>t.closest(`assistant-message`)===e)}function Gn(e){let t=e.querySelector(`${on}, ${Z}`);return t?.closest(`.px-4.flex.flex-col`)??t?.parentElement??null}function Kn(){let e=document.createElement(`div`);return e.className=`quickforge-process-step`,e}function qn(){return`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 18V5"/><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"/><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"/><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"/><path d="M18 18a4 4 0 0 0 2-7.464"/><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"/><path d="M6 18a4 4 0 0 1-2-7.464"/><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"/></svg>`}function Jn(){return`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="14" x="3" y="5" rx="2"/><path d="m7 9 3 3-3 3"/><path d="M13 15h4"/></svg>`}function Yn(e){let t=e.map((e,t)=>({child:e,index:t})).filter(({child:e})=>!e.quickforgeIcon),n=t.find(({child:e})=>e.markedChevron)??t.find(({child:e})=>e.hasSvg),r=t.find(({child:e,index:t})=>e.markedLabel&&t!==n?.index)??t.find(({index:e})=>e!==n?.index);return{chevronIndex:n?.index,labelIndex:r?.index,chevronExpanded:n?.child.rotated===!0}}function Xn(e){e.querySelectorAll(`thinking-block`).forEach(t=>{if(t.closest(Z)!==e)return;let n=t.querySelector(`:scope > .thinking-block > .thinking-header`);if(!n)return;let r=Array.from(n.children).filter(e=>e instanceof HTMLElement),{chevronIndex:i,labelIndex:a,chevronExpanded:o}=Yn(r.map(e=>({quickforgeIcon:e.dataset.quickforgeThinkingRole===`icon`||e.classList.contains(`quickforge-process-thinking-icon`),markedChevron:e.dataset.quickforgeThinkingRole===`chevron`,markedLabel:e.dataset.quickforgeThinkingRole===`label`,hasSvg:!!e.querySelector(`svg`),rotated:e.classList.contains(`rotate-90`)||e.classList.contains(`quickforge-process-thinking-chevron-expanded`)}))),s=i===void 0?void 0:r[i],c=a===void 0?void 0:r[a];if(!s||!c)return;s.dataset.quickforgeThinkingRole=`chevron`,c.dataset.quickforgeThinkingRole=`label`,s.className=`quickforge-process-thinking-chevron`,s.classList.toggle(`quickforge-process-thinking-chevron-expanded`,o),c.className=`quickforge-process-thinking-label`,c.textContent=d(`processThinking`);let l=r.find(e=>e.dataset.quickforgeThinkingRole===`icon`||e.classList.contains(`quickforge-process-thinking-icon`));l||(l=document.createElement(`span`),l.setAttribute(`aria-hidden`,`true`),l.innerHTML=qn()),l.dataset.quickforgeThinkingRole=`icon`,l.classList.add(`quickforge-process-thinking-icon`),n.prepend(l),n.append(c,s),n.className=`thinking-header quickforge-process-thinking-header`})}function Zn(){let e=document.createElement(`div`);e.className=`quickforge-process-tools`,e.dataset.expanded=`false`;let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-process-tools-summary`,t.innerHTML=`
|
|
261
261
|
<span class="quickforge-process-tools-icon" aria-hidden="true">
|
|
262
262
|
${Jn()}
|
|
263
263
|
</span>
|
|
@@ -275,14 +275,14 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Pt as t}from"./icons-B
|
|
|
275
275
|
<span class="quickforge-process-chevron" aria-hidden="true">
|
|
276
276
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>
|
|
277
277
|
</span>
|
|
278
|
-
`;let n=document.createElement(`div`);return n.className=`quickforge-process-body`,e.append(t,n),e}function er(){return!1}function tr(e,t){return`${e}:stage:${t}`}function nr(e,t,n,r){let i=Array.from(n.querySelectorAll(nn)).filter(e=>e.closest(X)===n);i.forEach((n,a)=>{let o=n.querySelector(`:scope > ${rn}`),s=n.querySelector(`:scope > .quickforge-process-stage-summary`),c=n.querySelector(`:scope > .quickforge-process-stage-summary > .quickforge-process-stage-label`);if(!o||!s||!c)return;let l=tr(t,a),u=`quickforge-${l.replace(/[^a-z0-9_-]+/gi,`-`)}`,d=n.dataset.quickforgeProcessKey;n.dataset.quickforgeProcessKey=l;let f=bn(hn(e).get(l),d===l,n.dataset.expanded===`true`,er());n.dataset.expanded=String(f);let p=r&&a===i.length-1;c.textContent=Rn(Ln(o.querySelectorAll(`tool-message`)),p),o.id=u,s.setAttribute(`aria-controls`,u),s.setAttribute(`aria-expanded`,String(f)),s.setAttribute(`aria-label`,`${c.textContent} · ${S(f?`collapseProcess`:`expandProcess`)}`),s.onclick=t=>{t.preventDefault(),t.stopPropagation();let r=n.dataset.expanded!==`true`;n.dataset.expanded=String(r),gn(e,l,r),s.setAttribute(`aria-expanded`,String(r)),s.setAttribute(`aria-label`,`${c.textContent} · ${S(r?`collapseProcess`:`expandProcess`)}`)}})}function rr(e,t,n){return t?`${e}:tools:${t}`:`${e}:tools:${n}`}function ir(e,t,n){return rr(e,Array.from(t.querySelectorAll(`tool-message`))[0]?.toolCall?.id,n)}function ar(e,t,n){n.querySelectorAll(en).forEach((r,i)=>{if(r.closest(X)!==n)return;let a=r.querySelector(`:scope > ${tn}`),o=r.querySelector(`.quickforge-process-tools-summary`),s=r.querySelector(`.quickforge-process-tools-label`);if(!a||!o||!s)return;let c=In(a.querySelectorAll(`:scope > tool-message`));if(r.hidden=c.count===0,c.count===0)return;let l=ir(t,r,i),u=`quickforge-${l.replace(/[^a-z0-9_-]+/gi,`-`)}`;a.id=u,o.setAttribute(`aria-controls`,u);let d=p().toolDisplayMode===`detailed`,f=d?`detailed`:`compact`,m=r.dataset.quickforgeProcessKey,h=r.dataset.quickforgeToolDisplayMode;r.dataset.quickforgeProcessKey=l,r.dataset.quickforgeToolDisplayMode=f;let g=bn(hn(e).get(l),m===l&&h===f,r.dataset.expanded===`true`,d);r.dataset.expanded=String(g),s.textContent=zn(c),o.setAttribute(`aria-expanded`,String(g)),o.setAttribute(`aria-label`,S(g?`collapseProcessTools`:`expandProcessTools`)),o.onclick=t=>{t.preventDefault(),t.stopPropagation();let n=r.dataset.expanded===`false`;r.dataset.expanded=String(n),gn(e,l,n),o.setAttribute(`aria-expanded`,String(n)),o.setAttribute(`aria-label`,S(n?`collapseProcessTools`:`expandProcessTools`))}})}function or(e,t,n={}){return t===`pointerdown`?e&&(n.button??0)===0&&n.isPrimary!==!1:!e||(n.detail??0)===0}function sr(e,t,n,r,i){xn(e,r,t,i),r.dataset.streaming=String(i);let a=r.querySelector(`:scope > ${$t}`),o=r.querySelector(`.quickforge-process-summary`),s=r.querySelector(`.quickforge-process-label`);if(!a||!o||!s)return;let c=Vn(n,r,i);s.textContent!==c&&(s.textContent=c);let l=r.dataset.expanded===`true`,u=`quickforge-${t.replace(/[^a-z0-9_-]+/gi,`-`)}`;a.id=u,o.setAttribute(`aria-controls`,u),o.setAttribute(`aria-expanded`,String(l)),o.setAttribute(`aria-label`,`${c} · ${S(l?`collapseProcess`:`expandProcess`)}`);let d=()=>{let n=r.dataset.expanded!==`true`;r.dataset.expanded=String(n),gn(e,t,n),o.setAttribute(`aria-expanded`,String(n)),o.setAttribute(`aria-label`,`${c} · ${S(n?`collapseProcess`:`expandProcess`)}`)};o.onpointerdown=e=>{or(i,`pointerdown`,e)&&(e.stopPropagation(),d())},o.onclick=e=>{e.preventDefault(),e.stopPropagation(),or(i,`click`,e)&&d()},nr(e,t,r,i),ar(e,t,r),Xn(r)}function Z(e,t,n){if(n){e.hasAttribute(t)||e.setAttribute(t,`true`);return}e.hasAttribute(t)&&e.removeAttribute(t)}function cr(e){let t=e.closest(`message-list`),n=e.parentElement?.closest(on);return!n||n.closest(`message-list`)!==t}function lr(e){let t=Hn(e);return Array.from(e.querySelectorAll(`markdown-block`)).filter(e=>{if(e.closest(`message-list`)!==t)return!1;let n=e.parentElement?.closest(an);return!n||n.closest(`message-list`)!==t})}function ur(e){let t=e.filter(e=>(e.textContent??``).trim().length>0);return t[t.length-1]??e[e.length-1]??null}function dr(e,t){return Array.from(e.querySelectorAll(on)).filter(n=>n!==t&&Un(n,e)).some(e=>!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))}function fr(e,t){let n=lr(e);if(t){let t=ur(n);return t&&!dr(e,t)?t:null}return ur(n.filter(e=>e.hasAttribute(sn)))||(ur(n.filter(e=>!e.closest($t)))??ur(n))}function pr(e,t){lr(e).forEach(e=>{Z(e,sn,e===t),e===t&&Z(e,cn,!1)})}function mr(e){return e.length>1||e.some(e=>Array.from(e.querySelectorAll(an)).some(t=>t.closest(`message-list`)===Hn(e)))}function hr(e){let t=new Map;return e.forEach(e=>{Wn(e).forEach(e=>{pn.get(e)?.forEach(e=>t.set(e.node,e))})}),e.flatMap(e=>Array.from(e.querySelectorAll(on)).filter(t=>Un(t,e)).map(n=>t.get(n)??{node:n,sourceAssistant:e,sourceParent:n.parentElement,sourceNextSibling:n.nextSibling}))}function gr(e,t,n,r){return e.filter(e=>!t(e)&&(!n(e)||r))}function _r(e,t,n){return gr(hr(e),e=>e.node===t,e=>e.node.tagName.toLowerCase()===`markdown-block`,n)}function vr(e,t){let n=[],r=[],i=!1,a=()=>{r.length!==0&&(n.push({kind:i?`stage`:`detail`,items:r}),r=[])};for(let o of e)t(o)?(a(),n.push({kind:`detail`,items:[o]}),i=!0):r.push(o);return a(),n}function yr(e,t){let n=[];for(let r of e){let e=t(r)?`tools`:`detail`,i=n[n.length-1];i?.kind===e?i.items.push(r):n.push({kind:e,items:[r]})}return n}function br(e){return!!e.querySelector(`${$t} ${on}`)}function xr(e){return pn.get(e)??Array.from(e.querySelectorAll(`${$t} ${on}`)).filter(t=>t.closest(X)===e).map(t=>({node:t,sourceAssistant:e.closest(`assistant-message`)??e.parentElement,sourceParent:e.parentElement,sourceNextSibling:e}))}function Sr(e,t){let{node:n,sourceParent:r,sourceNextSibling:i}=e;if(Z(n,cn,!1),Z(n,sn,!1),r?.isConnected){i?.parentNode===r?r.insertBefore(n,i):r.append(n);return}let a=Gn(e.sourceAssistant);a?a.insertBefore(n,a.querySelector(X)):t.parentElement?.insertBefore(n,t)}function Cr(e,t){return!e||t}function wr(e){if(!e.sourceAssistant.isConnected)return!1;let t=e.node.tagName.toLowerCase(),n=t===`tool-message`?e.node.toolCall?.id:void 0;return Array.from(e.sourceAssistant.querySelectorAll(an)).filter(t=>t!==e.node&&!t.closest(X)).filter(t=>Un(t,e.sourceAssistant)).some(e=>e.tagName.toLowerCase()===t?t!==`tool-message`||!n?!0:e.toolCall?.id===n:!1)}function Tr(e){Z(e.node,cn,!1),Z(e.node,sn,!1),e.node.remove()}function Er(e,t=!1){let n=new Set(e);for(let r of e)r.classList.remove(`quickforge-process-source-empty`),Wn(r).forEach(e=>{xr(e).slice().reverse().forEach(r=>{t&&Cr(n.has(r.sourceAssistant),wr(r))?Tr(r):Sr(r,e)}),pn.delete(e),e.remove()})}function Dr(e){e.querySelectorAll(`${X}[data-streaming="true"]`).forEach(e=>{let t=xr(e),n=new Set(t.map(e=>e.sourceAssistant)),r=e.closest(`assistant-message`);r&&n.add(r),n.forEach(e=>e.classList.remove(`quickforge-process-source-empty`)),t.slice().reverse().forEach(t=>Sr(t,e)),pn.delete(e),e.remove()})}function Or(e,t){return!!(e&&e.length===t.length&&e.every((e,n)=>e.node.isConnected&&e.node===t[n]?.node&&e.sourceAssistant===t[n]?.sourceAssistant))}function kr(e,t){let n=Kn(),r=yr(t,e=>Nn(e.node));for(let e of r){if(e.kind===`tools`){let t=Zn(),r=t.querySelector(tn);if(!r)continue;e.items.forEach(({node:e})=>{Z(e,cn,!0),r.append(e)}),n.append(t);continue}e.items.forEach(({node:e})=>{Z(e,cn,!0),n.append(e)})}e.append(n)}function Ar(e,t){let n=e.querySelector(`:scope > ${$t}`);if(!n)return!1;let r=vr(t,e=>e.node.tagName.toLowerCase()===`markdown-block`);for(let e of r){if(e.kind===`detail`){kr(n,e.items);continue}let t=Qn(),r=t.querySelector(rn);r&&(kr(r,e.items),n.append(t))}return pn.set(e,t),br(e)}function jr(e,t){let n=_n(e.map(e=>({connected:e.sourceParent?.isConnected===!0&&e.node.isConnected}))),r=n>=0?e[n]:void 0,i=[...t].reverse().find(e=>e.isStreaming!==!0),a=i?Gn(i):null;if(!r?.sourceParent?.isConnected&&!a)return null;let o=$n();return r?.sourceParent?.isConnected?r.sourceParent.insertBefore(o,r.node):a&&a.append(o),Ar(o,e)?o:null}function Mr(e){for(let t of e){let e=!!Array.from(t.querySelectorAll(`markdown-block, thinking-block, tool-message, .quickforge-process-group, .quickforge-approval-card`)).some(e=>e.closest(`message-list`)===Hn(t));t.classList.toggle(`quickforge-process-source-empty`,!e)}}function Nr(e){let t=new Map(e.map((e,t)=>[e,t])),n=hr(e).map(({node:e,sourceAssistant:n})=>{let r=t.get(n)??0,i=e.tagName.toLowerCase();if(i!==`tool-message`)return`${r}:${i}`;let a=e;return`${r}:${i}:${a.toolCall?.id??jn(a)}`});return`${e.length}|${n.join(`|`)}`}function Pr(e,t,n,r,i=!0){return!n||!r||!i?`full`:e?`update`:t?`skip`:`full`}function Fr(e,t,n){return!e&&t&&n}function Ir(e,t,n,r,i){if(t.length===0)return;let a=yn(e,t,r),o=t[t.length-1],s=t.flatMap(Wn),c=s.length===1?s[0]:void 0,l=Nr(t),u=mr(t),d=_r(t,u?fr(o,n):null,u),f=!c||Or(pn.get(c),d),p=Pr(n,i,!!c,c?.dataset.quickforgeProcessFp===l,f);if(p===`skip`)return;if(p===`update`&&c){sr(e,a,t,c,!0);return}if(d.length===0&&Fr(!1,s.length>0,e.dataset.quickforgeProcessHandoff!==void 0))return;Er(t,!0);let m=mr(t),h=m?fr(o,n):null;m&&pr(o,h);let g=_r(t,h,m);if(g.length===0)return;let _=jr(g,t);_&&(_.dataset.quickforgeProcessFp=l,sr(e,a,t,_,n),Mr(t))}function Lr(e,t,n){let r=t[t.length-1]?.tagName.toLowerCase()===`assistant-message`,i=[],a=[];for(let e of t){if(e.tagName.toLowerCase()===`user-message`){a.length>0&&i.push(a),a=[];continue}a.push(e)}a.length>0&&i.push(a),i.forEach((t,a)=>{let o=n&&r&&a===i.length-1;Ir(e,t,o,a,n&&!o)})}var Rr=new Set([`bash`,`sh`,`shell`,`zsh`,`fish`,`cmd`,`bat`,`batch`,`powershell`,`ps1`,`terminal`,`console`]),zr=/\b(rm\s+-rf|sudo|chmod\b|chown\b|npm\s+publish|pnpm\s+publish|yarn\s+publish|git\s+push|curl\b[^\n|;]*\|\s*(sh|bash)|wget\b[^\n|;]*\|\s*(sh|bash))\b/i,Br=/<\s*(script|foreignObject)\b|\son[a-z]+\s*=|javascript\s*:/i;function Vr(e,t,n){let r=S(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),y(e,$e),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{y(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Hr(e,t,n,r){let i=document.createElement(`button`);return i.type=`button`,i.dataset.quickforgeAction=e,i.title=t,i.setAttribute(`aria-label`,t),y(i,n),i.className=`pointer-events-auto inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,i.onclick=e=>{e.stopPropagation(),r(i)},i}function Ur(e){if(typeof e.getDecodedCode==`function`)try{return e.getDecodedCode()}catch{}let t=typeof e.code==`string`?e.code:e.getAttribute(`code`)??``;if(!t)return``;try{return decodeURIComponent(escape(window.atob(t)))}catch{return t}}function Wr(e){return e.replace(/\r\n/g,`
|
|
278
|
+
`;let n=document.createElement(`div`);return n.className=`quickforge-process-body`,e.append(t,n),e}function er(){return!1}function tr(e,t){return`${e}:stage:${t}`}function nr(e,t,n,r){let i=Array.from(n.querySelectorAll(nn)).filter(e=>e.closest(Z)===n);i.forEach((n,a)=>{let o=n.querySelector(`:scope > ${rn}`),s=n.querySelector(`:scope > .quickforge-process-stage-summary`),c=n.querySelector(`:scope > .quickforge-process-stage-summary > .quickforge-process-stage-label`);if(!o||!s||!c)return;let l=tr(t,a),u=`quickforge-${l.replace(/[^a-z0-9_-]+/gi,`-`)}`,f=n.dataset.quickforgeProcessKey;n.dataset.quickforgeProcessKey=l;let p=bn(hn(e).get(l),f===l,n.dataset.expanded===`true`,er());n.dataset.expanded=String(p);let m=r&&a===i.length-1;c.textContent=Rn(Ln(o.querySelectorAll(`tool-message`)),m),o.id=u,s.setAttribute(`aria-controls`,u),s.setAttribute(`aria-expanded`,String(p)),s.setAttribute(`aria-label`,`${c.textContent} · ${d(p?`collapseProcess`:`expandProcess`)}`),s.onclick=t=>{t.preventDefault(),t.stopPropagation();let r=n.dataset.expanded!==`true`;n.dataset.expanded=String(r),gn(e,l,r),s.setAttribute(`aria-expanded`,String(r)),s.setAttribute(`aria-label`,`${c.textContent} · ${d(r?`collapseProcess`:`expandProcess`)}`)}})}function rr(e,t,n){return t?`${e}:tools:${t}`:`${e}:tools:${n}`}function ir(e,t,n){return rr(e,Array.from(t.querySelectorAll(`tool-message`))[0]?.toolCall?.id,n)}function ar(e,t,n){n.querySelectorAll(en).forEach((r,i)=>{if(r.closest(Z)!==n)return;let a=r.querySelector(`:scope > ${tn}`),o=r.querySelector(`.quickforge-process-tools-summary`),s=r.querySelector(`.quickforge-process-tools-label`);if(!a||!o||!s)return;let c=In(a.querySelectorAll(`:scope > tool-message`));if(r.hidden=c.count===0,c.count===0)return;let l=ir(t,r,i),u=`quickforge-${l.replace(/[^a-z0-9_-]+/gi,`-`)}`;a.id=u,o.setAttribute(`aria-controls`,u);let p=f().toolDisplayMode===`detailed`,m=p?`detailed`:`compact`,h=r.dataset.quickforgeProcessKey,g=r.dataset.quickforgeToolDisplayMode;r.dataset.quickforgeProcessKey=l,r.dataset.quickforgeToolDisplayMode=m;let _=bn(hn(e).get(l),h===l&&g===m,r.dataset.expanded===`true`,p);r.dataset.expanded=String(_),s.textContent=zn(c),o.setAttribute(`aria-expanded`,String(_)),o.setAttribute(`aria-label`,d(_?`collapseProcessTools`:`expandProcessTools`)),o.onclick=t=>{t.preventDefault(),t.stopPropagation();let n=r.dataset.expanded===`false`;r.dataset.expanded=String(n),gn(e,l,n),o.setAttribute(`aria-expanded`,String(n)),o.setAttribute(`aria-label`,d(n?`collapseProcessTools`:`expandProcessTools`))}})}function or(e,t,n={}){return t===`pointerdown`?e&&(n.button??0)===0&&n.isPrimary!==!1:!e||(n.detail??0)===0}function sr(e,t,n,r,i){xn(e,r,t,i),r.dataset.streaming=String(i);let a=r.querySelector(`:scope > ${$t}`),o=r.querySelector(`.quickforge-process-summary`),s=r.querySelector(`.quickforge-process-label`);if(!a||!o||!s)return;let c=Vn(n,r,i);s.textContent!==c&&(s.textContent=c);let l=r.dataset.expanded===`true`,u=`quickforge-${t.replace(/[^a-z0-9_-]+/gi,`-`)}`;a.id=u,o.setAttribute(`aria-controls`,u),o.setAttribute(`aria-expanded`,String(l)),o.setAttribute(`aria-label`,`${c} · ${d(l?`collapseProcess`:`expandProcess`)}`);let f=()=>{let n=r.dataset.expanded!==`true`;r.dataset.expanded=String(n),gn(e,t,n),o.setAttribute(`aria-expanded`,String(n)),o.setAttribute(`aria-label`,`${c} · ${d(n?`collapseProcess`:`expandProcess`)}`)};o.onpointerdown=e=>{or(i,`pointerdown`,e)&&(e.stopPropagation(),f())},o.onclick=e=>{e.preventDefault(),e.stopPropagation(),or(i,`click`,e)&&f()},nr(e,t,r,i),ar(e,t,r),Xn(r)}function Q(e,t,n){if(n){e.hasAttribute(t)||e.setAttribute(t,`true`);return}e.hasAttribute(t)&&e.removeAttribute(t)}function cr(e){let t=e.closest(`message-list`),n=e.parentElement?.closest(on);return!n||n.closest(`message-list`)!==t}function lr(e){let t=Hn(e);return Array.from(e.querySelectorAll(`markdown-block`)).filter(e=>{if(e.closest(`message-list`)!==t)return!1;let n=e.parentElement?.closest(an);return!n||n.closest(`message-list`)!==t})}function ur(e){let t=e.filter(e=>(e.textContent??``).trim().length>0);return t[t.length-1]??e[e.length-1]??null}function dr(e,t){return Array.from(e.querySelectorAll(on)).filter(n=>n!==t&&Un(n,e)).some(e=>!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))}function fr(e,t){let n=lr(e);if(t){let t=ur(n);return t&&!dr(e,t)?t:null}return ur(n.filter(e=>e.hasAttribute(sn)))||(ur(n.filter(e=>!e.closest($t)))??ur(n))}function pr(e,t){lr(e).forEach(e=>{Q(e,sn,e===t),e===t&&Q(e,cn,!1)})}function mr(e){return e.length>1||e.some(e=>Array.from(e.querySelectorAll(an)).some(t=>t.closest(`message-list`)===Hn(e)))}function hr(e){let t=new Map;return e.forEach(e=>{Wn(e).forEach(e=>{pn.get(e)?.forEach(e=>t.set(e.node,e))})}),e.flatMap(e=>Array.from(e.querySelectorAll(on)).filter(t=>Un(t,e)).map(n=>t.get(n)??{node:n,sourceAssistant:e,sourceParent:n.parentElement,sourceNextSibling:n.nextSibling}))}function gr(e,t,n,r){return e.filter(e=>!t(e)&&(!n(e)||r))}function _r(e,t,n){return gr(hr(e),e=>e.node===t,e=>e.node.tagName.toLowerCase()===`markdown-block`,n)}function vr(e,t){let n=[],r=[],i=!1,a=()=>{r.length!==0&&(n.push({kind:i?`stage`:`detail`,items:r}),r=[])};for(let o of e)t(o)?(a(),n.push({kind:`detail`,items:[o]}),i=!0):r.push(o);return a(),n}function yr(e,t){let n=[];for(let r of e){let e=t(r)?`tools`:`detail`,i=n[n.length-1];i?.kind===e?i.items.push(r):n.push({kind:e,items:[r]})}return n}function br(e){return!!e.querySelector(`${$t} ${on}`)}function xr(e){return pn.get(e)??Array.from(e.querySelectorAll(`${$t} ${on}`)).filter(t=>t.closest(Z)===e).map(t=>({node:t,sourceAssistant:e.closest(`assistant-message`)??e.parentElement,sourceParent:e.parentElement,sourceNextSibling:e}))}function Sr(e,t){let{node:n,sourceParent:r,sourceNextSibling:i}=e;if(Q(n,cn,!1),Q(n,sn,!1),r?.isConnected){i?.parentNode===r?r.insertBefore(n,i):r.append(n);return}let a=Gn(e.sourceAssistant);a?a.insertBefore(n,a.querySelector(Z)):t.parentElement?.insertBefore(n,t)}function Cr(e,t){return!e||t}function wr(e){if(!e.sourceAssistant.isConnected)return!1;let t=e.node.tagName.toLowerCase(),n=t===`tool-message`?e.node.toolCall?.id:void 0;return Array.from(e.sourceAssistant.querySelectorAll(an)).filter(t=>t!==e.node&&!t.closest(Z)).filter(t=>Un(t,e.sourceAssistant)).some(e=>e.tagName.toLowerCase()===t?t!==`tool-message`||!n?!0:e.toolCall?.id===n:!1)}function Tr(e){Q(e.node,cn,!1),Q(e.node,sn,!1),e.node.remove()}function Er(e,t=!1){let n=new Set(e);for(let r of e)r.classList.remove(`quickforge-process-source-empty`),Wn(r).forEach(e=>{xr(e).slice().reverse().forEach(r=>{t&&Cr(n.has(r.sourceAssistant),wr(r))?Tr(r):Sr(r,e)}),pn.delete(e),e.remove()})}function Dr(e){e.querySelectorAll(`${Z}[data-streaming="true"]`).forEach(e=>{let t=xr(e),n=new Set(t.map(e=>e.sourceAssistant)),r=e.closest(`assistant-message`);r&&n.add(r),n.forEach(e=>e.classList.remove(`quickforge-process-source-empty`)),t.slice().reverse().forEach(t=>Sr(t,e)),pn.delete(e),e.remove()})}function Or(e,t){return!!(e&&e.length===t.length&&e.every((e,n)=>e.node.isConnected&&e.node===t[n]?.node&&e.sourceAssistant===t[n]?.sourceAssistant))}function kr(e,t){let n=Kn(),r=yr(t,e=>Nn(e.node));for(let e of r){if(e.kind===`tools`){let t=Zn(),r=t.querySelector(tn);if(!r)continue;e.items.forEach(({node:e})=>{Q(e,cn,!0),r.append(e)}),n.append(t);continue}e.items.forEach(({node:e})=>{Q(e,cn,!0),n.append(e)})}e.append(n)}function Ar(e,t){let n=e.querySelector(`:scope > ${$t}`);if(!n)return!1;let r=vr(t,e=>e.node.tagName.toLowerCase()===`markdown-block`);for(let e of r){if(e.kind===`detail`){kr(n,e.items);continue}let t=Qn(),r=t.querySelector(rn);r&&(kr(r,e.items),n.append(t))}return pn.set(e,t),br(e)}function jr(e,t){let n=_n(e.map(e=>({connected:e.sourceParent?.isConnected===!0&&e.node.isConnected}))),r=n>=0?e[n]:void 0,i=[...t].reverse().find(e=>e.isStreaming!==!0),a=i?Gn(i):null;if(!r?.sourceParent?.isConnected&&!a)return null;let o=$n();return r?.sourceParent?.isConnected?r.sourceParent.insertBefore(o,r.node):a&&a.append(o),Ar(o,e)?o:null}function Mr(e){for(let t of e){let e=!!Array.from(t.querySelectorAll(`markdown-block, thinking-block, tool-message, .quickforge-process-group, .quickforge-approval-card`)).some(e=>e.closest(`message-list`)===Hn(t));t.classList.toggle(`quickforge-process-source-empty`,!e)}}function Nr(e){let t=new Map(e.map((e,t)=>[e,t])),n=hr(e).map(({node:e,sourceAssistant:n})=>{let r=t.get(n)??0,i=e.tagName.toLowerCase();if(i!==`tool-message`)return`${r}:${i}`;let a=e;return`${r}:${i}:${a.toolCall?.id??jn(a)}`});return`${e.length}|${n.join(`|`)}`}function Pr(e,t,n,r,i=!0){return!n||!r||!i?`full`:e?`update`:t?`skip`:`full`}function Fr(e,t,n){return!e&&t&&n}function Ir(e,t,n,r,i){if(t.length===0)return;let a=yn(e,t,r),o=t[t.length-1],s=t.flatMap(Wn),c=s.length===1?s[0]:void 0,l=Nr(t),u=mr(t),d=_r(t,u?fr(o,n):null,u),f=!c||Or(pn.get(c),d),p=Pr(n,i,!!c,c?.dataset.quickforgeProcessFp===l,f);if(p===`skip`)return;if(p===`update`&&c){sr(e,a,t,c,!0);return}if(d.length===0&&Fr(!1,s.length>0,e.dataset.quickforgeProcessHandoff!==void 0))return;Er(t,!0);let m=mr(t),h=m?fr(o,n):null;m&&pr(o,h);let g=_r(t,h,m);if(g.length===0)return;let _=jr(g,t);_&&(_.dataset.quickforgeProcessFp=l,sr(e,a,t,_,n),Mr(t))}function Lr(e,t,n){let r=t[t.length-1]?.tagName.toLowerCase()===`assistant-message`,i=[],a=[];for(let e of t){if(e.tagName.toLowerCase()===`user-message`){a.length>0&&i.push(a),a=[];continue}a.push(e)}a.length>0&&i.push(a),i.forEach((t,a)=>{let o=n&&r&&a===i.length-1;Ir(e,t,o,a,n&&!o)})}var Rr=new Set([`bash`,`sh`,`shell`,`zsh`,`fish`,`cmd`,`bat`,`batch`,`powershell`,`ps1`,`terminal`,`console`]),zr=/\b(rm\s+-rf|sudo|chmod\b|chown\b|npm\s+publish|pnpm\s+publish|yarn\s+publish|git\s+push|curl\b[^\n|;]*\|\s*(sh|bash)|wget\b[^\n|;]*\|\s*(sh|bash))\b/i,Br=/<\s*(script|foreignObject)\b|\son[a-z]+\s*=|javascript\s*:/i;function Vr(e,t,n){let r=d(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),v(e,$e),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{v(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Hr(e,t,n,r){let i=document.createElement(`button`);return i.type=`button`,i.dataset.quickforgeAction=e,i.title=t,i.setAttribute(`aria-label`,t),v(i,n),i.className=`pointer-events-auto inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,i.onclick=e=>{e.stopPropagation(),r(i)},i}function Ur(e){if(typeof e.getDecodedCode==`function`)try{return e.getDecodedCode()}catch{}let t=typeof e.code==`string`?e.code:e.getAttribute(`code`)??``;if(!t)return``;try{return decodeURIComponent(escape(window.atob(t)))}catch{return t}}function Wr(e){return e.replace(/\r\n/g,`
|
|
279
279
|
`).split(`
|
|
280
280
|
`).map(e=>e.replace(/^\s*\$\s+/,``).replace(/^\s*>\s+/,``).replace(/^\s*PS\s+[^>\n]+>\s+/i,``)).join(`
|
|
281
281
|
`).trim()}function Gr(e){return e.split(`
|
|
282
|
-
`).map(e=>e.trim()).filter(Boolean).length}function Kr(e){let t=String(e.language??e.getAttribute(`language`)??``).trim().toLowerCase();return Rr.has(t)}function qr(e){return String(e.language??e.getAttribute(`language`)??``).trim().toLowerCase()===`svg`}function Jr(e){let t=e.trim();return/^<svg[\s>]/i.test(t)&&/<\/svg>\s*$/i.test(t)&&!Br.test(t)}function Yr(e){return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}function Xr(){let e=document.querySelector(`.quickforge-svg-code-lightbox`);e?.quickforgeCleanup?.(),e?.remove()}function Zr(e,t=`SVG preview`){Xr();let n=document.createElement(`div`);n.className=`quickforge-svg-code-lightbox`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,t);let r=document.createElement(`img`);r.alt=t,r.src=e,r.addEventListener(`click`,e=>e.stopPropagation()),n.append(r);let i=()=>Xr(),a=e=>{e.key===`Escape`&&i()};n.quickforgeCleanup=()=>document.removeEventListener(`keydown`,a),n.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.append(n)}function Qr(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(i)}function $r(e){let t=0;for(let n=0;n<e.length;n++)t=Math.imul(31,t)+e.charCodeAt(n)|0;return`${e.length}:${t}`}function ei(e){e.nextElementSibling instanceof HTMLElement&&e.nextElementSibling.dataset.quickforgeSvgPreview===`true`&&e.nextElementSibling.remove(),e.querySelector(`[data-quickforge-svg-preview="true"]`)?.remove(),e.classList.contains(`quickforge-mermaid-code-block`)||e.classList.remove(`quickforge-svg-code-block`),e.querySelector(`copy-button[data-quickforge-svg-original-copy="true"]`)?.removeAttribute(`hidden`),e.querySelector(`copy-button[data-quickforge-svg-original-copy="true"]`)?.removeAttribute(`data-quickforge-svg-original-copy`),e.querySelector(`[data-quickforge-svg-toolbar="true"]`)?.remove();let t=e.querySelector(`pre`)?.parentElement,n=e.querySelector(`[data-quickforge-mermaid-preview="true"]`)!==null;t instanceof HTMLElement&&!n&&(t.hidden=!1),delete e.dataset.quickforgeSvgPreviewSource,delete e.dataset.quickforgeSvgMode}function ti(e,t){let n=e.querySelector(`[data-quickforge-svg-preview="true"]`),r=e.querySelector(`:scope > div > div:first-child`),i=e.querySelector(`pre`)?.parentElement;e.dataset.quickforgeSvgMode=t,n&&(n.hidden=t!==`preview`),r&&r.classList.toggle(`quickforge-svg-code-toolbar-floating`,t===`preview`),i instanceof HTMLElement&&(i.hidden=t===`preview`)}function Q(e,t,n){let r=document.createElement(`button`);return r.type=`button`,r.dataset.quickforgeAction=e,r.className=`quickforge-svg-code-menu-item`,r.title=t,r.setAttribute(`aria-label`,t),r.setAttribute(`role`,`menuitem`),y(r,n),r}function ni(e=document,t){e.querySelectorAll(`.quickforge-svg-code-menu[open]`).forEach(e=>{e!==t&&(e.open=!1)})}var ri=!1;function ii(){ri||(ri=!0,document.addEventListener(`pointerdown`,e=>{e.target?.closest(`.quickforge-svg-code-menu`)||ni(document)},!0),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&ni(document)}))}function ai(e,t){ii();let n=e.querySelector(`:scope > div > div:first-child`),r=n?.querySelector(`copy-button`);if(!n||!r)return;let i=n.querySelector(`[data-quickforge-svg-toolbar="true"]`);if(!i){i=document.createElement(`div`),i.dataset.quickforgeSvgToolbar=`true`,i.className=`quickforge-svg-code-toolbar`;let e=document.createElement(`details`);e.className=`quickforge-svg-code-menu`;let t=document.createElement(`summary`);t.className=`quickforge-svg-code-menu-trigger`,t.title=S(`moreActions`),t.setAttribute(`aria-label`,S(`moreActions`)),t.textContent=`⋯`;let n=document.createElement(`div`);n.className=`quickforge-svg-code-menu-content`,n.setAttribute(`role`,`menu`);let a=Q(`svg-preview-mode`,S(`svgPreviewMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`),o=Q(`svg-source-mode`,S(`svgSourceMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/></svg>`),s=Q(`copy-svg-code`,S(`copySvgSource`),J),c=Q(`download-svg-code`,S(`downloadSvg`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>`);n.append(a,o,s,c),r.before(i),r.dataset.quickforgeSvgOriginalCopy=`true`,r.setAttribute(`hidden`,``),e.append(t,n),i.append(e)}let a=i.querySelector(`.quickforge-svg-code-menu`),o=i.querySelector(`[data-quickforge-action="svg-preview-mode"]`),s=i.querySelector(`[data-quickforge-action="svg-source-mode"]`),c=i.querySelector(`[data-quickforge-action="copy-svg-code"]`),l=i.querySelector(`[data-quickforge-action="download-svg-code"]`),u=()=>{a&&(a.open=!1)};a&&!a.dataset.quickforgeSvgMenuBound&&(a.dataset.quickforgeSvgMenuBound=`true`,a.addEventListener(`toggle`,()=>{a.open&&ni(e.closest(`markdown-block`)??document,a)})),o&&(o.onclick=()=>{ti(e,`preview`),u()}),s&&(s.onclick=()=>{ti(e,`source`),u()}),c&&(c.onclick=async()=>{await h(t),Vr(c,S(`copySvgSource`),J)}),l&&(l.onclick=()=>{Qr(`quickforge-svg-${Date.now()}.svg`,t,`image/svg+xml;charset=utf-8`),u()})}function oi(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(e=>{if(!qr(e)){ei(e);return}if(t)return;let n=Ur(e).trim();if(!n||!Jr(n)){ei(e);return}let r=$r(n);if(e.querySelector(`[data-quickforge-svg-preview="true"]`)&&e.dataset.quickforgeSvgPreviewSource===r){ai(e,n),ti(e,e.dataset.quickforgeSvgMode===`source`?`source`:`preview`);return}let i=e.querySelector(`:scope > div > div:first-child`);if(!i)return;ei(e);let a=document.createElement(`div`);e.classList.add(`quickforge-svg-code-block`),a.dataset.quickforgeSvgPreview=`true`,a.className=`quickforge-svg-code-preview`,a.setAttribute(`aria-label`,`SVG preview`);let o=document.createElement(`img`);o.alt=`SVG preview`,o.src=Yr(n),o.title=S(`svgEnlargePreview`),o.addEventListener(`click`,()=>Zr(o.src)),a.replaceChildren(o),i.after(a),ai(e,n),e.dataset.quickforgeSvgPreviewSource=r,ti(e,e.dataset.quickforgeSvgMode===`source`?`source`:`preview`)})}var si=0;function ci(e){return w(String(e.language??e.getAttribute(`language`)??``))}function li(e){let t=e.classList.contains(`quickforge-mermaid-code-block`);if(!(t||e.dataset.quickforgeMermaidRequestToken!==void 0||e.dataset.quickforgeMermaidPendingSource!==void 0||e.dataset.quickforgeMermaidPreviewSource!==void 0||e.dataset.quickforgeMermaidFailedSource!==void 0||e.querySelector(`[data-quickforge-mermaid-preview="true"], [data-quickforge-mermaid-error="true"], [data-quickforge-mermaid-toolbar="true"], copy-button[data-quickforge-mermaid-original-copy="true"]`)!==null))return;e.dataset.quickforgeMermaidRequestToken&&(e.dataset.quickforgeMermaidRequestToken=String(++si)),e.querySelector(`[data-quickforge-mermaid-preview="true"]`)?.remove(),e.querySelector(`[data-quickforge-mermaid-error="true"]`)?.remove(),e.querySelector(`[data-quickforge-mermaid-toolbar="true"]`)?.remove(),e.classList.remove(`quickforge-mermaid-code-block`),t&&!e.querySelector(`[data-quickforge-svg-preview="true"]`)&&e.classList.remove(`quickforge-svg-code-block`),e.querySelector(`copy-button[data-quickforge-mermaid-original-copy="true"]`)?.removeAttribute(`hidden`),e.querySelector(`copy-button[data-quickforge-mermaid-original-copy="true"]`)?.removeAttribute(`data-quickforge-mermaid-original-copy`);let n=e.querySelector(`pre`)?.parentElement,r=e.querySelector(`[data-quickforge-svg-preview="true"]`)!==null;n instanceof HTMLElement&&!r&&(n.hidden=!1),delete e.dataset.quickforgeMermaidMode,delete e.dataset.quickforgeMermaidPreviewSource,delete e.dataset.quickforgeMermaidPendingSource,delete e.dataset.quickforgeMermaidFailedSource,delete e.dataset.quickforgeMermaidRequestToken}function ui(e,t){let n=e.querySelector(`[data-quickforge-mermaid-preview="true"]`),r=e.querySelector(`:scope > div > div:first-child`),i=e.querySelector(`pre`)?.parentElement;e.dataset.quickforgeMermaidMode=t,n&&(n.hidden=t!==`preview`),r&&r.classList.toggle(`quickforge-svg-code-toolbar-floating`,t===`preview`),i instanceof HTMLElement&&(i.hidden=t===`preview`)}function di(e,t,n){ii();let r=e.querySelector(`:scope > div > div:first-child`),i=r?.querySelector(`copy-button`);if(!r||!i)return;let a=r.querySelector(`[data-quickforge-mermaid-toolbar="true"]`);if(!a){a=document.createElement(`div`),a.dataset.quickforgeMermaidToolbar=`true`,a.className=`quickforge-svg-code-toolbar`;let e=document.createElement(`details`);e.className=`quickforge-svg-code-menu quickforge-mermaid-code-menu`;let t=document.createElement(`summary`);t.className=`quickforge-svg-code-menu-trigger`,t.title=S(`moreActions`),t.setAttribute(`aria-label`,S(`moreActions`)),t.textContent=`⋯`;let n=document.createElement(`div`);n.className=`quickforge-svg-code-menu-content`,n.setAttribute(`role`,`menu`);let r=Q(`mermaid-preview-mode`,S(`svgPreviewMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`),o=Q(`mermaid-source-mode`,S(`svgSourceMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/></svg>`),s=Q(`copy-mermaid-code`,S(`copyMermaidSource`),J),c=Q(`download-mermaid-svg`,S(`downloadMermaidSvg`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>`);n.append(r,o,s,c),i.before(a),i.dataset.quickforgeMermaidOriginalCopy=`true`,i.setAttribute(`hidden`,``),e.append(t,n),a.append(e)}let o=a.querySelector(`.quickforge-mermaid-code-menu`),s=a.querySelector(`[data-quickforge-action="mermaid-preview-mode"]`),c=a.querySelector(`[data-quickforge-action="mermaid-source-mode"]`),l=a.querySelector(`[data-quickforge-action="copy-mermaid-code"]`),u=a.querySelector(`[data-quickforge-action="download-mermaid-svg"]`),d=()=>{o&&(o.open=!1)};o&&!o.dataset.quickforgeMermaidMenuBound&&(o.dataset.quickforgeMermaidMenuBound=`true`,o.addEventListener(`toggle`,()=>{o.open&&ni(e.closest(`markdown-block`)??document,o)})),s&&(s.onclick=()=>{ui(e,`preview`),d()}),c&&(c.onclick=()=>{ui(e,`source`),d()}),l&&(l.onclick=async()=>{await h(t),Vr(l,S(`copyMermaidSource`),J)}),u&&(u.onclick=()=>{Qr(`quickforge-mermaid-${Date.now()}.svg`,n,`image/svg+xml;charset=utf-8`),d()})}function fi(e){let t=e.querySelector(`:scope > div > div:first-child`);if(!t||e.querySelector(`[data-quickforge-mermaid-error="true"]`))return;let n=document.createElement(`div`);n.dataset.quickforgeMermaidError=`true`,n.className=`quickforge-mermaid-code-error`,n.textContent=S(`mermaidRenderFailed`),t.after(n)}function pi(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(n=>{try{if(!ci(n)){li(n);return}let r=Ur(n).trim();if(!r){li(n);return}let i=$r(r);if(n.querySelector(`[data-quickforge-mermaid-preview="true"]`)&&n.dataset.quickforgeMermaidPreviewSource===i){ui(n,n.dataset.quickforgeMermaidMode===`source`?`source`:`preview`);return}if(t){(n.dataset.quickforgeMermaidPendingSource||n.dataset.quickforgeMermaidPreviewSource)&&li(n);return}if(n.dataset.quickforgeMermaidPendingSource===i||n.dataset.quickforgeMermaidFailedSource===i||!n.querySelector(`:scope > div > div:first-child`))return;li(n);let a=String(++si);n.dataset.quickforgeMermaidRequestToken=a,n.dataset.quickforgeMermaidPendingSource=i,(async()=>{try{let t=await T(r);if(!t)throw Error(`Empty Mermaid SVG`);let o=E(t);if(!n.isConnected||n.dataset.quickforgeMermaidRequestToken!==a||e.dataset.quickforgeAgentStreaming===`true`||!ci(n)||$r(Ur(n).trim())!==i){n.dataset.quickforgeMermaidRequestToken===a&&(delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken);return}let s=n.querySelector(`:scope > div > div:first-child`);if(!s){delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken;return}let c=document.createElement(`div`);c.dataset.quickforgeMermaidPreview=`true`,c.className=`quickforge-svg-code-preview quickforge-mermaid-code-preview`,c.setAttribute(`aria-label`,S(`mermaidPreviewLabel`));let l=document.createElement(`img`);l.alt=S(`mermaidPreviewLabel`),l.src=o,l.title=S(`mermaidEnlargePreview`),l.addEventListener(`click`,()=>Zr(l.src,S(`mermaidPreviewLabel`))),c.replaceChildren(l),n.classList.add(`quickforge-svg-code-block`,`quickforge-mermaid-code-block`),s.after(c),di(n,r,t),n.dataset.quickforgeMermaidPreviewSource=i,delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidFailedSource,delete n.dataset.quickforgeMermaidRequestToken,ui(n,`preview`)}catch{if(!n.isConnected||n.dataset.quickforgeMermaidRequestToken!==a||!ci(n)||$r(Ur(n).trim())!==i)return;delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken,n.dataset.quickforgeMermaidFailedSource=i,fi(n)}})()}catch{li(n),fi(n)}})}function mi(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(e=>{let n=e.querySelector(`[data-quickforge-action="execute-markdown-command"]`);if(!Kr(e)){n?.remove(),delete e.dataset.quickforgeCommand;return}let r;if(n&&e.dataset.quickforgeCommand!==void 0){if(n.disabled===t)return;r=e.dataset.quickforgeCommand}else r=Wr(Ur(e));if(!r){n?.remove(),delete e.dataset.quickforgeCommand;return}e.dataset.quickforgeCommand=r;let i=S(`executeInTerminal`),a=n??Hr(`execute-markdown-command`,i,`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="6 3 20 12 6 21 6 3"/></svg>`,()=>{let t=Wr(Ur(e));t&&window.dispatchEvent(new CustomEvent(`quickforge:execute-markdown-command`,{detail:{command:t,confirm:Gr(t)>1,dangerous:zr.test(t)}}))});if(a.title=i,a.setAttribute(`aria-label`,i),a.disabled=t,a.className=`pointer-events-auto inline-flex size-8 items-center justify-center rounded-md text-emerald-600 transition-colors hover:bg-emerald-500/10 hover:text-emerald-700 disabled:cursor-not-allowed disabled:opacity-40 dark:text-emerald-400 dark:hover:text-emerald-300`,!n){let t=e.querySelector(`:scope > div > div:first-child`),n=t?.querySelector(`copy-button`);if(t&&n){let e=document.createElement(`div`);e.className=`flex items-center gap-1`,n.before(e),e.appendChild(n),e.appendChild(a)}}})}var hi=/[A-Za-z]:[\\/][^\s"'<>`]+|(?:\/Users|\/home|\/workspace|\/mnt|\/Volumes)\/[^\s"'<>`]+/g,gi=new Set([`.`,`,`,`;`,`:`,`!`,`?`,`)`,`]`,`}`,`>`,`。`,`,`,`;`,`:`,`!`,`?`,`)`,`】`,`》`]),_i=[`pre`,`code`,`a`,`button`,`textarea`,`input`,`select`,`thinking-block`,`tool-message`,`.quickforge-file-path-link`,`.quickforge-message-actions`,`.quickforge-process-group`,`.quickforge-approval-card`].join(`,`);function vi(e){let t=e.length;for(;t>0&&gi.has(e[t-1]);)--t;return{path:e.slice(0,t),suffix:e.slice(t)}}function yi(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`quickforge-file-path-link`,n.dataset.quickforgeFilePath=e,n.textContent=e,n.title=`Open file`,n.setAttribute(`aria-label`,`Open file ${e}`),n.onclick=n=>{n.preventDefault(),n.stopPropagation(),t(e)},n}function bi(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){let t=e.textContent??``;if(!hi.test(t))return NodeFilter.FILTER_REJECT;hi.lastIndex=0;let n=e.parentElement;return!n||n.closest(_i)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=n.nextNode();for(;r;)t.push(r),r=n.nextNode();return t}function xi(e,t){let n=e.textContent??``;hi.lastIndex=0;let r,i=0,a=document.createDocumentFragment(),o=!1;for(;r=hi.exec(n);){let e=r[0],{path:s,suffix:c}=vi(e);if(!s)continue;let l=r.index,u=l+e.length;l>i&&a.append(document.createTextNode(n.slice(i,l))),a.append(yi(s,t)),c&&a.append(document.createTextNode(c)),i=u,o=!0}o&&(i<n.length&&a.append(document.createTextNode(n.slice(i))),e.replaceWith(a))}function Si(e,t,n){let r=Array.from(e.querySelectorAll(`markdown-block`)),i=r.reduce((e,t)=>e+(t.textContent?.length??0),0),a=d(t).length,o=`${String(t.timestamp??``)}:${a}:${r.length}:${i}`;e.dataset.quickforgeLocalPathSignature!==o&&(r.forEach(e=>{bi(e).forEach(e=>xi(e,n))}),e.dataset.quickforgeLocalPathSignature=o)}function Ci(e,t){let n=new Set,r;e.forEach((e,t)=>{if(e.role===`assistant`){r=t;return}r!==void 0&&n.add(r),r=void 0});let i=t&&e[e.length-1]?.role===`assistant`;return r!==void 0&&!i&&n.add(r),n}function wi(e,t,n){let r=S(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),y(e,$e),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{y(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Ti(e,t,n,r){let i=document.createElement(`button`);return i.type=`button`,i.dataset.quickforgeAction=e,i.title=t,i.setAttribute(`aria-label`,t),y(i,n),i.className=`pointer-events-auto inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,i.onclick=e=>{e.stopPropagation(),r(i)},i}function Ei(e){e.querySelectorAll(`.quickforge-rollback-popover`).forEach(e=>{e.quickforgeCleanup?.(),(e.closest(`.quickforge-rollback-action`)?.querySelector(`button[data-quickforge-action="rollback"]`))?.setAttribute(`aria-expanded`,`false`),e.remove()})}function Di(e){let{panel:t,button:n,messageIndex:r,title:i,description:a,onConfirm:o}=e,s=n.closest(`.quickforge-rollback-action`);if(!s||n.disabled)return;if(s.querySelector(`.quickforge-rollback-popover`)){Ei(t);return}Ei(t);let c=document.createElement(`div`);c.className=`quickforge-rollback-popover`,c.setAttribute(`role`,`dialog`),c.setAttribute(`aria-label`,i),c.tabIndex=-1;let l=document.createElement(`div`);l.className=`quickforge-rollback-popover-arrow`;let u=document.createElement(`div`);u.className=`quickforge-rollback-popover-title`,u.textContent=i;let d=document.createElement(`div`);d.className=`quickforge-rollback-popover-description`,d.textContent=a;let f=document.createElement(`div`);f.className=`quickforge-rollback-popover-footer`;let p=document.createElement(`button`);p.type=`button`,p.className=`quickforge-rollback-popover-cancel`,p.textContent=S(`cancel`);let m=document.createElement(`button`);m.type=`button`,m.className=`quickforge-rollback-popover-confirm`,m.textContent=S(`confirmRollback`),f.append(p,m),c.append(l,u,d,f);let h=()=>Ei(t),g=e=>{let t=e.target;!t||c.contains(t)||n.contains(t)||h()},_=e=>{e.key===`Escape`&&(e.preventDefault(),h())};c.quickforgeCleanup=()=>{document.removeEventListener(`pointerdown`,g,!0),document.removeEventListener(`keydown`,_)},c.addEventListener(`pointerdown`,e=>e.stopPropagation()),c.addEventListener(`click`,e=>e.stopPropagation()),p.addEventListener(`click`,h),m.addEventListener(`click`,async()=>{m.disabled=!0,p.disabled=!0,m.textContent=S(`rollingBack`);try{await o(r)}finally{h()}}),s.append(c),n.setAttribute(`aria-expanded`,`true`),document.addEventListener(`pointerdown`,g,!0),document.addEventListener(`keydown`,_),window.requestAnimationFrame(()=>m.focus())}function Oi(e){let t=document.createElement(`span`);t.className=`quickforge-rollback-action`;let n=Ti(`rollback`,S(`rollback`),et,t=>{Di({panel:e.panel,button:t,messageIndex:e.messageIndex,title:e.title,description:e.description,onConfirm:e.onConfirm})});return n.disabled=e.isDisabled,n.setAttribute(`aria-haspopup`,`dialog`),n.setAttribute(`aria-expanded`,`false`),t.append(n),t}function ki(e){return e.querySelector(`message-list`)}function Ai(e){return Array.from(e.querySelectorAll(`user-message, assistant-message`)).filter(t=>t.closest(`message-list`)===e)}function ji(e){let t=ki(e);return t?Ai(t):[]}function Mi(e){return(ki(e)?.parentElement?.querySelector(`:scope > streaming-message-container:not(.hidden)`))?.querySelector(`:scope > div > assistant-message`)??null}function Ni(e){let{panel:t,getMessages:n,isStreaming:r,onCopyAnswer:i,onRollbackFromMessage:a,onRetryFromMessage:o,onForkFromMessage:s,onOpenLocalFilePath:c,disableFork:l,readOnly:u=!1,enableTerminalCommandActions:f=!0,rollbackConfirmTitle:p=S(`rollbackConfirmTitle`),rollbackConfirmDescription:m=S(`rollbackConfirm`)}=e,h=n().map((e,t)=>({message:e,index:t})).filter(({message:e})=>e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`),_=(()=>{for(let e=h.length-1;e>=0;e--)if(h[e].message.role!==`assistant`)return h[e]})(),v=ji(t),y=r(),b=Ci(h.map(({message:e})=>e),y),x=e=>{let t=S(`copy`);return Ti(`copy`,t,J,async n=>{let r=e();if(r)try{await i(r),wi(n,t,J)}catch{}})};v.forEach((e,i)=>{let f=h[i];if(!f)return;e.classList.add(`group`,`relative`),e.classList.toggle(`quickforge-assistant-message`,f.message.role===`assistant`),e.classList.toggle(`quickforge-user-message`,f.message.role!==`assistant`),f.message.role===`assistant`&&c&&Si(e,f.message,c);let v=`quickforge-message-actions pointer-events-none mt-1 flex gap-1 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100 ${f.message.role===`assistant`?`px-4 justify-start`:`mx-4 justify-end`}`,y=e.querySelector(`.quickforge-message-actions`);if(!(f.message.role!==`assistant`||b.has(i))){y?.remove();return}if(y?.dataset.quickforgeLayout===`message-bottom`){y.className=v,y.parentElement===e&&y!==e.lastElementChild&&e.append(y),u&&Ei(t),y.querySelectorAll(`button[data-quickforge-action="rollback"], button[data-quickforge-action="retry"], button[data-quickforge-action="fork"]`).forEach(e=>{if(u){e.closest(`.quickforge-rollback-action`)?.remove(),e.remove();return}e.disabled=r()}),r()&&Ei(t);let n=y.querySelector(`button[data-quickforge-action="retry"]`),i=!u&&_&&f.index===_.index&&f.message.role!==`assistant`;if(n&&!i)n.remove();else if(!n&&i){let e=Ti(`retry`,S(`retry`),nt,()=>{o(f.index)});e.disabled=r(),y.append(e)}return}y?.remove();let C=document.createElement(`div`);if(C.dataset.quickforgeLayout=`message-bottom`,C.className=v,f.message.role===`assistant`){let e=d(f.message);if(!e)return;let t=x(()=>{let t=n()[f.index];return t?d(t):e});if(C.append(t),!u&&!l){let e=Ti(`fork`,S(`forkConversation`),tt,()=>{s(f.index)});e.disabled=r(),C.append(e)}}else{let e=g(f.message);if(e){let t=x(()=>{let t=n()[f.index];return t?g(t):e});C.append(t)}if(!u){let e=Oi({panel:t,messageIndex:f.index,isDisabled:r(),title:p,description:m,onConfirm:a});C.append(e)}if(!u&&_&&f.index===_.index){let e=Ti(`retry`,S(`retry`),nt,()=>{o(f.index)});e.disabled=r(),C.append(e)}}e.append(C)}),ni(t);let C=[...v];if(y){let e=Mi(t);e&&(e.classList.add(`quickforge-assistant-message`),C.push(e))}Lr(t,C,y),t.querySelectorAll(`message-list[data-quickforge-subagent-process="true"]`).forEach(e=>{Lr(e,Ai(e),e.dataset.quickforgeSubagentStreaming===`true`)}),oi(t,r()),pi(t,r()),f?mi(t,r()):t.querySelectorAll(`[data-quickforge-action="execute-markdown-command"]`).forEach(e=>e.remove())}function Pi(e){return e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`}function Fi(e){return e.role===`user`||e.role===`user-with-attachments`}function Ii(e){return e.role===`assistant`?d(e).trim().length>0:!1}function Li(e){return e.querySelector(`message-list`)}function Ri(e){let t=Li(e);return t?Array.from(t.querySelectorAll(`user-message, assistant-message`)).filter(e=>e.closest(`message-list`)===t):[]}var zi=`.quickforge-assistant-waiting`;function Bi(e){e.querySelectorAll(zi).forEach(e=>e.remove())}function Vi(e){let t=e.querySelectorAll(`thinking-block, tool-message`);for(let e of t)if(!e.closest(`.quickforge-process-body`))return!0;let n=e.querySelectorAll(`markdown-block, code-block`);for(let e of n)if(!e.closest(`.quickforge-process-body`)&&(e.textContent??``).trim().length>0)return!0;let r=e.cloneNode(!0);return r.querySelectorAll(`.quickforge-message-actions`).forEach(e=>e.remove()),r.querySelectorAll(`.quickforge-process-body`).forEach(e=>e.remove()),(r.textContent??``).trim().length>0}function Hi(e){let{panel:t,getMessages:n,isStreaming:r,isActive:i}=e,a=t.querySelector(zi);if(!r()||!i)return Bi(t),!1;let o=Li(t),s=n(),c=s.map((e,t)=>({message:e,index:t})).filter(({message:e})=>Pi(e)),l=(()=>{for(let e=c.length-1;e>=0;e--)if(Fi(c[e].message))return e;return-1})();if(!o||l<0)return a?.remove(),!1;let u=c[l],d=s.slice(u.index+1).some(Ii),f=Ri(t),p=f[l],m=f.slice(l+1).some(e=>e.matches(`assistant-message`)&&Vi(e));if(!p||d||m)return a?.remove(),!1;let h=a??document.createElement(`div`);return h.className=`quickforge-assistant-waiting`,h.setAttribute(`role`,`status`),h.setAttribute(`aria-live`,`polite`),h.setAttribute(`aria-label`,S(`assistantWaitingAriaLabel`)),a||(h.innerHTML=`
|
|
282
|
+
`).map(e=>e.trim()).filter(Boolean).length}function Kr(e){let t=String(e.language??e.getAttribute(`language`)??``).trim().toLowerCase();return Rr.has(t)}function qr(e){return String(e.language??e.getAttribute(`language`)??``).trim().toLowerCase()===`svg`}function Jr(e){let t=e.trim();return/^<svg[\s>]/i.test(t)&&/<\/svg>\s*$/i.test(t)&&!Br.test(t)}function Yr(e){return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}function Xr(){let e=document.querySelector(`.quickforge-svg-code-lightbox`);e?.quickforgeCleanup?.(),e?.remove()}function Zr(e,t=`SVG preview`){Xr();let n=document.createElement(`div`);n.className=`quickforge-svg-code-lightbox`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,t);let r=document.createElement(`img`);r.alt=t,r.src=e,r.addEventListener(`click`,e=>e.stopPropagation()),n.append(r);let i=()=>Xr(),a=e=>{e.key===`Escape`&&i()};n.quickforgeCleanup=()=>document.removeEventListener(`keydown`,a),n.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.append(n)}function Qr(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(i)}function $r(e){let t=0;for(let n=0;n<e.length;n++)t=Math.imul(31,t)+e.charCodeAt(n)|0;return`${e.length}:${t}`}function ei(e){e.nextElementSibling instanceof HTMLElement&&e.nextElementSibling.dataset.quickforgeSvgPreview===`true`&&e.nextElementSibling.remove(),e.querySelector(`[data-quickforge-svg-preview="true"]`)?.remove(),e.classList.contains(`quickforge-mermaid-code-block`)||e.classList.remove(`quickforge-svg-code-block`),e.querySelector(`copy-button[data-quickforge-svg-original-copy="true"]`)?.removeAttribute(`hidden`),e.querySelector(`copy-button[data-quickforge-svg-original-copy="true"]`)?.removeAttribute(`data-quickforge-svg-original-copy`),e.querySelector(`[data-quickforge-svg-toolbar="true"]`)?.remove();let t=e.querySelector(`pre`)?.parentElement,n=e.querySelector(`[data-quickforge-mermaid-preview="true"]`)!==null;t instanceof HTMLElement&&!n&&(t.hidden=!1),delete e.dataset.quickforgeSvgPreviewSource,delete e.dataset.quickforgeSvgMode}function ti(e,t){let n=e.querySelector(`[data-quickforge-svg-preview="true"]`),r=e.querySelector(`:scope > div > div:first-child`),i=e.querySelector(`pre`)?.parentElement;e.dataset.quickforgeSvgMode=t,n&&(n.hidden=t!==`preview`),r&&r.classList.toggle(`quickforge-svg-code-toolbar-floating`,t===`preview`),i instanceof HTMLElement&&(i.hidden=t===`preview`)}function ni(e,t,n){let r=document.createElement(`button`);return r.type=`button`,r.dataset.quickforgeAction=e,r.className=`quickforge-svg-code-menu-item`,r.title=t,r.setAttribute(`aria-label`,t),r.setAttribute(`role`,`menuitem`),v(r,n),r}function ri(e=document,t){e.querySelectorAll(`.quickforge-svg-code-menu[open]`).forEach(e=>{e!==t&&(e.open=!1)})}var ii=!1;function ai(){ii||(ii=!0,document.addEventListener(`pointerdown`,e=>{e.target?.closest(`.quickforge-svg-code-menu`)||ri(document)},!0),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&ri(document)}))}function oi(e,t){ai();let n=e.querySelector(`:scope > div > div:first-child`),r=n?.querySelector(`copy-button`);if(!n||!r)return;let i=n.querySelector(`[data-quickforge-svg-toolbar="true"]`);if(!i){i=document.createElement(`div`),i.dataset.quickforgeSvgToolbar=`true`,i.className=`quickforge-svg-code-toolbar`;let e=document.createElement(`details`);e.className=`quickforge-svg-code-menu`;let t=document.createElement(`summary`);t.className=`quickforge-svg-code-menu-trigger`,t.title=d(`moreActions`),t.setAttribute(`aria-label`,d(`moreActions`)),t.textContent=`⋯`;let n=document.createElement(`div`);n.className=`quickforge-svg-code-menu-content`,n.setAttribute(`role`,`menu`);let a=ni(`svg-preview-mode`,d(`svgPreviewMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`),o=ni(`svg-source-mode`,d(`svgSourceMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/></svg>`),s=ni(`copy-svg-code`,d(`copySvgSource`),Y),c=ni(`download-svg-code`,d(`downloadSvg`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>`);n.append(a,o,s,c),r.before(i),r.dataset.quickforgeSvgOriginalCopy=`true`,r.setAttribute(`hidden`,``),e.append(t,n),i.append(e)}let a=i.querySelector(`.quickforge-svg-code-menu`),o=i.querySelector(`[data-quickforge-action="svg-preview-mode"]`),s=i.querySelector(`[data-quickforge-action="svg-source-mode"]`),c=i.querySelector(`[data-quickforge-action="copy-svg-code"]`),l=i.querySelector(`[data-quickforge-action="download-svg-code"]`),u=()=>{a&&(a.open=!1)};a&&!a.dataset.quickforgeSvgMenuBound&&(a.dataset.quickforgeSvgMenuBound=`true`,a.addEventListener(`toggle`,()=>{a.open&&ri(e.closest(`markdown-block`)??document,a)})),o&&(o.onclick=()=>{ti(e,`preview`),u()}),s&&(s.onclick=()=>{ti(e,`source`),u()}),c&&(c.onclick=async()=>{await p(t),Vr(c,d(`copySvgSource`),Y)}),l&&(l.onclick=()=>{Qr(`quickforge-svg-${Date.now()}.svg`,t,`image/svg+xml;charset=utf-8`),u()})}function si(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(e=>{if(!qr(e)){ei(e);return}if(t)return;let n=Ur(e).trim();if(!n||!Jr(n)){ei(e);return}let r=$r(n);if(e.querySelector(`[data-quickforge-svg-preview="true"]`)&&e.dataset.quickforgeSvgPreviewSource===r){oi(e,n),ti(e,e.dataset.quickforgeSvgMode===`source`?`source`:`preview`);return}let i=e.querySelector(`:scope > div > div:first-child`);if(!i)return;ei(e);let a=document.createElement(`div`);e.classList.add(`quickforge-svg-code-block`),a.dataset.quickforgeSvgPreview=`true`,a.className=`quickforge-svg-code-preview`,a.setAttribute(`aria-label`,`SVG preview`);let o=document.createElement(`img`);o.alt=`SVG preview`,o.src=Yr(n),o.title=d(`svgEnlargePreview`),o.addEventListener(`click`,()=>Zr(o.src)),a.replaceChildren(o),i.after(a),oi(e,n),e.dataset.quickforgeSvgPreviewSource=r,ti(e,e.dataset.quickforgeSvgMode===`source`?`source`:`preview`)})}var ci=0;function li(e){return w(String(e.language??e.getAttribute(`language`)??``))}function ui(e){let t=e.classList.contains(`quickforge-mermaid-code-block`);if(!(t||e.dataset.quickforgeMermaidRequestToken!==void 0||e.dataset.quickforgeMermaidPendingSource!==void 0||e.dataset.quickforgeMermaidPreviewSource!==void 0||e.dataset.quickforgeMermaidFailedSource!==void 0||e.querySelector(`[data-quickforge-mermaid-preview="true"], [data-quickforge-mermaid-error="true"], [data-quickforge-mermaid-toolbar="true"], copy-button[data-quickforge-mermaid-original-copy="true"]`)!==null))return;e.dataset.quickforgeMermaidRequestToken&&(e.dataset.quickforgeMermaidRequestToken=String(++ci)),e.querySelector(`[data-quickforge-mermaid-preview="true"]`)?.remove(),e.querySelector(`[data-quickforge-mermaid-error="true"]`)?.remove(),e.querySelector(`[data-quickforge-mermaid-toolbar="true"]`)?.remove(),e.classList.remove(`quickforge-mermaid-code-block`),t&&!e.querySelector(`[data-quickforge-svg-preview="true"]`)&&e.classList.remove(`quickforge-svg-code-block`),e.querySelector(`copy-button[data-quickforge-mermaid-original-copy="true"]`)?.removeAttribute(`hidden`),e.querySelector(`copy-button[data-quickforge-mermaid-original-copy="true"]`)?.removeAttribute(`data-quickforge-mermaid-original-copy`);let n=e.querySelector(`pre`)?.parentElement,r=e.querySelector(`[data-quickforge-svg-preview="true"]`)!==null;n instanceof HTMLElement&&!r&&(n.hidden=!1),delete e.dataset.quickforgeMermaidMode,delete e.dataset.quickforgeMermaidPreviewSource,delete e.dataset.quickforgeMermaidPendingSource,delete e.dataset.quickforgeMermaidFailedSource,delete e.dataset.quickforgeMermaidRequestToken}function di(e,t){let n=e.querySelector(`[data-quickforge-mermaid-preview="true"]`),r=e.querySelector(`:scope > div > div:first-child`),i=e.querySelector(`pre`)?.parentElement;e.dataset.quickforgeMermaidMode=t,n&&(n.hidden=t!==`preview`),r&&r.classList.toggle(`quickforge-svg-code-toolbar-floating`,t===`preview`),i instanceof HTMLElement&&(i.hidden=t===`preview`)}function fi(e,t,n){ai();let r=e.querySelector(`:scope > div > div:first-child`),i=r?.querySelector(`copy-button`);if(!r||!i)return;let a=r.querySelector(`[data-quickforge-mermaid-toolbar="true"]`);if(!a){a=document.createElement(`div`),a.dataset.quickforgeMermaidToolbar=`true`,a.className=`quickforge-svg-code-toolbar`;let e=document.createElement(`details`);e.className=`quickforge-svg-code-menu quickforge-mermaid-code-menu`;let t=document.createElement(`summary`);t.className=`quickforge-svg-code-menu-trigger`,t.title=d(`moreActions`),t.setAttribute(`aria-label`,d(`moreActions`)),t.textContent=`⋯`;let n=document.createElement(`div`);n.className=`quickforge-svg-code-menu-content`,n.setAttribute(`role`,`menu`);let r=ni(`mermaid-preview-mode`,d(`svgPreviewMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`),o=ni(`mermaid-source-mode`,d(`svgSourceMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/></svg>`),s=ni(`copy-mermaid-code`,d(`copyMermaidSource`),Y),c=ni(`download-mermaid-svg`,d(`downloadMermaidSvg`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>`);n.append(r,o,s,c),i.before(a),i.dataset.quickforgeMermaidOriginalCopy=`true`,i.setAttribute(`hidden`,``),e.append(t,n),a.append(e)}let o=a.querySelector(`.quickforge-mermaid-code-menu`),s=a.querySelector(`[data-quickforge-action="mermaid-preview-mode"]`),c=a.querySelector(`[data-quickforge-action="mermaid-source-mode"]`),l=a.querySelector(`[data-quickforge-action="copy-mermaid-code"]`),u=a.querySelector(`[data-quickforge-action="download-mermaid-svg"]`),f=()=>{o&&(o.open=!1)};o&&!o.dataset.quickforgeMermaidMenuBound&&(o.dataset.quickforgeMermaidMenuBound=`true`,o.addEventListener(`toggle`,()=>{o.open&&ri(e.closest(`markdown-block`)??document,o)})),s&&(s.onclick=()=>{di(e,`preview`),f()}),c&&(c.onclick=()=>{di(e,`source`),f()}),l&&(l.onclick=async()=>{await p(t),Vr(l,d(`copyMermaidSource`),Y)}),u&&(u.onclick=()=>{Qr(`quickforge-mermaid-${Date.now()}.svg`,n,`image/svg+xml;charset=utf-8`),f()})}function pi(e){let t=e.querySelector(`:scope > div > div:first-child`);if(!t||e.querySelector(`[data-quickforge-mermaid-error="true"]`))return;let n=document.createElement(`div`);n.dataset.quickforgeMermaidError=`true`,n.className=`quickforge-mermaid-code-error`,n.textContent=d(`mermaidRenderFailed`),t.after(n)}function mi(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(n=>{try{if(!li(n)){ui(n);return}let r=Ur(n).trim();if(!r){ui(n);return}let i=$r(r);if(n.querySelector(`[data-quickforge-mermaid-preview="true"]`)&&n.dataset.quickforgeMermaidPreviewSource===i){di(n,n.dataset.quickforgeMermaidMode===`source`?`source`:`preview`);return}if(t){(n.dataset.quickforgeMermaidPendingSource||n.dataset.quickforgeMermaidPreviewSource)&&ui(n);return}if(n.dataset.quickforgeMermaidPendingSource===i||n.dataset.quickforgeMermaidFailedSource===i||!n.querySelector(`:scope > div > div:first-child`))return;ui(n);let a=String(++ci);n.dataset.quickforgeMermaidRequestToken=a,n.dataset.quickforgeMermaidPendingSource=i,(async()=>{try{let t=await T(r);if(!t)throw Error(`Empty Mermaid SVG`);let o=E(t);if(!n.isConnected||n.dataset.quickforgeMermaidRequestToken!==a||e.dataset.quickforgeAgentStreaming===`true`||!li(n)||$r(Ur(n).trim())!==i){n.dataset.quickforgeMermaidRequestToken===a&&(delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken);return}let s=n.querySelector(`:scope > div > div:first-child`);if(!s){delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken;return}let c=document.createElement(`div`);c.dataset.quickforgeMermaidPreview=`true`,c.className=`quickforge-svg-code-preview quickforge-mermaid-code-preview`,c.setAttribute(`aria-label`,d(`mermaidPreviewLabel`));let l=document.createElement(`img`);l.alt=d(`mermaidPreviewLabel`),l.src=o,l.title=d(`mermaidEnlargePreview`),l.addEventListener(`click`,()=>Zr(l.src,d(`mermaidPreviewLabel`))),c.replaceChildren(l),n.classList.add(`quickforge-svg-code-block`,`quickforge-mermaid-code-block`),s.after(c),fi(n,r,t),n.dataset.quickforgeMermaidPreviewSource=i,delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidFailedSource,delete n.dataset.quickforgeMermaidRequestToken,di(n,`preview`)}catch{if(!n.isConnected||n.dataset.quickforgeMermaidRequestToken!==a||!li(n)||$r(Ur(n).trim())!==i)return;delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken,n.dataset.quickforgeMermaidFailedSource=i,pi(n)}})()}catch{ui(n),pi(n)}})}function hi(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(e=>{let n=e.querySelector(`[data-quickforge-action="execute-markdown-command"]`);if(!Kr(e)){n?.remove(),delete e.dataset.quickforgeCommand;return}let r;if(n&&e.dataset.quickforgeCommand!==void 0){if(n.disabled===t)return;r=e.dataset.quickforgeCommand}else r=Wr(Ur(e));if(!r){n?.remove(),delete e.dataset.quickforgeCommand;return}e.dataset.quickforgeCommand=r;let i=d(`executeInTerminal`),a=n??Hr(`execute-markdown-command`,i,`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="6 3 20 12 6 21 6 3"/></svg>`,()=>{let t=Wr(Ur(e));t&&window.dispatchEvent(new CustomEvent(`quickforge:execute-markdown-command`,{detail:{command:t,confirm:Gr(t)>1,dangerous:zr.test(t)}}))});if(a.title=i,a.setAttribute(`aria-label`,i),a.disabled=t,a.className=`pointer-events-auto inline-flex size-8 items-center justify-center rounded-md text-emerald-600 transition-colors hover:bg-emerald-500/10 hover:text-emerald-700 disabled:cursor-not-allowed disabled:opacity-40 dark:text-emerald-400 dark:hover:text-emerald-300`,!n){let t=e.querySelector(`:scope > div > div:first-child`),n=t?.querySelector(`copy-button`);if(t&&n){let e=document.createElement(`div`);e.className=`flex items-center gap-1`,n.before(e),e.appendChild(n),e.appendChild(a)}}})}var gi=/[A-Za-z]:[\\/][^\s"'<>`]+|(?:\/Users|\/home|\/workspace|\/mnt|\/Volumes)\/[^\s"'<>`]+/g,_i=new Set([`.`,`,`,`;`,`:`,`!`,`?`,`)`,`]`,`}`,`>`,`。`,`,`,`;`,`:`,`!`,`?`,`)`,`】`,`》`]),vi=[`pre`,`code`,`a`,`button`,`textarea`,`input`,`select`,`thinking-block`,`tool-message`,`.quickforge-file-path-link`,`.quickforge-message-actions`,`.quickforge-process-group`,`.quickforge-approval-card`].join(`,`);function yi(e){let t=e.length;for(;t>0&&_i.has(e[t-1]);)--t;return{path:e.slice(0,t),suffix:e.slice(t)}}function bi(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`quickforge-file-path-link`,n.dataset.quickforgeFilePath=e,n.textContent=e,n.title=`Open file`,n.setAttribute(`aria-label`,`Open file ${e}`),n.onclick=n=>{n.preventDefault(),n.stopPropagation(),t(e)},n}function xi(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){let t=e.textContent??``;if(!gi.test(t))return NodeFilter.FILTER_REJECT;gi.lastIndex=0;let n=e.parentElement;return!n||n.closest(vi)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=n.nextNode();for(;r;)t.push(r),r=n.nextNode();return t}function Si(e,t){let n=e.textContent??``;gi.lastIndex=0;let r,i=0,a=document.createDocumentFragment(),o=!1;for(;r=gi.exec(n);){let e=r[0],{path:s,suffix:c}=yi(e);if(!s)continue;let l=r.index,u=l+e.length;l>i&&a.append(document.createTextNode(n.slice(i,l))),a.append(bi(s,t)),c&&a.append(document.createTextNode(c)),i=u,o=!0}o&&(i<n.length&&a.append(document.createTextNode(n.slice(i))),e.replaceWith(a))}function Ci(e,t,n){let r=Array.from(e.querySelectorAll(`markdown-block`)),i=r.reduce((e,t)=>e+(t.textContent?.length??0),0),a=m(t).length,o=`${String(t.timestamp??``)}:${a}:${r.length}:${i}`;e.dataset.quickforgeLocalPathSignature!==o&&(r.forEach(e=>{xi(e).forEach(e=>Si(e,n))}),e.dataset.quickforgeLocalPathSignature=o)}function wi(e,t){let n=new Set,r;e.forEach((e,t)=>{if(e.role===`assistant`){r=t;return}r!==void 0&&n.add(r),r=void 0});let i=t&&e[e.length-1]?.role===`assistant`;return r!==void 0&&!i&&n.add(r),n}function Ti(e,t,n){let r=d(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),v(e,$e),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{v(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Ei(e,t,n,r){let i=document.createElement(`button`);return i.type=`button`,i.dataset.quickforgeAction=e,i.title=t,i.setAttribute(`aria-label`,t),v(i,n),i.className=`pointer-events-auto inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,i.onclick=e=>{e.stopPropagation(),r(i)},i}function Di(e){e.querySelectorAll(`.quickforge-rollback-popover`).forEach(e=>{e.quickforgeCleanup?.(),(e.closest(`.quickforge-rollback-action`)?.querySelector(`button[data-quickforge-action="rollback"]`))?.setAttribute(`aria-expanded`,`false`),e.remove()})}function Oi(e){let{panel:t,button:n,messageIndex:r,title:i,description:a,onConfirm:o}=e,s=n.closest(`.quickforge-rollback-action`);if(!s||n.disabled)return;if(s.querySelector(`.quickforge-rollback-popover`)){Di(t);return}Di(t);let c=document.createElement(`div`);c.className=`quickforge-rollback-popover`,c.setAttribute(`role`,`dialog`),c.setAttribute(`aria-label`,i),c.tabIndex=-1;let l=document.createElement(`div`);l.className=`quickforge-rollback-popover-arrow`;let u=document.createElement(`div`);u.className=`quickforge-rollback-popover-title`,u.textContent=i;let f=document.createElement(`div`);f.className=`quickforge-rollback-popover-description`,f.textContent=a;let p=document.createElement(`div`);p.className=`quickforge-rollback-popover-footer`;let m=document.createElement(`button`);m.type=`button`,m.className=`quickforge-rollback-popover-cancel`,m.textContent=d(`cancel`);let h=document.createElement(`button`);h.type=`button`,h.className=`quickforge-rollback-popover-confirm`,h.textContent=d(`confirmRollback`),p.append(m,h),c.append(l,u,f,p);let g=()=>Di(t),_=e=>{let t=e.target;!t||c.contains(t)||n.contains(t)||g()},v=e=>{e.key===`Escape`&&(e.preventDefault(),g())};c.quickforgeCleanup=()=>{document.removeEventListener(`pointerdown`,_,!0),document.removeEventListener(`keydown`,v)},c.addEventListener(`pointerdown`,e=>e.stopPropagation()),c.addEventListener(`click`,e=>e.stopPropagation()),m.addEventListener(`click`,g),h.addEventListener(`click`,async()=>{h.disabled=!0,m.disabled=!0,h.textContent=d(`rollingBack`);try{await o(r)}finally{g()}}),s.append(c),n.setAttribute(`aria-expanded`,`true`),document.addEventListener(`pointerdown`,_,!0),document.addEventListener(`keydown`,v),window.requestAnimationFrame(()=>h.focus())}function ki(e){let t=document.createElement(`span`);t.className=`quickforge-rollback-action`;let n=Ei(`rollback`,d(`rollback`),et,t=>{Oi({panel:e.panel,button:t,messageIndex:e.messageIndex,title:e.title,description:e.description,onConfirm:e.onConfirm})});return n.disabled=e.isDisabled,n.setAttribute(`aria-haspopup`,`dialog`),n.setAttribute(`aria-expanded`,`false`),t.append(n),t}function Ai(e){return e.querySelector(`message-list`)}function ji(e){return Array.from(e.querySelectorAll(`user-message, assistant-message`)).filter(t=>t.closest(`message-list`)===e)}function Mi(e){let t=Ai(e);return t?ji(t):[]}function Ni(e){return(Ai(e)?.parentElement?.querySelector(`:scope > streaming-message-container:not(.hidden)`))?.querySelector(`:scope > div > assistant-message`)??null}function Pi(e){let{panel:t,getMessages:n,isStreaming:r,onCopyAnswer:i,onRollbackFromMessage:a,onRetryFromMessage:o,onForkFromMessage:s,onOpenLocalFilePath:c,disableFork:l,readOnly:u=!1,enableTerminalCommandActions:f=!0,rollbackConfirmTitle:p=d(`rollbackConfirmTitle`),rollbackConfirmDescription:g=d(`rollbackConfirm`)}=e,_=n().map((e,t)=>({message:e,index:t})).filter(({message:e})=>e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`),v=(()=>{for(let e=_.length-1;e>=0;e--)if(_[e].message.role!==`assistant`)return _[e]})(),y=Mi(t),b=r(),x=wi(_.map(({message:e})=>e),b),S=e=>{let t=d(`copy`);return Ei(`copy`,t,Y,async n=>{let r=e();if(r)try{await i(r),Ti(n,t,Y)}catch{}})};y.forEach((e,i)=>{let f=_[i];if(!f)return;e.classList.add(`group`,`relative`),e.classList.toggle(`quickforge-assistant-message`,f.message.role===`assistant`),e.classList.toggle(`quickforge-user-message`,f.message.role!==`assistant`),f.message.role===`assistant`&&c&&Ci(e,f.message,c);let y=`quickforge-message-actions pointer-events-none mt-1 flex gap-1 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100 ${f.message.role===`assistant`?`px-4 justify-start`:`mx-4 justify-end`}`,b=e.querySelector(`.quickforge-message-actions`);if(!(f.message.role!==`assistant`||x.has(i))){b?.remove();return}if(b?.dataset.quickforgeLayout===`message-bottom`){b.className=y,b.parentElement===e&&b!==e.lastElementChild&&e.append(b),u&&Di(t),b.querySelectorAll(`button[data-quickforge-action="rollback"], button[data-quickforge-action="retry"], button[data-quickforge-action="fork"]`).forEach(e=>{if(u){e.closest(`.quickforge-rollback-action`)?.remove(),e.remove();return}e.disabled=r()}),r()&&Di(t);let n=b.querySelector(`button[data-quickforge-action="retry"]`),i=!u&&v&&f.index===v.index&&f.message.role!==`assistant`;if(n&&!i)n.remove();else if(!n&&i){let e=Ei(`retry`,d(`retry`),nt,()=>{o(f.index)});e.disabled=r(),b.append(e)}return}b?.remove();let C=document.createElement(`div`);if(C.dataset.quickforgeLayout=`message-bottom`,C.className=y,f.message.role===`assistant`){let e=m(f.message);if(!e)return;let t=S(()=>{let t=n()[f.index];return t?m(t):e});if(C.append(t),!u&&!l){let e=Ei(`fork`,d(`forkConversation`),tt,()=>{s(f.index)});e.disabled=r(),C.append(e)}}else{let e=h(f.message);if(e){let t=S(()=>{let t=n()[f.index];return t?h(t):e});C.append(t)}if(!u){let e=ki({panel:t,messageIndex:f.index,isDisabled:r(),title:p,description:g,onConfirm:a});C.append(e)}if(!u&&v&&f.index===v.index){let e=Ei(`retry`,d(`retry`),nt,()=>{o(f.index)});e.disabled=r(),C.append(e)}}e.append(C)}),ri(t);let C=[...y];if(b){let e=Ni(t);e&&(e.classList.add(`quickforge-assistant-message`),C.push(e))}Lr(t,C,b),t.querySelectorAll(`message-list[data-quickforge-subagent-process="true"]`).forEach(e=>{Lr(e,ji(e),e.dataset.quickforgeSubagentStreaming===`true`)}),si(t,r()),mi(t,r()),f?hi(t,r()):t.querySelectorAll(`[data-quickforge-action="execute-markdown-command"]`).forEach(e=>e.remove())}function Fi(e){return e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`}function Ii(e){return e.role===`user`||e.role===`user-with-attachments`}function Li(e){return e.role===`assistant`?m(e).trim().length>0:!1}function Ri(e){return e.querySelector(`message-list`)}function zi(e){let t=Ri(e);return t?Array.from(t.querySelectorAll(`user-message, assistant-message`)).filter(e=>e.closest(`message-list`)===t):[]}var Bi=`.quickforge-assistant-waiting`;function Vi(e){e.querySelectorAll(Bi).forEach(e=>e.remove())}function Hi(e){let t=e.querySelectorAll(`thinking-block, tool-message`);for(let e of t)if(!e.closest(`.quickforge-process-body`))return!0;let n=e.querySelectorAll(`markdown-block, code-block`);for(let e of n)if(!e.closest(`.quickforge-process-body`)&&(e.textContent??``).trim().length>0)return!0;let r=e.cloneNode(!0);return r.querySelectorAll(`.quickforge-message-actions`).forEach(e=>e.remove()),r.querySelectorAll(`.quickforge-process-body`).forEach(e=>e.remove()),(r.textContent??``).trim().length>0}function Ui(e){let{panel:t,getMessages:n,isStreaming:r,isActive:i}=e,a=t.querySelector(Bi);if(!r()||!i)return Vi(t),!1;let o=Ri(t),s=n(),c=s.map((e,t)=>({message:e,index:t})).filter(({message:e})=>Fi(e)),l=(()=>{for(let e=c.length-1;e>=0;e--)if(Ii(c[e].message))return e;return-1})();if(!o||l<0)return a?.remove(),!1;let u=c[l],f=s.slice(u.index+1).some(Li),p=zi(t),m=p[l],h=p.slice(l+1).some(e=>e.matches(`assistant-message`)&&Hi(e));if(!m||f||h)return a?.remove(),!1;let g=a??document.createElement(`div`);return g.className=`quickforge-assistant-waiting`,g.setAttribute(`role`,`status`),g.setAttribute(`aria-live`,`polite`),g.setAttribute(`aria-label`,d(`assistantWaitingAriaLabel`)),a||(g.innerHTML=`
|
|
283
283
|
<div class="quickforge-assistant-waiting-dots" aria-hidden="true">
|
|
284
284
|
<span></span>
|
|
285
285
|
<span></span>
|
|
286
286
|
<span></span>
|
|
287
287
|
</div>
|
|
288
|
-
`),h.previousElementSibling!==p&&p.after(h),!0}function Ui(e){let{panel:t,isStreaming:n,abort:r,agentAccessMode:i,planMode:a,workspaceToolsEnabled:o,readOnly:s,allowModelControls:c,onAccessModeChange:l,onTogglePlanMode:u,onInput:d,onFilesChange:f,removeCommandSuggestions:p,updateCommandSuggestions:m,setupCommandTextareaHandler:h,removeCapabilitySuggestions:g,updateCapabilitySuggestions:_,setupCapabilityTextareaHandler:v,insertBuiltinPluginMention:y,onBeforeSend:b}=e,x=t.querySelector(`message-editor`);x?.classList.add(`quickforge-composer`),x?.parentElement?.classList.add(`quickforge-composer-shell`),x?.parentElement?.parentElement?.classList.add(`quickforge-composer-dock`);let C=x?.querySelector(`textarea`);if(C&&(C.placeholder=S(`composerPlaceholder`)),s){t.querySelector(`.quickforge-composer-dock`)?.remove();return}Nt({editor:x,onInput:d,onFilesChange:f,removeCommandSuggestions:p,updateCommandSuggestions:m,removeCapabilitySuggestions:g,updateCapabilitySuggestions:_,onBeforeSend:b}),h(x),v(x),At(x,a,u);let w=t.querySelector(`agent-interface`);if(w){let e=w.enableModelSelector!==c;w.enableModelSelector=c,w.enableThinkingSelector=!1,e&&w.requestUpdate?.()}let T=x?.querySelectorAll(`.flex.gap-2.items-center`),E=T?.[0],D=T?.[T.length-1];if(D){if(kt(x,D),Mt({rightControls:D,isStreaming:n,abort:r,removeCommandSuggestions:p}),!E){t.querySelector(`.quickforge-plus-inline`)?.remove(),xt(t),t.querySelector(`.quickforge-agent-access-inline`)?.remove(),gt(t),t.querySelector(`.quickforge-yolo-inline`)?.remove(),t.querySelector(`.quickforge-plan-inline`)?.remove();return}if(x&&Dt({panel:t,editor:x,leftControls:E,insertBuiltinPluginMention:y,removeCommandSuggestions:p,removeCapabilitySuggestions:g}),jt({panel:t,leftControls:E,planMode:a,onTogglePlanMode:u}),!o){t.querySelector(`.quickforge-agent-access-inline`)?.remove(),gt(t),t.querySelector(`.quickforge-yolo-inline`)?.remove();return}yt({panel:t,leftControls:E,agentAccessMode:i,onAccessModeChange:l,dismissComposerMenus:()=>xt(t)})}}function $(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function Wi(e,t){let n=e[t];return typeof n==`string`&&n.trim()?n:void 0}function Gi(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function Ki(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function qi(e){let t=e&&$(e.diff)?e.diff:void 0;return{addedLines:t?Ki(t,`addedLines`):void 0,removedLines:t?Ki(t,`removedLines`):void 0}}function Ji(e=``){let t=e.toLowerCase();return t.endsWith(`.html`)||t.endsWith(`.htm`)?`html`:/\.(svg|png|jpe?g|webp|gif|bmp|ico)$/i.test(t)?`image`:t.endsWith(`.md`)||t.endsWith(`.mdx`)?`markdown`:/\.(ts|tsx|js|jsx|mjs|cjs|css|scss|less|json|jsonc|txt|xml|yml|yaml|toml|ini|py|rb|go|rs|java|c|h|cpp|hpp|cs|php|sh|bash|zsh|ps1)$/i.test(t)?`code`:`unknown`}function Yi(e){return e===`html`||e===`image`||e===`markdown`||e===`code`}function Xi(e){return[e.source,e.path??``,e.command??``,e.outputFile??``,e.toolCallId??``,e.preview?`preview`:``].join(`\0`)}function Zi(e,t,n){let r=Xi(n);t.has(r)||(t.add(r),e.push({id:`${e.length}:${r}`,...n}))}function Qi(e){if(!(typeof e!=`string`||!e.trim()))try{return JSON.parse(e)}catch{return}}function $i(e,t){if(t&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t;let n=e.data;if(Array.isArray(n))for(let e of n){if(!$(e)||e.type!==`text`)continue;let t=Qi(e.text);if($(t)&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t}let r=e.content;if(Array.isArray(r))for(let e of r){if(!$(e)||e.type!==`text`)continue;let t=Qi(e.text);if($(t)&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t}return t}function ea(e){if(typeof e==`string`&&e.trim())return{path:e};if($(e)){let t=Wi(e,`path`);return t?{path:t,title:Wi(e,`title`),description:Wi(e,`description`),kind:Wi(e,`kind`),preview:Gi(e,`preview`)}:void 0}}function ta(e){let t=new Set,n=[];for(let r of e){if(r.role!==`toolResult`)continue;let e=typeof r.toolName==`string`?r.toolName:``,i=$(r.details)?r.details:void 0,a=typeof r.toolCallId==`string`?r.toolCallId:void 0;if(!(!i&&e!==`present_files`)){if(e===`write_file`||e===`edit_file`){let r=i?Wi(i,`path`):void 0;if(r){let o=Ji(r),{addedLines:s,removedLines:c}=qi(i);Zi(n,t,{source:e,confidence:`high`,path:r,toolCallId:a,kind:o,preview:Yi(o),presentation:`inferred`,addedLines:s,removedLines:c})}}else if(e===`present_files`){let e=$i(r,i),o=$(e)&&Array.isArray(e.files)?e.files:[],s=$(e)?Wi(e,`defaultPreview`):void 0,c=new Set($(e)&&Array.isArray(e.previewed)?e.previewed.filter(e=>typeof e==`string`):[]);for(let e of o){let r=ea(e);if(!r?.path)continue;let i=r.kind??Ji(r.path);Zi(n,t,{source:`present_files`,confidence:`high`,path:r.path,title:r.title,description:r.description,toolCallId:a,kind:i,preview:r.preview??(c.has(r.path)||s===r.path||Yi(i)),defaultPreview:s===r.path,presentation:`explicit`})}}else if(e===`run_command`&&i){let e=Wi(i,`command`),r=Wi(i,`outputFile`);(e||r)&&Zi(n,t,{source:`run_command`,confidence:`low`,command:e,outputFile:r,toolCallId:a})}}}return n}function na(e){return e?.length?ta(e):[]}var ra=`quickforge:composer-drafts:v1`,ia=100,aa={},oa=!1;function sa(e){return!!(e&&!e.startsWith(`pending-`))}function ca(e){return sa(e.sessionId)?`session:${e.sessionId}`:e.scope===`project`&&e.projectId?`new:project:${e.projectId}`:`new:global`}function la(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(!r||typeof r!=`object`||Array.isArray(r))continue;let e=r;typeof e.text==`string`&&(t[n]={text:e.text,updatedAt:typeof e.updatedAt==`string`?e.updatedAt:new Date().toISOString(),scope:e.scope===`project`?`project`:e.scope===`global`?`global`:void 0,projectId:typeof e.projectId==`string`?e.projectId:void 0,sessionId:typeof e.sessionId==`string`?e.sessionId:void 0})}return t}function ua(){try{return globalThis.localStorage}catch{return}}function da(e,t=ia){return Object.fromEntries(Object.entries(e).filter(([,e])=>e.text.length>0).sort(([,e],[,t])=>t.updatedAt.localeCompare(e.updatedAt)).slice(0,t))}function fa(){let e=ua();if(!e||oa)return aa;let t;try{t=e.getItem(ra)}catch{return oa=!0,aa}try{return la(t?JSON.parse(t):void 0)}catch{return aa}}function pa(e){let t=da(e);aa=t;let n=ua();if(!(!n||oa))try{Object.keys(t).length===0?n.removeItem(ra):n.setItem(ra,JSON.stringify(t))}catch{let e=da(t,Math.ceil(ia/2));aa=e;try{Object.keys(e).length===0?n.removeItem(ra):n.setItem(ra,JSON.stringify(e))}catch{oa=!0}}}async function ma(e){let t=fa()[e];if(!(!t||t.text.length===0))return{text:t.text,attachments:[]}}async function ha(e,t,n){let r=t.text??``;if(r.length===0){await ga(e);return}let i=fa();i[e]={text:r,updatedAt:new Date().toISOString(),scope:n.scope,projectId:n.scope===`project`?n.projectId:void 0,sessionId:sa(n.sessionId)?n.sessionId:void 0},pa(i)}async function ga(e){let t=fa();Object.prototype.hasOwnProperty.call(t,e)&&(delete t[e],pa(t))}function _a(e,t,n=200){for(e.delete(t),e.add(t);e.size>n;){let t=e.values().next().value;if(t===void 0)break;e.delete(t)}}function va(){let e=0;return{version:()=>e,isCurrent:t=>t===e,invalidate:()=>(e+=1,e)}}var ya=n();function ba(e){let t=e.state.contextCompaction;if(!t?.summaryMessage)return e.state.messages;let n=e.state.messages,r=Math.min(n.length,Math.max(0,Number(t.compactedUpToIndex)||0));return[t.summaryMessage,...n.slice(r)]}function xa(e){let t=String(e.length);for(let n of e)n.role===`toolResult`&&(t+=`|${n.toolCallId??``}:${n.toolName??``}`);return t}function Sa({agent:e,onModelSelect:t,revision:n,agentAccessMode:r,workspaceToolsEnabled:i,project:a,projectId:c,chatScope:u=`global`,onAccessModeChange:d,onRollbackFromMessage:f,onRetryFromMessage:h,onCopyAnswer:g,onForkFromMessage:y,onApproveToolCall:b,onRejectToolCall:C,onApproveAutoCompact:w,onRejectAutoCompact:T,onOpenWorkspaceGitChanges:E,onOpenLocalFilePath:ee,onArtifactsChange:te,onContextUsageDisplayChange:O,restoredDraft:ne,onRestoredDraftConsumed:re,disableFork:ie=!1,readOnly:k=!1,bypassClientApiKeyCheck:A=!1,allowModelControls:ae=!0,newChatEmptyState:j=!1,rollbackConfirmTitle:M,rollbackConfirmDescription:N}){let P=(0,D.useRef)(null),F=(0,D.useRef)(void 0),I=(0,D.useRef)(void 0),L=(0,D.useRef)(new Map),oe=(0,D.useRef)([]),se=(0,D.useRef)(void 0),ce=(0,D.useRef)(new Set),R=(0,D.useRef)(void 0),le=(0,D.useRef)(null),ue=(0,D.useRef)(!1),de=(0,D.useRef)(new WeakSet),fe=(0,D.useRef)(``),pe=(0,D.useRef)(``),me=(0,D.useRef)(va()),[he,ge]=(0,D.useState)(),[_e,ve]=(0,D.useState)(!1),ye=(0,D.useCallback)(()=>ve(e=>!e),[]),be=(0,D.useCallback)(()=>ve(!1),[]);(0,D.useEffect)(()=>{e?.setPlanMode?.(_e,_e?be:void 0)},[e,_e,be]);let z=(0,D.useCallback)(()=>{R.current&&=(window.clearTimeout(R.current),void 0)},[]),B=(0,D.useCallback)(()=>{le.current?.cancel(),le.current=null,ue.current=!1},[]),V=(0,D.useCallback)(e=>{_a(ce.current,e),re?.(e)},[re]),xe=(0,D.useMemo)(()=>({sessionId:e?.sessionId,scope:u,projectId:c}),[e?.sessionId,u,c]),Se=ca(xe),Ce=(0,D.useRef)(xe),we=(0,D.useRef)(Se);(0,D.useEffect)(()=>{Ce.current=xe,we.current=Se},[xe,Se]),(0,D.useEffect)(()=>()=>{z(),B()},[z,B]);let Te=(0,D.useCallback)((e,t,n)=>{if(t.text.length===0){ga(e).catch(e=>l.error(`Failed to clear composer draft:`,e));return}ha(e,t,n).catch(e=>l.error(`Failed to save composer draft:`,e))},[]),Ee=(0,D.useCallback)((e,t,n)=>{R.current&&window.clearTimeout(R.current),R.current=window.setTimeout(()=>{R.current=void 0,Te(e,t,n)},400)},[Te]),De=(0,D.useCallback)((e,t=we.current,n=Ce.current)=>{let r=Pt(e);m(r)?L.current.set(t,r):L.current.delete(t),Te(t,r,n)},[Te]),H=(0,D.useRef)({onCopyAnswer:g,onRollbackFromMessage:f,onRetryFromMessage:h,onForkFromMessage:y,onAccessModeChange:d,onTogglePlanMode:ye,onApproveToolCall:b,onRejectToolCall:C,onApproveAutoCompact:w,onRejectAutoCompact:T,onOpenWorkspaceGitChanges:E,onOpenLocalFilePath:ee,onArtifactsChange:te,onContextUsageDisplayChange:O,onModelSelect:t,agentAccessMode:r,planMode:_e,workspaceToolsEnabled:i,disableFork:ie,readOnly:k,allowModelControls:ae,newChatEmptyState:j,bypassClientApiKeyCheck:A,rollbackConfirmTitle:M,rollbackConfirmDescription:N,gitBranch:he});(0,D.useEffect)(()=>{H.current={onCopyAnswer:g,onRollbackFromMessage:f,onRetryFromMessage:h,onForkFromMessage:y,onAccessModeChange:d,onTogglePlanMode:ye,onApproveToolCall:b,onRejectToolCall:C,onApproveAutoCompact:w,onRejectAutoCompact:T,onOpenWorkspaceGitChanges:E,onOpenLocalFilePath:ee,onArtifactsChange:te,onContextUsageDisplayChange:O,onModelSelect:t,agentAccessMode:r,planMode:_e,workspaceToolsEnabled:i,disableFork:ie,readOnly:k,allowModelControls:ae,newChatEmptyState:j,bypassClientApiKeyCheck:A,rollbackConfirmTitle:M,rollbackConfirmDescription:N,gitBranch:he},I.current=ne});let Oe=a?.id??c;(0,D.useEffect)(()=>{let e=!1;return queueMicrotask(()=>{if(!e){if(!Oe){ge(void 0);return}x(Oe).then(t=>{e||ge(t.isGitRepository?t.branch:void 0)}).catch(t=>{e||(l.warn(`Failed to load git branch:`,t),ge(void 0))})}}),()=>{e=!0}},[Oe,n]);let ke=(0,D.useRef)(null),U=(0,D.useRef)(null),W=(0,D.useRef)(null),G=(0,D.useRef)(null),K=(0,D.useRef)(null);(0,D.useEffect)(()=>{let e=!1;return a?.id?(fetch(`/api/project/commands?projectId=${encodeURIComponent(a.id)}`,{cache:`no-store`}).then(e=>e.ok?e.json():{commands:[]}).then(t=>{e||(oe.current=Array.isArray(t.commands)?t.commands:[],W.current?.())}).catch(()=>{e||(oe.current=[],W.current?.())}),()=>{e=!0}):(oe.current=[],()=>{e=!0})},[a?.id,n]);let q=(0,D.useCallback)((e,t,n,r)=>{if(t.sessionId&&t.sessionId!==n||!m(t)||ce.current.has(t.id))return;let i=e.querySelector(`message-editor`),a=i?{text:i.value??i.querySelector(`textarea`)?.value??``,attachments:i.attachments?[...i.attachments]:[]}:L.current.get(r),o=se.current;if(!(o?.id!==t.id||!m(a??v())||a?.text===o.text))return;me.current.invalidate(),B();let s=e.querySelector(`agent-interface`);le.current=Lt(e,t,L.current,r,{shouldApply:()=>!ce.current.has(t.id)&&e.isConnected&&!!P.current?.contains(e),onApplyStart:()=>{ue.current=!0},onApplyEnd:()=>{ue.current=!1},onApplied:()=>{de.current.add(e),F.current=t.id,se.current={id:t.id,text:t.text},V(t.id)},updateComplete:s?.updateComplete})},[B,V]);return(0,D.useEffect)(()=>{if(!P.current||!e)return;let t=me.current,n=de.current,r=new o;ve(!1);let i=e.sessionId,a=we.current,c=Ce.current,u=!1,d,f=!1,h=!1,g=!1,y=e.state.isStreaming,b=!1,x=0,C=He({panel:r});U.current=C;let w=Ue({panel:r,getCustomCommands:()=>oe.current,getComposerDrafts:()=>L.current,sessionId:a,setComposerDrafts:e=>{L.current=e},restoreDraftIntoComposer:e=>{It(r,e,L.current,a),Ee(a,e,c)}}),T=Ze({panel:r,restoreDraftIntoComposer:e=>{It(r,e,L.current,a),Ee(a,e,c)}}),E=_({panel:r,getSystemPrompt:()=>e.state.systemPrompt,getMessages:()=>e.state.messages,getEffectiveMessages:()=>ba(e),getContextWindow:()=>e.state.model?.contextWindow??0,getTools:()=>e.state.tools,getMaxTokens:()=>e.state.model?.maxTokens,getServerContextUsage:()=>e.state.contextUsage??null,getIsCompacted:()=>!!e.state.contextCompaction?.summaryMessage,getGitBranch:()=>H.current.gitBranch,onGitBranchClick:()=>H.current.onOpenWorkspaceGitChanges?.(),renderInline:!1,renderModelRing:p().showContextUsage,onDisplayChange:t=>H.current.onContextUsageDisplayChange?.(e.sessionId,t)}),D=()=>{if(ue.current)return;g=!0,t.invalidate(),B();let e=I.current;e&&(!e.sessionId||e.sessionId===i)&&V(e.id)},ee=e=>{D(),f=!1;let t=r.querySelector(`message-editor`),n={text:e,attachments:t?.attachments?[...t.attachments]:[]};m(n)?(L.current.set(a,n),Ee(a,n,c)):(L.current.delete(a),z(),ga(a).catch(e=>l.error(`Failed to clear composer draft:`,e)))},te=e=>{D(),f=!1;let t=r.querySelector(`message-editor`),n=t?.querySelector(`textarea`),i={text:t?.value??n?.value??``,attachments:e?[...e]:[]};m(i)?(L.current.set(a,i),Ee(a,i,c)):(L.current.delete(a),z(),ga(a).catch(e=>l.error(`Failed to clear composer draft:`,e)));let o=r.querySelector(`agent-interface`);o?.requestUpdate?.(),window.requestAnimationFrame(()=>W.current?.()),o?.updateComplete?.then(()=>W.current?.())},O=()=>{e.state.isStreaming?r.dataset.quickforgeAgentStreaming=`true`:delete r.dataset.quickforgeAgentStreaming},ne=()=>{if(u||!r.isConnected)return;O();let t=H.current,n=xa(e.state.messages);if(n!==pe.current){pe.current=n;let r=na(e.state.messages),i=JSON.stringify(r.map(e=>[e.source,e.path,e.command,e.outputFile,e.confidence,e.preview,e.defaultPreview,e.addedLines,e.removedLines]));i!==fe.current&&(fe.current=i,t.onArtifactsChange?.(r))}try{Ni({panel:r,getMessages:()=>e.state.messages,isStreaming:()=>e.state.isStreaming,onCopyAnswer:t.onCopyAnswer,onRollbackFromMessage:t.onRollbackFromMessage,onRetryFromMessage:t.onRetryFromMessage,onForkFromMessage:t.onForkFromMessage,onOpenLocalFilePath:t.onOpenLocalFilePath,disableFork:t.disableFork,readOnly:t.readOnly,enableTerminalCommandActions:!t.readOnly,rollbackConfirmTitle:t.rollbackConfirmTitle,rollbackConfirmDescription:t.rollbackConfirmDescription}),Qt({panel:r,getMessages:()=>e.state.messages,getContextCompaction:()=>e.state.contextCompaction??null}),Hi({panel:r,getMessages:()=>e.state.messages,isStreaming:()=>e.state.isStreaming,isActive:y})}catch(e){l.warn(`Failed to decorate chat messages:`,e)}try{Ui({panel:r,isStreaming:()=>e.state.isStreaming,abort:()=>e.abort(),agentAccessMode:t.agentAccessMode,planMode:t.planMode,workspaceToolsEnabled:t.workspaceToolsEnabled,readOnly:t.readOnly,allowModelControls:t.allowModelControls,onAccessModeChange:t.onAccessModeChange,onTogglePlanMode:t.onTogglePlanMode,onInput:ee,onFilesChange:te,removeCommandSuggestions:w.remove,updateCommandSuggestions:w.update,setupCommandTextareaHandler:w.setupTextareaHandler,removeCapabilitySuggestions:T.remove,updateCapabilitySuggestions:T.update,setupCapabilityTextareaHandler:T.setupTextareaHandler,insertBuiltinPluginMention:T.insertBuiltinPluginMention,onBeforeSend:t=>{let n=T.consumeSelectedCapabilities(t);e.setNextPromptCapabilities?.(n)}})}catch{}let i=G.current??(()=>{let t=e.state.pendingToolApproval;return t?{...t,sessionId:e.sessionId}:null})();if(i&&i.sessionId===e.sessionId&&typeof i.toolCallId==`string`&&typeof i.toolName==`string`){let t=i.toolCallId;Wt({panel:r,onApprove:async()=>{await H.current.onApproveToolCall(t),G.current=null,e.state.pendingToolApproval=null,Gt(r)},onReject:async()=>{await H.current.onRejectToolCall(t),G.current=null,e.state.pendingToolApproval=null,Gt(r)}},i.toolName,t,i.args,i.source)}else{let t=K.current??(()=>{let t=e.state.pendingAutoCompactApproval;return t?{...t,sessionId:e.sessionId}:null})();if(t&&t.sessionId===e.sessionId){let n=t.approvalId;Wt({panel:r,onApprove:async()=>{await H.current.onApproveAutoCompact?.(n),K.current=null,e.state.pendingAutoCompactApproval=null,Gt(r)},onReject:async()=>{await H.current.onRejectAutoCompact?.(n),K.current=null,e.state.pendingAutoCompactApproval=null,Gt(r)}},S(`contextManagement`),n,{percent:t.usage?.percent??0,threshold:t.thresholdPercent??0,keepRecentTurns:t.keepRecentTurns??3,summary:S(`autoCompactApprovalWaiting`,{percent:t.usage?.percent??0,threshold:t.thresholdPercent??0}),description:S(`autoCompactApprovalPreview`,{keepRecentTurns:t.keepRecentTurns??3})})}else Gt(r)}E.update(),C.setup(),C.isEnabled&&C.scheduleScrollToBottom()},re=!1,ie,k=!1,A,ae=()=>{A===void 0&&(A=window.requestAnimationFrame(()=>{A=void 0,k=!1}))},j=()=>{if(!u){k=!0;try{ne()}finally{ae()}}},M=()=>{re||(re=!0,ie=window.requestAnimationFrame(()=>{ie=void 0,re=!1,j()}))};ke.current=j;let N=()=>r.querySelector(`agent-interface`),se=()=>{b||(b=!0,window.requestAnimationFrame(()=>{if(b=!1,u)return;O();let e=N();e?.requestUpdate?.(),(e?.updateComplete??Promise.resolve()).then(()=>{u||j()}),C.isEnabled&&C.scheduleScrollToBottom()}))};W.current=M;let ce=()=>{let e=++x;r.dataset.quickforgeProcessHandoff=String(e);let t=N();t?.requestUpdate?.(),W.current?.(),window.requestAnimationFrame(()=>{!u&&x===e&&W.current?.()});let n=()=>{u||x!==e||(delete r.dataset.quickforgeProcessHandoff,W.current?.(),window.requestAnimationFrame(()=>{!u&&x===e&&W.current?.()}))};(t?.updateComplete??Promise.resolve()).then(n,n)};r.setAgent(e,{onApiKeyRequired:H.current.bypassClientApiKeyCheck?async()=>!0:e=>s.prompt(e),onBeforeSend:()=>{t.invalidate(),B();let e=I.current;e&&(!e.sessionId||e.sessionId===i)&&V(e.id),z(),f=!0,w.remove(),L.current.delete(a),ga(a).catch(e=>l.error(`Failed to clear composer draft:`,e)),C.enable()},onModelSelect:H.current.onModelSelect,toolsFactory:()=>Ve(e.state.tools)}).then(()=>{if(u)return;let e=I.current,n=t.version(),o=o=>{if(!(u||!t.isCurrent(n)))if(e&&F.current!==e.id)q(r,e,i,a);else{let e=o??L.current.get(a)??v();m(e)||(h=!0),B();let i=r.querySelector(`agent-interface`);le.current=Lt(r,e,L.current,a,{shouldApply:()=>!u&&t.isCurrent(n)&&r.isConnected&&!!P.current?.contains(r),onApplyStart:()=>{ue.current=!0},onApplyEnd:()=>{ue.current=!1},onApplied:()=>{h=!0,de.current.add(r)},updateComplete:i?.updateComplete})}};if(e&&F.current!==e.id)o();else{let e=L.current.get(a);e?o(e):ma(a).then(e=>o(e)).catch(e=>l.error(`Failed to load composer draft:`,e))}d=new MutationObserver(()=>{k||M()}),d.observe(r,{childList:!0,subtree:!0}),window.requestAnimationFrame(()=>{u||j()})}),P.current.replaceChildren(r);let R=e.subscribe(t=>{if(t.type===`agent_start`&&(x+=1,delete r.dataset.quickforgeProcessHandoff,y=!0,O(),W.current?.(),C.enable(),G.current?.sessionId===e.sessionId&&(G.current=null),K.current?.sessionId===e.sessionId&&(K.current=null)),t.type===`message_start`||t.type===`message_update`||t.type===`message_end`||t.type===`turn_end`||t.type===`agent_end`){O();let e=t.message;t.type===`message_start`&&e?.role===`assistant`&&(x+=1,delete r.dataset.quickforgeProcessHandoff),(t.type===`message_update`||e?.role===`assistant`)&&(y=!1),W.current?.(),t.type===`message_end`&&e?.role===`assistant`&&ce(),C.isEnabled&&C.scheduleScrollToBottom()}if(t.type===`messages_replaced`){let e=I.current;e&&F.current===e.id&&q(r,e,i,a)}let n=t.type;if((n===`tool_execution_start`||n===`tool_execution_update`||n===`tool_execution_end`)&&se(),t.type===`agent_end`&&(y=!1,O(),ce(),G.current?.sessionId===e.sessionId&&(G.current=null,W.current?.()),K.current?.sessionId===e.sessionId&&(K.current=null,W.current?.())),n===`auto_compact_completed`||n===`messages_replaced`){Dr(r);let e=N();e?.requestUpdate?.(),W.current?.(),window.requestAnimationFrame(()=>W.current?.()),e?.updateComplete?.then(()=>W.current?.())}if(n===`auto_compact_failed`&&l.warn(S(`autoCompactFailed`)),t.type===`tool_approval_required`){let e=t;G.current={toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,sessionId:e.sessionId,source:e.source},W.current?.()}if(t.type===`auto_compact_approval_required`){let e=t;K.current={approvalId:e.approvalId,usage:e.usage,thresholdPercent:e.thresholdPercent,keepRecentTurns:e.keepRecentTurns,sessionId:e.sessionId},W.current?.()}});return()=>{u=!0,t.invalidate(),B(),z(),f?(L.current.delete(a),ga(a).catch(e=>l.error(`Failed to clear composer draft:`,e))):(h||g||n.has(r))&&(Ft(r,L.current,a),De(r,a,c)),w.remove(),w.cleanupTextareaHandler(),T.remove(),T.cleanupTextareaHandler(),E.cleanup(),C.cleanup(),U.current=null,R(),d?.disconnect(),ie!==void 0&&window.cancelAnimationFrame(ie),A!==void 0&&window.cancelAnimationFrame(A),ke.current=null,r.remove()}},[e,z,B,V,De,q,Ee]),(0,D.useEffect)(()=>{let e=P.current;e&&(e.classList.toggle(`quickforge-chat-panel-empty-host`,j),e.dataset.quickforgeEmptyChat=j?`true`:`false`)},[j]),(0,D.useEffect)(()=>{ke.current?.(),(P.current?.querySelector(`agent-interface`))?.requestUpdate?.()},[r,_e,i,he,ie,k,ae,n]),(0,D.useEffect)(()=>{let t=I.current;if(!t||!P.current)return;let n=e?.sessionId??``;if(t.sessionId&&t.sessionId!==n||ce.current.has(t.id))return;let r=P.current.querySelector(`pi-chat-panel`);r&&q(r,t,n,we.current)},[ne,e,q]),(0,ya.jsx)(`div`,{ref:P,className:`min-h-0 flex-1 overflow-hidden`})}export{Sa as ChatPanelHost};
|
|
288
|
+
`),g.previousElementSibling!==m&&m.after(g),!0}function Wi(e){let{panel:t,isStreaming:n,abort:r,agentAccessMode:i,planMode:a,workspaceToolsEnabled:o,readOnly:s,allowModelControls:c,onAccessModeChange:l,onTogglePlanMode:u,onInput:f,onFilesChange:p,removeCommandSuggestions:m,updateCommandSuggestions:h,setupCommandTextareaHandler:g,removeCapabilitySuggestions:_,updateCapabilitySuggestions:v,setupCapabilityTextareaHandler:y,insertBuiltinPluginMention:b,onBeforeSend:x}=e,S=t.querySelector(`message-editor`);S?.classList.add(`quickforge-composer`),S?.parentElement?.classList.add(`quickforge-composer-shell`),S?.parentElement?.parentElement?.classList.add(`quickforge-composer-dock`);let C=S?.querySelector(`textarea`);if(C&&(C.placeholder=d(`composerPlaceholder`)),s){t.querySelector(`.quickforge-composer-dock`)?.remove();return}Nt({editor:S,onInput:f,onFilesChange:p,removeCommandSuggestions:m,updateCommandSuggestions:h,removeCapabilitySuggestions:_,updateCapabilitySuggestions:v,onBeforeSend:x}),g(S),y(S),At(S,a,u);let w=t.querySelector(`agent-interface`);if(w){let e=w.enableModelSelector!==c;w.enableModelSelector=c,w.enableThinkingSelector=!1,e&&w.requestUpdate?.()}let T=S?.querySelectorAll(`.flex.gap-2.items-center`),E=T?.[0],D=T?.[T.length-1];if(D){if(kt(S,D),Mt({rightControls:D,isStreaming:n,abort:r,removeCommandSuggestions:m}),!E){t.querySelector(`.quickforge-plus-inline`)?.remove(),xt(t),t.querySelector(`.quickforge-agent-access-inline`)?.remove(),gt(t),t.querySelector(`.quickforge-yolo-inline`)?.remove(),t.querySelector(`.quickforge-plan-inline`)?.remove();return}if(S&&Dt({panel:t,editor:S,leftControls:E,insertBuiltinPluginMention:b,removeCommandSuggestions:m,removeCapabilitySuggestions:_}),jt({panel:t,leftControls:E,planMode:a,onTogglePlanMode:u}),!o){t.querySelector(`.quickforge-agent-access-inline`)?.remove(),gt(t),t.querySelector(`.quickforge-yolo-inline`)?.remove();return}yt({panel:t,leftControls:E,agentAccessMode:i,onAccessModeChange:l,dismissComposerMenus:()=>xt(t)})}}function $(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function Gi(e,t){let n=e[t];return typeof n==`string`&&n.trim()?n:void 0}function Ki(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function qi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Ji(e){let t=e&&$(e.diff)?e.diff:void 0;return{addedLines:t?qi(t,`addedLines`):void 0,removedLines:t?qi(t,`removedLines`):void 0}}function Yi(e=``){let t=e.toLowerCase(),n=t.replace(/\\/g,`/`).split(`/`).pop()||t;return t.endsWith(`.html`)||t.endsWith(`.htm`)?`html`:/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(t)?`image`:/\.(md|mdx|markdown)$/i.test(t)?`markdown`:n===`dockerfile`||n.endsWith(`.dockerfile`)||n===`makefile`||/\.(ts|tsx|js|jsx|mjs|cjs|css|scss|less|json|jsonc|txt|csv|tsv|log|sql|xml|yml|yaml|toml|ini|py|rb|go|rs|java|swift|kt|kts|c|h|cpp|hpp|cs|php|sh|bash|zsh|ps1)$/i.test(t)?`code`:`unknown`}function Xi(e){return e===`html`||e===`image`||e===`markdown`||e===`code`}function Zi(e){return[e.source,e.path??``,e.command??``,e.outputFile??``,e.toolCallId??``,e.preview?`preview`:``].join(`\0`)}function Qi(e,t,n){let r=Zi(n);t.has(r)||(t.add(r),e.push({id:`${e.length}:${r}`,...n}))}function $i(e){if(!(typeof e!=`string`||!e.trim()))try{return JSON.parse(e)}catch{return}}function ea(e,t){if(t&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t;let n=e.data;if(Array.isArray(n))for(let e of n){if(!$(e)||e.type!==`text`)continue;let t=$i(e.text);if($(t)&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t}let r=e.content;if(Array.isArray(r))for(let e of r){if(!$(e)||e.type!==`text`)continue;let t=$i(e.text);if($(t)&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t}return t}function ta(e){if(typeof e==`string`&&e.trim())return{path:e};if($(e)){let t=Gi(e,`path`);return t?{path:t,title:Gi(e,`title`),description:Gi(e,`description`),kind:Gi(e,`kind`),preview:Ki(e,`preview`)}:void 0}}function na(e){let t=new Set,n=[];for(let r of e){if(r.role!==`toolResult`)continue;let e=typeof r.toolName==`string`?r.toolName:``,i=$(r.details)?r.details:void 0,a=typeof r.toolCallId==`string`?r.toolCallId:void 0;if(!(!i&&e!==`present_files`)){if(e===`write_file`||e===`edit_file`){let r=i?Gi(i,`path`):void 0;if(r){let o=Yi(r),{addedLines:s,removedLines:c}=Ji(i);Qi(n,t,{source:e,confidence:`high`,path:r,toolCallId:a,kind:o,preview:Xi(o),presentation:`inferred`,addedLines:s,removedLines:c})}}else if(e===`present_files`){let e=ea(r,i),o=$(e)&&Array.isArray(e.files)?e.files:[],s=$(e)?Gi(e,`defaultPreview`):void 0,c=new Set($(e)&&Array.isArray(e.previewed)?e.previewed.filter(e=>typeof e==`string`):[]);for(let e of o){let r=ta(e);if(!r?.path)continue;let i=r.kind??Yi(r.path);Qi(n,t,{source:`present_files`,confidence:`high`,path:r.path,title:r.title,description:r.description,toolCallId:a,kind:i,preview:r.preview??(c.has(r.path)||s===r.path||Xi(i)),defaultPreview:s===r.path,presentation:`explicit`})}}else if(e===`run_command`&&i){let e=Gi(i,`command`),r=Gi(i,`outputFile`);(e||r)&&Qi(n,t,{source:`run_command`,confidence:`low`,command:e,outputFile:r,toolCallId:a})}}}return n}function ra(e){return e?.length?na(e):[]}var ia=`quickforge:composer-drafts:v1`,aa=100,oa={},sa=!1;function ca(e){return!!(e&&!e.startsWith(`pending-`))}function la(e){return ca(e.sessionId)?`session:${e.sessionId}`:e.scope===`project`&&e.projectId?`new:project:${e.projectId}`:`new:global`}function ua(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(!r||typeof r!=`object`||Array.isArray(r))continue;let e=r;typeof e.text==`string`&&(t[n]={text:e.text,updatedAt:typeof e.updatedAt==`string`?e.updatedAt:new Date().toISOString(),scope:e.scope===`project`?`project`:e.scope===`global`?`global`:void 0,projectId:typeof e.projectId==`string`?e.projectId:void 0,sessionId:typeof e.sessionId==`string`?e.sessionId:void 0})}return t}function da(){try{return globalThis.localStorage}catch{return}}function fa(e,t=aa){return Object.fromEntries(Object.entries(e).filter(([,e])=>e.text.length>0).sort(([,e],[,t])=>t.updatedAt.localeCompare(e.updatedAt)).slice(0,t))}function pa(){let e=da();if(!e||sa)return oa;let t;try{t=e.getItem(ia)}catch{return sa=!0,oa}try{return ua(t?JSON.parse(t):void 0)}catch{return oa}}function ma(e){let t=fa(e);oa=t;let n=da();if(!(!n||sa))try{Object.keys(t).length===0?n.removeItem(ia):n.setItem(ia,JSON.stringify(t))}catch{let e=fa(t,Math.ceil(aa/2));oa=e;try{Object.keys(e).length===0?n.removeItem(ia):n.setItem(ia,JSON.stringify(e))}catch{sa=!0}}}async function ha(e){let t=pa()[e];if(!(!t||t.text.length===0))return{text:t.text,attachments:[]}}async function ga(e,t,n){let r=t.text??``;if(r.length===0){await _a(e);return}let i=pa();i[e]={text:r,updatedAt:new Date().toISOString(),scope:n.scope,projectId:n.scope===`project`?n.projectId:void 0,sessionId:ca(n.sessionId)?n.sessionId:void 0},ma(i)}async function _a(e){let t=pa();Object.prototype.hasOwnProperty.call(t,e)&&(delete t[e],ma(t))}function va(e,t,n=200){for(e.delete(t),e.add(t);e.size>n;){let t=e.values().next().value;if(t===void 0)break;e.delete(t)}}function ya(){let e=0;return{version:()=>e,isCurrent:t=>t===e,invalidate:()=>(e+=1,e)}}var ba=n();function xa(e){let t=e.state.contextCompaction;if(!t?.summaryMessage)return e.state.messages;let n=e.state.messages,r=Math.min(n.length,Math.max(0,Number(t.compactedUpToIndex)||0));return[t.summaryMessage,...n.slice(r)]}function Sa(e){let t=String(e.length);for(let n of e)n.role===`toolResult`&&(t+=`|${n.toolCallId??``}:${n.toolName??``}`);return t}function Ca({agent:e,onModelSelect:t,revision:n,agentAccessMode:r,workspaceToolsEnabled:i,project:a,projectId:c,chatScope:u=`global`,onAccessModeChange:p,onRollbackFromMessage:m,onRetryFromMessage:h,onCopyAnswer:v,onForkFromMessage:y,onApproveToolCall:S,onRejectToolCall:C,onApproveAutoCompact:w,onRejectAutoCompact:T,onOpenWorkspaceGitChanges:E,onOpenLocalFilePath:ee,onArtifactsChange:te,onContextUsageDisplayChange:O,restoredDraft:ne,onRestoredDraftConsumed:re,disableFork:k=!1,readOnly:A=!1,bypassClientApiKeyCheck:j=!1,allowModelControls:ie=!0,newChatEmptyState:M=!1,rollbackConfirmTitle:N,rollbackConfirmDescription:P}){let F=(0,D.useRef)(null),I=(0,D.useRef)(void 0),L=(0,D.useRef)(void 0),R=(0,D.useRef)(new Map),ae=(0,D.useRef)([]),oe=(0,D.useRef)(void 0),z=(0,D.useRef)(new Set),B=(0,D.useRef)(void 0),se=(0,D.useRef)(null),ce=(0,D.useRef)(!1),le=(0,D.useRef)(new WeakSet),ue=(0,D.useRef)(``),de=(0,D.useRef)(``),fe=(0,D.useRef)(ya()),[pe,me]=(0,D.useState)(),[he,ge]=(0,D.useState)(!1),_e=(0,D.useCallback)(()=>ge(e=>!e),[]),ve=(0,D.useCallback)(()=>ge(!1),[]);(0,D.useEffect)(()=>{e?.setPlanMode?.(he,he?ve:void 0)},[e,he,ve]);let V=(0,D.useCallback)(()=>{B.current&&=(window.clearTimeout(B.current),void 0)},[]),H=(0,D.useCallback)(()=>{se.current?.cancel(),se.current=null,ce.current=!1},[]),U=(0,D.useCallback)(e=>{va(z.current,e),re?.(e)},[re]),ye=(0,D.useMemo)(()=>({sessionId:e?.sessionId,scope:u,projectId:c}),[e?.sessionId,u,c]),be=la(ye),xe=(0,D.useRef)(ye),Se=(0,D.useRef)(be);(0,D.useEffect)(()=>{xe.current=ye,Se.current=be},[ye,be]),(0,D.useEffect)(()=>()=>{V(),H()},[V,H]);let Ce=(0,D.useCallback)((e,t,n)=>{if(t.text.length===0){_a(e).catch(e=>l.error(`Failed to clear composer draft:`,e));return}ga(e,t,n).catch(e=>l.error(`Failed to save composer draft:`,e))},[]),W=(0,D.useCallback)((e,t,n)=>{B.current&&window.clearTimeout(B.current),B.current=window.setTimeout(()=>{B.current=void 0,Ce(e,t,n)},400)},[Ce]),we=(0,D.useCallback)((e,t=Se.current,n=xe.current)=>{let r=Pt(e);b(r)?R.current.set(t,r):R.current.delete(t),Ce(t,r,n)},[Ce]),G=(0,D.useRef)({onCopyAnswer:v,onRollbackFromMessage:m,onRetryFromMessage:h,onForkFromMessage:y,onAccessModeChange:p,onTogglePlanMode:_e,onApproveToolCall:S,onRejectToolCall:C,onApproveAutoCompact:w,onRejectAutoCompact:T,onOpenWorkspaceGitChanges:E,onOpenLocalFilePath:ee,onArtifactsChange:te,onContextUsageDisplayChange:O,onModelSelect:t,agentAccessMode:r,planMode:he,workspaceToolsEnabled:i,disableFork:k,readOnly:A,allowModelControls:ie,newChatEmptyState:M,bypassClientApiKeyCheck:j,rollbackConfirmTitle:N,rollbackConfirmDescription:P,gitBranch:pe});(0,D.useEffect)(()=>{G.current={onCopyAnswer:v,onRollbackFromMessage:m,onRetryFromMessage:h,onForkFromMessage:y,onAccessModeChange:p,onTogglePlanMode:_e,onApproveToolCall:S,onRejectToolCall:C,onApproveAutoCompact:w,onRejectAutoCompact:T,onOpenWorkspaceGitChanges:E,onOpenLocalFilePath:ee,onArtifactsChange:te,onContextUsageDisplayChange:O,onModelSelect:t,agentAccessMode:r,planMode:he,workspaceToolsEnabled:i,disableFork:k,readOnly:A,allowModelControls:ie,newChatEmptyState:M,bypassClientApiKeyCheck:j,rollbackConfirmTitle:N,rollbackConfirmDescription:P,gitBranch:pe},L.current=ne});let Te=a?.id??c;(0,D.useEffect)(()=>{let e=!1;return queueMicrotask(()=>{if(!e){if(!Te){me(void 0);return}_(Te).then(t=>{e||me(t.isGitRepository?t.branch:void 0)}).catch(t=>{e||(l.warn(`Failed to load git branch:`,t),me(void 0))})}}),()=>{e=!0}},[Te,n]);let Ee=(0,D.useRef)(null),De=(0,D.useRef)(null),K=(0,D.useRef)(null),q=(0,D.useRef)(null),J=(0,D.useRef)(null);(0,D.useEffect)(()=>{let e=!1;return a?.id?(fetch(`/api/project/commands?projectId=${encodeURIComponent(a.id)}`,{cache:`no-store`}).then(e=>e.ok?e.json():{commands:[]}).then(t=>{e||(ae.current=Array.isArray(t.commands)?t.commands:[],K.current?.())}).catch(()=>{e||(ae.current=[],K.current?.())}),()=>{e=!0}):(ae.current=[],()=>{e=!0})},[a?.id,n]);let Oe=(0,D.useCallback)((e,t,n,r)=>{if(t.sessionId&&t.sessionId!==n||!b(t)||z.current.has(t.id))return;let i=e.querySelector(`message-editor`),a=i?{text:i.value??i.querySelector(`textarea`)?.value??``,attachments:i.attachments?[...i.attachments]:[]}:R.current.get(r),o=oe.current;if(!(o?.id!==t.id||!b(a??x())||a?.text===o.text))return;fe.current.invalidate(),H();let s=e.querySelector(`agent-interface`);se.current=Lt(e,t,R.current,r,{shouldApply:()=>!z.current.has(t.id)&&e.isConnected&&!!F.current?.contains(e),onApplyStart:()=>{ce.current=!0},onApplyEnd:()=>{ce.current=!1},onApplied:()=>{le.current.add(e),I.current=t.id,oe.current={id:t.id,text:t.text},U(t.id)},updateComplete:s?.updateComplete})},[H,U]);return(0,D.useEffect)(()=>{if(!F.current||!e)return;let t=fe.current,n=le.current,r=new o;ge(!1);let i=e.sessionId,a=Se.current,c=xe.current,u=!1,p,m=!1,h=!1,_=!1,v=e.state.isStreaming,y=!1,S=0,C=He({panel:r});De.current=C;let w=Ue({panel:r,getCustomCommands:()=>ae.current,getComposerDrafts:()=>R.current,sessionId:a,setComposerDrafts:e=>{R.current=e},restoreDraftIntoComposer:e=>{It(r,e,R.current,a),W(a,e,c)}}),T=Ze({panel:r,restoreDraftIntoComposer:e=>{It(r,e,R.current,a),W(a,e,c)}}),E=g({panel:r,getSystemPrompt:()=>e.state.systemPrompt,getMessages:()=>e.state.messages,getEffectiveMessages:()=>xa(e),getContextWindow:()=>e.state.model?.contextWindow??0,getTools:()=>e.state.tools,getMaxTokens:()=>e.state.model?.maxTokens,getServerContextUsage:()=>e.state.contextUsage??null,getIsCompacted:()=>!!e.state.contextCompaction?.summaryMessage,getGitBranch:()=>G.current.gitBranch,onGitBranchClick:()=>G.current.onOpenWorkspaceGitChanges?.(),renderInline:!1,renderModelRing:f().showContextUsage,onDisplayChange:t=>G.current.onContextUsageDisplayChange?.(e.sessionId,t)}),D=()=>{if(ce.current)return;_=!0,t.invalidate(),H();let e=L.current;e&&(!e.sessionId||e.sessionId===i)&&U(e.id)},ee=e=>{D(),m=!1;let t=r.querySelector(`message-editor`),n={text:e,attachments:t?.attachments?[...t.attachments]:[]};b(n)?(R.current.set(a,n),W(a,n,c)):(R.current.delete(a),V(),_a(a).catch(e=>l.error(`Failed to clear composer draft:`,e)))},te=e=>{D(),m=!1;let t=r.querySelector(`message-editor`),n=t?.querySelector(`textarea`),i={text:t?.value??n?.value??``,attachments:e?[...e]:[]};b(i)?(R.current.set(a,i),W(a,i,c)):(R.current.delete(a),V(),_a(a).catch(e=>l.error(`Failed to clear composer draft:`,e)));let o=r.querySelector(`agent-interface`);o?.requestUpdate?.(),window.requestAnimationFrame(()=>K.current?.()),o?.updateComplete?.then(()=>K.current?.())},O=()=>{e.state.isStreaming?r.dataset.quickforgeAgentStreaming=`true`:delete r.dataset.quickforgeAgentStreaming},ne=()=>{if(u||!r.isConnected)return;O();let t=G.current,n=Sa(e.state.messages);if(n!==de.current){de.current=n;let r=ra(e.state.messages),i=JSON.stringify(r.map(e=>[e.source,e.path,e.command,e.outputFile,e.confidence,e.preview,e.defaultPreview,e.addedLines,e.removedLines]));i!==ue.current&&(ue.current=i,t.onArtifactsChange?.(r))}try{Pi({panel:r,getMessages:()=>e.state.messages,isStreaming:()=>e.state.isStreaming,onCopyAnswer:t.onCopyAnswer,onRollbackFromMessage:t.onRollbackFromMessage,onRetryFromMessage:t.onRetryFromMessage,onForkFromMessage:t.onForkFromMessage,onOpenLocalFilePath:t.onOpenLocalFilePath,disableFork:t.disableFork,readOnly:t.readOnly,enableTerminalCommandActions:!t.readOnly,rollbackConfirmTitle:t.rollbackConfirmTitle,rollbackConfirmDescription:t.rollbackConfirmDescription}),Qt({panel:r,getMessages:()=>e.state.messages,getContextCompaction:()=>e.state.contextCompaction??null}),Ui({panel:r,getMessages:()=>e.state.messages,isStreaming:()=>e.state.isStreaming,isActive:v})}catch(e){l.warn(`Failed to decorate chat messages:`,e)}try{Wi({panel:r,isStreaming:()=>e.state.isStreaming,abort:()=>e.abort(),agentAccessMode:t.agentAccessMode,planMode:t.planMode,workspaceToolsEnabled:t.workspaceToolsEnabled,readOnly:t.readOnly,allowModelControls:t.allowModelControls,onAccessModeChange:t.onAccessModeChange,onTogglePlanMode:t.onTogglePlanMode,onInput:ee,onFilesChange:te,removeCommandSuggestions:w.remove,updateCommandSuggestions:w.update,setupCommandTextareaHandler:w.setupTextareaHandler,removeCapabilitySuggestions:T.remove,updateCapabilitySuggestions:T.update,setupCapabilityTextareaHandler:T.setupTextareaHandler,insertBuiltinPluginMention:T.insertBuiltinPluginMention,onBeforeSend:t=>{let n=T.consumeSelectedCapabilities(t);e.setNextPromptCapabilities?.(n)}})}catch{}let i=q.current??(()=>{let t=e.state.pendingToolApproval;return t?{...t,sessionId:e.sessionId}:null})();if(i&&i.sessionId===e.sessionId&&typeof i.toolCallId==`string`&&typeof i.toolName==`string`){let t=i.toolCallId;Wt({panel:r,onApprove:async()=>{await G.current.onApproveToolCall(t),q.current=null,e.state.pendingToolApproval=null,Gt(r)},onReject:async()=>{await G.current.onRejectToolCall(t),q.current=null,e.state.pendingToolApproval=null,Gt(r)}},i.toolName,t,i.args,i.source)}else{let t=J.current??(()=>{let t=e.state.pendingAutoCompactApproval;return t?{...t,sessionId:e.sessionId}:null})();if(t&&t.sessionId===e.sessionId){let n=t.approvalId;Wt({panel:r,onApprove:async()=>{await G.current.onApproveAutoCompact?.(n),J.current=null,e.state.pendingAutoCompactApproval=null,Gt(r)},onReject:async()=>{await G.current.onRejectAutoCompact?.(n),J.current=null,e.state.pendingAutoCompactApproval=null,Gt(r)}},d(`contextManagement`),n,{percent:t.usage?.percent??0,threshold:t.thresholdPercent??0,keepRecentTurns:t.keepRecentTurns??3,summary:d(`autoCompactApprovalWaiting`,{percent:t.usage?.percent??0,threshold:t.thresholdPercent??0}),description:d(`autoCompactApprovalPreview`,{keepRecentTurns:t.keepRecentTurns??3})})}else Gt(r)}E.update(),C.setup(),C.isEnabled&&C.scheduleScrollToBottom()},re=!1,k,A=!1,j,ie=()=>{j===void 0&&(j=window.requestAnimationFrame(()=>{j=void 0,A=!1}))},M=()=>{if(!u){A=!0;try{ne()}finally{ie()}}},N=()=>{re||(re=!0,k=window.requestAnimationFrame(()=>{k=void 0,re=!1,M()}))};Ee.current=M;let P=()=>r.querySelector(`agent-interface`),oe=()=>{y||(y=!0,window.requestAnimationFrame(()=>{if(y=!1,u)return;O();let e=P();e?.requestUpdate?.(),(e?.updateComplete??Promise.resolve()).then(()=>{u||M()}),C.isEnabled&&C.scheduleScrollToBottom()}))};K.current=N;let z=()=>{let e=++S;r.dataset.quickforgeProcessHandoff=String(e);let t=P();t?.requestUpdate?.(),K.current?.(),window.requestAnimationFrame(()=>{!u&&S===e&&K.current?.()});let n=()=>{u||S!==e||(delete r.dataset.quickforgeProcessHandoff,K.current?.(),window.requestAnimationFrame(()=>{!u&&S===e&&K.current?.()}))};(t?.updateComplete??Promise.resolve()).then(n,n)};r.setAgent(e,{onApiKeyRequired:G.current.bypassClientApiKeyCheck?async()=>!0:e=>s.prompt(e),onBeforeSend:()=>{t.invalidate(),H();let e=L.current;e&&(!e.sessionId||e.sessionId===i)&&U(e.id),V(),m=!0,w.remove(),R.current.delete(a),_a(a).catch(e=>l.error(`Failed to clear composer draft:`,e)),C.enable()},onModelSelect:G.current.onModelSelect,toolsFactory:()=>Ve(e.state.tools)}).then(()=>{if(u)return;let e=L.current,n=t.version(),o=o=>{if(!(u||!t.isCurrent(n)))if(e&&I.current!==e.id)Oe(r,e,i,a);else{let e=o??R.current.get(a)??x();b(e)||(h=!0),H();let i=r.querySelector(`agent-interface`);se.current=Lt(r,e,R.current,a,{shouldApply:()=>!u&&t.isCurrent(n)&&r.isConnected&&!!F.current?.contains(r),onApplyStart:()=>{ce.current=!0},onApplyEnd:()=>{ce.current=!1},onApplied:()=>{h=!0,le.current.add(r)},updateComplete:i?.updateComplete})}};if(e&&I.current!==e.id)o();else{let e=R.current.get(a);e?o(e):ha(a).then(e=>o(e)).catch(e=>l.error(`Failed to load composer draft:`,e))}p=new MutationObserver(()=>{A||N()}),p.observe(r,{childList:!0,subtree:!0}),window.requestAnimationFrame(()=>{u||M()})}),F.current.replaceChildren(r);let B=e.subscribe(t=>{if(t.type===`agent_start`&&(S+=1,delete r.dataset.quickforgeProcessHandoff,v=!0,O(),K.current?.(),C.enable(),q.current?.sessionId===e.sessionId&&(q.current=null),J.current?.sessionId===e.sessionId&&(J.current=null)),t.type===`message_start`||t.type===`message_update`||t.type===`message_end`||t.type===`turn_end`||t.type===`agent_end`){O();let e=t.message;t.type===`message_start`&&e?.role===`assistant`&&(S+=1,delete r.dataset.quickforgeProcessHandoff),(t.type===`message_update`||e?.role===`assistant`)&&(v=!1),K.current?.(),t.type===`message_end`&&e?.role===`assistant`&&z(),C.isEnabled&&C.scheduleScrollToBottom()}if(t.type===`messages_replaced`){let e=L.current;e&&I.current===e.id&&Oe(r,e,i,a)}let n=t.type;if((n===`tool_execution_start`||n===`tool_execution_update`||n===`tool_execution_end`)&&oe(),t.type===`agent_end`&&(v=!1,O(),z(),q.current?.sessionId===e.sessionId&&(q.current=null,K.current?.()),J.current?.sessionId===e.sessionId&&(J.current=null,K.current?.())),n===`auto_compact_completed`||n===`messages_replaced`){Dr(r);let e=P();e?.requestUpdate?.(),K.current?.(),window.requestAnimationFrame(()=>K.current?.()),e?.updateComplete?.then(()=>K.current?.())}if(n===`auto_compact_failed`&&l.warn(d(`autoCompactFailed`)),t.type===`tool_approval_required`){let e=t;q.current={toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,sessionId:e.sessionId,source:e.source},K.current?.()}if(t.type===`auto_compact_approval_required`){let e=t;J.current={approvalId:e.approvalId,usage:e.usage,thresholdPercent:e.thresholdPercent,keepRecentTurns:e.keepRecentTurns,sessionId:e.sessionId},K.current?.()}});return()=>{u=!0,t.invalidate(),H(),V(),m?(R.current.delete(a),_a(a).catch(e=>l.error(`Failed to clear composer draft:`,e))):(h||_||n.has(r))&&(Ft(r,R.current,a),we(r,a,c)),w.remove(),w.cleanupTextareaHandler(),T.remove(),T.cleanupTextareaHandler(),E.cleanup(),C.cleanup(),De.current=null,B(),p?.disconnect(),k!==void 0&&window.cancelAnimationFrame(k),j!==void 0&&window.cancelAnimationFrame(j),Ee.current=null,r.remove()}},[e,V,H,U,we,Oe,W]),(0,D.useEffect)(()=>{let e=F.current;e&&(e.classList.toggle(`quickforge-chat-panel-empty-host`,M),e.dataset.quickforgeEmptyChat=M?`true`:`false`)},[M]),(0,D.useEffect)(()=>{Ee.current?.(),(F.current?.querySelector(`agent-interface`))?.requestUpdate?.()},[r,he,i,pe,k,A,ie,n]),(0,D.useEffect)(()=>{let t=L.current;if(!t||!F.current)return;let n=e?.sessionId??``;if(t.sessionId&&t.sessionId!==n||z.current.has(t.id))return;let r=F.current.querySelector(`pi-chat-panel`);r&&Oe(r,t,n,Se.current)},[ne,e,Oe]),(0,ba.jsx)(`div`,{ref:F,className:`min-h-0 flex-1 overflow-hidden`})}export{Ca as ChatPanelHost};
|