@langgraph-js/ui 3.0.1 → 3.1.1
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/components.json +24 -0
- package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/assets/abap-BdImnpbu.js +1 -0
- package/dist/assets/actionscript-3-CfeIJUat.js +1 -0
- package/dist/assets/ada-bCR0ucgS.js +1 -0
- package/dist/assets/andromeeda-C-Jbm3Hp.js +1 -0
- package/dist/assets/angular-html-Bbf3ZyxA.js +1 -0
- package/dist/assets/angular-ts-C26w9mnW.js +1 -0
- package/dist/assets/apache-Pmp26Uib.js +1 -0
- package/dist/assets/apex-C7Pw0Ztw.js +1 -0
- package/dist/assets/apl-e980N3t4.js +1 -0
- package/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/assets/ara-BRHolxvo.js +1 -0
- package/dist/assets/arc-CGVbGqUF.js +1 -0
- package/dist/assets/architectureDiagram-VXUJARFQ-CqtrDEw9.js +36 -0
- package/dist/assets/asciidoc-Dv7Oe6Be.js +1 -0
- package/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/assets/astro-CjFzhNUq.js +1 -0
- package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/assets/awk-DMzUqQB5.js +1 -0
- package/dist/assets/ayu-dark-Cv9koXgw.js +1 -0
- package/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/assets/bat-BkioyH1T.js +1 -0
- package/dist/assets/beancount-BoKiGodi.js +1 -0
- package/dist/assets/berry-D08WgyRC.js +1 -0
- package/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/assets/bicep-6nHXG8SA.js +1 -0
- package/dist/assets/blade-B2ZbN0F_.js +1 -0
- package/dist/assets/blockDiagram-VD42YOAC-CNqe-K1B.js +122 -0
- package/dist/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/assets/c-BIGW1oBm.js +1 -0
- package/dist/assets/c4Diagram-YG6GDRKO-CPTzKGRp.js +10 -0
- package/dist/assets/cadence-D2CYqzqI.js +1 -0
- package/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/assets/catppuccin-frappe-BBxmzUt6.js +1 -0
- package/dist/assets/catppuccin-latte-Jep7L2Wt.js +1 -0
- package/dist/assets/catppuccin-macchiato-CIUZ1G5V.js +1 -0
- package/dist/assets/catppuccin-mocha-NBseiqgx.js +1 -0
- package/dist/assets/channel-CbJkpW4g.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-CnFclA68.js +1 -0
- package/dist/assets/chunk-55IACEB6-CVyjVz79.js +1 -0
- package/dist/assets/chunk-B4BG7PRW-DiGvJtfO.js +165 -0
- package/dist/assets/chunk-DI55MBZ5-CiqWzq60.js +220 -0
- package/dist/assets/chunk-FMBD7UC4-KfYlm8ba.js +15 -0
- package/dist/assets/chunk-QN33PNHL-Bwbc5Dxk.js +1 -0
- package/dist/assets/chunk-QZHKN3VN-DlQbvjLB.js +1 -0
- package/dist/assets/chunk-TZMSLE5B-6_Y4HlEU.js +1 -0
- package/dist/assets/clarity-CHh-QcGE.js +1 -0
- package/dist/assets/classDiagram-2ON5EDUG--F4r2fzQ.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB--F4r2fzQ.js +1 -0
- package/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/assets/clone-CxJednSn.js +1 -0
- package/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/assets/cobol-DwXMNnPA.js +1 -0
- package/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/assets/coffee-JUOWOZUj.js +1 -0
- package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/assets/coq-DkFqJrB1.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-BL_xZw_z.js +1 -0
- package/dist/assets/cpp-CofmeUqb.js +1 -0
- package/dist/assets/crystal-DVs0tusA.js +1 -0
- package/dist/assets/csharp-CHadp7IV.js +1 -0
- package/dist/assets/css-DPfMkruS.js +1 -0
- package/dist/assets/csv-fuZLfV_i.js +1 -0
- package/dist/assets/cue-D82EKSYY.js +1 -0
- package/dist/assets/cypher-COkxafJQ.js +1 -0
- package/dist/assets/cytoscape.esm-BlPLnP8k.js +331 -0
- package/dist/assets/d-85-TOEBH.js +1 -0
- package/dist/assets/dagre-6UL2VRFP-CKK6NwPE.js +4 -0
- package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/assets/dart-CF10PKvl.js +1 -0
- package/dist/assets/dax-CEL-wOlO.js +1 -0
- package/dist/assets/defaultLocale-C4B-KCzX.js +1 -0
- package/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/assets/diagram-PSM6KHXK-D77jB3aN.js +24 -0
- package/dist/assets/diagram-QEK2KX5R-C3V63KEf.js +43 -0
- package/dist/assets/diagram-S2PKOQOG-8vXvyFcA.js +24 -0
- package/dist/assets/diff-D97Zzqfu.js +1 -0
- package/dist/assets/docker-BcOcwvcX.js +1 -0
- package/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/assets/edge-CKszZCnI.js +1 -0
- package/dist/assets/elixir-Cc7HHYVZ.js +1 -0
- package/dist/assets/elm-DbKCFpqz.js +1 -0
- package/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/assets/erDiagram-Q2GNP2WA-BvdZN7ll.js +60 -0
- package/dist/assets/erb-C7QrGF_t.js +1 -0
- package/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/assets/fennel-BYunw83y.js +1 -0
- package/dist/assets/fish-Bl2oy6fF.js +1 -0
- package/dist/assets/flowDiagram-NV44I4VS-Cmn4g1Tt.js +162 -0
- package/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/assets/fortran-fixed-form-BZjJHVRy.js +1 -0
- package/dist/assets/fortran-free-form-D22FLkUw.js +1 -0
- package/dist/assets/fsharp-CufqaIoK.js +1 -0
- package/dist/assets/ganttDiagram-LVOFAZNH-BtK3XTtk.js +267 -0
- package/dist/assets/gdresource-B7Tvp0Sc.js +1 -0
- package/dist/assets/gdscript-DTMYz4Jt.js +1 -0
- package/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/assets/genie-D0YGMca9.js +1 -0
- package/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/assets/gitGraphDiagram-NY62KEGX-Ckd-OTVj.js +65 -0
- package/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/assets/gleam-BspZqrRM.js +1 -0
- package/dist/assets/glimmer-js-Dz9X99Cm.js +1 -0
- package/dist/assets/glimmer-ts-aQ3p29eY.js +1 -0
- package/dist/assets/glsl-DplSGwfg.js +1 -0
- package/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/assets/go-Dn2_MT6a.js +1 -0
- package/dist/assets/graph-C8xl-aUs.js +1 -0
- package/dist/assets/graphql-Caa12_AY.js +1 -0
- package/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/assets/gruvbox-dark-hard-D1uDOp7C.js +1 -0
- package/dist/assets/gruvbox-dark-medium-DkhsQLT2.js +1 -0
- package/dist/assets/gruvbox-dark-soft-CcyOm34o.js +1 -0
- package/dist/assets/gruvbox-light-hard-DKzvysjW.js +1 -0
- package/dist/assets/gruvbox-light-medium-DPcUKYIF.js +1 -0
- package/dist/assets/gruvbox-light-soft-CGqH5EJj.js +1 -0
- package/dist/assets/hack-D_o3P2UH.js +1 -0
- package/dist/assets/haml-AZXGPtNI.js +1 -0
- package/dist/assets/handlebars-YebKLiTq.js +1 -0
- package/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/assets/hjson-D5-asLiD.js +1 -0
- package/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/assets/houston-DnULxvSX.js +1 -0
- package/dist/assets/html-B8pBdPMQ.js +1 -0
- package/dist/assets/html-derivative-ZQ8onl8Z.js +1 -0
- package/dist/assets/http-C38VWM-o.js +1 -0
- package/dist/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/assets/hy-DFXneXwc.js +1 -0
- package/dist/assets/imba-DGztddWO.js +1 -0
- package/dist/assets/index-BpNQAzdK.css +1 -0
- package/dist/assets/index-EdVqpCiz.js +835 -0
- package/dist/assets/infoDiagram-F6ZHWCRC-Z0X_yr7r.js +2 -0
- package/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/isUndefined-Daq2Snc8.js +1 -0
- package/dist/assets/java-CylS5w8V.js +1 -0
- package/dist/assets/javascript-BMMyXqK5.js +1 -0
- package/dist/assets/jinja-BJmZiE_F.js +1 -0
- package/dist/assets/jison-BCRtk9Os.js +1 -0
- package/dist/assets/journeyDiagram-XKPGCS4Q-Ce4GbjgA.js +139 -0
- package/dist/assets/json-Cp-IABpG.js +1 -0
- package/dist/assets/json5-C9tS-k6U.js +1 -0
- package/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/assets/julia-353pQ8cl.js +1 -0
- package/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/assets/kanban-definition-3W4ZIXB7-jKKX8cF-.js +89 -0
- package/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/assets/kusto-BvAqAH-y.js +1 -0
- package/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/assets/latex-CPEt12BK.js +1 -0
- package/dist/assets/layout-CehWuyQv.js +1 -0
- package/dist/assets/lean-qliWkHmV.js +1 -0
- package/dist/assets/less-B1dDrJ26.js +1 -0
- package/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/assets/linear-Do6UjTtT.js +1 -0
- package/dist/assets/liquid-DFk8BABL.js +1 -0
- package/dist/assets/llvm-D32k8WzR.js +1 -0
- package/dist/assets/log-2UxHyX5q.js +1 -0
- package/dist/assets/logo-BtOb2qkB.js +1 -0
- package/dist/assets/lua-BbnMAYS6.js +1 -0
- package/dist/assets/luau-CXu1NL6O.js +1 -0
- package/dist/assets/make-CHLpvVh8.js +1 -0
- package/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/assets/marko-BM38lbjI.js +1 -0
- package/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/assets/matlab-D7o27uSR.js +1 -0
- package/dist/assets/mdc-DvHMhoCT.js +1 -0
- package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/assets/mermaid-DKYwYmdq.js +1 -0
- package/dist/assets/mermaid.core-DboFnVDg.js +197 -0
- package/dist/assets/min-CoD9aTVe.js +1 -0
- package/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/assets/min-light-CTRr51gU.js +1 -0
- package/dist/assets/mindmap-definition-VGOIOE7T-DHqc52RG.js +68 -0
- package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/assets/mojo-1DNp92w6.js +1 -0
- package/dist/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/assets/move-DNEoBllO.js +1 -0
- package/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/assets/nextflow-CUEJCptM.js +1 -0
- package/dist/assets/nginx-DknmC5AR.js +1 -0
- package/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/assets/nim-BZI_8mFl.js +1 -0
- package/dist/assets/nix-BepWV7mh.js +1 -0
- package/dist/assets/nord-Ddv68eIx.js +1 -0
- package/dist/assets/nushell-ChH_ziBE.js +1 -0
- package/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/assets/one-light-PoHY5YXO.js +1 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/assets/perl-g0D2lH3a.js +1 -0
- package/dist/assets/php-Gk5eUrPQ.js +1 -0
- package/dist/assets/pieDiagram-ADFJNKIX-bG2J_WkI.js +30 -0
- package/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/assets/po-BTJTHyun.js +1 -0
- package/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/assets/polar-C0HS_06l.js +1 -0
- package/dist/assets/postcss-CXtECtnM.js +1 -0
- package/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/assets/proto-DyJlTyXw.js +1 -0
- package/dist/assets/pug-Ch9lOoSd.js +1 -0
- package/dist/assets/puppet-BMWR74SV.js +1 -0
- package/dist/assets/purescript-CklMAg4u.js +1 -0
- package/dist/assets/python-B6aJPvgy.js +1 -0
- package/dist/assets/qml-CHzV51_b.js +1 -0
- package/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/assets/qss-IeuSbFQv.js +1 -0
- package/dist/assets/quadrantDiagram-AYHSOK5B-CDEBrcZS.js +7 -0
- package/dist/assets/r-DiinP2Uv.js +1 -0
- package/dist/assets/racket-BqYA7rlc.js +1 -0
- package/dist/assets/raku-DXvB9xmW.js +1 -0
- package/dist/assets/razor-CNXmhs1n.js +1 -0
- package/dist/assets/red-bN70gL4F.js +1 -0
- package/dist/assets/reg-C-SQnVFl.js +1 -0
- package/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/assets/rel-C3B-1QV4.js +1 -0
- package/dist/assets/requirementDiagram-UZGBJVZJ-D88jc_6e.js +64 -0
- package/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/assets/rose-pine-BHrmToEH.js +1 -0
- package/dist/assets/rose-pine-dawn-CnK8MTSM.js +1 -0
- package/dist/assets/rose-pine-moon-NleAzG8P.js +1 -0
- package/dist/assets/rst-DKdxLoXm.js +1 -0
- package/dist/assets/ruby-W1VRIm2Q.js +1 -0
- package/dist/assets/rust-B1yitclQ.js +1 -0
- package/dist/assets/sankeyDiagram-TZEHDZUN-C93LzfJ0.js +10 -0
- package/dist/assets/sas-cz2c8ADy.js +1 -0
- package/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/assets/scala-C151Ov-r.js +1 -0
- package/dist/assets/scheme-C98Dy4si.js +1 -0
- package/dist/assets/scss-OYdSNvt2.js +1 -0
- package/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/assets/sequenceDiagram-WL72ISMW-DjpL4ZUq.js +145 -0
- package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/assets/solidity-BbcW6ACK.js +1 -0
- package/dist/assets/soy-B_7ge1HE.js +1 -0
- package/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/assets/sql-BLtJtn59.js +1 -0
- package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/assets/stata-BH5u7GGu.js +1 -0
- package/dist/assets/stateDiagram-FKZM4ZOC-Cy4Qc8UW.js +1 -0
- package/dist/assets/stateDiagram-v2-4FDKWEC3-wfRa7ccT.js +1 -0
- package/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/assets/svelte-Dt5jNKfG.js +1 -0
- package/dist/assets/swift-Dg5xB15N.js +1 -0
- package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/assets/templ-0CNLO7il.js +1 -0
- package/dist/assets/terraform-BETggiCN.js +1 -0
- package/dist/assets/tex-B5i3u9ba.js +1 -0
- package/dist/assets/timeline-definition-IT6M3QCI-DNVlI21w.js +61 -0
- package/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/assets/toml-vGWfd6FD.js +1 -0
- package/dist/assets/treemap-KMMF4GRG-Cf7rPol4.js +128 -0
- package/dist/assets/ts-tags-B9XN6NYQ.js +1 -0
- package/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/assets/tsx-COt5Ahok.js +1 -0
- package/dist/assets/turtle-BsS91CYL.js +1 -0
- package/dist/assets/twig-B_ULif71.js +1 -0
- package/dist/assets/typescript-DlfHMoPT.js +1 -0
- package/dist/assets/typespec-Df68jz8_.js +1 -0
- package/dist/assets/typst-DHCkPAjA.js +1 -0
- package/dist/assets/v-DljmTZ5-.js +1 -0
- package/dist/assets/vala-CsfeWuGM.js +1 -0
- package/dist/assets/vb-D17OF-Vu.js +1 -0
- package/dist/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/assets/vesper-DU1UobuO.js +1 -0
- package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/assets/viml-CJc9bBzg.js +1 -0
- package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/assets/vue-BEetzCYT.js +1 -0
- package/dist/assets/vue-html-BsD9fJC1.js +1 -0
- package/dist/assets/vue-vine-CCdTUzyM.js +1 -0
- package/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/assets/wit-5i3qLPDT.js +1 -0
- package/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/assets/xychartDiagram-PRI3JC2R-CRudqT7y.js +7 -0
- package/dist/assets/yaml-Buea-lGh.js +1 -0
- package/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/assets/zig-VOosw3JB.js +1 -0
- package/dist/index.html +2 -2
- package/package.json +22 -14
- package/src/artifacts/ArtifactViewer.tsx +22 -153
- package/src/chat/Chat.tsx +7 -9
- package/src/chat/components/MessageAI.tsx +2 -3
- package/src/chat/components/MessageBox.tsx +2 -2
- package/src/chat/components/MessageTool.tsx +4 -17
- package/src/chat/store/index.ts +0 -21
- package/src/chat/tools/create_artifacts.tsx +10 -26
- package/src/components/ai-elements/code-block.tsx +148 -0
- package/src/components/ai-elements/response.tsx +22 -0
- package/src/components/ui/button.tsx +60 -0
- package/src/components/ui/sonner.tsx +38 -0
- package/src/graph/index.tsx +1 -1
- package/src/index.css +121 -0
- package/src/index.ts +1 -2
- package/src/lib/utils.ts +6 -0
- package/src/settings/LoginSettings.tsx +1 -1
- package/src/settings/SettingPanel.tsx +1 -1
- package/test/main.tsx +0 -2
- package/tsconfig.json +5 -1
- package/tsconfig.node.json +1 -1
- package/vite.config.ts +3 -3
- package/dist/assets/index-CRq7a-Q4.css +0 -1
- package/dist/assets/index-IirYMaE5.js +0 -280
- package/src/artifacts/ArtifactsContext.tsx +0 -99
- package/src/artifacts/SourceCodeViewer.tsx +0 -15
- package/src/chat/components/JSONViewer.tsx +0 -18
- package/src/chat/components/JsonToMessage/JsonToMessage.tsx +0 -120
- package/src/chat/components/JsonToMessage/JsonToMessageButton.tsx +0 -20
- package/src/chat/components/JsonToMessage/index.tsx +0 -5
- package/src/chat/context/ChatContext.tsx +0 -83
- package/src/memory/BaseDB.ts +0 -92
- package/src/memory/db.ts +0 -232
- package/src/memory/fulltext-search.ts +0 -191
- package/src/memory/index.ts +0 -4
- package/src/memory/tools.ts +0 -170
- package/src/sonner/Toaster.tsx +0 -117
- package/src/sonner/index.ts +0 -3
- package/src/sonner/toast.ts +0 -50
- package/src/sonner/types.ts +0 -21
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import React, { createContext, useContext, useState, ReactNode, useEffect } from "react";
|
|
2
|
-
import { useChat } from "@langgraph-js/sdk/react";
|
|
3
|
-
import { Message } from "@langgraph-js/sdk";
|
|
4
|
-
|
|
5
|
-
interface Artifact {
|
|
6
|
-
id: string;
|
|
7
|
-
code: string;
|
|
8
|
-
filename: string;
|
|
9
|
-
filetype: string;
|
|
10
|
-
version: number;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface ArtifactsContextType {
|
|
14
|
-
artifacts: Artifact[];
|
|
15
|
-
currentArtifact: Artifact | null;
|
|
16
|
-
setCurrentArtifactById: (id: string) => void;
|
|
17
|
-
getArtifactVersions: (filename: string) => Artifact[];
|
|
18
|
-
showArtifact: boolean;
|
|
19
|
-
setShowArtifact: (show: boolean) => void;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const ArtifactsContext = createContext<ArtifactsContextType>({
|
|
23
|
-
artifacts: [],
|
|
24
|
-
currentArtifact: null,
|
|
25
|
-
setCurrentArtifactById: () => {},
|
|
26
|
-
getArtifactVersions: () => [],
|
|
27
|
-
showArtifact: false,
|
|
28
|
-
setShowArtifact: () => {},
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
export const useArtifacts = () => useContext(ArtifactsContext);
|
|
32
|
-
|
|
33
|
-
interface ArtifactsProviderProps {
|
|
34
|
-
children: ReactNode;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const ArtifactsProvider: React.FC<ArtifactsProviderProps> = ({ children }) => {
|
|
38
|
-
const [artifacts, setArtifacts] = useState<Artifact[]>([]);
|
|
39
|
-
const [showArtifact, setShowArtifact] = useState(false);
|
|
40
|
-
const { renderMessages } = useChat();
|
|
41
|
-
const [currentArtifact, setCurrentArtifact] = useState<Artifact | null>(null);
|
|
42
|
-
|
|
43
|
-
// 获取指定文件名的所有版本
|
|
44
|
-
const getArtifactVersions = (filename: string) => {
|
|
45
|
-
return artifacts.filter((artifact) => artifact.filename === filename).sort((a, b) => a.version - b.version);
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (!renderMessages) return;
|
|
50
|
-
|
|
51
|
-
const createArtifacts = renderMessages.filter((message) => message.type === "tool").filter((message) => message.name === "create_artifacts");
|
|
52
|
-
|
|
53
|
-
// 创建文件名到最新版本的映射
|
|
54
|
-
const filenameToLatestVersion = new Map<string, number>();
|
|
55
|
-
|
|
56
|
-
// 处理每个 artifact,分配版本号
|
|
57
|
-
const processedArtifacts = createArtifacts.map((message) => {
|
|
58
|
-
const content = JSON.parse(message.tool_input as string);
|
|
59
|
-
const filename = content.filename;
|
|
60
|
-
|
|
61
|
-
// 获取当前文件名的最新版本号
|
|
62
|
-
const currentVersion = filenameToLatestVersion.get(filename) || 0;
|
|
63
|
-
const newVersion = currentVersion + 1;
|
|
64
|
-
|
|
65
|
-
// 更新最新版本号
|
|
66
|
-
filenameToLatestVersion.set(filename, newVersion);
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
id: message.id!,
|
|
70
|
-
code: content.code,
|
|
71
|
-
filename: filename,
|
|
72
|
-
version: newVersion,
|
|
73
|
-
filetype: content.filetype,
|
|
74
|
-
};
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
setArtifacts(processedArtifacts);
|
|
78
|
-
}, [renderMessages]);
|
|
79
|
-
|
|
80
|
-
const setCurrentArtifactById = (id: string) => {
|
|
81
|
-
setShowArtifact(true);
|
|
82
|
-
setCurrentArtifact(artifacts.find((artifact) => artifact.id === id) || null);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
return (
|
|
86
|
-
<ArtifactsContext.Provider
|
|
87
|
-
value={{
|
|
88
|
-
artifacts,
|
|
89
|
-
currentArtifact,
|
|
90
|
-
setCurrentArtifactById,
|
|
91
|
-
getArtifactVersions,
|
|
92
|
-
showArtifact,
|
|
93
|
-
setShowArtifact,
|
|
94
|
-
}}
|
|
95
|
-
>
|
|
96
|
-
{children}
|
|
97
|
-
</ArtifactsContext.Provider>
|
|
98
|
-
);
|
|
99
|
-
};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { useArtifacts } from "./ArtifactsContext";
|
|
2
|
-
|
|
3
|
-
export const SourceCodeViewer: React.FC = () => {
|
|
4
|
-
const { currentArtifact } = useArtifacts();
|
|
5
|
-
|
|
6
|
-
if (!currentArtifact) {
|
|
7
|
-
return <div className="h-full w-full flex items-center justify-center text-gray-500">请选择一个文件</div>;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<div className="h-full w-full overflow-auto">
|
|
12
|
-
<pre>{currentArtifact.code}</pre>
|
|
13
|
-
</div>
|
|
14
|
-
);
|
|
15
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export const JSONViewer = (props: { data: any }) => {
|
|
2
|
-
return (
|
|
3
|
-
/** @ts-ignore */
|
|
4
|
-
<andypf-json-viewer
|
|
5
|
-
indent="4"
|
|
6
|
-
expanded="4"
|
|
7
|
-
theme="default-light"
|
|
8
|
-
show-data-types="false"
|
|
9
|
-
show-toolbar="false"
|
|
10
|
-
expand-icon-type="circle"
|
|
11
|
-
show-copy="true"
|
|
12
|
-
show-size="true"
|
|
13
|
-
data={JSON.stringify(props.data)}
|
|
14
|
-
>
|
|
15
|
-
{/* @ts-ignore */}
|
|
16
|
-
</andypf-json-viewer>
|
|
17
|
-
);
|
|
18
|
-
};
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from "react";
|
|
2
|
-
import { MessagesBox } from "../MessageBox";
|
|
3
|
-
import { RenderMessage } from "@langgraph-js/sdk";
|
|
4
|
-
import { X } from "lucide-react";
|
|
5
|
-
|
|
6
|
-
interface JsonToMessageProps {
|
|
7
|
-
isOpen: boolean;
|
|
8
|
-
onClose: () => void;
|
|
9
|
-
initialJson?: string | object;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const JsonToMessage: React.FC<JsonToMessageProps> = ({ isOpen, onClose, initialJson }) => {
|
|
13
|
-
const [jsonString, setJsonString] = useState<string>("");
|
|
14
|
-
const [error, setError] = useState<string | null>(null);
|
|
15
|
-
const [previewMessages, setPreviewMessages] = useState<RenderMessage[]>([]);
|
|
16
|
-
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
// 重置状态当弹窗打开时
|
|
19
|
-
if (isOpen) {
|
|
20
|
-
let initialJsonContent = "";
|
|
21
|
-
|
|
22
|
-
if (initialJson) {
|
|
23
|
-
if (typeof initialJson === "string") {
|
|
24
|
-
initialJsonContent = initialJson;
|
|
25
|
-
} else {
|
|
26
|
-
try {
|
|
27
|
-
initialJsonContent = JSON.stringify(initialJson, null, 2);
|
|
28
|
-
} catch (e) {
|
|
29
|
-
console.error("Failed to stringify initial JSON", e);
|
|
30
|
-
initialJsonContent = "";
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
} else {
|
|
34
|
-
// 默认示例消息
|
|
35
|
-
initialJsonContent = JSON.stringify([], null, 2);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
setJsonString(initialJsonContent);
|
|
39
|
-
setError(null);
|
|
40
|
-
|
|
41
|
-
// 初始化时尝试解析
|
|
42
|
-
try {
|
|
43
|
-
updatePreview(initialJsonContent);
|
|
44
|
-
} catch (e) {
|
|
45
|
-
console.error("Failed to parse initial JSON", e);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}, [isOpen, initialJson]);
|
|
49
|
-
|
|
50
|
-
// 解析JSON并更新预览
|
|
51
|
-
const updatePreview = (jsonInput: string) => {
|
|
52
|
-
try {
|
|
53
|
-
const parsedJson = JSON.parse(jsonInput);
|
|
54
|
-
let message: RenderMessage[] = [];
|
|
55
|
-
if (Array.isArray(parsedJson)) {
|
|
56
|
-
message = parsedJson;
|
|
57
|
-
} else {
|
|
58
|
-
message = parsedJson.messages;
|
|
59
|
-
}
|
|
60
|
-
// 确保消息有必要的字段
|
|
61
|
-
if (!Array.isArray(message)) {
|
|
62
|
-
throw new Error("JSON 格式无效,请检查后重试");
|
|
63
|
-
}
|
|
64
|
-
setPreviewMessages(message);
|
|
65
|
-
setError(null);
|
|
66
|
-
} catch (e) {
|
|
67
|
-
setError("JSON 格式无效,请检查后重试");
|
|
68
|
-
console.error("Invalid JSON format:", e);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// 当JSON输入变化时更新预览
|
|
73
|
-
useEffect(() => {
|
|
74
|
-
if (jsonString) {
|
|
75
|
-
updatePreview(jsonString);
|
|
76
|
-
}
|
|
77
|
-
}, [jsonString]);
|
|
78
|
-
|
|
79
|
-
if (!isOpen) {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return (
|
|
84
|
-
<div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
|
|
85
|
-
<div className="bg-white rounded-lg shadow-xl w-[90%] max-w-[1200px] h-[80vh] max-h-[800px] flex flex-col overflow-hidden">
|
|
86
|
-
<div className="flex justify-between items-center p-4 border-b border-gray-200">
|
|
87
|
-
<h2 className="text-xl font-semibold text-gray-900">JSON 消息预览</h2>
|
|
88
|
-
<button onClick={onClose} className="p-1.5 text-gray-500 hover:text-gray-900 transition-colors rounded-lg hover:bg-gray-100">
|
|
89
|
-
<X className="w-5 h-5" />
|
|
90
|
-
</button>
|
|
91
|
-
</div>
|
|
92
|
-
|
|
93
|
-
<div className="flex flex-1 overflow-hidden">
|
|
94
|
-
<div className="flex-1 p-4 flex flex-col border-r border-gray-200">
|
|
95
|
-
<textarea
|
|
96
|
-
value={jsonString}
|
|
97
|
-
onChange={(e) => setJsonString(e.target.value)}
|
|
98
|
-
rows={20}
|
|
99
|
-
placeholder="输入JSON消息格式..."
|
|
100
|
-
className="flex-1 font-mono text-sm p-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none"
|
|
101
|
-
/>
|
|
102
|
-
{error && <p className="mt-2 text-sm text-red-600">{error}</p>}
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<div className="flex-1 p-4 overflow-y-auto bg-gray-50">
|
|
106
|
-
<div className="bg-white rounded-lg p-4 min-h-full">
|
|
107
|
-
{previewMessages?.length > 0 ? (
|
|
108
|
-
<MessagesBox renderMessages={previewMessages} collapsedTools={[]} toggleToolCollapse={() => {}} client={null as any} />
|
|
109
|
-
) : (
|
|
110
|
-
<div className="flex items-center justify-center h-full text-gray-500 italic">请输入有效的JSON以查看消息预览</div>
|
|
111
|
-
)}
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
</div>
|
|
115
|
-
</div>
|
|
116
|
-
</div>
|
|
117
|
-
);
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
export default JsonToMessage;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
2
|
-
import JsonToMessage from "./JsonToMessage";
|
|
3
|
-
import { FileJson } from "lucide-react";
|
|
4
|
-
|
|
5
|
-
export const JsonToMessageButton: React.FC = () => {
|
|
6
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
7
|
-
|
|
8
|
-
return (
|
|
9
|
-
<>
|
|
10
|
-
<button
|
|
11
|
-
onClick={() => setIsOpen(true)}
|
|
12
|
-
className="px-3 py-1.5 text-sm font-medium text-gray-700 bg-white border border-gray-200 rounded-lg hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 flex items-center gap-1.5"
|
|
13
|
-
>
|
|
14
|
-
<FileJson className="w-4 h-4" />
|
|
15
|
-
JSON 消息
|
|
16
|
-
</button>
|
|
17
|
-
<JsonToMessage isOpen={isOpen} onClose={() => setIsOpen(false)} />
|
|
18
|
-
</>
|
|
19
|
-
);
|
|
20
|
-
};
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import React, { createContext, useContext, useMemo, ReactNode, useEffect } from "react";
|
|
2
|
-
import { createChatStore } from "@langgraph-js/sdk";
|
|
3
|
-
import { UnionStore, useUnionStore } from "@langgraph-js/sdk";
|
|
4
|
-
import { useStore } from "@nanostores/react";
|
|
5
|
-
|
|
6
|
-
type ChatContextType = UnionStore<ReturnType<typeof createChatStore>>;
|
|
7
|
-
|
|
8
|
-
const ChatContext = createContext<ChatContextType | undefined>(undefined);
|
|
9
|
-
|
|
10
|
-
export const useChat = (): ChatContextType => {
|
|
11
|
-
const context = useContext(ChatContext);
|
|
12
|
-
if (!context) {
|
|
13
|
-
throw new Error("useChat must be used within a ChatProvider");
|
|
14
|
-
}
|
|
15
|
-
return context;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
interface ChatProviderProps {
|
|
19
|
-
children: ReactNode;
|
|
20
|
-
defaultAgent?: string;
|
|
21
|
-
apiUrl?: string;
|
|
22
|
-
defaultHeaders?: Record<string, string>;
|
|
23
|
-
withCredentials?: boolean;
|
|
24
|
-
showHistory?: boolean;
|
|
25
|
-
showGraph?: boolean;
|
|
26
|
-
onInitError?: (error: any, currentAgent: string) => void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const ChatProvider: React.FC<ChatProviderProps> = ({
|
|
30
|
-
children,
|
|
31
|
-
defaultAgent = "",
|
|
32
|
-
apiUrl = "http://localhost:8123",
|
|
33
|
-
defaultHeaders = {},
|
|
34
|
-
withCredentials = false,
|
|
35
|
-
showHistory = false,
|
|
36
|
-
showGraph = false,
|
|
37
|
-
onInitError,
|
|
38
|
-
}) => {
|
|
39
|
-
const store = useMemo(() => {
|
|
40
|
-
const F = withCredentials
|
|
41
|
-
? (url: string, options: RequestInit) => {
|
|
42
|
-
options.credentials = "include";
|
|
43
|
-
return fetch(url, options);
|
|
44
|
-
}
|
|
45
|
-
: fetch;
|
|
46
|
-
|
|
47
|
-
return createChatStore(
|
|
48
|
-
defaultAgent,
|
|
49
|
-
{
|
|
50
|
-
apiUrl,
|
|
51
|
-
defaultHeaders,
|
|
52
|
-
callerOptions: {
|
|
53
|
-
fetch: F,
|
|
54
|
-
maxRetries: 1,
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
showHistory,
|
|
59
|
-
showGraph,
|
|
60
|
-
}
|
|
61
|
-
);
|
|
62
|
-
}, [defaultAgent, apiUrl, defaultHeaders, withCredentials, showHistory, showGraph]);
|
|
63
|
-
|
|
64
|
-
const unionStore = useUnionStore(store, useStore);
|
|
65
|
-
|
|
66
|
-
useEffect(() => {
|
|
67
|
-
unionStore
|
|
68
|
-
.initClient()
|
|
69
|
-
.then((res) => {
|
|
70
|
-
if (unionStore.showHistory) {
|
|
71
|
-
unionStore.refreshHistoryList();
|
|
72
|
-
}
|
|
73
|
-
})
|
|
74
|
-
.catch((err) => {
|
|
75
|
-
console.error(err);
|
|
76
|
-
if (onInitError) {
|
|
77
|
-
onInitError(err, unionStore.currentAgent);
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
}, [unionStore, onInitError]);
|
|
81
|
-
|
|
82
|
-
return <ChatContext.Provider value={unionStore}>{children}</ChatContext.Provider>;
|
|
83
|
-
};
|
package/src/memory/BaseDB.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { IDBPDatabase } from "idb";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 数据库记录的基本接口
|
|
5
|
-
*/
|
|
6
|
-
export interface BaseRecord {
|
|
7
|
-
id?: number;
|
|
8
|
-
[key: string]: any;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* 数据库配置的基本接口
|
|
13
|
-
*/
|
|
14
|
-
export interface BaseDBConfig {
|
|
15
|
-
dbName: string;
|
|
16
|
-
dbVersion: number;
|
|
17
|
-
storeName: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* 数据库操作的抽象基类
|
|
22
|
-
*/
|
|
23
|
-
export abstract class BaseDB<T extends BaseRecord> {
|
|
24
|
-
protected isInitialized: boolean = false;
|
|
25
|
-
protected config: BaseDBConfig;
|
|
26
|
-
|
|
27
|
-
constructor(config: BaseDBConfig) {
|
|
28
|
-
this.config = config;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 初始化数据库
|
|
33
|
-
*/
|
|
34
|
-
public abstract initialize(): Promise<void>;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* 添加记录
|
|
38
|
-
*/
|
|
39
|
-
public abstract insert(record: Partial<T>): Promise<number>;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* 更新记录
|
|
43
|
-
*/
|
|
44
|
-
public abstract update(id: number, record: Partial<T>): Promise<void>;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* 删除记录
|
|
48
|
-
*/
|
|
49
|
-
public abstract delete(id: number): Promise<void>;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 查询记录
|
|
53
|
-
*/
|
|
54
|
-
public abstract query(
|
|
55
|
-
query: string,
|
|
56
|
-
options?: {
|
|
57
|
-
prefix?: boolean;
|
|
58
|
-
fields?: string[];
|
|
59
|
-
limit?: number;
|
|
60
|
-
fuzzy?: number;
|
|
61
|
-
}
|
|
62
|
-
): Promise<T[]>;
|
|
63
|
-
|
|
64
|
-
public abstract get(id: number): Promise<T | undefined>;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* 获取所有记录
|
|
68
|
-
*/
|
|
69
|
-
public abstract getAll(): Promise<T[]>;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// 定义向量类型
|
|
73
|
-
export type Vector = number[];
|
|
74
|
-
// 定义数据库记录类型
|
|
75
|
-
export interface MemoryRecord extends BaseRecord {
|
|
76
|
-
vector?: Vector | BigUint64Array;
|
|
77
|
-
text: string;
|
|
78
|
-
/**
|
|
79
|
-
* 记忆存储的路径,与 Linux 文件系统一致
|
|
80
|
-
* @example memory://user_id/path/to/memory
|
|
81
|
-
*/
|
|
82
|
-
path: string;
|
|
83
|
-
/**
|
|
84
|
-
* 引用文档的 path
|
|
85
|
-
*/
|
|
86
|
-
referencePath?: string;
|
|
87
|
-
type: string;
|
|
88
|
-
/**
|
|
89
|
-
* 记忆的标签,用于检索
|
|
90
|
-
*/
|
|
91
|
-
tags: string[];
|
|
92
|
-
}
|
package/src/memory/db.ts
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { openDB, DBSchema, IDBPDatabase } from "idb";
|
|
2
|
-
import { BaseDB, BaseRecord, BaseDBConfig, MemoryRecord, Vector } from "./BaseDB";
|
|
3
|
-
|
|
4
|
-
type BinaryVector = number[];
|
|
5
|
-
|
|
6
|
-
// 定义数据库模式
|
|
7
|
-
interface VecDBSchema extends DBSchema {
|
|
8
|
-
vectors: {
|
|
9
|
-
key: number;
|
|
10
|
-
value: MemoryRecord;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// 定义默认模型类型
|
|
15
|
-
const defaultModel = "default";
|
|
16
|
-
|
|
17
|
-
// 向量化文本的抽象基类
|
|
18
|
-
abstract class TextVectorizer {
|
|
19
|
-
protected model: string;
|
|
20
|
-
|
|
21
|
-
constructor(model: string = defaultModel) {
|
|
22
|
-
this.model = model;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
abstract vectorize(text: string): Promise<Vector>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
class OpenAIVectorizer extends TextVectorizer {
|
|
29
|
-
private apiKey: string;
|
|
30
|
-
public apiEndpoint: string;
|
|
31
|
-
|
|
32
|
-
constructor(model: string = "text-embedding-ada-002", { apiKey, apiEndpoint }: { apiKey: string; apiEndpoint: string }) {
|
|
33
|
-
super(model);
|
|
34
|
-
this.apiKey = apiKey;
|
|
35
|
-
this.apiEndpoint = apiEndpoint;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async vectorize(text: string): Promise<Vector> {
|
|
39
|
-
try {
|
|
40
|
-
const response = await fetch(this.apiEndpoint, {
|
|
41
|
-
method: "POST",
|
|
42
|
-
headers: {
|
|
43
|
-
"Content-Type": "application/json",
|
|
44
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
45
|
-
},
|
|
46
|
-
body: JSON.stringify({
|
|
47
|
-
input: text,
|
|
48
|
-
model: this.model,
|
|
49
|
-
}),
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
if (!response.ok) {
|
|
53
|
-
throw new Error(`OpenAI API error: ${response.statusText}`);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const data = await response.json();
|
|
57
|
-
return data.data[0].embedding;
|
|
58
|
-
} catch (error) {
|
|
59
|
-
throw new Error(`Error vectorizing text: ${error}`);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
const cosineSimilarity = (vecA: Vector, vecB: Vector): number => {
|
|
64
|
-
const dotProduct = vecA.reduce((sum: number, val: number, index: number) => sum + val * vecB[index], 0);
|
|
65
|
-
const magnitudeA = Math.sqrt(vecA.reduce((sum: number, val: number) => sum + val * val, 0));
|
|
66
|
-
const magnitudeB = Math.sqrt(vecB.reduce((sum: number, val: number) => sum + val * val, 0));
|
|
67
|
-
return dotProduct / (magnitudeA * magnitudeB);
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
const binarizeVector = (vector: Vector, threshold: number | null = null): BinaryVector => {
|
|
71
|
-
if (threshold === null) {
|
|
72
|
-
const sorted = [...vector].sort((a, b) => a - b);
|
|
73
|
-
const mid = Math.floor(sorted.length / 2);
|
|
74
|
-
threshold = sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
|
|
75
|
-
}
|
|
76
|
-
return vector.map((val: number) => (val >= threshold! ? 1 : 0));
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
interface VecDBConfig extends BaseDBConfig {
|
|
80
|
-
vectorizer: TextVectorizer;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
interface QueryOptions {
|
|
84
|
-
limit?: number;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
class VecDB extends BaseDB<MemoryRecord> {
|
|
88
|
-
private vectorizer: TextVectorizer;
|
|
89
|
-
protected db!: IDBPDatabase<VecDBSchema>;
|
|
90
|
-
constructor(config: VecDBConfig) {
|
|
91
|
-
super(config);
|
|
92
|
-
this.vectorizer = config.vectorizer;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public async initialize(): Promise<void> {
|
|
96
|
-
if (this.isInitialized) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
this.db = await openDB<VecDBSchema>(this.config.dbName, this.config.dbVersion, {
|
|
101
|
-
upgrade(db) {
|
|
102
|
-
if (!db.objectStoreNames.contains("vectors")) {
|
|
103
|
-
db.createObjectStore("vectors", {
|
|
104
|
-
keyPath: "id",
|
|
105
|
-
autoIncrement: true,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
this.isInitialized = true;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
public async insert(data: MemoryRecord): Promise<number> {
|
|
114
|
-
if (!this.isInitialized) {
|
|
115
|
-
await this.initialize();
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
try {
|
|
119
|
-
let embedding = data.vector;
|
|
120
|
-
if (!embedding) {
|
|
121
|
-
embedding = await this.vectorizer.vectorize(data.text!);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const transaction = this.db.transaction("vectors", "readwrite");
|
|
125
|
-
const store = transaction.objectStore("vectors");
|
|
126
|
-
const { vector: _, ...rest } = data;
|
|
127
|
-
const record = { vector: embedding, ...rest };
|
|
128
|
-
const key = await store.add(record);
|
|
129
|
-
return Number(key);
|
|
130
|
-
} catch (error) {
|
|
131
|
-
throw new Error(`Error inserting data: ${error}`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
public async update(key: number, data: MemoryRecord): Promise<void> {
|
|
136
|
-
if (!this.isInitialized) {
|
|
137
|
-
await this.initialize();
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const transaction = this.db.transaction("vectors", "readwrite");
|
|
141
|
-
const store = transaction.objectStore("vectors");
|
|
142
|
-
const vector = data["vector"] as Vector;
|
|
143
|
-
const updatedData = { ...data, id: key, vector };
|
|
144
|
-
await store.put(updatedData);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
public async delete(key: number): Promise<void> {
|
|
148
|
-
if (!this.isInitialized) {
|
|
149
|
-
await this.initialize();
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const transaction = this.db.transaction("vectors", "readwrite");
|
|
153
|
-
const store = transaction.objectStore("vectors");
|
|
154
|
-
await store.delete(key);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
public async query(queryText: string, { limit = 10 }: QueryOptions = {}): Promise<Array<MemoryRecord & { similarity: number }>> {
|
|
158
|
-
if (!this.isInitialized) {
|
|
159
|
-
await this.initialize();
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
try {
|
|
163
|
-
const queryVector = await this.vectorizer.vectorize(queryText);
|
|
164
|
-
const transaction = this.db.transaction("vectors", "readonly");
|
|
165
|
-
const store = transaction.objectStore("vectors");
|
|
166
|
-
const vectors = await store.getAll();
|
|
167
|
-
|
|
168
|
-
const similarities = vectors.map((entry) => {
|
|
169
|
-
const vector = entry.vector as Vector;
|
|
170
|
-
const similarity = cosineSimilarity(queryVector, vector);
|
|
171
|
-
return { ...entry, similarity };
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
similarities.sort((a, b) => b.similarity - a.similarity);
|
|
175
|
-
return similarities.slice(0, limit);
|
|
176
|
-
} catch (error) {
|
|
177
|
-
throw new Error(`Error querying vectors: ${error}`);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
public async get(id: number): Promise<MemoryRecord | undefined> {
|
|
182
|
-
if (!this.isInitialized) {
|
|
183
|
-
await this.initialize();
|
|
184
|
-
}
|
|
185
|
-
return this.db.transaction("vectors", "readonly").objectStore("vectors").get(id);
|
|
186
|
-
}
|
|
187
|
-
public async getAll(): Promise<MemoryRecord[]> {
|
|
188
|
-
if (!this.isInitialized) {
|
|
189
|
-
await this.initialize();
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const transaction = this.db.transaction("vectors", "readonly");
|
|
193
|
-
const store = transaction.objectStore("vectors");
|
|
194
|
-
return store.getAll();
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// 保留原有的 insertBinary 方法作为特殊方法
|
|
198
|
-
async insertBinary(data: MemoryRecord): Promise<number> {
|
|
199
|
-
if (!this.isInitialized) {
|
|
200
|
-
await this.initialize();
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
try {
|
|
204
|
-
let embedding = data["vector"] as Vector;
|
|
205
|
-
if (data.text) {
|
|
206
|
-
embedding = await this.vectorizer.vectorize(data.text);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const binaryEmbedding = binarizeVector(embedding);
|
|
210
|
-
const packedEmbedding = new BigUint64Array(new ArrayBuffer(Math.ceil(binaryEmbedding.length / 64) * 8));
|
|
211
|
-
for (let i = 0; i < binaryEmbedding.length; i++) {
|
|
212
|
-
const bitIndex = i % 64;
|
|
213
|
-
const arrayIndex = Math.floor(i / 64);
|
|
214
|
-
if (binaryEmbedding[i] === 1) {
|
|
215
|
-
packedEmbedding[arrayIndex] |= 1n << BigInt(bitIndex);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const transaction = this.db.transaction("vectors", "readwrite");
|
|
220
|
-
const store = transaction.objectStore("vectors");
|
|
221
|
-
const { vector: _, ...rest } = data;
|
|
222
|
-
const record = { vector: packedEmbedding, ...rest };
|
|
223
|
-
const key = await store.add(record);
|
|
224
|
-
return Number(key);
|
|
225
|
-
} catch (error) {
|
|
226
|
-
throw new Error(`Error inserting binary data: ${error}`);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export { VecDB, TextVectorizer, OpenAIVectorizer };
|
|
232
|
-
export type { Vector, BinaryVector, MemoryRecord, VecDBConfig };
|