@xpert-ai/chatkit-ui 0.3.12 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/assets/{_baseUniq-IKp1Qtyx.js → _baseUniq-DN7U2Vwz.js} +1 -1
- package/dist/app/assets/{abap-C7CFWD5V.js → abap-CfmrZkTc.js} +1 -1
- package/dist/app/assets/{abnf-DMBTOEVk.js → abnf-Bw291hxX.js} +1 -1
- package/dist/app/assets/{actionscript-BcEvaXWq.js → actionscript-CWDe_ef1.js} +1 -1
- package/dist/app/assets/{ada-CjD42KJL.js → ada-C0d9duWb.js} +1 -1
- package/dist/app/assets/{agda-Bcj2WXF1.js → agda-exZUjj9O.js} +1 -1
- package/dist/app/assets/{al-CMk7bc_L.js → al-B5qtQv7q.js} +1 -1
- package/dist/app/assets/{antlr4-mV0cIoyX.js → antlr4-BJmUfb2m.js} +1 -1
- package/dist/app/assets/{apacheconf-DN4T9Q-R.js → apacheconf-DulsAdC6.js} +1 -1
- package/dist/app/assets/{apex-3WQ3SwvB.js → apex-HXl-N7PT.js} +1 -1
- package/dist/app/assets/{apl-kyDsC9Hx.js → apl-CVSWi-_l.js} +1 -1
- package/dist/app/assets/{applescript-Bs98Sq0b.js → applescript-BSLfPuyN.js} +1 -1
- package/dist/app/assets/{aql-BAbWlxCN.js → aql-B4eku8M8.js} +1 -1
- package/dist/app/assets/{arc-EIoofq4L.js → arc-lR4coLR7.js} +1 -1
- package/dist/app/assets/{architectureDiagram-Q4EWVU46-DtyblCvt.js → architectureDiagram-Q4EWVU46-BjCbdxqW.js} +1 -1
- package/dist/app/assets/{arduino-DrkFmhPG.js → arduino-BqxagEIz.js} +1 -1
- package/dist/app/assets/{arff-COd-UaSA.js → arff-DTiB1hQ2.js} +1 -1
- package/dist/app/assets/{asciidoc-D0TlSE1p.js → asciidoc-B32rNoj2.js} +1 -1
- package/dist/app/assets/{asm6502-DBgU992u.js → asm6502-DMwUl645.js} +1 -1
- package/dist/app/assets/{asmatmel-DoAdyDdX.js → asmatmel-0eqMlNdR.js} +1 -1
- package/dist/app/assets/{aspnet-DbKj2Y0x.js → aspnet-BdeQ5UsH.js} +1 -1
- package/dist/app/assets/{autohotkey-BKpl02dF.js → autohotkey-CCB3UMT9.js} +1 -1
- package/dist/app/assets/{autoit-nvDMUiIR.js → autoit-BOwLxRnm.js} +1 -1
- package/dist/app/assets/{avisynth-zdcS6mIk.js → avisynth-Bj6TRnGp.js} +1 -1
- package/dist/app/assets/{avro-idl-Bz9IAA6X.js → avro-idl-Bv76GoO9.js} +1 -1
- package/dist/app/assets/{bash-Bzch0sET.js → bash-C0E5FYLo.js} +1 -1
- package/dist/app/assets/{basic-u-yPBVQX.js → basic-DEsDv0vi.js} +1 -1
- package/dist/app/assets/{batch-Due3vTON.js → batch-ddehyzNW.js} +1 -1
- package/dist/app/assets/{bbcode-B7eqvAzk.js → bbcode-Bxx0da3q.js} +1 -1
- package/dist/app/assets/{bicep-BfgsVHBJ.js → bicep-DXDKYRDE.js} +1 -1
- package/dist/app/assets/{birb-BSK9o8wp.js → birb-B66i9ZlU.js} +1 -1
- package/dist/app/assets/{bison-DzmILaWc.js → bison-DTMiiS4R.js} +1 -1
- package/dist/app/assets/{blockDiagram-DXYQGD6D-4q0Z69yb.js → blockDiagram-DXYQGD6D-vtXXtZfo.js} +1 -1
- package/dist/app/assets/{bnf-CTxrvOa_.js → bnf-CEThILY1.js} +1 -1
- package/dist/app/assets/{brainfuck-B2x0y1yE.js → brainfuck-CRkrIiCu.js} +1 -1
- package/dist/app/assets/{brightscript-B1YuuA1a.js → brightscript-QCIOW6AL.js} +1 -1
- package/dist/app/assets/{bro-qJvkUxuW.js → bro-XxT-MRgH.js} +1 -1
- package/dist/app/assets/{bsl-D717dB3Z.js → bsl-CdT9uApG.js} +1 -1
- package/dist/app/assets/{c-eAvYogDo.js → c-B_jLD9e6.js} +1 -1
- package/dist/app/assets/{c4Diagram-AHTNJAMY-8Ls7e8MM.js → c4Diagram-AHTNJAMY-CMiEYCuz.js} +1 -1
- package/dist/app/assets/{cfscript-Po8jLzf2.js → cfscript-BNP9qp1d.js} +1 -1
- package/dist/app/assets/{chaiscript-DQ0kVVD1.js → chaiscript-hY5dXimd.js} +1 -1
- package/dist/app/assets/channel-BYM_b8-I.js +1 -0
- package/dist/app/assets/{chunk-4BX2VUAB-aVXDopSe.js → chunk-4BX2VUAB-DQeJei8f.js} +1 -1
- package/dist/app/assets/{chunk-4TB4RGXK-B4i0WSGT.js → chunk-4TB4RGXK-Da8afgYe.js} +1 -1
- package/dist/app/assets/{chunk-55IACEB6-CDWG5f9m.js → chunk-55IACEB6-Rj5sJFuS.js} +1 -1
- package/dist/app/assets/{chunk-EDXVE4YY-DhPmwrgR.js → chunk-EDXVE4YY-BZgPfOdH.js} +1 -1
- package/dist/app/assets/{chunk-FMBD7UC4-Bst2lua5.js → chunk-FMBD7UC4-COTyIgdO.js} +1 -1
- package/dist/app/assets/{chunk-OYMX7WX6-B3OQzz_w.js → chunk-OYMX7WX6-D1rMsd_2.js} +1 -1
- package/dist/app/assets/{chunk-QZHKN3VN-rnQWX_CM.js → chunk-QZHKN3VN-CKmb12Vi.js} +1 -1
- package/dist/app/assets/{chunk-YZCP3GAM-0SoL9M8l.js → chunk-YZCP3GAM-B_xsfjgK.js} +1 -1
- package/dist/app/assets/{cil-DWCFx6mz.js → cil-PyZct0u9.js} +1 -1
- package/dist/app/assets/classDiagram-6PBFFD2Q-CwWPzWA1.js +1 -0
- package/dist/app/assets/classDiagram-v2-HSJHXN6E-CwWPzWA1.js +1 -0
- package/dist/app/assets/{clike-B6raVGdU.js → clike-147braYa.js} +1 -1
- package/dist/app/assets/{clojure-DKI51Ecz.js → clojure-B5zM8dk0.js} +1 -1
- package/dist/app/assets/clone-B8RPLWzD.js +1 -0
- package/dist/app/assets/{cmake-CwwQf097.js → cmake-DVmCR8-e.js} +1 -1
- package/dist/app/assets/{cobol-BixlHzvP.js → cobol-B9UHQ5TC.js} +1 -1
- package/dist/app/assets/{coffeescript-DzMKx8Wm.js → coffeescript-ChBqV0ML.js} +1 -1
- package/dist/app/assets/{concurnas-CeI1_l2A.js → concurnas-C31Dgpte.js} +1 -1
- package/dist/app/assets/{coq-Rlyk5JPF.js → coq-BMyK4-On.js} +1 -1
- package/dist/app/assets/{core-CKaxhIxn.js → core-2oVERtGy.js} +1 -1
- package/dist/app/assets/{cose-bilkent-S5V4N54A-BEbmBjkM.js → cose-bilkent-S5V4N54A-BzOeQJvC.js} +1 -1
- package/dist/app/assets/{cpp-D6N2YRS8.js → cpp-BbP21HXf.js} +1 -1
- package/dist/app/assets/{crystal-Bp-ZOMp9.js → crystal-_Cl2beGm.js} +1 -1
- package/dist/app/assets/{csharp-73XQRtra.js → csharp-BTTJy4CY.js} +1 -1
- package/dist/app/assets/{cshtml-_Kw38cMM.js → cshtml-DfHhKfEB.js} +1 -1
- package/dist/app/assets/{csp-CWKQ7qNy.js → csp-SVWtS9kS.js} +1 -1
- package/dist/app/assets/{css-CSf4crh0.js → css-B6m9dOOV.js} +1 -1
- package/dist/app/assets/{css-extras-BPFlTbKM.js → css-extras-LK4o0hc9.js} +1 -1
- package/dist/app/assets/{csv-NdIdVmit.js → csv-CoTfO3DU.js} +1 -1
- package/dist/app/assets/{cypher-DrG3lvrT.js → cypher-DX_ZpMzL.js} +1 -1
- package/dist/app/assets/{d-Byk2LV83.js → d-E9Iec9kX.js} +1 -1
- package/dist/app/assets/{dagre-KV5264BT-DONbK4nc.js → dagre-KV5264BT-CrgALnug.js} +1 -1
- package/dist/app/assets/{dart-DAvsdDA3.js → dart-D63EyPv_.js} +1 -1
- package/dist/app/assets/{dataweave-C5T6xtfv.js → dataweave-CBz506IK.js} +1 -1
- package/dist/app/assets/{dax-DoH9pkog.js → dax-wIXLPtir.js} +1 -1
- package/dist/app/assets/{dhall-DJpQKYes.js → dhall-kEUn6fOU.js} +1 -1
- package/dist/app/assets/{diagram-5BDNPKRD-cVSMcLwH.js → diagram-5BDNPKRD-B4x7n2He.js} +1 -1
- package/dist/app/assets/{diagram-G4DWMVQ6-B5QE6o4T.js → diagram-G4DWMVQ6-DJN3PzdQ.js} +1 -1
- package/dist/app/assets/{diagram-MMDJMWI5-DIWNtwBR.js → diagram-MMDJMWI5-EFZZ4e7c.js} +1 -1
- package/dist/app/assets/{diagram-TYMM5635-rMAqc1qj.js → diagram-TYMM5635-BxRlCQ_r.js} +1 -1
- package/dist/app/assets/{diff-DvrdG0n8.js → diff-DC7NxMGB.js} +1 -1
- package/dist/app/assets/{django-DEQbld8i.js → django-D-8jYa2a.js} +1 -1
- package/dist/app/assets/{dns-zone-file-BADAi43M.js → dns-zone-file-C6hvPP_3.js} +1 -1
- package/dist/app/assets/{docker-BbNeQOxZ.js → docker-B-znhIuW.js} +1 -1
- package/dist/app/assets/{dot-Bmy4l5j8.js → dot-DAf-TSqK.js} +1 -1
- package/dist/app/assets/{ebnf-B0QE6nnN.js → ebnf-D-vmW4_0.js} +1 -1
- package/dist/app/assets/{editorconfig-Bg3JR5OT.js → editorconfig-DWNNwgLN.js} +1 -1
- package/dist/app/assets/{eiffel-CYMSvYtO.js → eiffel-BH0EK-0w.js} +1 -1
- package/dist/app/assets/{ejs-CP1oTchE.js → ejs-BHVpNUPK.js} +1 -1
- package/dist/app/assets/{elixir-Di3D46jy.js → elixir-CSqzxagz.js} +1 -1
- package/dist/app/assets/{elm-DS1CidFy.js → elm-DRfM8-kg.js} +1 -1
- package/dist/app/assets/{erDiagram-SMLLAGMA-DmA9X2aB.js → erDiagram-SMLLAGMA-zeJNpJxa.js} +1 -1
- package/dist/app/assets/{erb-MTRWz0CC.js → erb-CNmIpOgi.js} +1 -1
- package/dist/app/assets/{erlang-C0EhPwsW.js → erlang-BDZ2hYY3.js} +1 -1
- package/dist/app/assets/{etlua-DrTwkJv_.js → etlua-C4HN13b2.js} +1 -1
- package/dist/app/assets/{excel-formula-BUY1j-dw.js → excel-formula-Yx0G471H.js} +1 -1
- package/dist/app/assets/{factor-BawUE8xG.js → factor-CDg-yp2G.js} +1 -1
- package/dist/app/assets/{false-BoDMLPv-.js → false-DN2H4sAD.js} +1 -1
- package/dist/app/assets/{firestore-security-rules-CWXxe34f.js → firestore-security-rules-CQ-TIWUF.js} +1 -1
- package/dist/app/assets/{flow-l-oHCDfx.js → flow-BXnYlVyC.js} +1 -1
- package/dist/app/assets/{flowDiagram-DWJPFMVM-Bf7CgR6O.js → flowDiagram-DWJPFMVM-DPw-bB22.js} +1 -1
- package/dist/app/assets/{fortran-DbfhBm3h.js → fortran-DnQotiqX.js} +1 -1
- package/dist/app/assets/{fsharp-C_xG7_2F.js → fsharp-BJKYVmKn.js} +1 -1
- package/dist/app/assets/{ftl-BOmP6dqU.js → ftl-BFC3zO20.js} +1 -1
- package/dist/app/assets/{ganttDiagram-T4ZO3ILL-Bg6Tdt0n.js → ganttDiagram-T4ZO3ILL-CM9Ugpiy.js} +1 -1
- package/dist/app/assets/{gap-CHKm_uiw.js → gap-CrgrAbSP.js} +1 -1
- package/dist/app/assets/{gcode-vLqAglHa.js → gcode-CnYu5Ex7.js} +1 -1
- package/dist/app/assets/{gdscript-vbRU5enn.js → gdscript-cRbhv87p.js} +1 -1
- package/dist/app/assets/{gedcom-D0cr82OU.js → gedcom-D_sy6Ots.js} +1 -1
- package/dist/app/assets/{gherkin-CdrJEioP.js → gherkin-CFywV355.js} +1 -1
- package/dist/app/assets/{git-BpYfHv6w.js → git-Bf2bz3Wy.js} +1 -1
- package/dist/app/assets/{gitGraphDiagram-UUTBAWPF-DpeozhsT.js → gitGraphDiagram-UUTBAWPF-BmVPKqch.js} +1 -1
- package/dist/app/assets/{glsl-C1mqMYtZ.js → glsl-0-0tN7ae.js} +1 -1
- package/dist/app/assets/{gml-MmP8j1JT.js → gml-CF4VMKyW.js} +1 -1
- package/dist/app/assets/{gn-vbr8Ezf8.js → gn-Dwh3RmHT.js} +1 -1
- package/dist/app/assets/{go-D6TPbDdE.js → go-CTuQ3ELr.js} +1 -1
- package/dist/app/assets/{go-module-DfKcZOwK.js → go-module-MkAn_pzN.js} +1 -1
- package/dist/app/assets/{graph-CUTA2u9Q.js → graph-CpjKr_Ss.js} +1 -1
- package/dist/app/assets/{graphql-mqzCl3PN.js → graphql-BGqt50Z0.js} +1 -1
- package/dist/app/assets/{groovy-ClYqnFm5.js → groovy-DNLFkeUu.js} +1 -1
- package/dist/app/assets/{haml-BxHbXcYR.js → haml-DteW0kdw.js} +1 -1
- package/dist/app/assets/{handlebars-v6nReoI-.js → handlebars-Cq0q7SZx.js} +1 -1
- package/dist/app/assets/{haskell-DzKP2Bsc.js → haskell-yRp-22Bm.js} +1 -1
- package/dist/app/assets/{haxe-DevMcR_Z.js → haxe-B2gRWeQu.js} +1 -1
- package/dist/app/assets/{hcl-C5Bj9s3r.js → hcl-DbtimhMF.js} +1 -1
- package/dist/app/assets/{hlsl-FNmun_i2.js → hlsl-CNF6I53_.js} +1 -1
- package/dist/app/assets/{hoon-Cn8qSAYQ.js → hoon-CzaGoRKh.js} +1 -1
- package/dist/app/assets/{hpkp-x-6CfFYy.js → hpkp-CN0wAndN.js} +1 -1
- package/dist/app/assets/{hsts-DTMvA9jI.js → hsts-DappYgs2.js} +1 -1
- package/dist/app/assets/{http-repyLWTd.js → http-BY6617iq.js} +1 -1
- package/dist/app/assets/{ichigojam-DVrOBI5W.js → ichigojam-FmzUOqyg.js} +1 -1
- package/dist/app/assets/{icon-CFEy7hhK.js → icon-t_33X7na.js} +1 -1
- package/dist/app/assets/{icu-message-format-Bs8z8Pa8.js → icu-message-format-DCHJfKU4.js} +1 -1
- package/dist/app/assets/{idris-B4dKajLi.js → idris-BHrSgjd1.js} +1 -1
- package/dist/app/assets/{iecst-C8tB6F6o.js → iecst-Edt5q5x5.js} +1 -1
- package/dist/app/assets/{ignore-BSV7EeW4.js → ignore-QHm1VEId.js} +1 -1
- package/dist/app/assets/index-B25mng8X.js +754 -0
- package/dist/app/assets/index-CYj11nKH.css +1 -0
- package/dist/app/assets/{infoDiagram-42DDH7IO-C3qc42CB.js → infoDiagram-42DDH7IO-CWVsOkhG.js} +1 -1
- package/dist/app/assets/{inform7-DrAKK55g.js → inform7-DQOtMPhH.js} +1 -1
- package/dist/app/assets/{ini-u8YQIiOq.js → ini-Cbu7YzI1.js} +1 -1
- package/dist/app/assets/{io-BF3U_13f.js → io-e0l8cV23.js} +1 -1
- package/dist/app/assets/{ishikawaDiagram-UXIWVN3A-DZFv5qUJ.js → ishikawaDiagram-UXIWVN3A-DM9lBm40.js} +1 -1
- package/dist/app/assets/{j-CCimMXhx.js → j-DcCjctA4.js} +1 -1
- package/dist/app/assets/{java-DO5fViyr.js → java-D6wSCcUS.js} +1 -1
- package/dist/app/assets/{javadoc-DDpss0Lm.js → javadoc-Nw5FrRpH.js} +1 -1
- package/dist/app/assets/{javadoclike-DU0tWt01.js → javadoclike-BtzPHbb7.js} +1 -1
- package/dist/app/assets/{javascript-DdjszwTa.js → javascript-C-05XZq6.js} +1 -1
- package/dist/app/assets/{javastacktrace-6TqNjdk7.js → javastacktrace-CIS-g4Df.js} +1 -1
- package/dist/app/assets/{jexl-D8MtdYvR.js → jexl-CSFXxxQr.js} +1 -1
- package/dist/app/assets/{jolie-CocTJfsD.js → jolie-B_pXK5DU.js} +1 -1
- package/dist/app/assets/{journeyDiagram-VCZTEJTY-BJFWqXvt.js → journeyDiagram-VCZTEJTY-B7-JXvaL.js} +1 -1
- package/dist/app/assets/{jq-BLep2RPL.js → jq-J-I2FM7i.js} +1 -1
- package/dist/app/assets/{js-extras-DQHOpmR6.js → js-extras-Dx_8EXzo.js} +1 -1
- package/dist/app/assets/{js-templates-C8bgfiAI.js → js-templates-D05g6Rqs.js} +1 -1
- package/dist/app/assets/{jsdoc-CTXb0QBN.js → jsdoc-DPSggCzu.js} +1 -1
- package/dist/app/assets/{json-MXhid-40.js → json-eebW4acE.js} +1 -1
- package/dist/app/assets/{json5-BBNk0TrK.js → json5-D6OcVhOH.js} +1 -1
- package/dist/app/assets/{jsonp-B8GEZBkI.js → jsonp-OpiKfVjM.js} +1 -1
- package/dist/app/assets/{jsstacktrace-pvIKS4Zv.js → jsstacktrace-BmUz1bEc.js} +1 -1
- package/dist/app/assets/{jsx-BR_PTydE.js → jsx-rqpNmzfs.js} +1 -1
- package/dist/app/assets/{julia-Cm4xtp32.js → julia-DwJZus4k.js} +1 -1
- package/dist/app/assets/{kanban-definition-6JOO6SKY-BG9atDzG.js → kanban-definition-6JOO6SKY-BfzqKcr7.js} +1 -1
- package/dist/app/assets/{keepalived-DS091xJp.js → keepalived-DpBbx4Cw.js} +1 -1
- package/dist/app/assets/{keyman-Cq3rg_OW.js → keyman-7jQL65gp.js} +1 -1
- package/dist/app/assets/{kotlin-Dj8rHKDk.js → kotlin-BqCPARVL.js} +1 -1
- package/dist/app/assets/{kumir-CnspAIaB.js → kumir-BypHMU6_.js} +1 -1
- package/dist/app/assets/{kusto-B_M8_-iN.js → kusto-LmNXDd9d.js} +1 -1
- package/dist/app/assets/{latex-h_1mu4rU.js → latex-CAoYss1M.js} +1 -1
- package/dist/app/assets/{latte-DRruVMVR.js → latte-CSVfbiOL.js} +1 -1
- package/dist/app/assets/{layout-C4Y-_UhZ.js → layout-Bb4TjfVy.js} +1 -1
- package/dist/app/assets/{less-BkBKGybJ.js → less-DrZAGdRl.js} +1 -1
- package/dist/app/assets/{lilypond-tpptDbXf.js → lilypond-C4k3pwiB.js} +1 -1
- package/dist/app/assets/{linear-LRhlJwR0.js → linear-BRU8--MT.js} +1 -1
- package/dist/app/assets/{liquid-BYEdjQlm.js → liquid-CELaXiSm.js} +1 -1
- package/dist/app/assets/{lisp-UYdnBUFJ.js → lisp-CKGtAI1M.js} +1 -1
- package/dist/app/assets/{livescript-C9yax0KM.js → livescript-B9iEhd-x.js} +1 -1
- package/dist/app/assets/{llvm-2LUJOlxq.js → llvm-wn6tpbZs.js} +1 -1
- package/dist/app/assets/{log-DKjvz3ho.js → log-BA-GGyoJ.js} +1 -1
- package/dist/app/assets/{lolcode-CLsVUU7R.js → lolcode-C3Utlc1p.js} +1 -1
- package/dist/app/assets/{lua-G_BZKE8Q.js → lua-BGTOn4rS.js} +1 -1
- package/dist/app/assets/{magma-lCuEwSEu.js → magma-DH54NGN3.js} +1 -1
- package/dist/app/assets/{makefile-CuurcFXN.js → makefile-Dev3s5gm.js} +1 -1
- package/dist/app/assets/{markdown-D8twlx64.js → markdown-DySjwUhR.js} +1 -1
- package/dist/app/assets/{markup-CPx0l2_m.js → markup-Cne6yiR5.js} +1 -1
- package/dist/app/assets/{markup-templating-1SLH6Zrr.js → markup-templating-D9qZqcoX.js} +1 -1
- package/dist/app/assets/{matlab-DiXiMdVf.js → matlab-DdzC7h-S.js} +1 -1
- package/dist/app/assets/{maxscript-CR5B3kzO.js → maxscript-DJU9yVir.js} +1 -1
- package/dist/app/assets/{mel-4XG8ApRx.js → mel-DBa5zGRt.js} +1 -1
- package/dist/app/assets/{mermaid-Dg_Z96Py.js → mermaid-CKtJNvBf.js} +1 -1
- package/dist/app/assets/{min-ZF6tgODw.js → min-DXoQC-9u.js} +1 -1
- package/dist/app/assets/{mindmap-definition-QFDTVHPH-XatWoYUC.js → mindmap-definition-QFDTVHPH-BY329Pxo.js} +1 -1
- package/dist/app/assets/{mizar-D7LfXPjH.js → mizar-CCmgax7Y.js} +1 -1
- package/dist/app/assets/{mongodb-BT27iI7P.js → mongodb-CpxP716G.js} +1 -1
- package/dist/app/assets/{monkey-CHo4ln4E.js → monkey-uyoynnP1.js} +1 -1
- package/dist/app/assets/{moonscript-yAsABvFl.js → moonscript-Cq-OMQ_B.js} +1 -1
- package/dist/app/assets/{n1ql-CVjJ8k0G.js → n1ql-BXgBZBbD.js} +1 -1
- package/dist/app/assets/{n4js-BpnXK7uO.js → n4js-DfV0N-rV.js} +1 -1
- package/dist/app/assets/{nand2tetris-hdl-DZIcttnF.js → nand2tetris-hdl-CwrCPiLw.js} +1 -1
- package/dist/app/assets/{naniscript-BjdWmpbq.js → naniscript-BYOyd8_0.js} +1 -1
- package/dist/app/assets/{nasm-tTGUS43W.js → nasm-1sS4mbu2.js} +1 -1
- package/dist/app/assets/{neon-Cm0NipU3.js → neon-C5lJqHYa.js} +1 -1
- package/dist/app/assets/{nevod-CAvas20G.js → nevod-CDy3ZJI6.js} +1 -1
- package/dist/app/assets/{nginx-BG78NxdZ.js → nginx-D0pZQ1Gx.js} +1 -1
- package/dist/app/assets/{nim-vMSiqOYt.js → nim-B-QSri62.js} +1 -1
- package/dist/app/assets/{nix-PeXWRdgp.js → nix-BFZ3DzZz.js} +1 -1
- package/dist/app/assets/{nsis-Bx4jjgkI.js → nsis-DUp3RL6V.js} +1 -1
- package/dist/app/assets/{objectivec-Xc1Oxea3.js → objectivec-BXYeLA3z.js} +1 -1
- package/dist/app/assets/{ocaml-CETJbxfK.js → ocaml-N7C8ZUgL.js} +1 -1
- package/dist/app/assets/{opencl-C8i9C44z.js → opencl-C1hdWG9E.js} +1 -1
- package/dist/app/assets/{openqasm-qSsT45fS.js → openqasm-tVhrcf0N.js} +1 -1
- package/dist/app/assets/{oz-w99JsW87.js → oz-DbHRYHpi.js} +1 -1
- package/dist/app/assets/{parigp-DvkJkH_x.js → parigp-D235NbbM.js} +1 -1
- package/dist/app/assets/{parser-B1HImE8Y.js → parser-CQnel-2z.js} +1 -1
- package/dist/app/assets/{pascal-DQaovYcp.js → pascal-DgFGAGP1.js} +1 -1
- package/dist/app/assets/{pascaligo-DbdIyNdD.js → pascaligo-B0jmRm5x.js} +1 -1
- package/dist/app/assets/{pcaxis-8ssDIrdH.js → pcaxis-CQNhbPNS.js} +1 -1
- package/dist/app/assets/{peoplecode-BiV5Zxb2.js → peoplecode-eZLUWdcF.js} +1 -1
- package/dist/app/assets/{perl-CPu8mq3o.js → perl-CiaddnhV.js} +1 -1
- package/dist/app/assets/{php-BDLnoxLe.js → php-B-tFsK7f.js} +1 -1
- package/dist/app/assets/{php-extras-BlCs6h78.js → php-extras-e6eZZ7Na.js} +1 -1
- package/dist/app/assets/{phpdoc-oTKbX7Rh.js → phpdoc-3KxouLRA.js} +1 -1
- package/dist/app/assets/{pieDiagram-DEJITSTG-CkgOwggS.js → pieDiagram-DEJITSTG-DfAj9P4h.js} +1 -1
- package/dist/app/assets/{plsql-BYXZUF33.js → plsql-aOKfDsoP.js} +1 -1
- package/dist/app/assets/{powerquery-VGGq_Y-K.js → powerquery-Bt6p3LDv.js} +1 -1
- package/dist/app/assets/{powershell-RNtOnmCz.js → powershell-DmKC1AtN.js} +1 -1
- package/dist/app/assets/{processing-C83CF7Om.js → processing-BspG6atJ.js} +1 -1
- package/dist/app/assets/{prolog-MO4dJhtY.js → prolog-8OHnLA4S.js} +1 -1
- package/dist/app/assets/{promql-CzEJXg3T.js → promql-WoICd-lG.js} +1 -1
- package/dist/app/assets/{properties-BXiHyIGq.js → properties-CT9ysoga.js} +1 -1
- package/dist/app/assets/{protobuf-DzIsCptu.js → protobuf-DbbkrfXt.js} +1 -1
- package/dist/app/assets/{psl-gO8eBzTG.js → psl-D9uQzlIv.js} +1 -1
- package/dist/app/assets/{pug-DROaMmxc.js → pug-C1Sr-_yU.js} +1 -1
- package/dist/app/assets/{puppet-CkdEKP68.js → puppet-DHnN0rw0.js} +1 -1
- package/dist/app/assets/{pure-B4T0aVQv.js → pure-k9o45cow.js} +1 -1
- package/dist/app/assets/{purebasic-DhErIpnU.js → purebasic-CX4szve_.js} +1 -1
- package/dist/app/assets/{purescript-BpSYig0_.js → purescript-DtyuJSvo.js} +1 -1
- package/dist/app/assets/{q-BP_ajmdt.js → q-CquTY3do.js} +1 -1
- package/dist/app/assets/{qml-VWVXkJA9.js → qml-B2WEaROU.js} +1 -1
- package/dist/app/assets/{qore-CVNz07Jd.js → qore-BaWLl36W.js} +1 -1
- package/dist/app/assets/{qsharp-DYrITprs.js → qsharp-BaHlKQ4H.js} +1 -1
- package/dist/app/assets/{quadrantDiagram-34T5L4WZ-VnllqPYP.js → quadrantDiagram-34T5L4WZ-De73cCE8.js} +1 -1
- package/dist/app/assets/{r-lkMqhKIi.js → r-DYriivXA.js} +1 -1
- package/dist/app/assets/{racket-GNxLzSm4.js → racket-CpHgRVRU.js} +1 -1
- package/dist/app/assets/{reason-pr_OxQol.js → reason-BukTB_kL.js} +1 -1
- package/dist/app/assets/{regex-DuA5bt82.js → regex-DpWjc0Hv.js} +1 -1
- package/dist/app/assets/{rego-ChVBSuCN.js → rego-CLsvZiLZ.js} +1 -1
- package/dist/app/assets/{renpy-B-T9UWLB.js → renpy-CPUiZJXX.js} +1 -1
- package/dist/app/assets/{requirementDiagram-MS252O5E-nOZVjPtN.js → requirementDiagram-MS252O5E-D3E3vDMy.js} +1 -1
- package/dist/app/assets/{rest-CG4X-WbZ.js → rest-D0Bwam59.js} +1 -1
- package/dist/app/assets/{rip-B6LzWfep.js → rip-DRm4vanm.js} +1 -1
- package/dist/app/assets/{roboconf-ySeTNbLp.js → roboconf-DHDu2gUA.js} +1 -1
- package/dist/app/assets/{robotframework-kIOhzxiU.js → robotframework-DicywtSw.js} +1 -1
- package/dist/app/assets/{ruby-BM8sekCP.js → ruby-D9n15-XE.js} +1 -1
- package/dist/app/assets/{rust-BOWARmu4.js → rust-Dt3bCCBI.js} +1 -1
- package/dist/app/assets/{sankeyDiagram-XADWPNL6-D5SMgLO7.js → sankeyDiagram-XADWPNL6-BV0dJiuD.js} +1 -1
- package/dist/app/assets/{sas-C95QHnSk.js → sas-BpsC5kMD.js} +1 -1
- package/dist/app/assets/{sass-CcV7wTsX.js → sass-CT-j7yH3.js} +1 -1
- package/dist/app/assets/{scala-B-FlSrSn.js → scala-D5-0kvxt.js} +1 -1
- package/dist/app/assets/{scheme-DAA64CUS.js → scheme-BAZoRTMC.js} +1 -1
- package/dist/app/assets/{scss-B383C8dD.js → scss-Bb3FF0LI.js} +1 -1
- package/dist/app/assets/{sequenceDiagram-FGHM5R23-BAq3WCJj.js → sequenceDiagram-FGHM5R23-3tyYo99u.js} +1 -1
- package/dist/app/assets/{shell-session-65a-LoVJ.js → shell-session-B7Emf3NW.js} +1 -1
- package/dist/app/assets/{smali-kRxBivzr.js → smali-B5spmGvV.js} +1 -1
- package/dist/app/assets/{smalltalk-BeQVL5pW.js → smalltalk-D3JbgB6K.js} +1 -1
- package/dist/app/assets/{smarty-Ch5TbbQQ.js → smarty-C9YGEmsd.js} +1 -1
- package/dist/app/assets/{sml-BB_7RVyU.js → sml-BxaohhYY.js} +1 -1
- package/dist/app/assets/{solidity-D7wGcxQr.js → solidity-BrUJKjQw.js} +1 -1
- package/dist/app/assets/{solution-file-Db21ESd-.js → solution-file-C7eMymBf.js} +1 -1
- package/dist/app/assets/{soy-B0_l5rJw.js → soy-BiN49MCy.js} +1 -1
- package/dist/app/assets/{sparql-JpwPPAJG.js → sparql-tZI5hOUa.js} +1 -1
- package/dist/app/assets/{splunk-spl-_c2dI16C.js → splunk-spl-B2LG24WR.js} +1 -1
- package/dist/app/assets/{sqf-AGX-5SQA.js → sqf-D39dGOsm.js} +1 -1
- package/dist/app/assets/{sql-DQV539be.js → sql-Bf5b0eBp.js} +1 -1
- package/dist/app/assets/{squirrel-FmrsBrtP.js → squirrel-oMS_qmht.js} +1 -1
- package/dist/app/assets/{stan-DG1wBDVn.js → stan-DCacwMcL.js} +1 -1
- package/dist/app/assets/{stateDiagram-FHFEXIEX-CBG1b62a.js → stateDiagram-FHFEXIEX-bCUjpdIF.js} +1 -1
- package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-jjpXEsTl.js +1 -0
- package/dist/app/assets/{stylus-FxxnGpKJ.js → stylus-CRGeO3WE.js} +1 -1
- package/dist/app/assets/{swift-OjEf0t2u.js → swift-BbDOsDL3.js} +1 -1
- package/dist/app/assets/{systemd-CXdOpEaM.js → systemd-tzWhSmEO.js} +1 -1
- package/dist/app/assets/{t4-cs-BWNYdlda.js → t4-cs-OEUJv71g.js} +1 -1
- package/dist/app/assets/{t4-templating-Biohaix7.js → t4-templating-DwkD4CD2.js} +1 -1
- package/dist/app/assets/{t4-vb-DNFGD3d_.js → t4-vb-BpBzKO9q.js} +1 -1
- package/dist/app/assets/{tap-Dg18e05M.js → tap-DCDrRqf8.js} +1 -1
- package/dist/app/assets/{tcl-Btqn2UMc.js → tcl-BsMdDEdZ.js} +1 -1
- package/dist/app/assets/{textile-BxdpzGb-.js → textile-CuccM9uC.js} +1 -1
- package/dist/app/assets/{timeline-definition-GMOUNBTQ-BtjV1Syb.js → timeline-definition-GMOUNBTQ-C-w2F5Or.js} +1 -1
- package/dist/app/assets/{toml-D3WkKMhp.js → toml-DS1V4-5r.js} +1 -1
- package/dist/app/assets/{tremor-ix0_xPIS.js → tremor-BsV3JlTK.js} +1 -1
- package/dist/app/assets/{tt2-DYiEf69I.js → tt2-CsX9KNZF.js} +1 -1
- package/dist/app/assets/{turtle-D79kYTiV.js → turtle-BdBdOvle.js} +1 -1
- package/dist/app/assets/{twig-C2lO0FQ6.js → twig-CFTxgyFh.js} +1 -1
- package/dist/app/assets/{typescript-BWbs3zZK.js → typescript-CP-0S4VB.js} +1 -1
- package/dist/app/assets/{typoscript-CXO8uHo_.js → typoscript-sdz_0j3U.js} +1 -1
- package/dist/app/assets/{unrealscript-B4IFw4Fc.js → unrealscript-ITVDTz_r.js} +1 -1
- package/dist/app/assets/{uorazor-Ow8B2gZE.js → uorazor-Bk5cDC7V.js} +1 -1
- package/dist/app/assets/{uri-CjdCf_n6.js → uri-B4zzsc9t.js} +1 -1
- package/dist/app/assets/{v-Djh7PWAw.js → v-_ZLRiU4I.js} +1 -1
- package/dist/app/assets/{vala-hMKcKqAv.js → vala-DewPeyKY.js} +1 -1
- package/dist/app/assets/{vbnet-CBKK7AZw.js → vbnet-CnidJofE.js} +1 -1
- package/dist/app/assets/{velocity-DBPvifAA.js → velocity-BIto2PyM.js} +1 -1
- package/dist/app/assets/{vennDiagram-DHZGUBPP-D-sPxJCn.js → vennDiagram-DHZGUBPP-BiNaKYx5.js} +1 -1
- package/dist/app/assets/{verilog-B06XleW6.js → verilog-Cvnp7XFu.js} +1 -1
- package/dist/app/assets/{vhdl-z0adhEhq.js → vhdl-BxpSxJwd.js} +1 -1
- package/dist/app/assets/{vim-DgXoWMAS.js → vim-Cb-kHdfC.js} +1 -1
- package/dist/app/assets/{visual-basic-C17Ibazf.js → visual-basic-ouzXfRru.js} +1 -1
- package/dist/app/assets/{wardley-RL74JXVD-DSMlPQeI.js → wardley-RL74JXVD-EvMjMAiC.js} +1 -1
- package/dist/app/assets/{wardleyDiagram-NUSXRM2D-DfRjSWRr.js → wardleyDiagram-NUSXRM2D-BCn9Ja7r.js} +1 -1
- package/dist/app/assets/{warpscript-BIetGxT8.js → warpscript-C1EpA-EM.js} +1 -1
- package/dist/app/assets/{wasm-DDD0BDOW.js → wasm-B_LySlXP.js} +1 -1
- package/dist/app/assets/{web-idl-CIMai9Vx.js → web-idl-BB9NLYCy.js} +1 -1
- package/dist/app/assets/{wiki-CVWHKZwQ.js → wiki-D_jE3n0M.js} +1 -1
- package/dist/app/assets/{wolfram-BvGOmO4s.js → wolfram-BbhyYenT.js} +1 -1
- package/dist/app/assets/{wren-CbF6O884.js → wren-CdD9yanb.js} +1 -1
- package/dist/app/assets/{xeora-B1ekyGx3.js → xeora-CGIw1yLs.js} +1 -1
- package/dist/app/assets/{xml-doc-B4Y4OcvH.js → xml-doc-Ddm2H-gK.js} +1 -1
- package/dist/app/assets/{xojo-8yNuRPIu.js → xojo-BJAMTi-d.js} +1 -1
- package/dist/app/assets/{xquery-18e5foCa.js → xquery-DtxeJSqz.js} +1 -1
- package/dist/app/assets/{xychartDiagram-5P7HB3ND-CC5MceuR.js → xychartDiagram-5P7HB3ND-tzUn3HbQ.js} +1 -1
- package/dist/app/assets/{yaml-CBHqwYPN.js → yaml-Y_Pa3exj.js} +1 -1
- package/dist/app/assets/{yang-Cr3tggHy.js → yang-D4TnI_4D.js} +1 -1
- package/dist/app/assets/{zig-CAn9IEzi.js → zig-Dn_ZOetC.js} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/index.cjs +961 -5
- package/dist/index.js +972 -9
- package/package.json +3 -3
- package/dist/app/assets/channel-776uJRzf.js +0 -1
- package/dist/app/assets/classDiagram-6PBFFD2Q-CuMmt2wK.js +0 -1
- package/dist/app/assets/classDiagram-v2-HSJHXN6E-CuMmt2wK.js +0 -1
- package/dist/app/assets/clone-BHKv9dxg.js +0 -1
- package/dist/app/assets/index-COsBUIAY.js +0 -754
- package/dist/app/assets/index-aAZDJmqe.css +0 -1
- package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-Duz6pBEy.js +0 -1
package/dist/index.js
CHANGED
|
@@ -2,12 +2,18 @@
|
|
|
2
2
|
import * as React48 from "react";
|
|
3
3
|
import {
|
|
4
4
|
ArrowDown as ArrowDown2,
|
|
5
|
+
ChevronDown as ChevronDown5,
|
|
5
6
|
FileText as FileText5,
|
|
6
7
|
ImageIcon,
|
|
8
|
+
Loader2 as Loader28,
|
|
7
9
|
Minus,
|
|
10
|
+
Pause,
|
|
8
11
|
Pencil as Pencil4,
|
|
12
|
+
Play,
|
|
9
13
|
Quote,
|
|
10
14
|
Settings as Settings2,
|
|
15
|
+
Target as Target2,
|
|
16
|
+
Trash2 as Trash23,
|
|
11
17
|
X as X6
|
|
12
18
|
} from "lucide-react";
|
|
13
19
|
|
|
@@ -174,6 +180,9 @@ function readContentAgentKey(content) {
|
|
|
174
180
|
if (!content || typeof content === "string") return void 0;
|
|
175
181
|
return typeof content.agentKey === "string" && content.agentKey.trim() ? content.agentKey.trim() : void 0;
|
|
176
182
|
}
|
|
183
|
+
function isMiddlewareAgentRunInfo(info) {
|
|
184
|
+
return info?.nodeType?.trim().toLowerCase() === "middleware";
|
|
185
|
+
}
|
|
177
186
|
|
|
178
187
|
// src/lib/api-config.ts
|
|
179
188
|
function hasConfiguredValue(value) {
|
|
@@ -1052,6 +1061,117 @@ function resolveUsedContextSize(options) {
|
|
|
1052
1061
|
return normalizeContextUsageNumber(options.fallbackUsedTokens) ?? 0;
|
|
1053
1062
|
}
|
|
1054
1063
|
|
|
1064
|
+
// src/lib/thread-goals.ts
|
|
1065
|
+
function normalizeGoalObjective(value) {
|
|
1066
|
+
return value.trim();
|
|
1067
|
+
}
|
|
1068
|
+
function parseGoalCommand(args) {
|
|
1069
|
+
const text = args.trim();
|
|
1070
|
+
if (!text) {
|
|
1071
|
+
return { type: "show" };
|
|
1072
|
+
}
|
|
1073
|
+
const lower = text.toLowerCase();
|
|
1074
|
+
if (lower === "pause") {
|
|
1075
|
+
return { type: "pause" };
|
|
1076
|
+
}
|
|
1077
|
+
if (lower === "resume") {
|
|
1078
|
+
return { type: "resume" };
|
|
1079
|
+
}
|
|
1080
|
+
if (lower === "clear") {
|
|
1081
|
+
return { type: "clear" };
|
|
1082
|
+
}
|
|
1083
|
+
if (lower.startsWith("edit ")) {
|
|
1084
|
+
return {
|
|
1085
|
+
type: "edit",
|
|
1086
|
+
objective: normalizeGoalObjective(text.slice(5))
|
|
1087
|
+
};
|
|
1088
|
+
}
|
|
1089
|
+
return {
|
|
1090
|
+
type: "set",
|
|
1091
|
+
objective: normalizeGoalObjective(text)
|
|
1092
|
+
};
|
|
1093
|
+
}
|
|
1094
|
+
async function loadThreadGoal({
|
|
1095
|
+
goal,
|
|
1096
|
+
threadId,
|
|
1097
|
+
signal
|
|
1098
|
+
}) {
|
|
1099
|
+
return goal.getGoal({ threadId, signal });
|
|
1100
|
+
}
|
|
1101
|
+
async function executeThreadGoalCommand({
|
|
1102
|
+
goal,
|
|
1103
|
+
threadId,
|
|
1104
|
+
assistantId,
|
|
1105
|
+
command,
|
|
1106
|
+
runtimeCapabilities,
|
|
1107
|
+
signal
|
|
1108
|
+
}) {
|
|
1109
|
+
const normalizedThreadId = threadId?.trim() || null;
|
|
1110
|
+
if (command.type === "show") {
|
|
1111
|
+
if (!normalizedThreadId) {
|
|
1112
|
+
throw new Error("Thread is required to show the current goal.");
|
|
1113
|
+
}
|
|
1114
|
+
return {
|
|
1115
|
+
threadId: normalizedThreadId,
|
|
1116
|
+
goal: await goal.getGoal({ threadId: normalizedThreadId, signal })
|
|
1117
|
+
};
|
|
1118
|
+
}
|
|
1119
|
+
if (command.type === "clear") {
|
|
1120
|
+
if (!normalizedThreadId) {
|
|
1121
|
+
throw new Error("Thread is required to clear the current goal.");
|
|
1122
|
+
}
|
|
1123
|
+
return {
|
|
1124
|
+
threadId: normalizedThreadId,
|
|
1125
|
+
goal: await goal.clearGoal({ threadId: normalizedThreadId, signal })
|
|
1126
|
+
};
|
|
1127
|
+
}
|
|
1128
|
+
if (command.type === "pause" || command.type === "resume") {
|
|
1129
|
+
if (!normalizedThreadId) {
|
|
1130
|
+
throw new Error("Thread is required to update the current goal.");
|
|
1131
|
+
}
|
|
1132
|
+
return {
|
|
1133
|
+
threadId: normalizedThreadId,
|
|
1134
|
+
goal: await goal.updateGoal({
|
|
1135
|
+
threadId: normalizedThreadId,
|
|
1136
|
+
status: command.type === "pause" ? "paused" : "active",
|
|
1137
|
+
signal
|
|
1138
|
+
})
|
|
1139
|
+
};
|
|
1140
|
+
}
|
|
1141
|
+
const objective = command.objective.trim();
|
|
1142
|
+
if (!objective) {
|
|
1143
|
+
throw new Error("Goal objective is required.");
|
|
1144
|
+
}
|
|
1145
|
+
if (command.type === "edit") {
|
|
1146
|
+
if (!normalizedThreadId) {
|
|
1147
|
+
const result2 = await goal.setGoal({
|
|
1148
|
+
threadId: null,
|
|
1149
|
+
assistantId,
|
|
1150
|
+
objective,
|
|
1151
|
+
runtimeCapabilities,
|
|
1152
|
+
signal
|
|
1153
|
+
});
|
|
1154
|
+
return result2;
|
|
1155
|
+
}
|
|
1156
|
+
return {
|
|
1157
|
+
threadId: normalizedThreadId,
|
|
1158
|
+
goal: await goal.updateGoal({
|
|
1159
|
+
threadId: normalizedThreadId,
|
|
1160
|
+
objective,
|
|
1161
|
+
signal
|
|
1162
|
+
})
|
|
1163
|
+
};
|
|
1164
|
+
}
|
|
1165
|
+
const result = await goal.setGoal({
|
|
1166
|
+
threadId: normalizedThreadId,
|
|
1167
|
+
assistantId,
|
|
1168
|
+
objective,
|
|
1169
|
+
runtimeCapabilities,
|
|
1170
|
+
signal
|
|
1171
|
+
});
|
|
1172
|
+
return result;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1055
1175
|
// src/lib/follow-ups.ts
|
|
1056
1176
|
function getComposerFollowUpShortcutLabels(queueShortcutLabel) {
|
|
1057
1177
|
return {
|
|
@@ -1100,6 +1220,7 @@ import {
|
|
|
1100
1220
|
Search,
|
|
1101
1221
|
SlidersHorizontal,
|
|
1102
1222
|
Sparkles,
|
|
1223
|
+
Target,
|
|
1103
1224
|
X
|
|
1104
1225
|
} from "lucide-react";
|
|
1105
1226
|
|
|
@@ -1289,6 +1410,8 @@ var en_US_default = {
|
|
|
1289
1410
|
referencedContentOnly: "Referenced content",
|
|
1290
1411
|
youLabel: "You",
|
|
1291
1412
|
scrollToBottom: "Scroll to bottom",
|
|
1413
|
+
loadMoreMessages: "Load more",
|
|
1414
|
+
loadingMoreMessages: "Loading...",
|
|
1292
1415
|
retryUpload: "Retry upload",
|
|
1293
1416
|
dropFilesTitle: "Drop files to upload",
|
|
1294
1417
|
dropFilesHint: "They will be attached to your next message.",
|
|
@@ -1336,6 +1459,27 @@ var en_US_default = {
|
|
|
1336
1459
|
label: "Context window",
|
|
1337
1460
|
full: "{{usedPercent}}% used ({{remainingPercent}}% left)",
|
|
1338
1461
|
tokensUsed: "{{used}} / {{max}} tokens used"
|
|
1462
|
+
},
|
|
1463
|
+
goal: {
|
|
1464
|
+
label: "Goal",
|
|
1465
|
+
unavailable: "Goal controls are not available for this client.",
|
|
1466
|
+
startThreadRequired: "Start a conversation before changing the goal.",
|
|
1467
|
+
elapsed: "{{elapsed}} elapsed",
|
|
1468
|
+
edit: "Edit goal",
|
|
1469
|
+
pause: "Pause goal",
|
|
1470
|
+
resume: "Resume goal",
|
|
1471
|
+
clear: "Clear goal",
|
|
1472
|
+
hide: "Hide goal",
|
|
1473
|
+
expandObjective: "Show full goal",
|
|
1474
|
+
collapseObjective: "Hide full goal",
|
|
1475
|
+
status: {
|
|
1476
|
+
active: "active",
|
|
1477
|
+
paused: "paused",
|
|
1478
|
+
blocked: "blocked",
|
|
1479
|
+
usage_limited: "usage limited",
|
|
1480
|
+
budget_limited: "budget limited",
|
|
1481
|
+
complete: "complete"
|
|
1482
|
+
}
|
|
1339
1483
|
}
|
|
1340
1484
|
},
|
|
1341
1485
|
history: {
|
|
@@ -1567,6 +1711,22 @@ var en_US_default = {
|
|
|
1567
1711
|
}
|
|
1568
1712
|
}
|
|
1569
1713
|
},
|
|
1714
|
+
middlewareEvent: {
|
|
1715
|
+
title: {
|
|
1716
|
+
default: "Middleware",
|
|
1717
|
+
ModelFallbackMiddleware: "Model fallback",
|
|
1718
|
+
ModelRetryMiddleware: "Model retry"
|
|
1719
|
+
},
|
|
1720
|
+
phase: {
|
|
1721
|
+
fallback_started: "Trying fallback model {{attempt}}/{{total}}",
|
|
1722
|
+
fallback_succeeded: "Fallback model succeeded {{attempt}}/{{total}}",
|
|
1723
|
+
fallback_failed: "Fallback model failed {{attempt}}/{{total}}",
|
|
1724
|
+
retry_scheduled: "Scheduling model retry {{attempt}}/{{total}}",
|
|
1725
|
+
retry_started: "Retrying model call {{attempt}}/{{total}}",
|
|
1726
|
+
retry_succeeded: "Model retry succeeded {{attempt}}/{{total}}",
|
|
1727
|
+
retry_failed: "Model retry failed {{attempt}}/{{total}}"
|
|
1728
|
+
}
|
|
1729
|
+
},
|
|
1570
1730
|
toolGroup: {
|
|
1571
1731
|
status: {
|
|
1572
1732
|
running: "Processing",
|
|
@@ -1646,6 +1806,8 @@ var zh_CN_default = {
|
|
|
1646
1806
|
referencedContentOnly: "\u5DF2\u5F15\u7528\u5185\u5BB9",
|
|
1647
1807
|
youLabel: "\u4F60",
|
|
1648
1808
|
scrollToBottom: "\u56DE\u5230\u5E95\u90E8",
|
|
1809
|
+
loadMoreMessages: "\u52A0\u8F7D\u66F4\u591A",
|
|
1810
|
+
loadingMoreMessages: "\u6B63\u5728\u52A0\u8F7D...",
|
|
1649
1811
|
retryUpload: "\u91CD\u65B0\u4E0A\u4F20",
|
|
1650
1812
|
dropFilesTitle: "\u677E\u624B\u4E0A\u4F20\u6587\u4EF6",
|
|
1651
1813
|
dropFilesHint: "\u6587\u4EF6\u4F1A\u9644\u52A0\u5230\u4F60\u7684\u4E0B\u4E00\u6761\u6D88\u606F\u3002",
|
|
@@ -1693,6 +1855,27 @@ var zh_CN_default = {
|
|
|
1693
1855
|
label: "\u4E0A\u4E0B\u6587\u7A97\u53E3",
|
|
1694
1856
|
full: "\u5DF2\u4F7F\u7528 {{usedPercent}}%\uFF08\u5269\u4F59 {{remainingPercent}}%\uFF09",
|
|
1695
1857
|
tokensUsed: "\u5DF2\u4F7F\u7528 {{used}} / {{max}} tokens"
|
|
1858
|
+
},
|
|
1859
|
+
goal: {
|
|
1860
|
+
label: "\u76EE\u6807",
|
|
1861
|
+
unavailable: "\u5F53\u524D\u5BA2\u6237\u7AEF\u4E0D\u652F\u6301\u76EE\u6807\u63A7\u5236\u3002",
|
|
1862
|
+
startThreadRequired: "\u8BF7\u5148\u5F00\u59CB\u4E00\u4E2A\u4F1A\u8BDD\u518D\u4FEE\u6539\u76EE\u6807\u3002",
|
|
1863
|
+
elapsed: "\u5DF2\u8FD0\u884C {{elapsed}}",
|
|
1864
|
+
edit: "\u7F16\u8F91\u76EE\u6807",
|
|
1865
|
+
pause: "\u6682\u505C\u76EE\u6807",
|
|
1866
|
+
resume: "\u6062\u590D\u76EE\u6807",
|
|
1867
|
+
clear: "\u6E05\u9664\u76EE\u6807",
|
|
1868
|
+
hide: "\u9690\u85CF\u76EE\u6807",
|
|
1869
|
+
expandObjective: "\u663E\u793A\u5B8C\u6574\u76EE\u6807",
|
|
1870
|
+
collapseObjective: "\u9690\u85CF\u5B8C\u6574\u76EE\u6807",
|
|
1871
|
+
status: {
|
|
1872
|
+
active: "\u8FD0\u884C\u4E2D",
|
|
1873
|
+
paused: "\u5DF2\u6682\u505C",
|
|
1874
|
+
blocked: "\u5DF2\u963B\u585E",
|
|
1875
|
+
usage_limited: "\u7528\u91CF\u53D7\u9650",
|
|
1876
|
+
budget_limited: "\u9884\u7B97\u8017\u5C3D",
|
|
1877
|
+
complete: "\u5DF2\u5B8C\u6210"
|
|
1878
|
+
}
|
|
1696
1879
|
}
|
|
1697
1880
|
},
|
|
1698
1881
|
history: {
|
|
@@ -1924,6 +2107,22 @@ var zh_CN_default = {
|
|
|
1924
2107
|
}
|
|
1925
2108
|
}
|
|
1926
2109
|
},
|
|
2110
|
+
middlewareEvent: {
|
|
2111
|
+
title: {
|
|
2112
|
+
default: "\u4E2D\u95F4\u4EF6",
|
|
2113
|
+
ModelFallbackMiddleware: "\u6A21\u578B\u56DE\u9000",
|
|
2114
|
+
ModelRetryMiddleware: "\u6A21\u578B\u91CD\u8BD5"
|
|
2115
|
+
},
|
|
2116
|
+
phase: {
|
|
2117
|
+
fallback_started: "\u6B63\u5728\u5C1D\u8BD5\u5907\u7528\u6A21\u578B {{attempt}}/{{total}}",
|
|
2118
|
+
fallback_succeeded: "\u5907\u7528\u6A21\u578B\u8C03\u7528\u6210\u529F {{attempt}}/{{total}}",
|
|
2119
|
+
fallback_failed: "\u5907\u7528\u6A21\u578B\u8C03\u7528\u5931\u8D25 {{attempt}}/{{total}}",
|
|
2120
|
+
retry_scheduled: "\u51C6\u5907\u91CD\u8BD5\u6A21\u578B\u8C03\u7528 {{attempt}}/{{total}}",
|
|
2121
|
+
retry_started: "\u6B63\u5728\u91CD\u8BD5\u6A21\u578B\u8C03\u7528 {{attempt}}/{{total}}",
|
|
2122
|
+
retry_succeeded: "\u6A21\u578B\u91CD\u8BD5\u6210\u529F {{attempt}}/{{total}}",
|
|
2123
|
+
retry_failed: "\u6A21\u578B\u91CD\u8BD5\u5931\u8D25 {{attempt}}/{{total}}"
|
|
2124
|
+
}
|
|
2125
|
+
},
|
|
1927
2126
|
toolGroup: {
|
|
1928
2127
|
status: {
|
|
1929
2128
|
running: "\u6B63\u5728\u5904\u7406",
|
|
@@ -2965,6 +3164,9 @@ function ComposerMenu({
|
|
|
2965
3164
|
selectedTool,
|
|
2966
3165
|
planModeEnabled = false,
|
|
2967
3166
|
onPlanModeChange,
|
|
3167
|
+
goalCommandAvailable = false,
|
|
3168
|
+
goalPanelOpen = false,
|
|
3169
|
+
onGoalPanelOpenChange,
|
|
2968
3170
|
runtimeCapabilities,
|
|
2969
3171
|
selectedRuntimeCapabilities,
|
|
2970
3172
|
onRuntimeCapabilityToggle,
|
|
@@ -2999,6 +3201,9 @@ function ComposerMenu({
|
|
|
2999
3201
|
const handlePlanModeToggle = () => {
|
|
3000
3202
|
onPlanModeChange?.(!planModeEnabled);
|
|
3001
3203
|
};
|
|
3204
|
+
const handleGoalCommandClick = () => {
|
|
3205
|
+
onGoalPanelOpenChange?.(!goalPanelOpen);
|
|
3206
|
+
};
|
|
3002
3207
|
const handleOpenChange = (nextOpen) => {
|
|
3003
3208
|
if (nextOpen) {
|
|
3004
3209
|
const boundary = triggerRef.current?.closest("[data-chatkit-root]") ?? void 0;
|
|
@@ -3296,6 +3501,45 @@ function ComposerMenu({
|
|
|
3296
3501
|
]
|
|
3297
3502
|
}
|
|
3298
3503
|
),
|
|
3504
|
+
goalCommandAvailable && /* @__PURE__ */ jsxs4(
|
|
3505
|
+
DropdownMenuItem,
|
|
3506
|
+
{
|
|
3507
|
+
role: "switch",
|
|
3508
|
+
"aria-checked": goalPanelOpen,
|
|
3509
|
+
onSelect: (event) => {
|
|
3510
|
+
event.preventDefault();
|
|
3511
|
+
handleGoalCommandClick();
|
|
3512
|
+
},
|
|
3513
|
+
className: cn(
|
|
3514
|
+
"gap-3 px-3 py-2",
|
|
3515
|
+
menuItemRoundedClass,
|
|
3516
|
+
goalPanelOpen && "bg-muted"
|
|
3517
|
+
),
|
|
3518
|
+
children: [
|
|
3519
|
+
/* @__PURE__ */ jsx11("span", { className: "flex h-6 w-6 items-center justify-center text-muted-foreground", children: /* @__PURE__ */ jsx11(Target, { size: 16 }) }),
|
|
3520
|
+
/* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 text-left", children: t("chat.goal.label") }),
|
|
3521
|
+
/* @__PURE__ */ jsx11(
|
|
3522
|
+
"span",
|
|
3523
|
+
{
|
|
3524
|
+
className: cn(
|
|
3525
|
+
"relative inline-flex h-6 w-10 shrink-0 items-center rounded-full transition-colors",
|
|
3526
|
+
goalPanelOpen ? "bg-primary" : "bg-muted-foreground/20"
|
|
3527
|
+
),
|
|
3528
|
+
"aria-hidden": "true",
|
|
3529
|
+
children: /* @__PURE__ */ jsx11(
|
|
3530
|
+
"span",
|
|
3531
|
+
{
|
|
3532
|
+
className: cn(
|
|
3533
|
+
"inline-block h-5 w-5 rounded-full bg-background shadow-sm transition-transform",
|
|
3534
|
+
goalPanelOpen ? "translate-x-[18px]" : "translate-x-0.5"
|
|
3535
|
+
)
|
|
3536
|
+
}
|
|
3537
|
+
)
|
|
3538
|
+
}
|
|
3539
|
+
)
|
|
3540
|
+
]
|
|
3541
|
+
}
|
|
3542
|
+
),
|
|
3299
3543
|
hasRuntimeCapabilities && /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
3300
3544
|
/* @__PURE__ */ jsx11(DropdownMenuSeparator, {}),
|
|
3301
3545
|
skills.length > 0 && /* @__PURE__ */ jsxs4(
|
|
@@ -3400,6 +3644,40 @@ function ComposerMenu({
|
|
|
3400
3644
|
/* @__PURE__ */ jsx11("span", { children: t("composer.planModeActive") })
|
|
3401
3645
|
]
|
|
3402
3646
|
}
|
|
3647
|
+
),
|
|
3648
|
+
goalCommandAvailable && goalPanelOpen && /* @__PURE__ */ jsxs4(
|
|
3649
|
+
"button",
|
|
3650
|
+
{
|
|
3651
|
+
type: "button",
|
|
3652
|
+
"aria-label": t("chat.goal.hide"),
|
|
3653
|
+
disabled,
|
|
3654
|
+
onClick: () => onGoalPanelOpenChange?.(false),
|
|
3655
|
+
className: cn(
|
|
3656
|
+
"group inline-flex h-8 shrink-0 items-center gap-1.5 border border-primary/30 bg-primary/10 px-2 text-xs font-medium text-primary transition-all duration-200 hover:bg-primary/15",
|
|
3657
|
+
roundedClass
|
|
3658
|
+
),
|
|
3659
|
+
children: [
|
|
3660
|
+
/* @__PURE__ */ jsxs4("span", { className: "relative inline-flex h-4 w-4 items-center justify-center", children: [
|
|
3661
|
+
/* @__PURE__ */ jsx11(
|
|
3662
|
+
Target,
|
|
3663
|
+
{
|
|
3664
|
+
"data-slot": "goal-indicator-icon",
|
|
3665
|
+
size: 14,
|
|
3666
|
+
className: "absolute transition-all duration-150 group-hover:scale-75 group-hover:opacity-0"
|
|
3667
|
+
}
|
|
3668
|
+
),
|
|
3669
|
+
/* @__PURE__ */ jsx11(
|
|
3670
|
+
X,
|
|
3671
|
+
{
|
|
3672
|
+
"data-slot": "goal-remove-icon",
|
|
3673
|
+
size: 14,
|
|
3674
|
+
className: "absolute scale-75 opacity-0 transition-all duration-150 group-hover:scale-100 group-hover:opacity-100"
|
|
3675
|
+
}
|
|
3676
|
+
)
|
|
3677
|
+
] }),
|
|
3678
|
+
/* @__PURE__ */ jsx11("span", { children: t("chat.goal.label") })
|
|
3679
|
+
]
|
|
3680
|
+
}
|
|
3403
3681
|
)
|
|
3404
3682
|
] });
|
|
3405
3683
|
}
|
|
@@ -6766,6 +7044,9 @@ function parseSlashCommandInvocation(value) {
|
|
|
6766
7044
|
};
|
|
6767
7045
|
}
|
|
6768
7046
|
function shouldSubmitRawSlashInvocation(command) {
|
|
7047
|
+
if (command.name === "goal" && command.source === "runtime") {
|
|
7048
|
+
return false;
|
|
7049
|
+
}
|
|
6769
7050
|
return command.action.type === "insert_invocation";
|
|
6770
7051
|
}
|
|
6771
7052
|
function resolvePromptWorkflowText(value, language) {
|
|
@@ -6803,6 +7084,14 @@ function createSlashCommandExecutionEffect(command, args, language) {
|
|
|
6803
7084
|
...command.kind === "prompt_workflow" ? { kind: command.kind } : {},
|
|
6804
7085
|
...workflow ? { workflow } : {}
|
|
6805
7086
|
};
|
|
7087
|
+
if (command.name === "goal" && command.source === "runtime") {
|
|
7088
|
+
return {
|
|
7089
|
+
type: "goal",
|
|
7090
|
+
args: args.trim(),
|
|
7091
|
+
commandSource,
|
|
7092
|
+
runtimeCapabilities: getActionRuntimeCapabilities(action) ?? void 0
|
|
7093
|
+
};
|
|
7094
|
+
}
|
|
6806
7095
|
if (command.source === "builtin" && action.type === "client_action") {
|
|
6807
7096
|
if (command.name === "plan") {
|
|
6808
7097
|
if (args.trim()) {
|
|
@@ -7164,7 +7453,9 @@ function useSlashCommands({
|
|
|
7164
7453
|
setComposerText,
|
|
7165
7454
|
focusComposerAt,
|
|
7166
7455
|
setPlanModeEnabled,
|
|
7456
|
+
setGoalPanelOpen,
|
|
7167
7457
|
onPetCommand,
|
|
7458
|
+
onGoalCommand,
|
|
7168
7459
|
addRunRuntimeCapabilities,
|
|
7169
7460
|
setRunRuntimeCapabilities,
|
|
7170
7461
|
insertComposerCapabilityToken,
|
|
@@ -7356,6 +7647,17 @@ function useSlashCommands({
|
|
|
7356
7647
|
submitPrompt(effect);
|
|
7357
7648
|
return true;
|
|
7358
7649
|
}
|
|
7650
|
+
if (effect.type === "goal") {
|
|
7651
|
+
void onGoalCommand?.({
|
|
7652
|
+
args: effect.args,
|
|
7653
|
+
commandSource: effect.commandSource,
|
|
7654
|
+
runtimeCapabilities: effect.runtimeCapabilities
|
|
7655
|
+
});
|
|
7656
|
+
setComposerText("", 0);
|
|
7657
|
+
setPalette(null);
|
|
7658
|
+
focusComposerAt(0);
|
|
7659
|
+
return true;
|
|
7660
|
+
}
|
|
7359
7661
|
if (effect.type === "client_action") {
|
|
7360
7662
|
if (parentMessenger) {
|
|
7361
7663
|
void parentMessenger.sendCommand("onWidgetAction", {
|
|
@@ -7384,6 +7686,7 @@ function useSlashCommands({
|
|
|
7384
7686
|
i18n2.language,
|
|
7385
7687
|
parentMessenger,
|
|
7386
7688
|
onPetCommand,
|
|
7689
|
+
onGoalCommand,
|
|
7387
7690
|
selectCapabilityById,
|
|
7388
7691
|
setComposerText,
|
|
7389
7692
|
setPalette,
|
|
@@ -7409,12 +7712,23 @@ function useSlashCommands({
|
|
|
7409
7712
|
toggleCapabilityGroup(option.capabilityType);
|
|
7410
7713
|
return;
|
|
7411
7714
|
}
|
|
7715
|
+
if (option.command.name === "goal" && option.command.source === "runtime") {
|
|
7716
|
+
setGoalPanelOpen((open) => !open);
|
|
7717
|
+
setComposerText("", 0);
|
|
7718
|
+
setPalette(null);
|
|
7719
|
+
focusComposerAt(0);
|
|
7720
|
+
return;
|
|
7721
|
+
}
|
|
7412
7722
|
executeSlashCommand(option.command, "");
|
|
7413
7723
|
},
|
|
7414
7724
|
[
|
|
7415
7725
|
executeSlashCommand,
|
|
7726
|
+
focusComposerAt,
|
|
7416
7727
|
insertComposerCapabilityToken,
|
|
7417
7728
|
palette,
|
|
7729
|
+
setGoalPanelOpen,
|
|
7730
|
+
setComposerText,
|
|
7731
|
+
setPalette,
|
|
7418
7732
|
toggleCapabilityGroup
|
|
7419
7733
|
]
|
|
7420
7734
|
);
|
|
@@ -7579,6 +7893,9 @@ function findFallbackRunByAgentKey(runs, agentKey, rootExecutionId) {
|
|
|
7579
7893
|
}
|
|
7580
7894
|
function getEntryRunTarget(entry, runs, rootExecutionId) {
|
|
7581
7895
|
const item = entry.item;
|
|
7896
|
+
if (typeof item !== "string" && isAgentEventContent(item) && item.event === "middleware_event") {
|
|
7897
|
+
return null;
|
|
7898
|
+
}
|
|
7582
7899
|
const executionId = readContentExecutionId(item);
|
|
7583
7900
|
const parentExecutionId = readContentParentExecutionId(item);
|
|
7584
7901
|
const agentKey = readContentAgentKey(item);
|
|
@@ -7653,7 +7970,9 @@ function refreshAgentNodeOrder(node) {
|
|
|
7653
7970
|
}
|
|
7654
7971
|
function buildAssistantRenderTree(message) {
|
|
7655
7972
|
const rootExecutionId = message.executionId;
|
|
7656
|
-
const runs = message.agentRuns ?? []
|
|
7973
|
+
const runs = (message.agentRuns ?? []).filter(
|
|
7974
|
+
(run) => !isMiddlewareAgentRunInfo(run)
|
|
7975
|
+
);
|
|
7657
7976
|
const entries = normalizeAssistantEntries(message);
|
|
7658
7977
|
const nodes = /* @__PURE__ */ new Map();
|
|
7659
7978
|
const rootEntries = [];
|
|
@@ -8947,7 +9266,7 @@ import {
|
|
|
8947
9266
|
Wrench,
|
|
8948
9267
|
XCircle
|
|
8949
9268
|
} from "lucide-react";
|
|
8950
|
-
import { jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
9269
|
+
import { Fragment as Fragment6, jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
8951
9270
|
function safeJson2(value) {
|
|
8952
9271
|
try {
|
|
8953
9272
|
return JSON.stringify(value, null, 2);
|
|
@@ -8958,6 +9277,87 @@ function safeJson2(value) {
|
|
|
8958
9277
|
function formatDisplayValue2(value) {
|
|
8959
9278
|
return typeof value === "string" ? value : safeJson2(value);
|
|
8960
9279
|
}
|
|
9280
|
+
function getAgentEventData(content) {
|
|
9281
|
+
return content.data && typeof content.data === "object" ? content.data : {};
|
|
9282
|
+
}
|
|
9283
|
+
function readTrimmedString(value) {
|
|
9284
|
+
if (typeof value !== "string") return null;
|
|
9285
|
+
const trimmed = value.trim();
|
|
9286
|
+
return trimmed ? trimmed : null;
|
|
9287
|
+
}
|
|
9288
|
+
function readDisplayToken(value) {
|
|
9289
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
9290
|
+
return String(value);
|
|
9291
|
+
}
|
|
9292
|
+
return readTrimmedString(value);
|
|
9293
|
+
}
|
|
9294
|
+
function getMiddlewareEventDetailData(data) {
|
|
9295
|
+
return data.data && typeof data.data === "object" && !Array.isArray(data.data) ? data.data : {};
|
|
9296
|
+
}
|
|
9297
|
+
function isMiddlewareEventContent(content) {
|
|
9298
|
+
return content.event === "middleware_event";
|
|
9299
|
+
}
|
|
9300
|
+
function getMiddlewareEventIcon(status) {
|
|
9301
|
+
const normalized = normalizeRunStatus(status);
|
|
9302
|
+
if (normalized === "running") {
|
|
9303
|
+
return { icon: Loader24, spin: true };
|
|
9304
|
+
}
|
|
9305
|
+
if (isFailedRunStatus(status)) {
|
|
9306
|
+
return { icon: XCircle, spin: false };
|
|
9307
|
+
}
|
|
9308
|
+
return { icon: CheckCircle22, spin: false };
|
|
9309
|
+
}
|
|
9310
|
+
function MiddlewareEventRow({ content }) {
|
|
9311
|
+
const { t } = useChatkitTranslation();
|
|
9312
|
+
const eventData = getAgentEventData(content);
|
|
9313
|
+
const detailData = getMiddlewareEventDetailData(eventData);
|
|
9314
|
+
const middlewareName = readTrimmedString(eventData.middlewareName);
|
|
9315
|
+
const phase = readTrimmedString(eventData.phase);
|
|
9316
|
+
const fallbackTitle = readTrimmedString(content.title) || middlewareName || t("message.middlewareEvent.title.default");
|
|
9317
|
+
const label = middlewareName ? t(`message.middlewareEvent.title.${middlewareName}`, {
|
|
9318
|
+
defaultValue: fallbackTitle
|
|
9319
|
+
}) : fallbackTitle;
|
|
9320
|
+
const fallbackMessage = readTrimmedString(content.message) || phase || null;
|
|
9321
|
+
const attempt = readDisplayToken(detailData.attempt) ?? readDisplayToken(eventData.attempt);
|
|
9322
|
+
const total2 = readDisplayToken(detailData.totalAttempts) ?? readDisplayToken(detailData.total) ?? readDisplayToken(eventData.totalAttempts) ?? readDisplayToken(eventData.total);
|
|
9323
|
+
const detail = phase && attempt && total2 ? t(`message.middlewareEvent.phase.${phase}`, {
|
|
9324
|
+
attempt,
|
|
9325
|
+
total: total2,
|
|
9326
|
+
defaultValue: fallbackMessage ?? phase
|
|
9327
|
+
}) : fallbackMessage;
|
|
9328
|
+
const isError = content.error !== void 0 || isFailedRunStatus(content.status);
|
|
9329
|
+
const isRunning = isRunningRunStatus(content.status);
|
|
9330
|
+
const statusIcon = getMiddlewareEventIcon(content.status);
|
|
9331
|
+
const StatusIcon = statusIcon.icon;
|
|
9332
|
+
return /* @__PURE__ */ jsxs21(
|
|
9333
|
+
"div",
|
|
9334
|
+
{
|
|
9335
|
+
"data-testid": "middleware-event-row",
|
|
9336
|
+
className: cn(
|
|
9337
|
+
"my-1 inline-flex max-w-full items-center gap-1.5 rounded-full border px-2 py-1 text-[11px] leading-4",
|
|
9338
|
+
isError ? "border-destructive/20 bg-destructive/5 text-destructive" : isRunning ? "border-border/60 bg-muted/20 text-muted-foreground" : "border-emerald-500/20 bg-emerald-500/5 text-muted-foreground"
|
|
9339
|
+
),
|
|
9340
|
+
children: [
|
|
9341
|
+
/* @__PURE__ */ jsx33(
|
|
9342
|
+
StatusIcon,
|
|
9343
|
+
{
|
|
9344
|
+
className: cn(
|
|
9345
|
+
"h-3.5 w-3.5 shrink-0",
|
|
9346
|
+
isRunning && "text-blue-700",
|
|
9347
|
+
!isRunning && !isError && "text-emerald-600",
|
|
9348
|
+
statusIcon.spin && "animate-spin"
|
|
9349
|
+
)
|
|
9350
|
+
}
|
|
9351
|
+
),
|
|
9352
|
+
/* @__PURE__ */ jsx33("span", { className: "min-w-0 truncate font-medium", children: label }),
|
|
9353
|
+
detail ? /* @__PURE__ */ jsxs21(Fragment6, { children: [
|
|
9354
|
+
/* @__PURE__ */ jsx33("span", { className: "text-muted-foreground/50", children: "\xB7" }),
|
|
9355
|
+
/* @__PURE__ */ jsx33("span", { className: "min-w-0 truncate", children: detail })
|
|
9356
|
+
] }) : null
|
|
9357
|
+
]
|
|
9358
|
+
}
|
|
9359
|
+
);
|
|
9360
|
+
}
|
|
8961
9361
|
function formatStepDuration(durationMs) {
|
|
8962
9362
|
if (durationMs < 1e3) {
|
|
8963
9363
|
return `${durationMs}ms`;
|
|
@@ -9053,6 +9453,9 @@ function getAgentNodeUnits(node) {
|
|
|
9053
9453
|
].sort((a, b) => a.order - b.order);
|
|
9054
9454
|
}
|
|
9055
9455
|
function AgentEventRow({ content }) {
|
|
9456
|
+
if (isMiddlewareEventContent(content)) {
|
|
9457
|
+
return /* @__PURE__ */ jsx33(MiddlewareEventRow, { content });
|
|
9458
|
+
}
|
|
9056
9459
|
const label = content.title?.trim() || content.message?.trim() || content.event?.trim() || "Event";
|
|
9057
9460
|
const detail = content.title?.trim() && content.message?.trim() ? content.message.trim() : null;
|
|
9058
9461
|
const isError = content.error !== void 0 || isFailedRunStatus(content.status);
|
|
@@ -9929,7 +10332,7 @@ function SandboxShellToolCallCard({ data }) {
|
|
|
9929
10332
|
"div",
|
|
9930
10333
|
{
|
|
9931
10334
|
className: cn(
|
|
9932
|
-
"group/shell-copy relative min-h-0 flex-1",
|
|
10335
|
+
"group/shell-copy relative min-h-0 flex-1 overflow-auto",
|
|
9933
10336
|
SANDBOX_SHELL_SECTION_GAP_CLASS
|
|
9934
10337
|
),
|
|
9935
10338
|
children: [
|
|
@@ -9937,7 +10340,7 @@ function SandboxShellToolCallCard({ data }) {
|
|
|
9937
10340
|
"pre",
|
|
9938
10341
|
{
|
|
9939
10342
|
className: cn(
|
|
9940
|
-
"min-h-0
|
|
10343
|
+
"min-h-0 whitespace-pre pr-8 font-mono text-muted-foreground/85 in-data-[density=compact]:pr-6 in-data-[density=spacious]:pr-10",
|
|
9941
10344
|
SANDBOX_SHELL_TEXT_CLASS
|
|
9942
10345
|
),
|
|
9943
10346
|
"data-slot": "sandbox-shell-output",
|
|
@@ -13271,6 +13674,127 @@ async function persistConversationRuntimeCapabilities({
|
|
|
13271
13674
|
};
|
|
13272
13675
|
}
|
|
13273
13676
|
|
|
13677
|
+
// src/lib/xpert-thread-goal-adapter.ts
|
|
13678
|
+
var SDK_GOAL_METHOD_ERROR = "Current Xpert SDK client does not expose conversation goal methods. Provide options.goal to use a custom goal adapter.";
|
|
13679
|
+
function requireBoundGoalMethod(owner, method) {
|
|
13680
|
+
if (!owner || !method) {
|
|
13681
|
+
throw new Error(SDK_GOAL_METHOD_ERROR);
|
|
13682
|
+
}
|
|
13683
|
+
return method.bind(owner);
|
|
13684
|
+
}
|
|
13685
|
+
function supportsXpertThreadGoalAdapter(client) {
|
|
13686
|
+
const conversations = client.conversations;
|
|
13687
|
+
return Boolean(
|
|
13688
|
+
conversations?.search && conversations.create && conversations.getGoal && conversations.setGoal && conversations.updateGoal && conversations.clearGoal
|
|
13689
|
+
);
|
|
13690
|
+
}
|
|
13691
|
+
async function findConversation(client, threadId) {
|
|
13692
|
+
return findConversationByThreadIdWithRetry(
|
|
13693
|
+
client,
|
|
13694
|
+
threadId
|
|
13695
|
+
);
|
|
13696
|
+
}
|
|
13697
|
+
async function requireConversation(client, threadId) {
|
|
13698
|
+
const conversation = await findConversation(client, threadId);
|
|
13699
|
+
if (!conversation?.id) {
|
|
13700
|
+
throw new Error("Conversation not found for this thread.");
|
|
13701
|
+
}
|
|
13702
|
+
return conversation;
|
|
13703
|
+
}
|
|
13704
|
+
function createXpertThreadGoalAdapter(client) {
|
|
13705
|
+
return {
|
|
13706
|
+
async getGoal({ threadId, signal }) {
|
|
13707
|
+
const conversation = await findConversation(client, threadId);
|
|
13708
|
+
if (!conversation?.id) {
|
|
13709
|
+
return null;
|
|
13710
|
+
}
|
|
13711
|
+
const getGoal = requireBoundGoalMethod(
|
|
13712
|
+
client.conversations,
|
|
13713
|
+
client.conversations.getGoal
|
|
13714
|
+
);
|
|
13715
|
+
return getGoal(conversation.id, { signal });
|
|
13716
|
+
},
|
|
13717
|
+
async setGoal({
|
|
13718
|
+
threadId,
|
|
13719
|
+
assistantId,
|
|
13720
|
+
objective,
|
|
13721
|
+
runtimeCapabilities,
|
|
13722
|
+
signal
|
|
13723
|
+
}) {
|
|
13724
|
+
const normalizedObjective = objective.trim();
|
|
13725
|
+
if (!normalizedObjective) {
|
|
13726
|
+
throw new Error("Goal objective is required.");
|
|
13727
|
+
}
|
|
13728
|
+
const setGoal = requireBoundGoalMethod(
|
|
13729
|
+
client.conversations,
|
|
13730
|
+
client.conversations.setGoal
|
|
13731
|
+
);
|
|
13732
|
+
const normalizedThreadId = threadId?.trim() || null;
|
|
13733
|
+
if (normalizedThreadId) {
|
|
13734
|
+
const conversation2 = await requireConversation(
|
|
13735
|
+
client,
|
|
13736
|
+
normalizedThreadId
|
|
13737
|
+
);
|
|
13738
|
+
const goal2 = await setGoal(
|
|
13739
|
+
conversation2.id,
|
|
13740
|
+
{ objective: normalizedObjective },
|
|
13741
|
+
{ signal }
|
|
13742
|
+
);
|
|
13743
|
+
return { threadId: normalizedThreadId, goal: goal2 };
|
|
13744
|
+
}
|
|
13745
|
+
const createConversation = requireBoundGoalMethod(
|
|
13746
|
+
client.conversations,
|
|
13747
|
+
client.conversations?.create
|
|
13748
|
+
);
|
|
13749
|
+
const conversation = await createConversation({
|
|
13750
|
+
xpertId: assistantId,
|
|
13751
|
+
...runtimeCapabilities ? {
|
|
13752
|
+
options: {
|
|
13753
|
+
runtimeCapabilities
|
|
13754
|
+
}
|
|
13755
|
+
} : {}
|
|
13756
|
+
});
|
|
13757
|
+
const conversationId = conversation.id?.trim();
|
|
13758
|
+
if (!conversationId) {
|
|
13759
|
+
throw new Error("Created conversation is missing id.");
|
|
13760
|
+
}
|
|
13761
|
+
const createdThreadId = conversation.threadId?.trim();
|
|
13762
|
+
if (!createdThreadId) {
|
|
13763
|
+
throw new Error("Created conversation is missing threadId.");
|
|
13764
|
+
}
|
|
13765
|
+
const goal = await setGoal(
|
|
13766
|
+
conversationId,
|
|
13767
|
+
{ objective: normalizedObjective },
|
|
13768
|
+
{ signal }
|
|
13769
|
+
);
|
|
13770
|
+
return { threadId: createdThreadId, goal };
|
|
13771
|
+
},
|
|
13772
|
+
async updateGoal({ threadId, objective, status, signal }) {
|
|
13773
|
+
const conversation = await requireConversation(client, threadId);
|
|
13774
|
+
const updateGoal = requireBoundGoalMethod(
|
|
13775
|
+
client.conversations,
|
|
13776
|
+
client.conversations.updateGoal
|
|
13777
|
+
);
|
|
13778
|
+
return updateGoal(
|
|
13779
|
+
conversation.id,
|
|
13780
|
+
{
|
|
13781
|
+
...objective !== void 0 ? { objective } : {},
|
|
13782
|
+
...status ? { status } : {}
|
|
13783
|
+
},
|
|
13784
|
+
{ signal }
|
|
13785
|
+
);
|
|
13786
|
+
},
|
|
13787
|
+
async clearGoal({ threadId, signal }) {
|
|
13788
|
+
const conversation = await requireConversation(client, threadId);
|
|
13789
|
+
const clearGoal = requireBoundGoalMethod(
|
|
13790
|
+
client.conversations,
|
|
13791
|
+
client.conversations.clearGoal
|
|
13792
|
+
);
|
|
13793
|
+
return clearGoal(conversation.id, { signal });
|
|
13794
|
+
}
|
|
13795
|
+
};
|
|
13796
|
+
}
|
|
13797
|
+
|
|
13274
13798
|
// src/lib/composer-parts.ts
|
|
13275
13799
|
var COMPOSER_CAPABILITY_TOKEN_LENGTH = 1;
|
|
13276
13800
|
var COMPOSER_CAPABILITY_TOKEN = "\uFFFC";
|
|
@@ -13589,10 +14113,25 @@ function findDomPointForComposerOffset(root, offset) {
|
|
|
13589
14113
|
}
|
|
13590
14114
|
|
|
13591
14115
|
// src/components/chat.tsx
|
|
13592
|
-
import { Fragment as
|
|
14116
|
+
import { Fragment as Fragment9, jsx as jsx53, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
13593
14117
|
var defaultApiUrl2 = import.meta.env.VITE_XPERTAI_API_URL;
|
|
13594
14118
|
var COMPOSER_INPUT_MAX_HEIGHT = 128;
|
|
13595
14119
|
var LONG_TEXT_REFERENCE_THRESHOLD = 5e3;
|
|
14120
|
+
var GOAL_RUN_INPUT = "Continue working toward the active goal.";
|
|
14121
|
+
function hasRuntimeGoalCommand(runtimeCapabilities) {
|
|
14122
|
+
return runtimeCapabilities?.commands?.some((command) => command.name === "goal") ?? false;
|
|
14123
|
+
}
|
|
14124
|
+
function isGoalAdapter(value) {
|
|
14125
|
+
return Boolean(value) && typeof value === "object" && typeof value.getGoal === "function" && typeof value.setGoal === "function" && typeof value.updateGoal === "function" && typeof value.clearGoal === "function";
|
|
14126
|
+
}
|
|
14127
|
+
function formatGoalElapsed(seconds) {
|
|
14128
|
+
if (seconds < 60) {
|
|
14129
|
+
return `${seconds}s`;
|
|
14130
|
+
}
|
|
14131
|
+
const minutes = Math.floor(seconds / 60);
|
|
14132
|
+
const remainingSeconds = seconds % 60;
|
|
14133
|
+
return remainingSeconds ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`;
|
|
14134
|
+
}
|
|
13596
14135
|
function getSlashPaletteEmptyLabelKey(palette, runtimeCapabilitiesReady) {
|
|
13597
14136
|
if (!palette.capabilityTypes || palette.capabilityTypes.length !== 1) {
|
|
13598
14137
|
return "composer.capabilities.emptySearch";
|
|
@@ -13802,6 +14341,12 @@ function Chat({
|
|
|
13802
14341
|
const [historyError, setHistoryError] = React48.useState(null);
|
|
13803
14342
|
const [assistantName, setAssistantName] = React48.useState(null);
|
|
13804
14343
|
const [assistantAvatar, setAssistantAvatar] = React48.useState(null);
|
|
14344
|
+
const [threadGoal, setThreadGoal] = React48.useState(null);
|
|
14345
|
+
const [goalError, setGoalError] = React48.useState(null);
|
|
14346
|
+
const [isGoalLoading, setIsGoalLoading] = React48.useState(false);
|
|
14347
|
+
const [isGoalPanelOpen, setIsGoalPanelOpen] = React48.useState(false);
|
|
14348
|
+
const [isGoalObjectiveExpanded, setIsGoalObjectiveExpanded] = React48.useState(false);
|
|
14349
|
+
const [goalElapsedStartedAt, setGoalElapsedStartedAt] = React48.useState(null);
|
|
13805
14350
|
const LOADING_DOTS_MIN_DURATION = 800;
|
|
13806
14351
|
const STREAMING_STATUS_REFRESH_MS = 250;
|
|
13807
14352
|
const [showLoadingDots, setShowLoadingDots] = React48.useState(false);
|
|
@@ -13853,6 +14398,21 @@ function Chat({
|
|
|
13853
14398
|
}, STREAMING_STATUS_REFRESH_MS);
|
|
13854
14399
|
return () => window.clearInterval(timer);
|
|
13855
14400
|
}, [stream.isLoading]);
|
|
14401
|
+
React48.useEffect(() => {
|
|
14402
|
+
if (threadGoal?.status === "active" && stream.isLoading) {
|
|
14403
|
+
setGoalElapsedStartedAt(Date.now());
|
|
14404
|
+
return;
|
|
14405
|
+
}
|
|
14406
|
+
setGoalElapsedStartedAt(null);
|
|
14407
|
+
}, [
|
|
14408
|
+
stream.isLoading,
|
|
14409
|
+
threadGoal?.elapsedSeconds,
|
|
14410
|
+
threadGoal?.id,
|
|
14411
|
+
threadGoal?.status
|
|
14412
|
+
]);
|
|
14413
|
+
React48.useEffect(() => {
|
|
14414
|
+
setIsGoalObjectiveExpanded(false);
|
|
14415
|
+
}, [threadGoal?.id]);
|
|
13856
14416
|
const [composerParts, setComposerParts] = React48.useState([]);
|
|
13857
14417
|
const [renderedComposerParts, setRenderedComposerParts] = React48.useState([]);
|
|
13858
14418
|
const [composerDomVersion, setComposerDomVersion] = React48.useState(0);
|
|
@@ -13900,6 +14460,7 @@ function Chat({
|
|
|
13900
14460
|
const forceFollowRef = React48.useRef(false);
|
|
13901
14461
|
const previousMessageCountRef = React48.useRef(0);
|
|
13902
14462
|
const previousScrollTopRef = React48.useRef(0);
|
|
14463
|
+
const isPrependingHistoryMessagesRef = React48.useRef(false);
|
|
13903
14464
|
const autoScrollFrameRef = React48.useRef(null);
|
|
13904
14465
|
const isPointerDownRef = React48.useRef(false);
|
|
13905
14466
|
const lastTouchYRef = React48.useRef(null);
|
|
@@ -13958,13 +14519,20 @@ function Chat({
|
|
|
13958
14519
|
() => stream.messages ?? [],
|
|
13959
14520
|
[stream.messages]
|
|
13960
14521
|
);
|
|
14522
|
+
const historyMessagePagination = stream.historyMessagePagination;
|
|
14523
|
+
const isLoadingMoreMessages = Boolean(
|
|
14524
|
+
historyMessagePagination?.isLoadingMore
|
|
14525
|
+
);
|
|
14526
|
+
const canLoadMoreMessages = Boolean(historyMessagePagination?.hasMore);
|
|
13961
14527
|
const draft = React48.useMemo(
|
|
13962
14528
|
() => getComposerPlainText(composerParts),
|
|
13963
14529
|
[composerParts]
|
|
13964
14530
|
);
|
|
13965
14531
|
const trimmedDraft = draft.trim();
|
|
13966
14532
|
const hasReferences = references.length > 0;
|
|
13967
|
-
const
|
|
14533
|
+
const hasCompletedGoal = threadGoal?.status === "complete";
|
|
14534
|
+
const isGoalModeOpen = isGoalPanelOpen;
|
|
14535
|
+
const isComposerStacked = planModeEnabled || isGoalModeOpen || Boolean(selectedTool);
|
|
13968
14536
|
const isComposerInputEmpty = getComposerEditingLength(composerParts) === 0;
|
|
13969
14537
|
const composerInputRoundedClass = getComposerInputRoundedClass(theme.radius, {
|
|
13970
14538
|
isEmpty: isComposerInputEmpty,
|
|
@@ -13985,6 +14553,18 @@ function Chat({
|
|
|
13985
14553
|
() => getRuntimeCapabilityOptions(runtimeCapabilities),
|
|
13986
14554
|
[runtimeCapabilities]
|
|
13987
14555
|
);
|
|
14556
|
+
const goalCommandAvailable = hasRuntimeGoalCommand(runtimeCapabilities);
|
|
14557
|
+
const goalAdapter = React48.useMemo(
|
|
14558
|
+
() => {
|
|
14559
|
+
if (isGoalAdapter(options?.goal)) {
|
|
14560
|
+
return options.goal;
|
|
14561
|
+
}
|
|
14562
|
+
return supportsXpertThreadGoalAdapter(stream.client) ? createXpertThreadGoalAdapter(stream.client) : null;
|
|
14563
|
+
},
|
|
14564
|
+
[options?.goal, stream.client]
|
|
14565
|
+
);
|
|
14566
|
+
const showGoalStatus = goalCommandAvailable && !hasCompletedGoal && (Boolean(goalError) || threadGoal?.status === "active" && stream.isLoading);
|
|
14567
|
+
const displayedGoalElapsedSeconds = threadGoal ? (threadGoal.elapsedSeconds ?? 0) + (goalElapsedStartedAt ? Math.max(0, Math.floor((streamingNow - goalElapsedStartedAt) / 1e3)) : 0) : 0;
|
|
13988
14568
|
const effectiveSessionRuntimeCapabilities = React48.useMemo(
|
|
13989
14569
|
() => runtimeCapabilitiesReady && runtimeCapabilities ? mergeRuntimeCapabilitiesSelections(
|
|
13990
14570
|
runtimeCapabilities,
|
|
@@ -14322,6 +14902,10 @@ function Chat({
|
|
|
14322
14902
|
React48.useEffect(() => {
|
|
14323
14903
|
const messageCountChanged = messages.length !== previousMessageCountRef.current;
|
|
14324
14904
|
previousMessageCountRef.current = messages.length;
|
|
14905
|
+
if (isPrependingHistoryMessagesRef.current) {
|
|
14906
|
+
setHasUpdatesBelow(false);
|
|
14907
|
+
return;
|
|
14908
|
+
}
|
|
14325
14909
|
if (!shouldAutoScrollRef.current) {
|
|
14326
14910
|
if (messageCountChanged || stream.isLoading) {
|
|
14327
14911
|
setHasUpdatesBelow(true);
|
|
@@ -14534,6 +15118,49 @@ function Chat({
|
|
|
14534
15118
|
stream.client,
|
|
14535
15119
|
stream.threadId
|
|
14536
15120
|
]);
|
|
15121
|
+
React48.useEffect(() => {
|
|
15122
|
+
setThreadGoal(stream.threadGoal);
|
|
15123
|
+
}, [stream.threadGoal]);
|
|
15124
|
+
React48.useEffect(() => {
|
|
15125
|
+
const threadId = stream.threadId?.trim();
|
|
15126
|
+
if (!threadId || !goalCommandAvailable) {
|
|
15127
|
+
setThreadGoal(null);
|
|
15128
|
+
setGoalError(null);
|
|
15129
|
+
setIsGoalLoading(false);
|
|
15130
|
+
setIsGoalPanelOpen(false);
|
|
15131
|
+
return;
|
|
15132
|
+
}
|
|
15133
|
+
if (!goalAdapter) {
|
|
15134
|
+
setThreadGoal(null);
|
|
15135
|
+
setGoalError(null);
|
|
15136
|
+
setIsGoalLoading(false);
|
|
15137
|
+
setIsGoalPanelOpen(false);
|
|
15138
|
+
return;
|
|
15139
|
+
}
|
|
15140
|
+
const controller = new AbortController();
|
|
15141
|
+
setIsGoalLoading(true);
|
|
15142
|
+
setGoalError(null);
|
|
15143
|
+
void loadThreadGoal({
|
|
15144
|
+
goal: goalAdapter,
|
|
15145
|
+
threadId,
|
|
15146
|
+
signal: controller.signal
|
|
15147
|
+
}).then((goal) => {
|
|
15148
|
+
if (!controller.signal.aborted) {
|
|
15149
|
+
setThreadGoal(goal);
|
|
15150
|
+
}
|
|
15151
|
+
}).catch((error) => {
|
|
15152
|
+
if (controller.signal.aborted) {
|
|
15153
|
+
return;
|
|
15154
|
+
}
|
|
15155
|
+
setGoalError(error instanceof Error ? error.message : String(error));
|
|
15156
|
+
setThreadGoal(null);
|
|
15157
|
+
}).finally(() => {
|
|
15158
|
+
if (!controller.signal.aborted) {
|
|
15159
|
+
setIsGoalLoading(false);
|
|
15160
|
+
}
|
|
15161
|
+
});
|
|
15162
|
+
return () => controller.abort();
|
|
15163
|
+
}, [goalAdapter, goalCommandAvailable, stream.threadId]);
|
|
14537
15164
|
const uploadedFiles = attachmentState.uploadedFiles;
|
|
14538
15165
|
const handleSessionRuntimeCapabilityToggle = React48.useCallback(
|
|
14539
15166
|
(type, id, selected) => {
|
|
@@ -14745,6 +15372,124 @@ function Chat({
|
|
|
14745
15372
|
t
|
|
14746
15373
|
]
|
|
14747
15374
|
);
|
|
15375
|
+
const handleGoalCommand = React48.useCallback(
|
|
15376
|
+
async ({
|
|
15377
|
+
args,
|
|
15378
|
+
commandSource,
|
|
15379
|
+
runtimeCapabilities: commandRuntimeCapabilities,
|
|
15380
|
+
visibleInput
|
|
15381
|
+
}) => {
|
|
15382
|
+
const command = parseGoalCommand(args);
|
|
15383
|
+
const threadId = stream.threadId?.trim();
|
|
15384
|
+
setGoalError(null);
|
|
15385
|
+
if (!threadId) {
|
|
15386
|
+
if (command.type === "show") {
|
|
15387
|
+
setThreadGoal(null);
|
|
15388
|
+
setIsGoalLoading(false);
|
|
15389
|
+
return;
|
|
15390
|
+
}
|
|
15391
|
+
if (command.type !== "set" && command.type !== "edit") {
|
|
15392
|
+
setGoalError(t("chat.goal.startThreadRequired"));
|
|
15393
|
+
return;
|
|
15394
|
+
}
|
|
15395
|
+
}
|
|
15396
|
+
if (!goalAdapter) {
|
|
15397
|
+
setGoalError(t("chat.goal.unavailable"));
|
|
15398
|
+
return;
|
|
15399
|
+
}
|
|
15400
|
+
setIsGoalLoading(true);
|
|
15401
|
+
try {
|
|
15402
|
+
const result = await executeThreadGoalCommand({
|
|
15403
|
+
goal: goalAdapter,
|
|
15404
|
+
threadId,
|
|
15405
|
+
assistantId: stream.assistantId,
|
|
15406
|
+
command,
|
|
15407
|
+
runtimeCapabilities: commandRuntimeCapabilities
|
|
15408
|
+
});
|
|
15409
|
+
if (!threadId && result.threadId) {
|
|
15410
|
+
stream.reset(result.threadId, []);
|
|
15411
|
+
void refreshThreads();
|
|
15412
|
+
}
|
|
15413
|
+
const startsGoalRun = result.goal?.status === "active" && (command.type === "set" || command.type === "edit" || command.type === "resume");
|
|
15414
|
+
setThreadGoal(command.type === "clear" ? null : result.goal);
|
|
15415
|
+
if (command.type === "clear" || startsGoalRun) {
|
|
15416
|
+
setIsGoalPanelOpen(false);
|
|
15417
|
+
}
|
|
15418
|
+
if (startsGoalRun) {
|
|
15419
|
+
const goalRunThreadId = result.threadId ?? threadId;
|
|
15420
|
+
const runtimeCapabilitiesForGoalRun = runtimeCapabilities && runtimeCapabilitiesReady ? createRuntimeCapabilitiesForSubmit({
|
|
15421
|
+
capabilities: runtimeCapabilities,
|
|
15422
|
+
available: effectiveSessionRuntimeCapabilities,
|
|
15423
|
+
recommended: commandRuntimeCapabilities
|
|
15424
|
+
}) : commandRuntimeCapabilities ?? null;
|
|
15425
|
+
const inputPayload = {
|
|
15426
|
+
input: GOAL_RUN_INPUT,
|
|
15427
|
+
commandSource,
|
|
15428
|
+
goalRun: true,
|
|
15429
|
+
...runtimeCapabilitiesForGoalRun ? { runtimeCapabilities: runtimeCapabilitiesForGoalRun } : {}
|
|
15430
|
+
};
|
|
15431
|
+
const requestOptions = buildInjectedRequestOptions({
|
|
15432
|
+
defaults: options?.request,
|
|
15433
|
+
humanInput: inputPayload
|
|
15434
|
+
});
|
|
15435
|
+
const visibleGoalMessage = visibleInput ? {
|
|
15436
|
+
id: createMessageId(),
|
|
15437
|
+
type: "human",
|
|
15438
|
+
content: visibleInput,
|
|
15439
|
+
submittedInput: visibleInput
|
|
15440
|
+
} : null;
|
|
15441
|
+
void stream.submit(
|
|
15442
|
+
{
|
|
15443
|
+
input: inputPayload,
|
|
15444
|
+
...requestOptions.state ? { state: requestOptions.state } : {}
|
|
15445
|
+
},
|
|
15446
|
+
{
|
|
15447
|
+
...goalRunThreadId && !threadId ? {
|
|
15448
|
+
threadId: goalRunThreadId,
|
|
15449
|
+
joinExistingThread: true
|
|
15450
|
+
} : {},
|
|
15451
|
+
...requestOptions.context ? { context: requestOptions.context } : {},
|
|
15452
|
+
...requestOptions.config ? { config: requestOptions.config } : {},
|
|
15453
|
+
...visibleGoalMessage ? {
|
|
15454
|
+
preserveOptimisticMessages: true,
|
|
15455
|
+
optimisticValues: (prev) => {
|
|
15456
|
+
const prevMessages = prev?.messages ?? [];
|
|
15457
|
+
return {
|
|
15458
|
+
...prev,
|
|
15459
|
+
messages: [...prevMessages, visibleGoalMessage]
|
|
15460
|
+
};
|
|
15461
|
+
}
|
|
15462
|
+
} : {}
|
|
15463
|
+
}
|
|
15464
|
+
).catch((error) => {
|
|
15465
|
+
setGoalError(
|
|
15466
|
+
error instanceof Error ? error.message : String(error)
|
|
15467
|
+
);
|
|
15468
|
+
});
|
|
15469
|
+
}
|
|
15470
|
+
} catch (error) {
|
|
15471
|
+
setGoalError(error instanceof Error ? error.message : String(error));
|
|
15472
|
+
} finally {
|
|
15473
|
+
setIsGoalLoading(false);
|
|
15474
|
+
}
|
|
15475
|
+
},
|
|
15476
|
+
[
|
|
15477
|
+
effectiveSessionRuntimeCapabilities,
|
|
15478
|
+
goalAdapter,
|
|
15479
|
+
options?.request,
|
|
15480
|
+
refreshThreads,
|
|
15481
|
+
runtimeCapabilities,
|
|
15482
|
+
runtimeCapabilitiesReady,
|
|
15483
|
+
stream,
|
|
15484
|
+
t
|
|
15485
|
+
]
|
|
15486
|
+
);
|
|
15487
|
+
const handleGoalPanelOpenChange = React48.useCallback(
|
|
15488
|
+
(open) => {
|
|
15489
|
+
setIsGoalPanelOpen(open);
|
|
15490
|
+
},
|
|
15491
|
+
[]
|
|
15492
|
+
);
|
|
14748
15493
|
const addRunRuntimeCapabilities = React48.useCallback(
|
|
14749
15494
|
(selection) => {
|
|
14750
15495
|
setRunRuntimeCapabilities(
|
|
@@ -14807,7 +15552,9 @@ function Chat({
|
|
|
14807
15552
|
setComposerText,
|
|
14808
15553
|
focusComposerAt,
|
|
14809
15554
|
setPlanModeEnabled,
|
|
15555
|
+
setGoalPanelOpen: setIsGoalPanelOpen,
|
|
14810
15556
|
onPetCommand: handlePetCommand,
|
|
15557
|
+
onGoalCommand: handleGoalCommand,
|
|
14811
15558
|
addRunRuntimeCapabilities,
|
|
14812
15559
|
setRunRuntimeCapabilities,
|
|
14813
15560
|
insertComposerCapabilityToken,
|
|
@@ -14864,11 +15611,42 @@ function Chat({
|
|
|
14864
15611
|
container.scrollTop += optionRect.bottom - containerRect.bottom;
|
|
14865
15612
|
}
|
|
14866
15613
|
}, [runtimeCapabilityPalette, slashPaletteOptions.length]);
|
|
15614
|
+
const submitGoalModeDraft = React48.useCallback(() => {
|
|
15615
|
+
const objective = getComposerPlainText(composerPartsRef.current).trim();
|
|
15616
|
+
if (!isGoalModeOpen || !goalCommandAvailable || !objective) {
|
|
15617
|
+
return false;
|
|
15618
|
+
}
|
|
15619
|
+
setComposerText("", 0);
|
|
15620
|
+
setRuntimeCapabilityPalette(null);
|
|
15621
|
+
focusComposerAt(0);
|
|
15622
|
+
void handleGoalCommand({
|
|
15623
|
+
args: objective,
|
|
15624
|
+
commandSource: {
|
|
15625
|
+
type: "slash_command",
|
|
15626
|
+
name: "goal",
|
|
15627
|
+
source: "runtime",
|
|
15628
|
+
executionType: "insert_invocation"
|
|
15629
|
+
},
|
|
15630
|
+
runtimeCapabilities: runRuntimeCapabilities,
|
|
15631
|
+
visibleInput: objective
|
|
15632
|
+
});
|
|
15633
|
+
return true;
|
|
15634
|
+
}, [
|
|
15635
|
+
focusComposerAt,
|
|
15636
|
+
goalCommandAvailable,
|
|
15637
|
+
handleGoalCommand,
|
|
15638
|
+
isGoalModeOpen,
|
|
15639
|
+
runRuntimeCapabilities,
|
|
15640
|
+
setComposerText
|
|
15641
|
+
]);
|
|
14867
15642
|
const handleSubmit = (event) => {
|
|
14868
15643
|
event.preventDefault();
|
|
14869
15644
|
if (executeSlashCommandFromDraft()) {
|
|
14870
15645
|
return;
|
|
14871
15646
|
}
|
|
15647
|
+
if (submitGoalModeDraft()) {
|
|
15648
|
+
return;
|
|
15649
|
+
}
|
|
14872
15650
|
submitDraft();
|
|
14873
15651
|
};
|
|
14874
15652
|
const handleEditPendingFollowUp = React48.useCallback(
|
|
@@ -15033,6 +15811,9 @@ function Chat({
|
|
|
15033
15811
|
if (executeSlashCommandFromDraft()) {
|
|
15034
15812
|
return;
|
|
15035
15813
|
}
|
|
15814
|
+
if (submitGoalModeDraft()) {
|
|
15815
|
+
return;
|
|
15816
|
+
}
|
|
15036
15817
|
submitDraft(
|
|
15037
15818
|
getBusyComposerShortcutFollowUpMode(event.metaKey || event.ctrlKey)
|
|
15038
15819
|
);
|
|
@@ -15041,6 +15822,9 @@ function Chat({
|
|
|
15041
15822
|
if (executeSlashCommandFromDraft()) {
|
|
15042
15823
|
return;
|
|
15043
15824
|
}
|
|
15825
|
+
if (submitGoalModeDraft()) {
|
|
15826
|
+
return;
|
|
15827
|
+
}
|
|
15044
15828
|
submitDraft();
|
|
15045
15829
|
};
|
|
15046
15830
|
const handleComposerPaste = React48.useCallback(
|
|
@@ -15221,6 +16005,40 @@ function Chat({
|
|
|
15221
16005
|
},
|
|
15222
16006
|
[missingConfig, missingConfigShortMessage, stream, t]
|
|
15223
16007
|
);
|
|
16008
|
+
const handleLoadMoreMessages = React48.useCallback(async () => {
|
|
16009
|
+
if (!canLoadMoreMessages || isLoadingMoreMessages) {
|
|
16010
|
+
return;
|
|
16011
|
+
}
|
|
16012
|
+
const viewport = viewportRef.current;
|
|
16013
|
+
const previousScrollHeight = viewport?.scrollHeight ?? 0;
|
|
16014
|
+
const previousScrollTop = viewport?.scrollTop ?? 0;
|
|
16015
|
+
isPrependingHistoryMessagesRef.current = true;
|
|
16016
|
+
shouldAutoScrollRef.current = false;
|
|
16017
|
+
forceFollowRef.current = false;
|
|
16018
|
+
setHasUpdatesBelow(false);
|
|
16019
|
+
setHistoryError(null);
|
|
16020
|
+
const restoreScrollPosition = () => {
|
|
16021
|
+
requestAnimationFrame(() => {
|
|
16022
|
+
const nextViewport = viewportRef.current;
|
|
16023
|
+
if (nextViewport) {
|
|
16024
|
+
const nextScrollTop = nextViewport.scrollHeight - previousScrollHeight + previousScrollTop;
|
|
16025
|
+
nextViewport.scrollTop = Math.max(0, nextScrollTop);
|
|
16026
|
+
previousScrollTopRef.current = nextViewport.scrollTop;
|
|
16027
|
+
}
|
|
16028
|
+
isPrependingHistoryMessagesRef.current = false;
|
|
16029
|
+
});
|
|
16030
|
+
};
|
|
16031
|
+
try {
|
|
16032
|
+
await stream.loadMoreConversationMessages();
|
|
16033
|
+
restoreScrollPosition();
|
|
16034
|
+
} catch (err) {
|
|
16035
|
+
isPrependingHistoryMessagesRef.current = false;
|
|
16036
|
+
console.warn("Failed to load more thread messages", err);
|
|
16037
|
+
setHistoryError(
|
|
16038
|
+
err instanceof Error ? err.message : t("chat.errors.loadMessages")
|
|
16039
|
+
);
|
|
16040
|
+
}
|
|
16041
|
+
}, [canLoadMoreMessages, isLoadingMoreMessages, stream, t]);
|
|
15224
16042
|
const handleNewThread = async () => {
|
|
15225
16043
|
if (missingConfig || isHistoryLoading) return;
|
|
15226
16044
|
setHistoryError(null);
|
|
@@ -15410,7 +16228,7 @@ function Chat({
|
|
|
15410
16228
|
) }) }),
|
|
15411
16229
|
/* @__PURE__ */ jsx53(TooltipContent, { side: "bottom", children: t("settings.open") })
|
|
15412
16230
|
] }),
|
|
15413
|
-
history?.enabled !== false && /* @__PURE__ */ jsxs36(
|
|
16231
|
+
history?.enabled !== false && /* @__PURE__ */ jsxs36(Fragment9, { children: [
|
|
15414
16232
|
/* @__PURE__ */ jsxs36(Tooltip, { children: [
|
|
15415
16233
|
/* @__PURE__ */ jsx53(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx53("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx53(
|
|
15416
16234
|
"button",
|
|
@@ -15450,13 +16268,29 @@ function Chat({
|
|
|
15450
16268
|
historyError && /* @__PURE__ */ jsx53("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
|
|
15451
16269
|
showMissingConfig && /* @__PURE__ */ jsx53("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: missingConfigDetailMessage }),
|
|
15452
16270
|
isHistoryLoading && /* @__PURE__ */ jsx53("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
|
|
15453
|
-
messages.length === 0 ? /* @__PURE__ */ jsx53(
|
|
16271
|
+
messages.length === 0 && !canLoadMoreMessages ? /* @__PURE__ */ jsx53(
|
|
15454
16272
|
StartScreen,
|
|
15455
16273
|
{
|
|
15456
16274
|
startScreen,
|
|
15457
16275
|
onPromptClick: handlePromptClick
|
|
15458
16276
|
}
|
|
15459
16277
|
) : /* @__PURE__ */ jsxs36("div", { className: "space-y-4", children: [
|
|
16278
|
+
canLoadMoreMessages && /* @__PURE__ */ jsxs36("div", { className: "flex items-center gap-3 py-1", children: [
|
|
16279
|
+
/* @__PURE__ */ jsx53("div", { className: "h-px min-w-8 flex-1 bg-border" }),
|
|
16280
|
+
/* @__PURE__ */ jsx53(
|
|
16281
|
+
Button,
|
|
16282
|
+
{
|
|
16283
|
+
type: "button",
|
|
16284
|
+
variant: "ghost",
|
|
16285
|
+
size: "sm",
|
|
16286
|
+
onClick: handleLoadMoreMessages,
|
|
16287
|
+
disabled: isLoadingMoreMessages,
|
|
16288
|
+
className: "h-7 px-2 text-xs font-medium text-muted-foreground hover:text-foreground",
|
|
16289
|
+
children: isLoadingMoreMessages ? t("chat.loadingMoreMessages") : t("chat.loadMoreMessages")
|
|
16290
|
+
}
|
|
16291
|
+
),
|
|
16292
|
+
/* @__PURE__ */ jsx53("div", { className: "h-px min-w-8 flex-1 bg-border" })
|
|
16293
|
+
] }),
|
|
15460
16294
|
messages.map((message, index) => {
|
|
15461
16295
|
const messageType = String(message.type);
|
|
15462
16296
|
const isAssistantMessage = messageType === "assistant" || messageType === "ai";
|
|
@@ -15539,7 +16373,7 @@ function Chat({
|
|
|
15539
16373
|
organizationId: stream.organizationId,
|
|
15540
16374
|
apiUrl: stream.apiUrl
|
|
15541
16375
|
}
|
|
15542
|
-
) : /* @__PURE__ */ jsxs36(
|
|
16376
|
+
) : /* @__PURE__ */ jsxs36(Fragment9, { children: [
|
|
15543
16377
|
message.type === "human" && humanRuntimeCapabilityOptions.length > 0 && /* @__PURE__ */ jsx53("div", { className: "mb-2 flex flex-wrap gap-1.5", children: humanRuntimeCapabilityOptions.map((option) => /* @__PURE__ */ jsxs36(
|
|
15544
16378
|
"span",
|
|
15545
16379
|
{
|
|
@@ -15733,6 +16567,132 @@ function Chat({
|
|
|
15733
16567
|
`${option.type}:${option.id}`
|
|
15734
16568
|
))
|
|
15735
16569
|
] }),
|
|
16570
|
+
showGoalStatus && /* @__PURE__ */ jsxs36(
|
|
16571
|
+
"div",
|
|
16572
|
+
{
|
|
16573
|
+
className: cn(
|
|
16574
|
+
"mb-2 flex min-h-10 gap-2 rounded-md border border-border bg-background px-2.5 py-2 text-xs text-foreground shadow-sm",
|
|
16575
|
+
isGoalObjectiveExpanded ? "items-start" : "items-center"
|
|
16576
|
+
),
|
|
16577
|
+
children: [
|
|
16578
|
+
/* @__PURE__ */ jsx53(
|
|
16579
|
+
Target2,
|
|
16580
|
+
{
|
|
16581
|
+
className: cn(
|
|
16582
|
+
"size-4 shrink-0 text-muted-foreground",
|
|
16583
|
+
isGoalObjectiveExpanded && "mt-1"
|
|
16584
|
+
)
|
|
16585
|
+
}
|
|
16586
|
+
),
|
|
16587
|
+
/* @__PURE__ */ jsxs36("div", { className: "min-w-0 flex-1", children: [
|
|
16588
|
+
/* @__PURE__ */ jsxs36("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
16589
|
+
/* @__PURE__ */ jsx53("span", { className: "font-medium", children: t("chat.goal.label") }),
|
|
16590
|
+
threadGoal && /* @__PURE__ */ jsx53("span", { className: "shrink-0 rounded-md bg-muted px-1.5 py-0.5 text-[11px] text-muted-foreground", children: t(`chat.goal.status.${threadGoal.status}`) }),
|
|
16591
|
+
isGoalLoading && /* @__PURE__ */ jsx53(Loader28, { className: "size-3 animate-spin text-muted-foreground" })
|
|
16592
|
+
] }),
|
|
16593
|
+
/* @__PURE__ */ jsx53(
|
|
16594
|
+
"div",
|
|
16595
|
+
{
|
|
16596
|
+
className: cn(
|
|
16597
|
+
"mt-0.5 text-muted-foreground",
|
|
16598
|
+
threadGoal?.objective && !goalError && isGoalObjectiveExpanded ? "whitespace-pre-wrap break-words" : "truncate"
|
|
16599
|
+
),
|
|
16600
|
+
children: goalError || threadGoal?.objective
|
|
16601
|
+
}
|
|
16602
|
+
),
|
|
16603
|
+
threadGoal && /* @__PURE__ */ jsx53("div", { className: "mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground", children: /* @__PURE__ */ jsx53("span", { children: t("chat.goal.elapsed", {
|
|
16604
|
+
elapsed: formatGoalElapsed(displayedGoalElapsedSeconds)
|
|
16605
|
+
}) }) })
|
|
16606
|
+
] }),
|
|
16607
|
+
threadGoal && /* @__PURE__ */ jsxs36("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
16608
|
+
/* @__PURE__ */ jsxs36(Tooltip, { children: [
|
|
16609
|
+
/* @__PURE__ */ jsx53(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx53(
|
|
16610
|
+
Button,
|
|
16611
|
+
{
|
|
16612
|
+
type: "button",
|
|
16613
|
+
variant: "ghost",
|
|
16614
|
+
size: "icon-xs",
|
|
16615
|
+
disabled: isGoalLoading,
|
|
16616
|
+
onClick: () => {
|
|
16617
|
+
const prefix = "/goal edit ";
|
|
16618
|
+
setComposerText(`${prefix}${threadGoal.objective}`);
|
|
16619
|
+
},
|
|
16620
|
+
children: /* @__PURE__ */ jsx53(Pencil4, { className: "size-3" })
|
|
16621
|
+
}
|
|
16622
|
+
) }),
|
|
16623
|
+
/* @__PURE__ */ jsx53(TooltipContent, { children: t("chat.goal.edit") })
|
|
16624
|
+
] }),
|
|
16625
|
+
/* @__PURE__ */ jsxs36(Tooltip, { children: [
|
|
16626
|
+
/* @__PURE__ */ jsx53(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx53(
|
|
16627
|
+
Button,
|
|
16628
|
+
{
|
|
16629
|
+
type: "button",
|
|
16630
|
+
variant: "ghost",
|
|
16631
|
+
size: "icon-xs",
|
|
16632
|
+
disabled: isGoalLoading,
|
|
16633
|
+
onClick: () => void handleGoalCommand({
|
|
16634
|
+
args: threadGoal.status === "paused" ? "resume" : "pause",
|
|
16635
|
+
commandSource: {
|
|
16636
|
+
type: "slash_command",
|
|
16637
|
+
name: "goal",
|
|
16638
|
+
source: "runtime",
|
|
16639
|
+
executionType: "insert_invocation"
|
|
16640
|
+
}
|
|
16641
|
+
}),
|
|
16642
|
+
children: threadGoal.status === "paused" ? /* @__PURE__ */ jsx53(Play, { className: "size-3" }) : /* @__PURE__ */ jsx53(Pause, { className: "size-3" })
|
|
16643
|
+
}
|
|
16644
|
+
) }),
|
|
16645
|
+
/* @__PURE__ */ jsx53(TooltipContent, { children: threadGoal.status === "paused" ? t("chat.goal.resume") : t("chat.goal.pause") })
|
|
16646
|
+
] }),
|
|
16647
|
+
/* @__PURE__ */ jsxs36(Tooltip, { children: [
|
|
16648
|
+
/* @__PURE__ */ jsx53(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx53(
|
|
16649
|
+
Button,
|
|
16650
|
+
{
|
|
16651
|
+
type: "button",
|
|
16652
|
+
variant: "ghost",
|
|
16653
|
+
size: "icon-xs",
|
|
16654
|
+
disabled: isGoalLoading,
|
|
16655
|
+
onClick: () => void handleGoalCommand({
|
|
16656
|
+
args: "clear",
|
|
16657
|
+
commandSource: {
|
|
16658
|
+
type: "slash_command",
|
|
16659
|
+
name: "goal",
|
|
16660
|
+
source: "runtime",
|
|
16661
|
+
executionType: "insert_invocation"
|
|
16662
|
+
}
|
|
16663
|
+
}),
|
|
16664
|
+
children: /* @__PURE__ */ jsx53(Trash23, { className: "size-3" })
|
|
16665
|
+
}
|
|
16666
|
+
) }),
|
|
16667
|
+
/* @__PURE__ */ jsx53(TooltipContent, { children: t("chat.goal.clear") })
|
|
16668
|
+
] }),
|
|
16669
|
+
threadGoal.objective && !goalError && /* @__PURE__ */ jsxs36(Tooltip, { children: [
|
|
16670
|
+
/* @__PURE__ */ jsx53(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx53(
|
|
16671
|
+
Button,
|
|
16672
|
+
{
|
|
16673
|
+
type: "button",
|
|
16674
|
+
variant: "ghost",
|
|
16675
|
+
size: "icon-xs",
|
|
16676
|
+
"aria-expanded": isGoalObjectiveExpanded,
|
|
16677
|
+
"aria-label": isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective"),
|
|
16678
|
+
onClick: () => setIsGoalObjectiveExpanded((expanded) => !expanded),
|
|
16679
|
+
children: /* @__PURE__ */ jsx53(
|
|
16680
|
+
ChevronDown5,
|
|
16681
|
+
{
|
|
16682
|
+
className: cn(
|
|
16683
|
+
"size-3 transition-transform",
|
|
16684
|
+
isGoalObjectiveExpanded && "rotate-180"
|
|
16685
|
+
)
|
|
16686
|
+
}
|
|
16687
|
+
)
|
|
16688
|
+
}
|
|
16689
|
+
) }),
|
|
16690
|
+
/* @__PURE__ */ jsx53(TooltipContent, { children: isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective") })
|
|
16691
|
+
] })
|
|
16692
|
+
] })
|
|
16693
|
+
]
|
|
16694
|
+
}
|
|
16695
|
+
),
|
|
15736
16696
|
/* @__PURE__ */ jsx53(
|
|
15737
16697
|
PendingRuntimeServices,
|
|
15738
16698
|
{
|
|
@@ -15874,6 +16834,9 @@ function Chat({
|
|
|
15874
16834
|
selectedTool,
|
|
15875
16835
|
planModeEnabled,
|
|
15876
16836
|
onPlanModeChange: setPlanModeEnabled,
|
|
16837
|
+
goalCommandAvailable,
|
|
16838
|
+
goalPanelOpen: isGoalModeOpen,
|
|
16839
|
+
onGoalPanelOpenChange: handleGoalPanelOpenChange,
|
|
15877
16840
|
runtimeCapabilities: runtimeCapabilitiesReady ? runtimeCapabilities : null,
|
|
15878
16841
|
selectedRuntimeCapabilities: effectiveSessionRuntimeCapabilities,
|
|
15879
16842
|
onRuntimeCapabilityToggle: handleSessionRuntimeCapabilityToggle,
|