├── .gitignore ├── Makefile ├── README.md ├── index.html ├── justfile ├── license.txt ├── package.json ├── pnpm-lock.yaml ├── public ├── icon_128.png ├── icon_16.png ├── icon_24.png ├── icon_32.png ├── icon_48.png ├── inferit.png └── manifest.json ├── screens ├── 24-11-05.webp ├── 24-11-09.png ├── 24-11-11.png ├── 24-11-11_whoami.png └── 24-11-29.png ├── server.js ├── src ├── App.svelte ├── bg.ts ├── lib │ ├── bot_node.svelte │ ├── drop_btn.svelte │ ├── editor.svelte │ ├── editor.svelte.ts │ ├── infer_it.ts │ ├── main.svelte │ ├── next_btn.svelte │ ├── nodes.ts │ ├── online.svelte │ ├── prompts.ts │ ├── settings.svelte │ ├── state.ts │ ├── sync_control.svelte │ ├── system_node.svelte │ ├── tokens.ts │ ├── types.ts │ └── user_node.svelte ├── main.ts ├── style.css └── vite-env.d.ts ├── svelte.config.js ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | /ext.zip 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | pnpm-debug.log* 10 | lerna-debug.log* 11 | 12 | node_modules 13 | dist 14 | dist-ssr 15 | *.local 16 | 17 | # Editor directories and files 18 | .vscode/* 19 | !.vscode/extensions.json 20 | .idea 21 | .DS_Store 22 | *.suo 23 | *.ntvs* 24 | *.njsproj 25 | *.sln 26 | *.sw? 27 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | iconsrc := public/inferit.png 2 | icondir := public 3 | iconsizes := {16,24,32,48,128} 4 | iconfiles := $(shell echo $(icondir)/icon_$(iconsizes).png) 5 | 6 | $(icondir)/icon_%.png: 7 | @mkdir -p $(@D) 8 | convert $(iconsrc) -resize $* $@ 9 | 10 | icons: $(iconfiles) 11 | .PHONY: icons -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | inferit 3 |
4 | inferit 5 |

6 | 7 | _inferit_ is a visual take on llm inference. Most inference frontends are 8 | limited to a single visual input/output "thread". This makes it hard to compare 9 | output from different models, prompts and sampler settings. _inferit_ solves 10 | this with its UI that allows for an unlimited number of side-by-side 11 | generations. This makes it a perfect fit to compare and experiment with 12 | different models, prompts and sampler settings. 13 | 14 | ![](./screens/24-11-29.png) 15 | 16 | ![](./screens/24-11-11_whoami.png) 17 | 18 | Some example use cases: 19 | 20 | - model exploration and comparison 21 | - prompt engineering 22 | - sampler setting optimizations 23 | 24 | Supported Backends: 25 | 26 | - Any local or remote backend that is compatible with the OpenAI API 27 | - [Chrome's built-in llm](https://developer.chrome.com/docs/ai/built-in) (Gemini Nano) 28 | 29 | ## run it 30 | 31 | 1. I've deployed an instance for instant access here: https://inferit.index.garden (online) 32 | 2. Same code also ships as browser extension to run local and offline w/o having to start a process: 33 | https://chromewebstore.google.com/detail/inferit/celkhcifjknihgjlieolcmchofdloagk 34 | 3. Run it locally from this repo: 35 | ```bash 36 | pnpm install 37 | pnpm build 38 | pnpm preview 39 | ``` 40 | 41 | once running, set your api creds in the settings (stored on your device, [window.localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)) and u are good to go 42 | 43 | ## development 44 | 45 | ```bash 46 | pnpm dev 47 | ``` 48 | 49 |

50 | Contributions of any kind are warmly welcomed! 51 |
52 | <3 53 |

54 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | inferit 9 | 10 | 11 | 12 |

13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /justfile: -------------------------------------------------------------------------------- 1 | ext: 2 | pnpm build 3 | zip -r ext.zip dist/* -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inferit", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "check": "svelte-check --tsconfig ./tsconfig.json && tsc -p tsconfig.node.json", 11 | "start": "node ./server.js" 12 | }, 13 | "devDependencies": { 14 | "@fontsource-variable/alegreya": "^5.1.1", 15 | "@iconify-json/eva": "^1.2.0", 16 | "@sveltejs/adapter-auto": "^3.0.0", 17 | "@sveltejs/adapter-node": "^5.2.9", 18 | "@sveltejs/adapter-static": "^3.0.6", 19 | "@sveltejs/kit": "^2.0.0", 20 | "@sveltejs/vite-plugin-svelte": "^4.0.0", 21 | "@tsconfig/svelte": "^5.0.4", 22 | "@types/chrome": "^0.0.283", 23 | "@types/dom-chromium-ai": "^0.0.2", 24 | "@types/express": "^5.0.0", 25 | "@unocss/reset": "^0.63.6", 26 | "@unocss/transformer-directives": "^0.63.6", 27 | "@xyflow/svelte": "^0.1.23", 28 | "character-card-utils": "^2.0.3", 29 | "copy-text-to-clipboard": "^3.2.0", 30 | "github-markdown-css": "^5.7.0", 31 | "openai": "^4.70.2", 32 | "pocketbase": "^0.21.5", 33 | "svelte": "^5.1.3", 34 | "svelte-autosize": "^1.1.0", 35 | "svelte-check": "^4.0.5", 36 | "svelte-french-toast": "^1.2.0", 37 | "svelte-markdown": "^0.4.1", 38 | "sveltekit-adapter-chrome-extension": "^2.0.1", 39 | "tiktoken": "^1.0.17", 40 | "tslib": "^2.8.0", 41 | "typescript": "~5.6.2", 42 | "unocss": "^0.63.6", 43 | "vite": "^5.4.10", 44 | "vite-plugin-top-level-await": "^1.4.4", 45 | "vite-plugin-wasm": "^3.3.0" 46 | }, 47 | "packageManager": "pnpm@7.29.1+sha512.767fbae41d97a4c2229fbb1066f048276672c7c67b2caf79ab202f8043c4f2a5e45982ff2eec297cc7caf4cb9cefeccd9e93f089082d184b3180eb6e69b1626d", 48 | "dependencies": { 49 | "express": "^4.21.1" 50 | } 51 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@fontsource-variable/alegreya': ^5.1.1 5 | '@iconify-json/eva': ^1.2.0 6 | '@sveltejs/adapter-auto': ^3.0.0 7 | '@sveltejs/adapter-node': ^5.2.9 8 | '@sveltejs/adapter-static': ^3.0.6 9 | '@sveltejs/kit': ^2.0.0 10 | '@sveltejs/vite-plugin-svelte': ^4.0.0 11 | '@tsconfig/svelte': ^5.0.4 12 | '@types/chrome': ^0.0.283 13 | '@types/dom-chromium-ai': ^0.0.2 14 | '@types/express': ^5.0.0 15 | '@unocss/reset': ^0.63.6 16 | '@unocss/transformer-directives': ^0.63.6 17 | '@xyflow/svelte': ^0.1.23 18 | character-card-utils: ^2.0.3 19 | copy-text-to-clipboard: ^3.2.0 20 | express: ^4.21.1 21 | github-markdown-css: ^5.7.0 22 | openai: ^4.70.2 23 | pocketbase: ^0.21.5 24 | svelte: ^5.1.3 25 | svelte-autosize: ^1.1.0 26 | svelte-check: ^4.0.5 27 | svelte-french-toast: ^1.2.0 28 | svelte-markdown: ^0.4.1 29 | sveltekit-adapter-chrome-extension: ^2.0.1 30 | tiktoken: ^1.0.17 31 | tslib: ^2.8.0 32 | typescript: ~5.6.2 33 | unocss: ^0.63.6 34 | vite: ^5.4.10 35 | vite-plugin-top-level-await: ^1.4.4 36 | vite-plugin-wasm: ^3.3.0 37 | 38 | dependencies: 39 | express: 4.21.1 40 | 41 | devDependencies: 42 | '@fontsource-variable/alegreya': 5.1.1 43 | '@iconify-json/eva': 1.2.0 44 | '@sveltejs/adapter-auto': 3.3.1_@sveltejs+kit@2.8.0 45 | '@sveltejs/adapter-node': 5.2.9_@sveltejs+kit@2.8.0 46 | '@sveltejs/adapter-static': 3.0.6_@sveltejs+kit@2.8.0 47 | '@sveltejs/kit': 2.8.0_w6gobegzxphcvyx6s2v54tmh3a 48 | '@sveltejs/vite-plugin-svelte': 4.0.0_svelte@5.1.13+vite@5.4.10 49 | '@tsconfig/svelte': 5.0.4 50 | '@types/chrome': 0.0.283 51 | '@types/dom-chromium-ai': 0.0.2 52 | '@types/express': 5.0.0 53 | '@unocss/reset': 0.63.6 54 | '@unocss/transformer-directives': 0.63.6 55 | '@xyflow/svelte': 0.1.23_svelte@5.1.13 56 | character-card-utils: 2.0.3 57 | copy-text-to-clipboard: 3.2.0 58 | github-markdown-css: 5.7.0 59 | openai: 4.71.1 60 | pocketbase: 0.21.5 61 | svelte: 5.1.13 62 | svelte-autosize: 1.1.5_svelte@5.1.13 63 | svelte-check: 4.0.6_ttiyjcdvid74kxewx6w2g6b64m 64 | svelte-french-toast: 1.2.0_svelte@5.1.13 65 | svelte-markdown: 0.4.1_svelte@5.1.13 66 | sveltekit-adapter-chrome-extension: 2.0.1_fyw4gys63jt5iqsz5eievp5dvm 67 | tiktoken: 1.0.17 68 | tslib: 2.8.1 69 | typescript: 5.6.3 70 | unocss: 0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a 71 | vite: 5.4.10 72 | vite-plugin-top-level-await: 1.4.4_vite@5.4.10 73 | vite-plugin-wasm: 3.3.0_vite@5.4.10 74 | 75 | packages: 76 | 77 | /@ampproject/remapping/2.3.0: 78 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 79 | engines: {node: '>=6.0.0'} 80 | dependencies: 81 | '@jridgewell/gen-mapping': 0.3.5 82 | '@jridgewell/trace-mapping': 0.3.25 83 | dev: true 84 | 85 | /@antfu/install-pkg/0.4.1: 86 | resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} 87 | dependencies: 88 | package-manager-detector: 0.2.2 89 | tinyexec: 0.3.1 90 | dev: true 91 | 92 | /@antfu/utils/0.7.10: 93 | resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} 94 | dev: true 95 | 96 | /@babel/helper-string-parser/7.25.9: 97 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 98 | engines: {node: '>=6.9.0'} 99 | dev: true 100 | 101 | /@babel/helper-validator-identifier/7.25.9: 102 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 103 | engines: {node: '>=6.9.0'} 104 | dev: true 105 | 106 | /@babel/parser/7.26.2: 107 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} 108 | engines: {node: '>=6.0.0'} 109 | hasBin: true 110 | dependencies: 111 | '@babel/types': 7.26.0 112 | dev: true 113 | 114 | /@babel/types/7.26.0: 115 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} 116 | engines: {node: '>=6.9.0'} 117 | dependencies: 118 | '@babel/helper-string-parser': 7.25.9 119 | '@babel/helper-validator-identifier': 7.25.9 120 | dev: true 121 | 122 | /@esbuild/aix-ppc64/0.21.5: 123 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 124 | engines: {node: '>=12'} 125 | cpu: [ppc64] 126 | os: [aix] 127 | requiresBuild: true 128 | dev: true 129 | optional: true 130 | 131 | /@esbuild/aix-ppc64/0.23.1: 132 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} 133 | engines: {node: '>=18'} 134 | cpu: [ppc64] 135 | os: [aix] 136 | requiresBuild: true 137 | dev: true 138 | optional: true 139 | 140 | /@esbuild/android-arm/0.21.5: 141 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 142 | engines: {node: '>=12'} 143 | cpu: [arm] 144 | os: [android] 145 | requiresBuild: true 146 | dev: true 147 | optional: true 148 | 149 | /@esbuild/android-arm/0.23.1: 150 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} 151 | engines: {node: '>=18'} 152 | cpu: [arm] 153 | os: [android] 154 | requiresBuild: true 155 | dev: true 156 | optional: true 157 | 158 | /@esbuild/android-arm64/0.21.5: 159 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 160 | engines: {node: '>=12'} 161 | cpu: [arm64] 162 | os: [android] 163 | requiresBuild: true 164 | dev: true 165 | optional: true 166 | 167 | /@esbuild/android-arm64/0.23.1: 168 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} 169 | engines: {node: '>=18'} 170 | cpu: [arm64] 171 | os: [android] 172 | requiresBuild: true 173 | dev: true 174 | optional: true 175 | 176 | /@esbuild/android-x64/0.21.5: 177 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 178 | engines: {node: '>=12'} 179 | cpu: [x64] 180 | os: [android] 181 | requiresBuild: true 182 | dev: true 183 | optional: true 184 | 185 | /@esbuild/android-x64/0.23.1: 186 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} 187 | engines: {node: '>=18'} 188 | cpu: [x64] 189 | os: [android] 190 | requiresBuild: true 191 | dev: true 192 | optional: true 193 | 194 | /@esbuild/darwin-arm64/0.21.5: 195 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 196 | engines: {node: '>=12'} 197 | cpu: [arm64] 198 | os: [darwin] 199 | requiresBuild: true 200 | dev: true 201 | optional: true 202 | 203 | /@esbuild/darwin-arm64/0.23.1: 204 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} 205 | engines: {node: '>=18'} 206 | cpu: [arm64] 207 | os: [darwin] 208 | requiresBuild: true 209 | dev: true 210 | optional: true 211 | 212 | /@esbuild/darwin-x64/0.21.5: 213 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 214 | engines: {node: '>=12'} 215 | cpu: [x64] 216 | os: [darwin] 217 | requiresBuild: true 218 | dev: true 219 | optional: true 220 | 221 | /@esbuild/darwin-x64/0.23.1: 222 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} 223 | engines: {node: '>=18'} 224 | cpu: [x64] 225 | os: [darwin] 226 | requiresBuild: true 227 | dev: true 228 | optional: true 229 | 230 | /@esbuild/freebsd-arm64/0.21.5: 231 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 232 | engines: {node: '>=12'} 233 | cpu: [arm64] 234 | os: [freebsd] 235 | requiresBuild: true 236 | dev: true 237 | optional: true 238 | 239 | /@esbuild/freebsd-arm64/0.23.1: 240 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} 241 | engines: {node: '>=18'} 242 | cpu: [arm64] 243 | os: [freebsd] 244 | requiresBuild: true 245 | dev: true 246 | optional: true 247 | 248 | /@esbuild/freebsd-x64/0.21.5: 249 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 250 | engines: {node: '>=12'} 251 | cpu: [x64] 252 | os: [freebsd] 253 | requiresBuild: true 254 | dev: true 255 | optional: true 256 | 257 | /@esbuild/freebsd-x64/0.23.1: 258 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} 259 | engines: {node: '>=18'} 260 | cpu: [x64] 261 | os: [freebsd] 262 | requiresBuild: true 263 | dev: true 264 | optional: true 265 | 266 | /@esbuild/linux-arm/0.21.5: 267 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 268 | engines: {node: '>=12'} 269 | cpu: [arm] 270 | os: [linux] 271 | requiresBuild: true 272 | dev: true 273 | optional: true 274 | 275 | /@esbuild/linux-arm/0.23.1: 276 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} 277 | engines: {node: '>=18'} 278 | cpu: [arm] 279 | os: [linux] 280 | requiresBuild: true 281 | dev: true 282 | optional: true 283 | 284 | /@esbuild/linux-arm64/0.21.5: 285 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 286 | engines: {node: '>=12'} 287 | cpu: [arm64] 288 | os: [linux] 289 | requiresBuild: true 290 | dev: true 291 | optional: true 292 | 293 | /@esbuild/linux-arm64/0.23.1: 294 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} 295 | engines: {node: '>=18'} 296 | cpu: [arm64] 297 | os: [linux] 298 | requiresBuild: true 299 | dev: true 300 | optional: true 301 | 302 | /@esbuild/linux-ia32/0.21.5: 303 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 304 | engines: {node: '>=12'} 305 | cpu: [ia32] 306 | os: [linux] 307 | requiresBuild: true 308 | dev: true 309 | optional: true 310 | 311 | /@esbuild/linux-ia32/0.23.1: 312 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} 313 | engines: {node: '>=18'} 314 | cpu: [ia32] 315 | os: [linux] 316 | requiresBuild: true 317 | dev: true 318 | optional: true 319 | 320 | /@esbuild/linux-loong64/0.21.5: 321 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 322 | engines: {node: '>=12'} 323 | cpu: [loong64] 324 | os: [linux] 325 | requiresBuild: true 326 | dev: true 327 | optional: true 328 | 329 | /@esbuild/linux-loong64/0.23.1: 330 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} 331 | engines: {node: '>=18'} 332 | cpu: [loong64] 333 | os: [linux] 334 | requiresBuild: true 335 | dev: true 336 | optional: true 337 | 338 | /@esbuild/linux-mips64el/0.21.5: 339 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 340 | engines: {node: '>=12'} 341 | cpu: [mips64el] 342 | os: [linux] 343 | requiresBuild: true 344 | dev: true 345 | optional: true 346 | 347 | /@esbuild/linux-mips64el/0.23.1: 348 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} 349 | engines: {node: '>=18'} 350 | cpu: [mips64el] 351 | os: [linux] 352 | requiresBuild: true 353 | dev: true 354 | optional: true 355 | 356 | /@esbuild/linux-ppc64/0.21.5: 357 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 358 | engines: {node: '>=12'} 359 | cpu: [ppc64] 360 | os: [linux] 361 | requiresBuild: true 362 | dev: true 363 | optional: true 364 | 365 | /@esbuild/linux-ppc64/0.23.1: 366 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} 367 | engines: {node: '>=18'} 368 | cpu: [ppc64] 369 | os: [linux] 370 | requiresBuild: true 371 | dev: true 372 | optional: true 373 | 374 | /@esbuild/linux-riscv64/0.21.5: 375 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 376 | engines: {node: '>=12'} 377 | cpu: [riscv64] 378 | os: [linux] 379 | requiresBuild: true 380 | dev: true 381 | optional: true 382 | 383 | /@esbuild/linux-riscv64/0.23.1: 384 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} 385 | engines: {node: '>=18'} 386 | cpu: [riscv64] 387 | os: [linux] 388 | requiresBuild: true 389 | dev: true 390 | optional: true 391 | 392 | /@esbuild/linux-s390x/0.21.5: 393 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 394 | engines: {node: '>=12'} 395 | cpu: [s390x] 396 | os: [linux] 397 | requiresBuild: true 398 | dev: true 399 | optional: true 400 | 401 | /@esbuild/linux-s390x/0.23.1: 402 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} 403 | engines: {node: '>=18'} 404 | cpu: [s390x] 405 | os: [linux] 406 | requiresBuild: true 407 | dev: true 408 | optional: true 409 | 410 | /@esbuild/linux-x64/0.21.5: 411 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 412 | engines: {node: '>=12'} 413 | cpu: [x64] 414 | os: [linux] 415 | requiresBuild: true 416 | dev: true 417 | optional: true 418 | 419 | /@esbuild/linux-x64/0.23.1: 420 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} 421 | engines: {node: '>=18'} 422 | cpu: [x64] 423 | os: [linux] 424 | requiresBuild: true 425 | dev: true 426 | optional: true 427 | 428 | /@esbuild/netbsd-x64/0.21.5: 429 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 430 | engines: {node: '>=12'} 431 | cpu: [x64] 432 | os: [netbsd] 433 | requiresBuild: true 434 | dev: true 435 | optional: true 436 | 437 | /@esbuild/netbsd-x64/0.23.1: 438 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} 439 | engines: {node: '>=18'} 440 | cpu: [x64] 441 | os: [netbsd] 442 | requiresBuild: true 443 | dev: true 444 | optional: true 445 | 446 | /@esbuild/openbsd-arm64/0.23.1: 447 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} 448 | engines: {node: '>=18'} 449 | cpu: [arm64] 450 | os: [openbsd] 451 | requiresBuild: true 452 | dev: true 453 | optional: true 454 | 455 | /@esbuild/openbsd-x64/0.21.5: 456 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 457 | engines: {node: '>=12'} 458 | cpu: [x64] 459 | os: [openbsd] 460 | requiresBuild: true 461 | dev: true 462 | optional: true 463 | 464 | /@esbuild/openbsd-x64/0.23.1: 465 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} 466 | engines: {node: '>=18'} 467 | cpu: [x64] 468 | os: [openbsd] 469 | requiresBuild: true 470 | dev: true 471 | optional: true 472 | 473 | /@esbuild/sunos-x64/0.21.5: 474 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 475 | engines: {node: '>=12'} 476 | cpu: [x64] 477 | os: [sunos] 478 | requiresBuild: true 479 | dev: true 480 | optional: true 481 | 482 | /@esbuild/sunos-x64/0.23.1: 483 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} 484 | engines: {node: '>=18'} 485 | cpu: [x64] 486 | os: [sunos] 487 | requiresBuild: true 488 | dev: true 489 | optional: true 490 | 491 | /@esbuild/win32-arm64/0.21.5: 492 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 493 | engines: {node: '>=12'} 494 | cpu: [arm64] 495 | os: [win32] 496 | requiresBuild: true 497 | dev: true 498 | optional: true 499 | 500 | /@esbuild/win32-arm64/0.23.1: 501 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} 502 | engines: {node: '>=18'} 503 | cpu: [arm64] 504 | os: [win32] 505 | requiresBuild: true 506 | dev: true 507 | optional: true 508 | 509 | /@esbuild/win32-ia32/0.21.5: 510 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 511 | engines: {node: '>=12'} 512 | cpu: [ia32] 513 | os: [win32] 514 | requiresBuild: true 515 | dev: true 516 | optional: true 517 | 518 | /@esbuild/win32-ia32/0.23.1: 519 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} 520 | engines: {node: '>=18'} 521 | cpu: [ia32] 522 | os: [win32] 523 | requiresBuild: true 524 | dev: true 525 | optional: true 526 | 527 | /@esbuild/win32-x64/0.21.5: 528 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 529 | engines: {node: '>=12'} 530 | cpu: [x64] 531 | os: [win32] 532 | requiresBuild: true 533 | dev: true 534 | optional: true 535 | 536 | /@esbuild/win32-x64/0.23.1: 537 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} 538 | engines: {node: '>=18'} 539 | cpu: [x64] 540 | os: [win32] 541 | requiresBuild: true 542 | dev: true 543 | optional: true 544 | 545 | /@fontsource-variable/alegreya/5.1.1: 546 | resolution: {integrity: sha512-32Ac5anIO4P0Lz4QW7iyU09zzXkquEEmu7zH1ogyGH7qatIiNC2r2RXaldZk7uzby+7k0upchu1QZ6Y96ympag==} 547 | dev: true 548 | 549 | /@iconify-json/eva/1.2.0: 550 | resolution: {integrity: sha512-vWPyU+x54aJ4NifWm86xM3PvXdcYOyZ8W5PnD5QlD8XRZ1NnhG/kAXPTl80QJooqwv4PKI0mtqD6KITA00ZnEQ==} 551 | dependencies: 552 | '@iconify/types': 2.0.0 553 | dev: true 554 | 555 | /@iconify/types/2.0.0: 556 | resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} 557 | dev: true 558 | 559 | /@iconify/utils/2.1.33: 560 | resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} 561 | dependencies: 562 | '@antfu/install-pkg': 0.4.1 563 | '@antfu/utils': 0.7.10 564 | '@iconify/types': 2.0.0 565 | debug: 4.3.7 566 | kolorist: 1.8.0 567 | local-pkg: 0.5.0 568 | mlly: 1.7.2 569 | transitivePeerDependencies: 570 | - supports-color 571 | dev: true 572 | 573 | /@jridgewell/gen-mapping/0.3.5: 574 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 575 | engines: {node: '>=6.0.0'} 576 | dependencies: 577 | '@jridgewell/set-array': 1.2.1 578 | '@jridgewell/sourcemap-codec': 1.5.0 579 | '@jridgewell/trace-mapping': 0.3.25 580 | dev: true 581 | 582 | /@jridgewell/resolve-uri/3.1.2: 583 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 584 | engines: {node: '>=6.0.0'} 585 | dev: true 586 | 587 | /@jridgewell/set-array/1.2.1: 588 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 589 | engines: {node: '>=6.0.0'} 590 | dev: true 591 | 592 | /@jridgewell/sourcemap-codec/1.5.0: 593 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 594 | dev: true 595 | 596 | /@jridgewell/trace-mapping/0.3.25: 597 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 598 | dependencies: 599 | '@jridgewell/resolve-uri': 3.1.2 600 | '@jridgewell/sourcemap-codec': 1.5.0 601 | dev: true 602 | 603 | /@polka/url/1.0.0-next.28: 604 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 605 | dev: true 606 | 607 | /@rollup/plugin-commonjs/28.0.1_rollup@4.25.0: 608 | resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==} 609 | engines: {node: '>=16.0.0 || 14 >= 14.17'} 610 | peerDependencies: 611 | rollup: ^2.68.0||^3.0.0||^4.0.0 612 | peerDependenciesMeta: 613 | rollup: 614 | optional: true 615 | dependencies: 616 | '@rollup/pluginutils': 5.1.3_rollup@4.25.0 617 | commondir: 1.0.1 618 | estree-walker: 2.0.2 619 | fdir: 6.4.2_picomatch@4.0.2 620 | is-reference: 1.2.1 621 | magic-string: 0.30.12 622 | picomatch: 4.0.2 623 | rollup: 4.25.0 624 | dev: true 625 | 626 | /@rollup/plugin-json/6.1.0_rollup@4.25.0: 627 | resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} 628 | engines: {node: '>=14.0.0'} 629 | peerDependencies: 630 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 631 | peerDependenciesMeta: 632 | rollup: 633 | optional: true 634 | dependencies: 635 | '@rollup/pluginutils': 5.1.3_rollup@4.25.0 636 | rollup: 4.25.0 637 | dev: true 638 | 639 | /@rollup/plugin-node-resolve/15.3.0_rollup@4.25.0: 640 | resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} 641 | engines: {node: '>=14.0.0'} 642 | peerDependencies: 643 | rollup: ^2.78.0||^3.0.0||^4.0.0 644 | peerDependenciesMeta: 645 | rollup: 646 | optional: true 647 | dependencies: 648 | '@rollup/pluginutils': 5.1.3_rollup@4.25.0 649 | '@types/resolve': 1.20.2 650 | deepmerge: 4.3.1 651 | is-module: 1.0.0 652 | resolve: 1.22.8 653 | rollup: 4.25.0 654 | dev: true 655 | 656 | /@rollup/plugin-virtual/3.0.2: 657 | resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} 658 | engines: {node: '>=14.0.0'} 659 | peerDependencies: 660 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 661 | peerDependenciesMeta: 662 | rollup: 663 | optional: true 664 | dev: true 665 | 666 | /@rollup/pluginutils/5.1.3: 667 | resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} 668 | engines: {node: '>=14.0.0'} 669 | peerDependencies: 670 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 671 | peerDependenciesMeta: 672 | rollup: 673 | optional: true 674 | dependencies: 675 | '@types/estree': 1.0.6 676 | estree-walker: 2.0.2 677 | picomatch: 4.0.2 678 | dev: true 679 | 680 | /@rollup/pluginutils/5.1.3_rollup@4.25.0: 681 | resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} 682 | engines: {node: '>=14.0.0'} 683 | peerDependencies: 684 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 685 | peerDependenciesMeta: 686 | rollup: 687 | optional: true 688 | dependencies: 689 | '@types/estree': 1.0.6 690 | estree-walker: 2.0.2 691 | picomatch: 4.0.2 692 | rollup: 4.25.0 693 | dev: true 694 | 695 | /@rollup/rollup-android-arm-eabi/4.25.0: 696 | resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} 697 | cpu: [arm] 698 | os: [android] 699 | requiresBuild: true 700 | dev: true 701 | optional: true 702 | 703 | /@rollup/rollup-android-arm64/4.25.0: 704 | resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} 705 | cpu: [arm64] 706 | os: [android] 707 | requiresBuild: true 708 | dev: true 709 | optional: true 710 | 711 | /@rollup/rollup-darwin-arm64/4.25.0: 712 | resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} 713 | cpu: [arm64] 714 | os: [darwin] 715 | requiresBuild: true 716 | dev: true 717 | optional: true 718 | 719 | /@rollup/rollup-darwin-x64/4.25.0: 720 | resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} 721 | cpu: [x64] 722 | os: [darwin] 723 | requiresBuild: true 724 | dev: true 725 | optional: true 726 | 727 | /@rollup/rollup-freebsd-arm64/4.25.0: 728 | resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} 729 | cpu: [arm64] 730 | os: [freebsd] 731 | requiresBuild: true 732 | dev: true 733 | optional: true 734 | 735 | /@rollup/rollup-freebsd-x64/4.25.0: 736 | resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} 737 | cpu: [x64] 738 | os: [freebsd] 739 | requiresBuild: true 740 | dev: true 741 | optional: true 742 | 743 | /@rollup/rollup-linux-arm-gnueabihf/4.25.0: 744 | resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} 745 | cpu: [arm] 746 | os: [linux] 747 | requiresBuild: true 748 | dev: true 749 | optional: true 750 | 751 | /@rollup/rollup-linux-arm-musleabihf/4.25.0: 752 | resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} 753 | cpu: [arm] 754 | os: [linux] 755 | requiresBuild: true 756 | dev: true 757 | optional: true 758 | 759 | /@rollup/rollup-linux-arm64-gnu/4.25.0: 760 | resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} 761 | cpu: [arm64] 762 | os: [linux] 763 | requiresBuild: true 764 | dev: true 765 | optional: true 766 | 767 | /@rollup/rollup-linux-arm64-musl/4.25.0: 768 | resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} 769 | cpu: [arm64] 770 | os: [linux] 771 | requiresBuild: true 772 | dev: true 773 | optional: true 774 | 775 | /@rollup/rollup-linux-powerpc64le-gnu/4.25.0: 776 | resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} 777 | cpu: [ppc64] 778 | os: [linux] 779 | requiresBuild: true 780 | dev: true 781 | optional: true 782 | 783 | /@rollup/rollup-linux-riscv64-gnu/4.25.0: 784 | resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} 785 | cpu: [riscv64] 786 | os: [linux] 787 | requiresBuild: true 788 | dev: true 789 | optional: true 790 | 791 | /@rollup/rollup-linux-s390x-gnu/4.25.0: 792 | resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} 793 | cpu: [s390x] 794 | os: [linux] 795 | requiresBuild: true 796 | dev: true 797 | optional: true 798 | 799 | /@rollup/rollup-linux-x64-gnu/4.25.0: 800 | resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} 801 | cpu: [x64] 802 | os: [linux] 803 | requiresBuild: true 804 | dev: true 805 | optional: true 806 | 807 | /@rollup/rollup-linux-x64-musl/4.25.0: 808 | resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} 809 | cpu: [x64] 810 | os: [linux] 811 | requiresBuild: true 812 | dev: true 813 | optional: true 814 | 815 | /@rollup/rollup-win32-arm64-msvc/4.25.0: 816 | resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} 817 | cpu: [arm64] 818 | os: [win32] 819 | requiresBuild: true 820 | dev: true 821 | optional: true 822 | 823 | /@rollup/rollup-win32-ia32-msvc/4.25.0: 824 | resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} 825 | cpu: [ia32] 826 | os: [win32] 827 | requiresBuild: true 828 | dev: true 829 | optional: true 830 | 831 | /@rollup/rollup-win32-x64-msvc/4.25.0: 832 | resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} 833 | cpu: [x64] 834 | os: [win32] 835 | requiresBuild: true 836 | dev: true 837 | optional: true 838 | 839 | /@svelte-put/shortcut/3.1.1_svelte@5.1.13: 840 | resolution: {integrity: sha512-2L5EYTZXiaKvbEelVkg5znxqvfZGZai3m97+cAiUBhLZwXnGtviTDpHxOoZBsqz41szlfRMcamW/8o0+fbW3ZQ==} 841 | peerDependencies: 842 | svelte: ^3.55.0 || ^4.0.0 || ^5.0.0 843 | dependencies: 844 | svelte: 5.1.13 845 | dev: true 846 | 847 | /@sveltejs/adapter-auto/3.3.1_@sveltejs+kit@2.8.0: 848 | resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} 849 | peerDependencies: 850 | '@sveltejs/kit': ^2.0.0 851 | dependencies: 852 | '@sveltejs/kit': 2.8.0_w6gobegzxphcvyx6s2v54tmh3a 853 | import-meta-resolve: 4.1.0 854 | dev: true 855 | 856 | /@sveltejs/adapter-node/5.2.9_@sveltejs+kit@2.8.0: 857 | resolution: {integrity: sha512-51euNrx0AcaTu8//wDfVh7xmqQSVgU52rfinE/MwvGkJa4nHPJMHmzv6+OIpmxg7gZaF6+5NVlxnieCzxLD59g==} 858 | peerDependencies: 859 | '@sveltejs/kit': ^2.4.0 860 | dependencies: 861 | '@rollup/plugin-commonjs': 28.0.1_rollup@4.25.0 862 | '@rollup/plugin-json': 6.1.0_rollup@4.25.0 863 | '@rollup/plugin-node-resolve': 15.3.0_rollup@4.25.0 864 | '@sveltejs/kit': 2.8.0_w6gobegzxphcvyx6s2v54tmh3a 865 | rollup: 4.25.0 866 | dev: true 867 | 868 | /@sveltejs/adapter-static/3.0.6_@sveltejs+kit@2.8.0: 869 | resolution: {integrity: sha512-MGJcesnJWj7FxDcB/GbrdYD3q24Uk0PIL4QIX149ku+hlJuj//nxUbb0HxUTpjkecWfHjVveSUnUaQWnPRXlpg==} 870 | peerDependencies: 871 | '@sveltejs/kit': ^2.0.0 872 | dependencies: 873 | '@sveltejs/kit': 2.8.0_w6gobegzxphcvyx6s2v54tmh3a 874 | dev: true 875 | 876 | /@sveltejs/kit/2.8.0_w6gobegzxphcvyx6s2v54tmh3a: 877 | resolution: {integrity: sha512-HCiWupCuKJQ3aPaC4Xc6lpPdjOOnoGzEiYjOqMqppdtfGtY2ABrx932Vw66ZwS2RGXc0BmZvFvNq5SzqlmDVLg==} 878 | engines: {node: '>=18.13'} 879 | hasBin: true 880 | requiresBuild: true 881 | peerDependencies: 882 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 883 | svelte: ^4.0.0 || ^5.0.0-next.0 884 | vite: ^5.0.3 885 | dependencies: 886 | '@sveltejs/vite-plugin-svelte': 4.0.0_svelte@5.1.13+vite@5.4.10 887 | '@types/cookie': 0.6.0 888 | cookie: 0.6.0 889 | devalue: 5.1.1 890 | esm-env: 1.1.4 891 | import-meta-resolve: 4.1.0 892 | kleur: 4.1.5 893 | magic-string: 0.30.12 894 | mrmime: 2.0.0 895 | sade: 1.8.1 896 | set-cookie-parser: 2.7.1 897 | sirv: 3.0.0 898 | svelte: 5.1.13 899 | tiny-glob: 0.2.9 900 | vite: 5.4.10 901 | dev: true 902 | 903 | /@sveltejs/vite-plugin-svelte-inspector/3.0.1_w6gobegzxphcvyx6s2v54tmh3a: 904 | resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==} 905 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 906 | peerDependencies: 907 | '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 908 | svelte: ^5.0.0-next.96 || ^5.0.0 909 | vite: ^5.0.0 910 | dependencies: 911 | '@sveltejs/vite-plugin-svelte': 4.0.0_svelte@5.1.13+vite@5.4.10 912 | debug: 4.3.7 913 | svelte: 5.1.13 914 | vite: 5.4.10 915 | transitivePeerDependencies: 916 | - supports-color 917 | dev: true 918 | 919 | /@sveltejs/vite-plugin-svelte/4.0.0_svelte@5.1.13+vite@5.4.10: 920 | resolution: {integrity: sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag==} 921 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 922 | peerDependencies: 923 | svelte: ^5.0.0-next.96 || ^5.0.0 924 | vite: ^5.0.0 925 | dependencies: 926 | '@sveltejs/vite-plugin-svelte-inspector': 3.0.1_w6gobegzxphcvyx6s2v54tmh3a 927 | debug: 4.3.7 928 | deepmerge: 4.3.1 929 | kleur: 4.1.5 930 | magic-string: 0.30.12 931 | svelte: 5.1.13 932 | vite: 5.4.10 933 | vitefu: 1.0.3_vite@5.4.10 934 | transitivePeerDependencies: 935 | - supports-color 936 | dev: true 937 | 938 | /@swc/core-darwin-arm64/1.9.1: 939 | resolution: {integrity: sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==} 940 | engines: {node: '>=10'} 941 | cpu: [arm64] 942 | os: [darwin] 943 | requiresBuild: true 944 | dev: true 945 | optional: true 946 | 947 | /@swc/core-darwin-x64/1.9.1: 948 | resolution: {integrity: sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==} 949 | engines: {node: '>=10'} 950 | cpu: [x64] 951 | os: [darwin] 952 | requiresBuild: true 953 | dev: true 954 | optional: true 955 | 956 | /@swc/core-linux-arm-gnueabihf/1.9.1: 957 | resolution: {integrity: sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==} 958 | engines: {node: '>=10'} 959 | cpu: [arm] 960 | os: [linux] 961 | requiresBuild: true 962 | dev: true 963 | optional: true 964 | 965 | /@swc/core-linux-arm64-gnu/1.9.1: 966 | resolution: {integrity: sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==} 967 | engines: {node: '>=10'} 968 | cpu: [arm64] 969 | os: [linux] 970 | requiresBuild: true 971 | dev: true 972 | optional: true 973 | 974 | /@swc/core-linux-arm64-musl/1.9.1: 975 | resolution: {integrity: sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==} 976 | engines: {node: '>=10'} 977 | cpu: [arm64] 978 | os: [linux] 979 | requiresBuild: true 980 | dev: true 981 | optional: true 982 | 983 | /@swc/core-linux-x64-gnu/1.9.1: 984 | resolution: {integrity: sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==} 985 | engines: {node: '>=10'} 986 | cpu: [x64] 987 | os: [linux] 988 | requiresBuild: true 989 | dev: true 990 | optional: true 991 | 992 | /@swc/core-linux-x64-musl/1.9.1: 993 | resolution: {integrity: sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==} 994 | engines: {node: '>=10'} 995 | cpu: [x64] 996 | os: [linux] 997 | requiresBuild: true 998 | dev: true 999 | optional: true 1000 | 1001 | /@swc/core-win32-arm64-msvc/1.9.1: 1002 | resolution: {integrity: sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==} 1003 | engines: {node: '>=10'} 1004 | cpu: [arm64] 1005 | os: [win32] 1006 | requiresBuild: true 1007 | dev: true 1008 | optional: true 1009 | 1010 | /@swc/core-win32-ia32-msvc/1.9.1: 1011 | resolution: {integrity: sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==} 1012 | engines: {node: '>=10'} 1013 | cpu: [ia32] 1014 | os: [win32] 1015 | requiresBuild: true 1016 | dev: true 1017 | optional: true 1018 | 1019 | /@swc/core-win32-x64-msvc/1.9.1: 1020 | resolution: {integrity: sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==} 1021 | engines: {node: '>=10'} 1022 | cpu: [x64] 1023 | os: [win32] 1024 | requiresBuild: true 1025 | dev: true 1026 | optional: true 1027 | 1028 | /@swc/core/1.9.1: 1029 | resolution: {integrity: sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==} 1030 | engines: {node: '>=10'} 1031 | requiresBuild: true 1032 | peerDependencies: 1033 | '@swc/helpers': '*' 1034 | peerDependenciesMeta: 1035 | '@swc/helpers': 1036 | optional: true 1037 | dependencies: 1038 | '@swc/counter': 0.1.3 1039 | '@swc/types': 0.1.14 1040 | optionalDependencies: 1041 | '@swc/core-darwin-arm64': 1.9.1 1042 | '@swc/core-darwin-x64': 1.9.1 1043 | '@swc/core-linux-arm-gnueabihf': 1.9.1 1044 | '@swc/core-linux-arm64-gnu': 1.9.1 1045 | '@swc/core-linux-arm64-musl': 1.9.1 1046 | '@swc/core-linux-x64-gnu': 1.9.1 1047 | '@swc/core-linux-x64-musl': 1.9.1 1048 | '@swc/core-win32-arm64-msvc': 1.9.1 1049 | '@swc/core-win32-ia32-msvc': 1.9.1 1050 | '@swc/core-win32-x64-msvc': 1.9.1 1051 | dev: true 1052 | 1053 | /@swc/counter/0.1.3: 1054 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 1055 | dev: true 1056 | 1057 | /@swc/types/0.1.14: 1058 | resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==} 1059 | dependencies: 1060 | '@swc/counter': 0.1.3 1061 | dev: true 1062 | 1063 | /@tsconfig/svelte/5.0.4: 1064 | resolution: {integrity: sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==} 1065 | dev: true 1066 | 1067 | /@types/autosize/4.0.3: 1068 | resolution: {integrity: sha512-o0ZyU3ePp3+KRbhHsY4ogjc+ZQWgVN5h6j8BHW5RII4cFKi6PEKK9QPAcphJVkD0dGpyFnD3VRR0WMvHVjCv9w==} 1069 | dev: true 1070 | 1071 | /@types/body-parser/1.19.5: 1072 | resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} 1073 | dependencies: 1074 | '@types/connect': 3.4.38 1075 | '@types/node': 18.19.64 1076 | dev: true 1077 | 1078 | /@types/chrome/0.0.283: 1079 | resolution: {integrity: sha512-bPnu1JqeQxMceRP0oxFYrauoe0BlWxxQxhYL58gWLg5Ywsd3i3Dd6By9OW7BdkNQMokodWzBLR5FHDIeQZvJWg==} 1080 | dependencies: 1081 | '@types/filesystem': 0.0.36 1082 | '@types/har-format': 1.2.16 1083 | dev: true 1084 | 1085 | /@types/connect/3.4.38: 1086 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} 1087 | dependencies: 1088 | '@types/node': 18.19.64 1089 | dev: true 1090 | 1091 | /@types/cookie/0.6.0: 1092 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 1093 | dev: true 1094 | 1095 | /@types/d3-color/3.1.3: 1096 | resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} 1097 | dev: true 1098 | 1099 | /@types/d3-drag/3.0.7: 1100 | resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} 1101 | dependencies: 1102 | '@types/d3-selection': 3.0.11 1103 | dev: true 1104 | 1105 | /@types/d3-interpolate/3.0.4: 1106 | resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} 1107 | dependencies: 1108 | '@types/d3-color': 3.1.3 1109 | dev: true 1110 | 1111 | /@types/d3-selection/3.0.11: 1112 | resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} 1113 | dev: true 1114 | 1115 | /@types/d3-transition/3.0.9: 1116 | resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} 1117 | dependencies: 1118 | '@types/d3-selection': 3.0.11 1119 | dev: true 1120 | 1121 | /@types/d3-zoom/3.0.8: 1122 | resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} 1123 | dependencies: 1124 | '@types/d3-interpolate': 3.0.4 1125 | '@types/d3-selection': 3.0.11 1126 | dev: true 1127 | 1128 | /@types/dom-chromium-ai/0.0.2: 1129 | resolution: {integrity: sha512-5TyjYquxp5sJeNncqoQMzUvBbxZkd2s+KrzKaCwM7cSoHcG2+kpMuK8Ve04bGGWey6nL7+HQqeh9/sWDmcN6eQ==} 1130 | dev: true 1131 | 1132 | /@types/estree/1.0.6: 1133 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 1134 | dev: true 1135 | 1136 | /@types/express-serve-static-core/5.0.1: 1137 | resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} 1138 | dependencies: 1139 | '@types/node': 18.19.64 1140 | '@types/qs': 6.9.17 1141 | '@types/range-parser': 1.2.7 1142 | '@types/send': 0.17.4 1143 | dev: true 1144 | 1145 | /@types/express/5.0.0: 1146 | resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} 1147 | dependencies: 1148 | '@types/body-parser': 1.19.5 1149 | '@types/express-serve-static-core': 5.0.1 1150 | '@types/qs': 6.9.17 1151 | '@types/serve-static': 1.15.7 1152 | dev: true 1153 | 1154 | /@types/filesystem/0.0.36: 1155 | resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} 1156 | dependencies: 1157 | '@types/filewriter': 0.0.33 1158 | dev: true 1159 | 1160 | /@types/filewriter/0.0.33: 1161 | resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} 1162 | dev: true 1163 | 1164 | /@types/har-format/1.2.16: 1165 | resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} 1166 | dev: true 1167 | 1168 | /@types/http-errors/2.0.4: 1169 | resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} 1170 | dev: true 1171 | 1172 | /@types/marked/5.0.2: 1173 | resolution: {integrity: sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==} 1174 | dev: true 1175 | 1176 | /@types/mime/1.3.5: 1177 | resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} 1178 | dev: true 1179 | 1180 | /@types/node-fetch/2.6.11: 1181 | resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} 1182 | dependencies: 1183 | '@types/node': 18.19.64 1184 | form-data: 4.0.1 1185 | dev: true 1186 | 1187 | /@types/node/18.19.64: 1188 | resolution: {integrity: sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==} 1189 | dependencies: 1190 | undici-types: 5.26.5 1191 | dev: true 1192 | 1193 | /@types/qs/6.9.17: 1194 | resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} 1195 | dev: true 1196 | 1197 | /@types/range-parser/1.2.7: 1198 | resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 1199 | dev: true 1200 | 1201 | /@types/resolve/1.20.2: 1202 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 1203 | dev: true 1204 | 1205 | /@types/send/0.17.4: 1206 | resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} 1207 | dependencies: 1208 | '@types/mime': 1.3.5 1209 | '@types/node': 18.19.64 1210 | dev: true 1211 | 1212 | /@types/serve-static/1.15.7: 1213 | resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} 1214 | dependencies: 1215 | '@types/http-errors': 2.0.4 1216 | '@types/node': 18.19.64 1217 | '@types/send': 0.17.4 1218 | dev: true 1219 | 1220 | /@unocss/astro/0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a: 1221 | resolution: {integrity: sha512-5Fjlv6dpQo6o2PUAcEv8p24G8rn8Op79xLFofq2V+iA/Q32G9/UsxTLOpj+yc+q0YdJrFfDCT2X/3pvVY8Db5g==} 1222 | peerDependencies: 1223 | vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 1224 | peerDependenciesMeta: 1225 | vite: 1226 | optional: true 1227 | dependencies: 1228 | '@unocss/core': 0.63.6 1229 | '@unocss/reset': 0.63.6 1230 | '@unocss/vite': 0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a 1231 | vite: 5.4.10 1232 | transitivePeerDependencies: 1233 | - rollup 1234 | - supports-color 1235 | - typescript 1236 | dev: true 1237 | 1238 | /@unocss/cli/0.63.6: 1239 | resolution: {integrity: sha512-OZb8hO0x4nCJjFd3Gq3km78YnyMAdq282D+BLiDE6IhQ5WHCVL7fyhfgIVL6xwxISDVxiyITwNb72ky0MEutPg==} 1240 | engines: {node: '>=14'} 1241 | hasBin: true 1242 | dependencies: 1243 | '@ampproject/remapping': 2.3.0 1244 | '@rollup/pluginutils': 5.1.3 1245 | '@unocss/config': 0.63.6 1246 | '@unocss/core': 0.63.6 1247 | '@unocss/preset-uno': 0.63.6 1248 | cac: 6.7.14 1249 | chokidar: 3.6.0 1250 | colorette: 2.0.20 1251 | consola: 3.2.3 1252 | magic-string: 0.30.12 1253 | pathe: 1.1.2 1254 | perfect-debounce: 1.0.0 1255 | tinyglobby: 0.2.10 1256 | transitivePeerDependencies: 1257 | - rollup 1258 | - supports-color 1259 | dev: true 1260 | 1261 | /@unocss/config/0.63.6: 1262 | resolution: {integrity: sha512-+4Lt5uTwRgu1z7vhOUzDf+mL+BQYdaa/Z8NMT2Fiqb37tcjEKvmwaUHdfE22Vif1luDgC6xqFsn6qqFtOxhoWQ==} 1263 | engines: {node: '>=14'} 1264 | dependencies: 1265 | '@unocss/core': 0.63.6 1266 | unconfig: 0.5.5 1267 | transitivePeerDependencies: 1268 | - supports-color 1269 | dev: true 1270 | 1271 | /@unocss/core/0.63.6: 1272 | resolution: {integrity: sha512-Q4QPgJ271Up89+vIqqOKgtdCKkFpHqvHN8W1LUlKPqtYnOvVYaOIVNAZowaIdEhPuc83yLc6Tg2+7riK18QKEw==} 1273 | dev: true 1274 | 1275 | /@unocss/extractor-arbitrary-variants/0.63.6: 1276 | resolution: {integrity: sha512-HJX0oAa9uzwKYoU8CoJdP1gxjuqFmOLxyZmITjStAmZNZpIxlz2wz4VrHmqml2dkvx/mifGGGc/GxZpQ36D12Q==} 1277 | dependencies: 1278 | '@unocss/core': 0.63.6 1279 | dev: true 1280 | 1281 | /@unocss/inspector/0.63.6_typescript@5.6.3: 1282 | resolution: {integrity: sha512-DQDJnhtzdHIQXD2vCdj5ytFnHfQCWJGPmrHJHXxzkTYn8nIovV1roVl1ITLxkDIIYK9bdYneg2imQN5JCZhHmQ==} 1283 | dependencies: 1284 | '@unocss/core': 0.63.6 1285 | '@unocss/rule-utils': 0.63.6 1286 | gzip-size: 6.0.0 1287 | sirv: 2.0.4 1288 | vue-flow-layout: 0.0.5_typescript@5.6.3 1289 | transitivePeerDependencies: 1290 | - typescript 1291 | dev: true 1292 | 1293 | /@unocss/postcss/0.63.6: 1294 | resolution: {integrity: sha512-XI6U1jMwbQoSHVWpZZu3Cxp3t1PVj5VOj+IYtz7xmcWP9GVK+eyETo/xyB0l4muD4emXfSrhNDrFYzSyIyF5cg==} 1295 | engines: {node: '>=14'} 1296 | dependencies: 1297 | '@unocss/config': 0.63.6 1298 | '@unocss/core': 0.63.6 1299 | '@unocss/rule-utils': 0.63.6 1300 | css-tree: 3.0.1 1301 | postcss: 8.4.47 1302 | tinyglobby: 0.2.10 1303 | transitivePeerDependencies: 1304 | - supports-color 1305 | dev: true 1306 | 1307 | /@unocss/preset-attributify/0.63.6: 1308 | resolution: {integrity: sha512-sHH17mfl/THHLxCLAHqPdUniCNMFjAxBHFDZYgGi83azuarF2evI5Mtc3Qsj3nzoSQwTPmK2VY3XYUUrpPDGWQ==} 1309 | dependencies: 1310 | '@unocss/core': 0.63.6 1311 | dev: true 1312 | 1313 | /@unocss/preset-icons/0.63.6: 1314 | resolution: {integrity: sha512-fRU44wXABnMPT/9zhKBNSUeDJlOxJhUJP9W3FSRnc+ktjAifJIj0xpUKtEqxL46QMq825Bsj2yDSquzP+XYGnQ==} 1315 | dependencies: 1316 | '@iconify/utils': 2.1.33 1317 | '@unocss/core': 0.63.6 1318 | ofetch: 1.4.1 1319 | transitivePeerDependencies: 1320 | - supports-color 1321 | dev: true 1322 | 1323 | /@unocss/preset-mini/0.63.6: 1324 | resolution: {integrity: sha512-pZDZbSuxabHSwPIy3zCgQ4MNdVCSHvOvZecreH+v96R1oOhquiwU8WiSbkxvZiKiLQJd7JUVW87E1pAzr5ZGGQ==} 1325 | dependencies: 1326 | '@unocss/core': 0.63.6 1327 | '@unocss/extractor-arbitrary-variants': 0.63.6 1328 | '@unocss/rule-utils': 0.63.6 1329 | dev: true 1330 | 1331 | /@unocss/preset-tagify/0.63.6: 1332 | resolution: {integrity: sha512-3lKhk4MW3RqJBwIvBXHj0H0/kHkFlKtCIBQFiBcCJh8TXOID8IZ0iVjuGwdlk63VTizI/wnsNDOVpj6YcjRRlw==} 1333 | dependencies: 1334 | '@unocss/core': 0.63.6 1335 | dev: true 1336 | 1337 | /@unocss/preset-typography/0.63.6: 1338 | resolution: {integrity: sha512-AXmBVnbV54gUIv5kbywjZek9ZlKRwJfBDVMtWOcLOjN3AHirGx1W2oq2UzNkfYZ2leof/Y2BocxeTwGCCRhqDQ==} 1339 | dependencies: 1340 | '@unocss/core': 0.63.6 1341 | '@unocss/preset-mini': 0.63.6 1342 | dev: true 1343 | 1344 | /@unocss/preset-uno/0.63.6: 1345 | resolution: {integrity: sha512-67PbHyVgAe9Rz0Rhyl3zBibFuGmqQMRPMkRjNYrwmmtNydpQYsXbfnDs0p8mZFp6uO2o3Jkh7urqEtixHHvq0Q==} 1346 | dependencies: 1347 | '@unocss/core': 0.63.6 1348 | '@unocss/preset-mini': 0.63.6 1349 | '@unocss/preset-wind': 0.63.6 1350 | '@unocss/rule-utils': 0.63.6 1351 | dev: true 1352 | 1353 | /@unocss/preset-web-fonts/0.63.6: 1354 | resolution: {integrity: sha512-ko1aHDax0u5CQi1BXggv6uW5Vq/LQRWwzOxqBFTh1JlGHPZTw4CdVJkYnlpt3WEW+FPUzZYjhKmMmQY7KtOTng==} 1355 | dependencies: 1356 | '@unocss/core': 0.63.6 1357 | ofetch: 1.4.1 1358 | dev: true 1359 | 1360 | /@unocss/preset-wind/0.63.6: 1361 | resolution: {integrity: sha512-W3oZ2TXSqStNE+X++kcspRTF2Szu2ej6NW5Kiyy6WQn/+ZD77AF4VtvzHtzFVZ2QKpEIovGBpU5tywooHbB7hw==} 1362 | dependencies: 1363 | '@unocss/core': 0.63.6 1364 | '@unocss/preset-mini': 0.63.6 1365 | '@unocss/rule-utils': 0.63.6 1366 | dev: true 1367 | 1368 | /@unocss/reset/0.63.6: 1369 | resolution: {integrity: sha512-gq73RSZj54MOloqrivkoMPXCqNG2WpIyBT1AYlF76uKxEEbUD41E8uBUhLSKs7gFgF01yQJLRaIuyN1yw09pbQ==} 1370 | dev: true 1371 | 1372 | /@unocss/rule-utils/0.63.6: 1373 | resolution: {integrity: sha512-moeDEq5d9mB8gSYeoqHMkXWWekaFFdhg7QCuwwCbxCc+NPMOgGkmfAoafz+y2tdvK7pEuT191RWOiHQ0MkA5oQ==} 1374 | engines: {node: '>=14'} 1375 | dependencies: 1376 | '@unocss/core': 0.63.6 1377 | magic-string: 0.30.12 1378 | dev: true 1379 | 1380 | /@unocss/transformer-attributify-jsx/0.63.6: 1381 | resolution: {integrity: sha512-/RU09MF+hJK7cFbLJ+8vloCGyhn6Oys8R6gey0auB0+nw/ucUXoLQKWgUqo9taQlLuYOiehdkYjQSdWn5lyA/Q==} 1382 | dependencies: 1383 | '@unocss/core': 0.63.6 1384 | dev: true 1385 | 1386 | /@unocss/transformer-compile-class/0.63.6: 1387 | resolution: {integrity: sha512-zzAqs8adnTUOLA88RgcToadcrz9gjxrZk6IrcmMqMmWqk0MOWNQHIN0RzKa/yaw4QhO2xuGyIz4/WHyXuCXMQg==} 1388 | dependencies: 1389 | '@unocss/core': 0.63.6 1390 | dev: true 1391 | 1392 | /@unocss/transformer-directives/0.63.6: 1393 | resolution: {integrity: sha512-XcNOwLRbfrJSU6YXyLgiMzAigSzjIdvHwS3lLCZ2n6DWuLmTuXBfvVtRxeJ+aflNkhpQNKONCClC4s6I2r53uw==} 1394 | dependencies: 1395 | '@unocss/core': 0.63.6 1396 | '@unocss/rule-utils': 0.63.6 1397 | css-tree: 3.0.1 1398 | dev: true 1399 | 1400 | /@unocss/transformer-variant-group/0.63.6: 1401 | resolution: {integrity: sha512-ebYSjZnZrtcJYjmAEDwGVwPuaQ9EVWKNDDJFFSusP8k/6PjJoHDh0qkj+hdPPDhYn81yzJQalU1eSUSlfC30VA==} 1402 | dependencies: 1403 | '@unocss/core': 0.63.6 1404 | dev: true 1405 | 1406 | /@unocss/vite/0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a: 1407 | resolution: {integrity: sha512-gxK3gtvYQH5S/qtuvsY4M0S+KJPZnYrOQI/Gopufx+b2qgmwZ/TSAe66gWeKYfe3DfQsmA3PPh/GXpkK+/FnHg==} 1408 | peerDependencies: 1409 | vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 1410 | dependencies: 1411 | '@ampproject/remapping': 2.3.0 1412 | '@rollup/pluginutils': 5.1.3 1413 | '@unocss/config': 0.63.6 1414 | '@unocss/core': 0.63.6 1415 | '@unocss/inspector': 0.63.6_typescript@5.6.3 1416 | chokidar: 3.6.0 1417 | magic-string: 0.30.12 1418 | tinyglobby: 0.2.10 1419 | vite: 5.4.10 1420 | transitivePeerDependencies: 1421 | - rollup 1422 | - supports-color 1423 | - typescript 1424 | dev: true 1425 | 1426 | /@vue/compiler-core/3.5.12: 1427 | resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} 1428 | dependencies: 1429 | '@babel/parser': 7.26.2 1430 | '@vue/shared': 3.5.12 1431 | entities: 4.5.0 1432 | estree-walker: 2.0.2 1433 | source-map-js: 1.2.1 1434 | dev: true 1435 | 1436 | /@vue/compiler-dom/3.5.12: 1437 | resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} 1438 | dependencies: 1439 | '@vue/compiler-core': 3.5.12 1440 | '@vue/shared': 3.5.12 1441 | dev: true 1442 | 1443 | /@vue/compiler-sfc/3.5.12: 1444 | resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} 1445 | dependencies: 1446 | '@babel/parser': 7.26.2 1447 | '@vue/compiler-core': 3.5.12 1448 | '@vue/compiler-dom': 3.5.12 1449 | '@vue/compiler-ssr': 3.5.12 1450 | '@vue/shared': 3.5.12 1451 | estree-walker: 2.0.2 1452 | magic-string: 0.30.12 1453 | postcss: 8.4.47 1454 | source-map-js: 1.2.1 1455 | dev: true 1456 | 1457 | /@vue/compiler-ssr/3.5.12: 1458 | resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} 1459 | dependencies: 1460 | '@vue/compiler-dom': 3.5.12 1461 | '@vue/shared': 3.5.12 1462 | dev: true 1463 | 1464 | /@vue/reactivity/3.5.12: 1465 | resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} 1466 | dependencies: 1467 | '@vue/shared': 3.5.12 1468 | dev: true 1469 | 1470 | /@vue/runtime-core/3.5.12: 1471 | resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} 1472 | dependencies: 1473 | '@vue/reactivity': 3.5.12 1474 | '@vue/shared': 3.5.12 1475 | dev: true 1476 | 1477 | /@vue/runtime-dom/3.5.12: 1478 | resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} 1479 | dependencies: 1480 | '@vue/reactivity': 3.5.12 1481 | '@vue/runtime-core': 3.5.12 1482 | '@vue/shared': 3.5.12 1483 | csstype: 3.1.3 1484 | dev: true 1485 | 1486 | /@vue/server-renderer/3.5.12_vue@3.5.12: 1487 | resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} 1488 | peerDependencies: 1489 | vue: 3.5.12 1490 | dependencies: 1491 | '@vue/compiler-ssr': 3.5.12 1492 | '@vue/shared': 3.5.12 1493 | vue: 3.5.12_typescript@5.6.3 1494 | dev: true 1495 | 1496 | /@vue/shared/3.5.12: 1497 | resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} 1498 | dev: true 1499 | 1500 | /@xyflow/svelte/0.1.23_svelte@5.1.13: 1501 | resolution: {integrity: sha512-PDI11akhZl9Zlv8UYYWiXuGQLzM/y39Et+QROYv16prAfTlX0382QPoc5lc+7xn0smk28PsXSFJ+N/G333TYqw==} 1502 | peerDependencies: 1503 | svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 1504 | dependencies: 1505 | '@svelte-put/shortcut': 3.1.1_svelte@5.1.13 1506 | '@xyflow/system': 0.0.45 1507 | classcat: 5.0.5 1508 | svelte: 5.1.13 1509 | dev: true 1510 | 1511 | /@xyflow/system/0.0.45: 1512 | resolution: {integrity: sha512-szP1LjDD4jlRYYhxvgZqOCTMToUVNqjQkrlhb0fhv1sXomU1+yMDdhpQT+FjE4d+rKx08fS10sOuZUl2ycXaDw==} 1513 | dependencies: 1514 | '@types/d3-drag': 3.0.7 1515 | '@types/d3-selection': 3.0.11 1516 | '@types/d3-transition': 3.0.9 1517 | '@types/d3-zoom': 3.0.8 1518 | d3-drag: 3.0.0 1519 | d3-selection: 3.0.0 1520 | d3-zoom: 3.0.0 1521 | dev: true 1522 | 1523 | /abort-controller/3.0.0: 1524 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 1525 | engines: {node: '>=6.5'} 1526 | dependencies: 1527 | event-target-shim: 5.0.1 1528 | dev: true 1529 | 1530 | /accepts/1.3.8: 1531 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 1532 | engines: {node: '>= 0.6'} 1533 | dependencies: 1534 | mime-types: 2.1.35 1535 | negotiator: 0.6.3 1536 | dev: false 1537 | 1538 | /acorn-typescript/1.4.13_acorn@8.14.0: 1539 | resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} 1540 | peerDependencies: 1541 | acorn: '>=8.9.0' 1542 | dependencies: 1543 | acorn: 8.14.0 1544 | dev: true 1545 | 1546 | /acorn/8.14.0: 1547 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 1548 | engines: {node: '>=0.4.0'} 1549 | hasBin: true 1550 | dev: true 1551 | 1552 | /agentkeepalive/4.5.0: 1553 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} 1554 | engines: {node: '>= 8.0.0'} 1555 | dependencies: 1556 | humanize-ms: 1.2.1 1557 | dev: true 1558 | 1559 | /anymatch/3.1.3: 1560 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1561 | engines: {node: '>= 8'} 1562 | dependencies: 1563 | normalize-path: 3.0.0 1564 | picomatch: 2.3.1 1565 | dev: true 1566 | 1567 | /aria-query/5.3.2: 1568 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 1569 | engines: {node: '>= 0.4'} 1570 | dev: true 1571 | 1572 | /array-flatten/1.1.1: 1573 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 1574 | dev: false 1575 | 1576 | /asynckit/0.4.0: 1577 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1578 | dev: true 1579 | 1580 | /autosize/6.0.1: 1581 | resolution: {integrity: sha512-f86EjiUKE6Xvczc4ioP1JBlWG7FKrE13qe/DxBCpe8GCipCq2nFw73aO8QEBKHfSbYGDN5eB9jXWKen7tspDqQ==} 1582 | dev: true 1583 | 1584 | /axobject-query/4.1.0: 1585 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 1586 | engines: {node: '>= 0.4'} 1587 | dev: true 1588 | 1589 | /binary-extensions/2.3.0: 1590 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 1591 | engines: {node: '>=8'} 1592 | dev: true 1593 | 1594 | /body-parser/1.20.3: 1595 | resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} 1596 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1597 | dependencies: 1598 | bytes: 3.1.2 1599 | content-type: 1.0.5 1600 | debug: 2.6.9 1601 | depd: 2.0.0 1602 | destroy: 1.2.0 1603 | http-errors: 2.0.0 1604 | iconv-lite: 0.4.24 1605 | on-finished: 2.4.1 1606 | qs: 6.13.0 1607 | raw-body: 2.5.2 1608 | type-is: 1.6.18 1609 | unpipe: 1.0.0 1610 | transitivePeerDependencies: 1611 | - supports-color 1612 | dev: false 1613 | 1614 | /boolbase/1.0.0: 1615 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 1616 | dev: true 1617 | 1618 | /braces/3.0.3: 1619 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 1620 | engines: {node: '>=8'} 1621 | dependencies: 1622 | fill-range: 7.1.1 1623 | dev: true 1624 | 1625 | /bundle-require/5.0.0_esbuild@0.23.1: 1626 | resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} 1627 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1628 | peerDependencies: 1629 | esbuild: '>=0.18' 1630 | dependencies: 1631 | esbuild: 0.23.1 1632 | load-tsconfig: 0.2.5 1633 | dev: true 1634 | 1635 | /bytes/3.1.2: 1636 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 1637 | engines: {node: '>= 0.8'} 1638 | dev: false 1639 | 1640 | /cac/6.7.14: 1641 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1642 | engines: {node: '>=8'} 1643 | dev: true 1644 | 1645 | /call-bind/1.0.7: 1646 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 1647 | engines: {node: '>= 0.4'} 1648 | dependencies: 1649 | es-define-property: 1.0.0 1650 | es-errors: 1.3.0 1651 | function-bind: 1.1.2 1652 | get-intrinsic: 1.2.4 1653 | set-function-length: 1.2.2 1654 | dev: false 1655 | 1656 | /character-card-utils/2.0.3: 1657 | resolution: {integrity: sha512-plZDF4Qjun6qfus4dkFSG7dSQEjM1zDpK4xKWE9HuidlPyzWk5H78N+eiyDP/hqN4AqO232FUywsIwzcVzI+MQ==} 1658 | dependencies: 1659 | zod: 3.23.8 1660 | dev: true 1661 | 1662 | /cheerio-select/2.1.0: 1663 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 1664 | dependencies: 1665 | boolbase: 1.0.0 1666 | css-select: 5.1.0 1667 | css-what: 6.1.0 1668 | domelementtype: 2.3.0 1669 | domhandler: 5.0.3 1670 | domutils: 3.1.0 1671 | dev: true 1672 | 1673 | /cheerio/1.0.0: 1674 | resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} 1675 | engines: {node: '>=18.17'} 1676 | dependencies: 1677 | cheerio-select: 2.1.0 1678 | dom-serializer: 2.0.0 1679 | domhandler: 5.0.3 1680 | domutils: 3.1.0 1681 | encoding-sniffer: 0.2.0 1682 | htmlparser2: 9.1.0 1683 | parse5: 7.2.1 1684 | parse5-htmlparser2-tree-adapter: 7.1.0 1685 | parse5-parser-stream: 7.1.2 1686 | undici: 6.20.1 1687 | whatwg-mimetype: 4.0.0 1688 | dev: true 1689 | 1690 | /chokidar/3.6.0: 1691 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 1692 | engines: {node: '>= 8.10.0'} 1693 | dependencies: 1694 | anymatch: 3.1.3 1695 | braces: 3.0.3 1696 | glob-parent: 5.1.2 1697 | is-binary-path: 2.1.0 1698 | is-glob: 4.0.3 1699 | normalize-path: 3.0.0 1700 | readdirp: 3.6.0 1701 | optionalDependencies: 1702 | fsevents: 2.3.3 1703 | dev: true 1704 | 1705 | /chokidar/4.0.1: 1706 | resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} 1707 | engines: {node: '>= 14.16.0'} 1708 | dependencies: 1709 | readdirp: 4.0.2 1710 | dev: true 1711 | 1712 | /classcat/5.0.5: 1713 | resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} 1714 | dev: true 1715 | 1716 | /colorette/2.0.20: 1717 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 1718 | dev: true 1719 | 1720 | /combined-stream/1.0.8: 1721 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1722 | engines: {node: '>= 0.8'} 1723 | dependencies: 1724 | delayed-stream: 1.0.0 1725 | dev: true 1726 | 1727 | /commondir/1.0.1: 1728 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 1729 | dev: true 1730 | 1731 | /confbox/0.1.8: 1732 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 1733 | dev: true 1734 | 1735 | /consola/3.2.3: 1736 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} 1737 | engines: {node: ^14.18.0 || >=16.10.0} 1738 | dev: true 1739 | 1740 | /content-disposition/0.5.4: 1741 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 1742 | engines: {node: '>= 0.6'} 1743 | dependencies: 1744 | safe-buffer: 5.2.1 1745 | dev: false 1746 | 1747 | /content-type/1.0.5: 1748 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 1749 | engines: {node: '>= 0.6'} 1750 | dev: false 1751 | 1752 | /cookie-signature/1.0.6: 1753 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 1754 | dev: false 1755 | 1756 | /cookie/0.6.0: 1757 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 1758 | engines: {node: '>= 0.6'} 1759 | dev: true 1760 | 1761 | /cookie/0.7.1: 1762 | resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} 1763 | engines: {node: '>= 0.6'} 1764 | dev: false 1765 | 1766 | /copy-text-to-clipboard/3.2.0: 1767 | resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} 1768 | engines: {node: '>=12'} 1769 | dev: true 1770 | 1771 | /css-select/5.1.0: 1772 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 1773 | dependencies: 1774 | boolbase: 1.0.0 1775 | css-what: 6.1.0 1776 | domhandler: 5.0.3 1777 | domutils: 3.1.0 1778 | nth-check: 2.1.1 1779 | dev: true 1780 | 1781 | /css-tree/3.0.1: 1782 | resolution: {integrity: sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==} 1783 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 1784 | dependencies: 1785 | mdn-data: 2.12.1 1786 | source-map-js: 1.2.1 1787 | dev: true 1788 | 1789 | /css-what/6.1.0: 1790 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 1791 | engines: {node: '>= 6'} 1792 | dev: true 1793 | 1794 | /csstype/3.1.3: 1795 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 1796 | dev: true 1797 | 1798 | /d3-color/3.1.0: 1799 | resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} 1800 | engines: {node: '>=12'} 1801 | dev: true 1802 | 1803 | /d3-dispatch/3.0.1: 1804 | resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} 1805 | engines: {node: '>=12'} 1806 | dev: true 1807 | 1808 | /d3-drag/3.0.0: 1809 | resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} 1810 | engines: {node: '>=12'} 1811 | dependencies: 1812 | d3-dispatch: 3.0.1 1813 | d3-selection: 3.0.0 1814 | dev: true 1815 | 1816 | /d3-ease/3.0.1: 1817 | resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} 1818 | engines: {node: '>=12'} 1819 | dev: true 1820 | 1821 | /d3-interpolate/3.0.1: 1822 | resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} 1823 | engines: {node: '>=12'} 1824 | dependencies: 1825 | d3-color: 3.1.0 1826 | dev: true 1827 | 1828 | /d3-selection/3.0.0: 1829 | resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} 1830 | engines: {node: '>=12'} 1831 | dev: true 1832 | 1833 | /d3-timer/3.0.1: 1834 | resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} 1835 | engines: {node: '>=12'} 1836 | dev: true 1837 | 1838 | /d3-transition/3.0.1_d3-selection@3.0.0: 1839 | resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} 1840 | engines: {node: '>=12'} 1841 | peerDependencies: 1842 | d3-selection: 2 - 3 1843 | dependencies: 1844 | d3-color: 3.1.0 1845 | d3-dispatch: 3.0.1 1846 | d3-ease: 3.0.1 1847 | d3-interpolate: 3.0.1 1848 | d3-selection: 3.0.0 1849 | d3-timer: 3.0.1 1850 | dev: true 1851 | 1852 | /d3-zoom/3.0.0: 1853 | resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} 1854 | engines: {node: '>=12'} 1855 | dependencies: 1856 | d3-dispatch: 3.0.1 1857 | d3-drag: 3.0.0 1858 | d3-interpolate: 3.0.1 1859 | d3-selection: 3.0.0 1860 | d3-transition: 3.0.1_d3-selection@3.0.0 1861 | dev: true 1862 | 1863 | /debug/2.6.9: 1864 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1865 | peerDependencies: 1866 | supports-color: '*' 1867 | peerDependenciesMeta: 1868 | supports-color: 1869 | optional: true 1870 | dependencies: 1871 | ms: 2.0.0 1872 | dev: false 1873 | 1874 | /debug/4.3.7: 1875 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 1876 | engines: {node: '>=6.0'} 1877 | peerDependencies: 1878 | supports-color: '*' 1879 | peerDependenciesMeta: 1880 | supports-color: 1881 | optional: true 1882 | dependencies: 1883 | ms: 2.1.3 1884 | dev: true 1885 | 1886 | /deepmerge/4.3.1: 1887 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1888 | engines: {node: '>=0.10.0'} 1889 | dev: true 1890 | 1891 | /define-data-property/1.1.4: 1892 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 1893 | engines: {node: '>= 0.4'} 1894 | dependencies: 1895 | es-define-property: 1.0.0 1896 | es-errors: 1.3.0 1897 | gopd: 1.0.1 1898 | dev: false 1899 | 1900 | /defu/6.1.4: 1901 | resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 1902 | dev: true 1903 | 1904 | /delayed-stream/1.0.0: 1905 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1906 | engines: {node: '>=0.4.0'} 1907 | dev: true 1908 | 1909 | /depd/2.0.0: 1910 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 1911 | engines: {node: '>= 0.8'} 1912 | dev: false 1913 | 1914 | /destr/2.0.3: 1915 | resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} 1916 | dev: true 1917 | 1918 | /destroy/1.2.0: 1919 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 1920 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1921 | dev: false 1922 | 1923 | /devalue/5.1.1: 1924 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 1925 | dev: true 1926 | 1927 | /dom-serializer/2.0.0: 1928 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 1929 | dependencies: 1930 | domelementtype: 2.3.0 1931 | domhandler: 5.0.3 1932 | entities: 4.5.0 1933 | dev: true 1934 | 1935 | /domelementtype/2.3.0: 1936 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1937 | dev: true 1938 | 1939 | /domhandler/5.0.3: 1940 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1941 | engines: {node: '>= 4'} 1942 | dependencies: 1943 | domelementtype: 2.3.0 1944 | dev: true 1945 | 1946 | /domutils/3.1.0: 1947 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 1948 | dependencies: 1949 | dom-serializer: 2.0.0 1950 | domelementtype: 2.3.0 1951 | domhandler: 5.0.3 1952 | dev: true 1953 | 1954 | /duplexer/0.1.2: 1955 | resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} 1956 | dev: true 1957 | 1958 | /ee-first/1.1.1: 1959 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1960 | dev: false 1961 | 1962 | /encodeurl/1.0.2: 1963 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 1964 | engines: {node: '>= 0.8'} 1965 | dev: false 1966 | 1967 | /encodeurl/2.0.0: 1968 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 1969 | engines: {node: '>= 0.8'} 1970 | dev: false 1971 | 1972 | /encoding-sniffer/0.2.0: 1973 | resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} 1974 | dependencies: 1975 | iconv-lite: 0.6.3 1976 | whatwg-encoding: 3.1.1 1977 | dev: true 1978 | 1979 | /entities/4.5.0: 1980 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1981 | engines: {node: '>=0.12'} 1982 | dev: true 1983 | 1984 | /es-define-property/1.0.0: 1985 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 1986 | engines: {node: '>= 0.4'} 1987 | dependencies: 1988 | get-intrinsic: 1.2.4 1989 | dev: false 1990 | 1991 | /es-errors/1.3.0: 1992 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1993 | engines: {node: '>= 0.4'} 1994 | dev: false 1995 | 1996 | /esbuild/0.21.5: 1997 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 1998 | engines: {node: '>=12'} 1999 | hasBin: true 2000 | requiresBuild: true 2001 | optionalDependencies: 2002 | '@esbuild/aix-ppc64': 0.21.5 2003 | '@esbuild/android-arm': 0.21.5 2004 | '@esbuild/android-arm64': 0.21.5 2005 | '@esbuild/android-x64': 0.21.5 2006 | '@esbuild/darwin-arm64': 0.21.5 2007 | '@esbuild/darwin-x64': 0.21.5 2008 | '@esbuild/freebsd-arm64': 0.21.5 2009 | '@esbuild/freebsd-x64': 0.21.5 2010 | '@esbuild/linux-arm': 0.21.5 2011 | '@esbuild/linux-arm64': 0.21.5 2012 | '@esbuild/linux-ia32': 0.21.5 2013 | '@esbuild/linux-loong64': 0.21.5 2014 | '@esbuild/linux-mips64el': 0.21.5 2015 | '@esbuild/linux-ppc64': 0.21.5 2016 | '@esbuild/linux-riscv64': 0.21.5 2017 | '@esbuild/linux-s390x': 0.21.5 2018 | '@esbuild/linux-x64': 0.21.5 2019 | '@esbuild/netbsd-x64': 0.21.5 2020 | '@esbuild/openbsd-x64': 0.21.5 2021 | '@esbuild/sunos-x64': 0.21.5 2022 | '@esbuild/win32-arm64': 0.21.5 2023 | '@esbuild/win32-ia32': 0.21.5 2024 | '@esbuild/win32-x64': 0.21.5 2025 | dev: true 2026 | 2027 | /esbuild/0.23.1: 2028 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} 2029 | engines: {node: '>=18'} 2030 | hasBin: true 2031 | requiresBuild: true 2032 | optionalDependencies: 2033 | '@esbuild/aix-ppc64': 0.23.1 2034 | '@esbuild/android-arm': 0.23.1 2035 | '@esbuild/android-arm64': 0.23.1 2036 | '@esbuild/android-x64': 0.23.1 2037 | '@esbuild/darwin-arm64': 0.23.1 2038 | '@esbuild/darwin-x64': 0.23.1 2039 | '@esbuild/freebsd-arm64': 0.23.1 2040 | '@esbuild/freebsd-x64': 0.23.1 2041 | '@esbuild/linux-arm': 0.23.1 2042 | '@esbuild/linux-arm64': 0.23.1 2043 | '@esbuild/linux-ia32': 0.23.1 2044 | '@esbuild/linux-loong64': 0.23.1 2045 | '@esbuild/linux-mips64el': 0.23.1 2046 | '@esbuild/linux-ppc64': 0.23.1 2047 | '@esbuild/linux-riscv64': 0.23.1 2048 | '@esbuild/linux-s390x': 0.23.1 2049 | '@esbuild/linux-x64': 0.23.1 2050 | '@esbuild/netbsd-x64': 0.23.1 2051 | '@esbuild/openbsd-arm64': 0.23.1 2052 | '@esbuild/openbsd-x64': 0.23.1 2053 | '@esbuild/sunos-x64': 0.23.1 2054 | '@esbuild/win32-arm64': 0.23.1 2055 | '@esbuild/win32-ia32': 0.23.1 2056 | '@esbuild/win32-x64': 0.23.1 2057 | dev: true 2058 | 2059 | /escape-html/1.0.3: 2060 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 2061 | dev: false 2062 | 2063 | /esm-env/1.1.4: 2064 | resolution: {integrity: sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==} 2065 | dev: true 2066 | 2067 | /esrap/1.2.2: 2068 | resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} 2069 | dependencies: 2070 | '@jridgewell/sourcemap-codec': 1.5.0 2071 | '@types/estree': 1.0.6 2072 | dev: true 2073 | 2074 | /estree-walker/2.0.2: 2075 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 2076 | dev: true 2077 | 2078 | /etag/1.8.1: 2079 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 2080 | engines: {node: '>= 0.6'} 2081 | dev: false 2082 | 2083 | /event-target-shim/5.0.1: 2084 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 2085 | engines: {node: '>=6'} 2086 | dev: true 2087 | 2088 | /express/4.21.1: 2089 | resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} 2090 | engines: {node: '>= 0.10.0'} 2091 | dependencies: 2092 | accepts: 1.3.8 2093 | array-flatten: 1.1.1 2094 | body-parser: 1.20.3 2095 | content-disposition: 0.5.4 2096 | content-type: 1.0.5 2097 | cookie: 0.7.1 2098 | cookie-signature: 1.0.6 2099 | debug: 2.6.9 2100 | depd: 2.0.0 2101 | encodeurl: 2.0.0 2102 | escape-html: 1.0.3 2103 | etag: 1.8.1 2104 | finalhandler: 1.3.1 2105 | fresh: 0.5.2 2106 | http-errors: 2.0.0 2107 | merge-descriptors: 1.0.3 2108 | methods: 1.1.2 2109 | on-finished: 2.4.1 2110 | parseurl: 1.3.3 2111 | path-to-regexp: 0.1.10 2112 | proxy-addr: 2.0.7 2113 | qs: 6.13.0 2114 | range-parser: 1.2.1 2115 | safe-buffer: 5.2.1 2116 | send: 0.19.0 2117 | serve-static: 1.16.2 2118 | setprototypeof: 1.2.0 2119 | statuses: 2.0.1 2120 | type-is: 1.6.18 2121 | utils-merge: 1.0.1 2122 | vary: 1.1.2 2123 | transitivePeerDependencies: 2124 | - supports-color 2125 | dev: false 2126 | 2127 | /fdir/6.4.2: 2128 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 2129 | peerDependencies: 2130 | picomatch: ^3 || ^4 2131 | peerDependenciesMeta: 2132 | picomatch: 2133 | optional: true 2134 | dev: true 2135 | 2136 | /fdir/6.4.2_picomatch@4.0.2: 2137 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 2138 | peerDependencies: 2139 | picomatch: ^3 || ^4 2140 | peerDependenciesMeta: 2141 | picomatch: 2142 | optional: true 2143 | dependencies: 2144 | picomatch: 4.0.2 2145 | dev: true 2146 | 2147 | /fill-range/7.1.1: 2148 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 2149 | engines: {node: '>=8'} 2150 | dependencies: 2151 | to-regex-range: 5.0.1 2152 | dev: true 2153 | 2154 | /finalhandler/1.3.1: 2155 | resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} 2156 | engines: {node: '>= 0.8'} 2157 | dependencies: 2158 | debug: 2.6.9 2159 | encodeurl: 2.0.0 2160 | escape-html: 1.0.3 2161 | on-finished: 2.4.1 2162 | parseurl: 1.3.3 2163 | statuses: 2.0.1 2164 | unpipe: 1.0.0 2165 | transitivePeerDependencies: 2166 | - supports-color 2167 | dev: false 2168 | 2169 | /form-data-encoder/1.7.2: 2170 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} 2171 | dev: true 2172 | 2173 | /form-data/4.0.1: 2174 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 2175 | engines: {node: '>= 6'} 2176 | dependencies: 2177 | asynckit: 0.4.0 2178 | combined-stream: 1.0.8 2179 | mime-types: 2.1.35 2180 | dev: true 2181 | 2182 | /formdata-node/4.4.1: 2183 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} 2184 | engines: {node: '>= 12.20'} 2185 | dependencies: 2186 | node-domexception: 1.0.0 2187 | web-streams-polyfill: 4.0.0-beta.3 2188 | dev: true 2189 | 2190 | /forwarded/0.2.0: 2191 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 2192 | engines: {node: '>= 0.6'} 2193 | dev: false 2194 | 2195 | /fresh/0.5.2: 2196 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 2197 | engines: {node: '>= 0.6'} 2198 | dev: false 2199 | 2200 | /fsevents/2.3.3: 2201 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 2202 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2203 | os: [darwin] 2204 | requiresBuild: true 2205 | dev: true 2206 | optional: true 2207 | 2208 | /function-bind/1.1.2: 2209 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 2210 | 2211 | /get-intrinsic/1.2.4: 2212 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 2213 | engines: {node: '>= 0.4'} 2214 | dependencies: 2215 | es-errors: 1.3.0 2216 | function-bind: 1.1.2 2217 | has-proto: 1.0.3 2218 | has-symbols: 1.0.3 2219 | hasown: 2.0.2 2220 | dev: false 2221 | 2222 | /get-tsconfig/4.8.1: 2223 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 2224 | dependencies: 2225 | resolve-pkg-maps: 1.0.0 2226 | dev: true 2227 | 2228 | /github-markdown-css/5.7.0: 2229 | resolution: {integrity: sha512-GoYhaqELL4YUjz4tZ00PQ4JzFQkMfrBVuEeRB8W74HoikHWNiaGqSgynpwJEc+xom5uf04qoD/tUSS6ziZltaQ==} 2230 | engines: {node: '>=10'} 2231 | dev: true 2232 | 2233 | /glob-parent/5.1.2: 2234 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 2235 | engines: {node: '>= 6'} 2236 | dependencies: 2237 | is-glob: 4.0.3 2238 | dev: true 2239 | 2240 | /globalyzer/0.1.0: 2241 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 2242 | dev: true 2243 | 2244 | /globrex/0.1.2: 2245 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 2246 | dev: true 2247 | 2248 | /gopd/1.0.1: 2249 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 2250 | dependencies: 2251 | get-intrinsic: 1.2.4 2252 | dev: false 2253 | 2254 | /gzip-size/6.0.0: 2255 | resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} 2256 | engines: {node: '>=10'} 2257 | dependencies: 2258 | duplexer: 0.1.2 2259 | dev: true 2260 | 2261 | /has-property-descriptors/1.0.2: 2262 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 2263 | dependencies: 2264 | es-define-property: 1.0.0 2265 | dev: false 2266 | 2267 | /has-proto/1.0.3: 2268 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 2269 | engines: {node: '>= 0.4'} 2270 | dev: false 2271 | 2272 | /has-symbols/1.0.3: 2273 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 2274 | engines: {node: '>= 0.4'} 2275 | dev: false 2276 | 2277 | /hasown/2.0.2: 2278 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 2279 | engines: {node: '>= 0.4'} 2280 | dependencies: 2281 | function-bind: 1.1.2 2282 | 2283 | /htmlparser2/9.1.0: 2284 | resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} 2285 | dependencies: 2286 | domelementtype: 2.3.0 2287 | domhandler: 5.0.3 2288 | domutils: 3.1.0 2289 | entities: 4.5.0 2290 | dev: true 2291 | 2292 | /http-errors/2.0.0: 2293 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 2294 | engines: {node: '>= 0.8'} 2295 | dependencies: 2296 | depd: 2.0.0 2297 | inherits: 2.0.4 2298 | setprototypeof: 1.2.0 2299 | statuses: 2.0.1 2300 | toidentifier: 1.0.1 2301 | dev: false 2302 | 2303 | /humanize-ms/1.2.1: 2304 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 2305 | dependencies: 2306 | ms: 2.1.3 2307 | dev: true 2308 | 2309 | /iconv-lite/0.4.24: 2310 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 2311 | engines: {node: '>=0.10.0'} 2312 | dependencies: 2313 | safer-buffer: 2.1.2 2314 | dev: false 2315 | 2316 | /iconv-lite/0.6.3: 2317 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 2318 | engines: {node: '>=0.10.0'} 2319 | dependencies: 2320 | safer-buffer: 2.1.2 2321 | dev: true 2322 | 2323 | /import-meta-resolve/4.1.0: 2324 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 2325 | dev: true 2326 | 2327 | /importx/0.4.4: 2328 | resolution: {integrity: sha512-Lo1pukzAREqrBnnHC+tj+lreMTAvyxtkKsMxLY8H15M/bvLl54p3YuoTI70Tz7Il0AsgSlD7Lrk/FaApRcBL7w==} 2329 | dependencies: 2330 | bundle-require: 5.0.0_esbuild@0.23.1 2331 | debug: 4.3.7 2332 | esbuild: 0.23.1 2333 | jiti: 2.0.0-beta.3 2334 | jiti-v1: /jiti/1.21.6 2335 | pathe: 1.1.2 2336 | tsx: 4.19.2 2337 | transitivePeerDependencies: 2338 | - supports-color 2339 | dev: true 2340 | 2341 | /inherits/2.0.4: 2342 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2343 | dev: false 2344 | 2345 | /ipaddr.js/1.9.1: 2346 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 2347 | engines: {node: '>= 0.10'} 2348 | dev: false 2349 | 2350 | /is-binary-path/2.1.0: 2351 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2352 | engines: {node: '>=8'} 2353 | dependencies: 2354 | binary-extensions: 2.3.0 2355 | dev: true 2356 | 2357 | /is-core-module/2.15.1: 2358 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 2359 | engines: {node: '>= 0.4'} 2360 | dependencies: 2361 | hasown: 2.0.2 2362 | dev: true 2363 | 2364 | /is-extglob/2.1.1: 2365 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2366 | engines: {node: '>=0.10.0'} 2367 | dev: true 2368 | 2369 | /is-glob/4.0.3: 2370 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2371 | engines: {node: '>=0.10.0'} 2372 | dependencies: 2373 | is-extglob: 2.1.1 2374 | dev: true 2375 | 2376 | /is-module/1.0.0: 2377 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 2378 | dev: true 2379 | 2380 | /is-number/7.0.0: 2381 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2382 | engines: {node: '>=0.12.0'} 2383 | dev: true 2384 | 2385 | /is-reference/1.2.1: 2386 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 2387 | dependencies: 2388 | '@types/estree': 1.0.6 2389 | dev: true 2390 | 2391 | /is-reference/3.0.2: 2392 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} 2393 | dependencies: 2394 | '@types/estree': 1.0.6 2395 | dev: true 2396 | 2397 | /jiti/1.21.6: 2398 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 2399 | hasBin: true 2400 | dev: true 2401 | 2402 | /jiti/2.0.0-beta.3: 2403 | resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==} 2404 | hasBin: true 2405 | dev: true 2406 | 2407 | /kleur/4.1.5: 2408 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 2409 | engines: {node: '>=6'} 2410 | dev: true 2411 | 2412 | /kolorist/1.8.0: 2413 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} 2414 | dev: true 2415 | 2416 | /load-tsconfig/0.2.5: 2417 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 2418 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2419 | dev: true 2420 | 2421 | /local-pkg/0.5.0: 2422 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 2423 | engines: {node: '>=14'} 2424 | dependencies: 2425 | mlly: 1.7.2 2426 | pkg-types: 1.2.1 2427 | dev: true 2428 | 2429 | /locate-character/3.0.0: 2430 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 2431 | dev: true 2432 | 2433 | /magic-string/0.30.12: 2434 | resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} 2435 | dependencies: 2436 | '@jridgewell/sourcemap-codec': 1.5.0 2437 | dev: true 2438 | 2439 | /marked/5.1.2: 2440 | resolution: {integrity: sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==} 2441 | engines: {node: '>= 16'} 2442 | hasBin: true 2443 | dev: true 2444 | 2445 | /mdn-data/2.12.1: 2446 | resolution: {integrity: sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==} 2447 | dev: true 2448 | 2449 | /media-typer/0.3.0: 2450 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 2451 | engines: {node: '>= 0.6'} 2452 | dev: false 2453 | 2454 | /merge-descriptors/1.0.3: 2455 | resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} 2456 | dev: false 2457 | 2458 | /methods/1.1.2: 2459 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 2460 | engines: {node: '>= 0.6'} 2461 | dev: false 2462 | 2463 | /mime-db/1.52.0: 2464 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2465 | engines: {node: '>= 0.6'} 2466 | 2467 | /mime-types/2.1.35: 2468 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2469 | engines: {node: '>= 0.6'} 2470 | dependencies: 2471 | mime-db: 1.52.0 2472 | 2473 | /mime/1.6.0: 2474 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 2475 | engines: {node: '>=4'} 2476 | hasBin: true 2477 | dev: false 2478 | 2479 | /mlly/1.7.2: 2480 | resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} 2481 | dependencies: 2482 | acorn: 8.14.0 2483 | pathe: 1.1.2 2484 | pkg-types: 1.2.1 2485 | ufo: 1.5.4 2486 | dev: true 2487 | 2488 | /mri/1.2.0: 2489 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2490 | engines: {node: '>=4'} 2491 | dev: true 2492 | 2493 | /mrmime/2.0.0: 2494 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 2495 | engines: {node: '>=10'} 2496 | dev: true 2497 | 2498 | /ms/2.0.0: 2499 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 2500 | dev: false 2501 | 2502 | /ms/2.1.3: 2503 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2504 | 2505 | /nanoid/3.3.7: 2506 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 2507 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2508 | hasBin: true 2509 | dev: true 2510 | 2511 | /negotiator/0.6.3: 2512 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 2513 | engines: {node: '>= 0.6'} 2514 | dev: false 2515 | 2516 | /node-domexception/1.0.0: 2517 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 2518 | engines: {node: '>=10.5.0'} 2519 | dev: true 2520 | 2521 | /node-fetch-native/1.6.4: 2522 | resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} 2523 | dev: true 2524 | 2525 | /node-fetch/2.7.0: 2526 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 2527 | engines: {node: 4.x || >=6.0.0} 2528 | peerDependencies: 2529 | encoding: ^0.1.0 2530 | peerDependenciesMeta: 2531 | encoding: 2532 | optional: true 2533 | dependencies: 2534 | whatwg-url: 5.0.0 2535 | dev: true 2536 | 2537 | /normalize-path/3.0.0: 2538 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2539 | engines: {node: '>=0.10.0'} 2540 | dev: true 2541 | 2542 | /nth-check/2.1.1: 2543 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 2544 | dependencies: 2545 | boolbase: 1.0.0 2546 | dev: true 2547 | 2548 | /object-inspect/1.13.3: 2549 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} 2550 | engines: {node: '>= 0.4'} 2551 | dev: false 2552 | 2553 | /ofetch/1.4.1: 2554 | resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} 2555 | dependencies: 2556 | destr: 2.0.3 2557 | node-fetch-native: 1.6.4 2558 | ufo: 1.5.4 2559 | dev: true 2560 | 2561 | /on-finished/2.4.1: 2562 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 2563 | engines: {node: '>= 0.8'} 2564 | dependencies: 2565 | ee-first: 1.1.1 2566 | dev: false 2567 | 2568 | /openai/4.71.1: 2569 | resolution: {integrity: sha512-C6JNMaQ1eijM0lrjiRUL3MgThVP5RdwNAghpbJFdW0t11LzmyqON8Eh8MuUuEZ+CeD6bgYl2Fkn2BoptVxv9Ug==} 2570 | hasBin: true 2571 | peerDependencies: 2572 | zod: ^3.23.8 2573 | peerDependenciesMeta: 2574 | zod: 2575 | optional: true 2576 | dependencies: 2577 | '@types/node': 18.19.64 2578 | '@types/node-fetch': 2.6.11 2579 | abort-controller: 3.0.0 2580 | agentkeepalive: 4.5.0 2581 | form-data-encoder: 1.7.2 2582 | formdata-node: 4.4.1 2583 | node-fetch: 2.7.0 2584 | transitivePeerDependencies: 2585 | - encoding 2586 | dev: true 2587 | 2588 | /package-manager-detector/0.2.2: 2589 | resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} 2590 | dev: true 2591 | 2592 | /parse5-htmlparser2-tree-adapter/7.1.0: 2593 | resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 2594 | dependencies: 2595 | domhandler: 5.0.3 2596 | parse5: 7.2.1 2597 | dev: true 2598 | 2599 | /parse5-parser-stream/7.1.2: 2600 | resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} 2601 | dependencies: 2602 | parse5: 7.2.1 2603 | dev: true 2604 | 2605 | /parse5/7.2.1: 2606 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 2607 | dependencies: 2608 | entities: 4.5.0 2609 | dev: true 2610 | 2611 | /parseurl/1.3.3: 2612 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 2613 | engines: {node: '>= 0.8'} 2614 | dev: false 2615 | 2616 | /path-parse/1.0.7: 2617 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2618 | dev: true 2619 | 2620 | /path-to-regexp/0.1.10: 2621 | resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} 2622 | dev: false 2623 | 2624 | /pathe/1.1.2: 2625 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 2626 | dev: true 2627 | 2628 | /perfect-debounce/1.0.0: 2629 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 2630 | dev: true 2631 | 2632 | /picocolors/1.1.1: 2633 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 2634 | dev: true 2635 | 2636 | /picomatch/2.3.1: 2637 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2638 | engines: {node: '>=8.6'} 2639 | dev: true 2640 | 2641 | /picomatch/4.0.2: 2642 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 2643 | engines: {node: '>=12'} 2644 | dev: true 2645 | 2646 | /pkg-types/1.2.1: 2647 | resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} 2648 | dependencies: 2649 | confbox: 0.1.8 2650 | mlly: 1.7.2 2651 | pathe: 1.1.2 2652 | dev: true 2653 | 2654 | /pocketbase/0.21.5: 2655 | resolution: {integrity: sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==} 2656 | dev: true 2657 | 2658 | /postcss/8.4.47: 2659 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 2660 | engines: {node: ^10 || ^12 || >=14} 2661 | dependencies: 2662 | nanoid: 3.3.7 2663 | picocolors: 1.1.1 2664 | source-map-js: 1.2.1 2665 | dev: true 2666 | 2667 | /proxy-addr/2.0.7: 2668 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 2669 | engines: {node: '>= 0.10'} 2670 | dependencies: 2671 | forwarded: 0.2.0 2672 | ipaddr.js: 1.9.1 2673 | dev: false 2674 | 2675 | /qs/6.13.0: 2676 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 2677 | engines: {node: '>=0.6'} 2678 | dependencies: 2679 | side-channel: 1.0.6 2680 | dev: false 2681 | 2682 | /range-parser/1.2.1: 2683 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 2684 | engines: {node: '>= 0.6'} 2685 | dev: false 2686 | 2687 | /raw-body/2.5.2: 2688 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 2689 | engines: {node: '>= 0.8'} 2690 | dependencies: 2691 | bytes: 3.1.2 2692 | http-errors: 2.0.0 2693 | iconv-lite: 0.4.24 2694 | unpipe: 1.0.0 2695 | dev: false 2696 | 2697 | /readdirp/3.6.0: 2698 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2699 | engines: {node: '>=8.10.0'} 2700 | dependencies: 2701 | picomatch: 2.3.1 2702 | dev: true 2703 | 2704 | /readdirp/4.0.2: 2705 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 2706 | engines: {node: '>= 14.16.0'} 2707 | dev: true 2708 | 2709 | /resolve-pkg-maps/1.0.0: 2710 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2711 | dev: true 2712 | 2713 | /resolve/1.22.8: 2714 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2715 | hasBin: true 2716 | dependencies: 2717 | is-core-module: 2.15.1 2718 | path-parse: 1.0.7 2719 | supports-preserve-symlinks-flag: 1.0.0 2720 | dev: true 2721 | 2722 | /rollup/4.25.0: 2723 | resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} 2724 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2725 | hasBin: true 2726 | dependencies: 2727 | '@types/estree': 1.0.6 2728 | optionalDependencies: 2729 | '@rollup/rollup-android-arm-eabi': 4.25.0 2730 | '@rollup/rollup-android-arm64': 4.25.0 2731 | '@rollup/rollup-darwin-arm64': 4.25.0 2732 | '@rollup/rollup-darwin-x64': 4.25.0 2733 | '@rollup/rollup-freebsd-arm64': 4.25.0 2734 | '@rollup/rollup-freebsd-x64': 4.25.0 2735 | '@rollup/rollup-linux-arm-gnueabihf': 4.25.0 2736 | '@rollup/rollup-linux-arm-musleabihf': 4.25.0 2737 | '@rollup/rollup-linux-arm64-gnu': 4.25.0 2738 | '@rollup/rollup-linux-arm64-musl': 4.25.0 2739 | '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0 2740 | '@rollup/rollup-linux-riscv64-gnu': 4.25.0 2741 | '@rollup/rollup-linux-s390x-gnu': 4.25.0 2742 | '@rollup/rollup-linux-x64-gnu': 4.25.0 2743 | '@rollup/rollup-linux-x64-musl': 4.25.0 2744 | '@rollup/rollup-win32-arm64-msvc': 4.25.0 2745 | '@rollup/rollup-win32-ia32-msvc': 4.25.0 2746 | '@rollup/rollup-win32-x64-msvc': 4.25.0 2747 | fsevents: 2.3.3 2748 | dev: true 2749 | 2750 | /sade/1.8.1: 2751 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2752 | engines: {node: '>=6'} 2753 | dependencies: 2754 | mri: 1.2.0 2755 | dev: true 2756 | 2757 | /safe-buffer/5.2.1: 2758 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2759 | dev: false 2760 | 2761 | /safer-buffer/2.1.2: 2762 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2763 | 2764 | /send/0.19.0: 2765 | resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} 2766 | engines: {node: '>= 0.8.0'} 2767 | dependencies: 2768 | debug: 2.6.9 2769 | depd: 2.0.0 2770 | destroy: 1.2.0 2771 | encodeurl: 1.0.2 2772 | escape-html: 1.0.3 2773 | etag: 1.8.1 2774 | fresh: 0.5.2 2775 | http-errors: 2.0.0 2776 | mime: 1.6.0 2777 | ms: 2.1.3 2778 | on-finished: 2.4.1 2779 | range-parser: 1.2.1 2780 | statuses: 2.0.1 2781 | transitivePeerDependencies: 2782 | - supports-color 2783 | dev: false 2784 | 2785 | /serve-static/1.16.2: 2786 | resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} 2787 | engines: {node: '>= 0.8.0'} 2788 | dependencies: 2789 | encodeurl: 2.0.0 2790 | escape-html: 1.0.3 2791 | parseurl: 1.3.3 2792 | send: 0.19.0 2793 | transitivePeerDependencies: 2794 | - supports-color 2795 | dev: false 2796 | 2797 | /set-cookie-parser/2.7.1: 2798 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 2799 | dev: true 2800 | 2801 | /set-function-length/1.2.2: 2802 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 2803 | engines: {node: '>= 0.4'} 2804 | dependencies: 2805 | define-data-property: 1.1.4 2806 | es-errors: 1.3.0 2807 | function-bind: 1.1.2 2808 | get-intrinsic: 1.2.4 2809 | gopd: 1.0.1 2810 | has-property-descriptors: 1.0.2 2811 | dev: false 2812 | 2813 | /setprototypeof/1.2.0: 2814 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 2815 | dev: false 2816 | 2817 | /side-channel/1.0.6: 2818 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 2819 | engines: {node: '>= 0.4'} 2820 | dependencies: 2821 | call-bind: 1.0.7 2822 | es-errors: 1.3.0 2823 | get-intrinsic: 1.2.4 2824 | object-inspect: 1.13.3 2825 | dev: false 2826 | 2827 | /sirv/2.0.4: 2828 | resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} 2829 | engines: {node: '>= 10'} 2830 | dependencies: 2831 | '@polka/url': 1.0.0-next.28 2832 | mrmime: 2.0.0 2833 | totalist: 3.0.1 2834 | dev: true 2835 | 2836 | /sirv/3.0.0: 2837 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 2838 | engines: {node: '>=18'} 2839 | dependencies: 2840 | '@polka/url': 1.0.0-next.28 2841 | mrmime: 2.0.0 2842 | totalist: 3.0.1 2843 | dev: true 2844 | 2845 | /source-map-js/1.2.1: 2846 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 2847 | engines: {node: '>=0.10.0'} 2848 | dev: true 2849 | 2850 | /statuses/2.0.1: 2851 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 2852 | engines: {node: '>= 0.8'} 2853 | dev: false 2854 | 2855 | /supports-preserve-symlinks-flag/1.0.0: 2856 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2857 | engines: {node: '>= 0.4'} 2858 | dev: true 2859 | 2860 | /svelte-autosize/1.1.5_svelte@5.1.13: 2861 | resolution: {integrity: sha512-whiND/GthFDG9Ansvil21qxmFhSMfuooVZPg40sbcLHYKR9srYhnfrP5qdw8MXHAm6DY9g5PawurOAWl34fK7g==} 2862 | peerDependencies: 2863 | svelte: '>=3.0.0' 2864 | dependencies: 2865 | '@types/autosize': 4.0.3 2866 | autosize: 6.0.1 2867 | svelte: 5.1.13 2868 | dev: true 2869 | 2870 | /svelte-check/4.0.6_ttiyjcdvid74kxewx6w2g6b64m: 2871 | resolution: {integrity: sha512-2XwmQNJaKbenJbvu5at+DuRpvF4v73Zu7f0/WkMl1O7WDm/IfF+E13t8D0nnRiRcMsNYm9ufHyLwfeMEnebpdg==} 2872 | engines: {node: '>= 18.0.0'} 2873 | hasBin: true 2874 | peerDependencies: 2875 | svelte: ^4.0.0 || ^5.0.0-next.0 2876 | typescript: '>=5.0.0' 2877 | dependencies: 2878 | '@jridgewell/trace-mapping': 0.3.25 2879 | chokidar: 4.0.1 2880 | fdir: 6.4.2 2881 | picocolors: 1.1.1 2882 | sade: 1.8.1 2883 | svelte: 5.1.13 2884 | typescript: 5.6.3 2885 | transitivePeerDependencies: 2886 | - picomatch 2887 | dev: true 2888 | 2889 | /svelte-french-toast/1.2.0_svelte@5.1.13: 2890 | resolution: {integrity: sha512-5PW+6RFX3xQPbR44CngYAP1Sd9oCq9P2FOox4FZffzJuZI2mHOB7q5gJBVnOiLF5y3moVGZ7u2bYt7+yPAgcEQ==} 2891 | peerDependencies: 2892 | svelte: ^3.57.0 || ^4.0.0 2893 | dependencies: 2894 | svelte: 5.1.13 2895 | svelte-writable-derived: 3.1.1_svelte@5.1.13 2896 | dev: true 2897 | 2898 | /svelte-markdown/0.4.1_svelte@5.1.13: 2899 | resolution: {integrity: sha512-pOlLY6EruKJaWI9my/2bKX8PdTeP5CM0s4VMmwmC2prlOkjAf+AOmTM4wW/l19Y6WZ87YmP8+ZCJCCwBChWjYw==} 2900 | peerDependencies: 2901 | svelte: ^4.0.0 2902 | dependencies: 2903 | '@types/marked': 5.0.2 2904 | marked: 5.1.2 2905 | svelte: 5.1.13 2906 | dev: true 2907 | 2908 | /svelte-writable-derived/3.1.1_svelte@5.1.13: 2909 | resolution: {integrity: sha512-w4LR6/bYZEuCs7SGr+M54oipk/UQKtiMadyOhW0PTwAtJ/Ai12QS77sLngEcfBx2q4H8ZBQucc9ktSA5sUGZWw==} 2910 | peerDependencies: 2911 | svelte: ^3.2.1 || ^4.0.0-next.1 || ^5.0.0-next.94 2912 | dependencies: 2913 | svelte: 5.1.13 2914 | dev: true 2915 | 2916 | /svelte/5.1.13: 2917 | resolution: {integrity: sha512-xVNk8yLsZNfkyqWzVg8+nfU9ewiSjVW0S4qyTxfKa6Y7P5ZBhA+LDsh2cHWIXJQMltikQAk6W3sqGdQZSH58PA==} 2918 | engines: {node: '>=18'} 2919 | dependencies: 2920 | '@ampproject/remapping': 2.3.0 2921 | '@jridgewell/sourcemap-codec': 1.5.0 2922 | '@types/estree': 1.0.6 2923 | acorn: 8.14.0 2924 | acorn-typescript: 1.4.13_acorn@8.14.0 2925 | aria-query: 5.3.2 2926 | axobject-query: 4.1.0 2927 | esm-env: 1.1.4 2928 | esrap: 1.2.2 2929 | is-reference: 3.0.2 2930 | locate-character: 3.0.0 2931 | magic-string: 0.30.12 2932 | zimmerframe: 1.1.2 2933 | dev: true 2934 | 2935 | /sveltekit-adapter-chrome-extension/2.0.1_fyw4gys63jt5iqsz5eievp5dvm: 2936 | resolution: {integrity: sha512-I+jO05BYF86YZVm4pUKWUiNnBnwxEASP4+uwgUzKLTvr8qmyzZ2I5MFL4BILPcIz6ImP8h6wW2DwoOpI5qRDyA==} 2937 | peerDependencies: 2938 | '@sveltejs/adapter-static': ^3.0.1 2939 | dependencies: 2940 | '@sveltejs/adapter-static': 3.0.6_@sveltejs+kit@2.8.0 2941 | cheerio: 1.0.0 2942 | tiny-glob: 0.2.9 2943 | dev: true 2944 | 2945 | /tiktoken/1.0.17: 2946 | resolution: {integrity: sha512-UuFHqpy/DxOfNiC3otsqbx3oS6jr5uKdQhB/CvDEroZQbVHt+qAK+4JbIooabUWKU9g6PpsFylNu9Wcg4MxSGA==} 2947 | dev: true 2948 | 2949 | /tiny-glob/0.2.9: 2950 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 2951 | dependencies: 2952 | globalyzer: 0.1.0 2953 | globrex: 0.1.2 2954 | dev: true 2955 | 2956 | /tinyexec/0.3.1: 2957 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 2958 | dev: true 2959 | 2960 | /tinyglobby/0.2.10: 2961 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 2962 | engines: {node: '>=12.0.0'} 2963 | dependencies: 2964 | fdir: 6.4.2_picomatch@4.0.2 2965 | picomatch: 4.0.2 2966 | dev: true 2967 | 2968 | /to-regex-range/5.0.1: 2969 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2970 | engines: {node: '>=8.0'} 2971 | dependencies: 2972 | is-number: 7.0.0 2973 | dev: true 2974 | 2975 | /toidentifier/1.0.1: 2976 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 2977 | engines: {node: '>=0.6'} 2978 | dev: false 2979 | 2980 | /totalist/3.0.1: 2981 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 2982 | engines: {node: '>=6'} 2983 | dev: true 2984 | 2985 | /tr46/0.0.3: 2986 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 2987 | dev: true 2988 | 2989 | /tslib/2.8.1: 2990 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2991 | dev: true 2992 | 2993 | /tsx/4.19.2: 2994 | resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} 2995 | engines: {node: '>=18.0.0'} 2996 | hasBin: true 2997 | dependencies: 2998 | esbuild: 0.23.1 2999 | get-tsconfig: 4.8.1 3000 | optionalDependencies: 3001 | fsevents: 2.3.3 3002 | dev: true 3003 | 3004 | /type-is/1.6.18: 3005 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 3006 | engines: {node: '>= 0.6'} 3007 | dependencies: 3008 | media-typer: 0.3.0 3009 | mime-types: 2.1.35 3010 | dev: false 3011 | 3012 | /typescript/5.6.3: 3013 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 3014 | engines: {node: '>=14.17'} 3015 | hasBin: true 3016 | dev: true 3017 | 3018 | /ufo/1.5.4: 3019 | resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 3020 | dev: true 3021 | 3022 | /unconfig/0.5.5: 3023 | resolution: {integrity: sha512-VQZ5PT9HDX+qag0XdgQi8tJepPhXiR/yVOkn707gJDKo31lGjRilPREiQJ9Z6zd/Ugpv6ZvO5VxVIcatldYcNQ==} 3024 | dependencies: 3025 | '@antfu/utils': 0.7.10 3026 | defu: 6.1.4 3027 | importx: 0.4.4 3028 | transitivePeerDependencies: 3029 | - supports-color 3030 | dev: true 3031 | 3032 | /undici-types/5.26.5: 3033 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 3034 | dev: true 3035 | 3036 | /undici/6.20.1: 3037 | resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} 3038 | engines: {node: '>=18.17'} 3039 | dev: true 3040 | 3041 | /unocss/0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a: 3042 | resolution: {integrity: sha512-OKJJKEFWVz+Lsf3JdOgRiRtL+QOUQRBov89taUcCPFPZtrhP6pPVFCZHD9qMvY4IChMX7dzalQax3ZXJ3hbtkQ==} 3043 | engines: {node: '>=14'} 3044 | peerDependencies: 3045 | '@unocss/webpack': 0.63.6 3046 | vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 3047 | peerDependenciesMeta: 3048 | '@unocss/webpack': 3049 | optional: true 3050 | vite: 3051 | optional: true 3052 | dependencies: 3053 | '@unocss/astro': 0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a 3054 | '@unocss/cli': 0.63.6 3055 | '@unocss/core': 0.63.6 3056 | '@unocss/postcss': 0.63.6 3057 | '@unocss/preset-attributify': 0.63.6 3058 | '@unocss/preset-icons': 0.63.6 3059 | '@unocss/preset-mini': 0.63.6 3060 | '@unocss/preset-tagify': 0.63.6 3061 | '@unocss/preset-typography': 0.63.6 3062 | '@unocss/preset-uno': 0.63.6 3063 | '@unocss/preset-web-fonts': 0.63.6 3064 | '@unocss/preset-wind': 0.63.6 3065 | '@unocss/transformer-attributify-jsx': 0.63.6 3066 | '@unocss/transformer-compile-class': 0.63.6 3067 | '@unocss/transformer-directives': 0.63.6 3068 | '@unocss/transformer-variant-group': 0.63.6 3069 | '@unocss/vite': 0.63.6_cmeu5ads3n33j4pe6vl4dp3d4a 3070 | vite: 5.4.10 3071 | transitivePeerDependencies: 3072 | - rollup 3073 | - supports-color 3074 | - typescript 3075 | dev: true 3076 | 3077 | /unpipe/1.0.0: 3078 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 3079 | engines: {node: '>= 0.8'} 3080 | dev: false 3081 | 3082 | /utils-merge/1.0.1: 3083 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 3084 | engines: {node: '>= 0.4.0'} 3085 | dev: false 3086 | 3087 | /uuid/10.0.0: 3088 | resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} 3089 | hasBin: true 3090 | dev: true 3091 | 3092 | /vary/1.1.2: 3093 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 3094 | engines: {node: '>= 0.8'} 3095 | dev: false 3096 | 3097 | /vite-plugin-top-level-await/1.4.4_vite@5.4.10: 3098 | resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==} 3099 | peerDependencies: 3100 | vite: '>=2.8' 3101 | dependencies: 3102 | '@rollup/plugin-virtual': 3.0.2 3103 | '@swc/core': 1.9.1 3104 | uuid: 10.0.0 3105 | vite: 5.4.10 3106 | transitivePeerDependencies: 3107 | - '@swc/helpers' 3108 | - rollup 3109 | dev: true 3110 | 3111 | /vite-plugin-wasm/3.3.0_vite@5.4.10: 3112 | resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==} 3113 | peerDependencies: 3114 | vite: ^2 || ^3 || ^4 || ^5 3115 | dependencies: 3116 | vite: 5.4.10 3117 | dev: true 3118 | 3119 | /vite/5.4.10: 3120 | resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} 3121 | engines: {node: ^18.0.0 || >=20.0.0} 3122 | hasBin: true 3123 | peerDependencies: 3124 | '@types/node': ^18.0.0 || >=20.0.0 3125 | less: '*' 3126 | lightningcss: ^1.21.0 3127 | sass: '*' 3128 | sass-embedded: '*' 3129 | stylus: '*' 3130 | sugarss: '*' 3131 | terser: ^5.4.0 3132 | peerDependenciesMeta: 3133 | '@types/node': 3134 | optional: true 3135 | less: 3136 | optional: true 3137 | lightningcss: 3138 | optional: true 3139 | sass: 3140 | optional: true 3141 | sass-embedded: 3142 | optional: true 3143 | stylus: 3144 | optional: true 3145 | sugarss: 3146 | optional: true 3147 | terser: 3148 | optional: true 3149 | dependencies: 3150 | esbuild: 0.21.5 3151 | postcss: 8.4.47 3152 | rollup: 4.25.0 3153 | optionalDependencies: 3154 | fsevents: 2.3.3 3155 | dev: true 3156 | 3157 | /vitefu/1.0.3_vite@5.4.10: 3158 | resolution: {integrity: sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==} 3159 | peerDependencies: 3160 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0 3161 | peerDependenciesMeta: 3162 | vite: 3163 | optional: true 3164 | dependencies: 3165 | vite: 5.4.10 3166 | dev: true 3167 | 3168 | /vue-flow-layout/0.0.5_typescript@5.6.3: 3169 | resolution: {integrity: sha512-lZlqQ/Se1trGMtBMneZDWaiQiQBuxU8ivZ+KpJMem5zKROFpzuPq9KqyWABbSYbxq0qhqZs1I4DBwrY041rtOA==} 3170 | dependencies: 3171 | vue: 3.5.12_typescript@5.6.3 3172 | transitivePeerDependencies: 3173 | - typescript 3174 | dev: true 3175 | 3176 | /vue/3.5.12_typescript@5.6.3: 3177 | resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} 3178 | peerDependencies: 3179 | typescript: '*' 3180 | peerDependenciesMeta: 3181 | typescript: 3182 | optional: true 3183 | dependencies: 3184 | '@vue/compiler-dom': 3.5.12 3185 | '@vue/compiler-sfc': 3.5.12 3186 | '@vue/runtime-dom': 3.5.12 3187 | '@vue/server-renderer': 3.5.12_vue@3.5.12 3188 | '@vue/shared': 3.5.12 3189 | typescript: 5.6.3 3190 | dev: true 3191 | 3192 | /web-streams-polyfill/4.0.0-beta.3: 3193 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} 3194 | engines: {node: '>= 14'} 3195 | dev: true 3196 | 3197 | /webidl-conversions/3.0.1: 3198 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 3199 | dev: true 3200 | 3201 | /whatwg-encoding/3.1.1: 3202 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 3203 | engines: {node: '>=18'} 3204 | dependencies: 3205 | iconv-lite: 0.6.3 3206 | dev: true 3207 | 3208 | /whatwg-mimetype/4.0.0: 3209 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 3210 | engines: {node: '>=18'} 3211 | dev: true 3212 | 3213 | /whatwg-url/5.0.0: 3214 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 3215 | dependencies: 3216 | tr46: 0.0.3 3217 | webidl-conversions: 3.0.1 3218 | dev: true 3219 | 3220 | /zimmerframe/1.1.2: 3221 | resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} 3222 | dev: true 3223 | 3224 | /zod/3.23.8: 3225 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 3226 | dev: true 3227 | -------------------------------------------------------------------------------- /public/icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/public/icon_128.png -------------------------------------------------------------------------------- /public/icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/public/icon_16.png -------------------------------------------------------------------------------- /public/icon_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/public/icon_24.png -------------------------------------------------------------------------------- /public/icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/public/icon_32.png -------------------------------------------------------------------------------- /public/icon_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/public/icon_48.png -------------------------------------------------------------------------------- /public/inferit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/public/inferit.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "version": "3", 4 | "name": "inferit", 5 | "description": "Visual inference exploration & experimentation playground", 6 | "chrome_url_overrides": { 7 | "newtab": "index.html" 8 | }, 9 | "content_security_policy": { 10 | "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';" 11 | }, 12 | "icons": { 13 | "16": "icon_16.png", 14 | "24": "icon_24.png", 15 | "32": "icon_32.png", 16 | "48": "icon_48.png", 17 | "128": "icon_128.png" 18 | }, 19 | "background": { 20 | "service_worker": "bg.js" 21 | }, 22 | "action": {} 23 | } -------------------------------------------------------------------------------- /screens/24-11-05.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/screens/24-11-05.webp -------------------------------------------------------------------------------- /screens/24-11-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/screens/24-11-09.png -------------------------------------------------------------------------------- /screens/24-11-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/screens/24-11-11.png -------------------------------------------------------------------------------- /screens/24-11-11_whoami.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/screens/24-11-11_whoami.png -------------------------------------------------------------------------------- /screens/24-11-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devidw/inferit/685b19cd61afc6a2a53b127184214a92e3408455/screens/24-11-29.png -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | import express from "express" 2 | 3 | const app = express() 4 | 5 | app.use(express.static("dist")) 6 | 7 | app.listen(6969, () => { 8 | console.info("http://localhost:6969") 9 | }) 10 | -------------------------------------------------------------------------------- /src/App.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 |
15 | 16 | 18 | -------------------------------------------------------------------------------- /src/bg.ts: -------------------------------------------------------------------------------- 1 | chrome.action.onClicked.addListener(() => { 2 | chrome.tabs.create({ url: chrome.runtime.getURL("index.html") }) 3 | }) 4 | -------------------------------------------------------------------------------- /src/lib/bot_node.svelte: -------------------------------------------------------------------------------- 1 | 55 | 56 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 84 | 85 | 86 | 87 | 88 | 89 |
90 | {#if content_chunks.length === 0} 91 |   95 | {:else if md_render} 96 |
97 | 98 |
99 | {:else} 100 | {#each content_chunks as chunk, index} 101 | {chunk} 108 | {/each} 109 | {/if} 110 |
111 |
112 | 113 | 118 | -------------------------------------------------------------------------------- /src/lib/drop_btn.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 15 | -------------------------------------------------------------------------------- /src/lib/editor.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | {#if editor_state.ongoing_session} 20 |
24 |
25 | {#if import.meta.env.DEV && false} 26 |
27 | {JSON.stringify(editor_state, null, 4)} 28 |
29 | {/if} 30 |
34 |
35 |
Close [ESC]
36 |
37 |
38 | 39 | 45 |
46 | {/if} 47 | -------------------------------------------------------------------------------- /src/lib/editor.svelte.ts: -------------------------------------------------------------------------------- 1 | export const editor_state: { 2 | ongoing_session: boolean 3 | node_id: string | null 4 | content: string 5 | } = $state({ 6 | ongoing_session: false, 7 | node_id: null, 8 | content: "", 9 | }) 10 | -------------------------------------------------------------------------------- /src/lib/infer_it.ts: -------------------------------------------------------------------------------- 1 | import { OpenAI } from "openai" 2 | import { abort_controller, nodes, settings } from "./state.js" 3 | import { get, type Writable } from "svelte/store" 4 | import { browser_backend_name, type Params } from "./types.js" 5 | import toast from "svelte-french-toast" 6 | import { build_prompt } from "./prompts.js" 7 | import { add_bot_node, update_bot_node } from "./nodes.js" 8 | 9 | const role_map = { 10 | system: "system", 11 | user: "user", 12 | bot: "assistant", 13 | } 14 | 15 | export async function infer_it({ 16 | thread_id, 17 | src_id, 18 | status, 19 | }: { 20 | thread_id: string 21 | src_id: string 22 | status: Writable<"idle" | "busy"> 23 | }) { 24 | const settings_snapshot = get(settings) 25 | 26 | let out_id: string | undefined = undefined 27 | 28 | try { 29 | status.set("busy") 30 | 31 | const thread_node = get(nodes).find((node) => node.id === thread_id) 32 | 33 | if (!thread_node) { 34 | return 35 | } 36 | 37 | const prompt_build = build_prompt({ 38 | node_id: src_id, 39 | }) 40 | 41 | if (!prompt_build) { 42 | return 43 | } 44 | 45 | let params: Params = Object.assign({}, thread_node.data.params) as Params 46 | 47 | // delete (params as Params & { prompt?: string }).prompt 48 | 49 | out_id = await add_bot_node({ 50 | thread_id, 51 | src_id, 52 | status, 53 | }) 54 | 55 | if (!out_id) { 56 | return 57 | } 58 | 59 | if ( 60 | params.backend === browser_backend_name || 61 | (!navigator.onLine && settings_snapshot.browser_ai_offline_fallback) 62 | ) { 63 | if (!window.ai.languageModel) { 64 | throw new Error("browser ai not available") 65 | } 66 | 67 | // const messages = [...prompt_build.messages] 68 | 69 | // const sys_msg = messages.shift()! 70 | 71 | const local_llm = await window.ai.languageModel.create({ 72 | temperature: params.temperature, 73 | topK: params.top_k, 74 | signal: get(abort_controller).signal, 75 | // systemPrompt: sys_msg.content, 76 | }) 77 | 78 | // console.info({ 79 | // sys_msg, 80 | // messages, 81 | // }) 82 | 83 | const stream = local_llm.promptStreaming( 84 | // @ts-ignore 85 | // messages.map((msg) => { 86 | // return { 87 | // role: msg.role === "bot" ? "assistant" : "user", 88 | // content: msg.content, 89 | // } 90 | // }), 91 | prompt_build.the_prompt 92 | ) 93 | 94 | let previous = "" 95 | 96 | for await (const chunk of stream) { 97 | let only_chunk = chunk.replace(previous, "") 98 | 99 | update_bot_node({ 100 | id: out_id, 101 | status, 102 | text: only_chunk, 103 | }) 104 | 105 | previous = chunk 106 | } 107 | 108 | local_llm.destroy() 109 | } else { 110 | const backend = settings_snapshot.backends.find( 111 | (backend) => backend.base_url === params.backend 112 | ) 113 | 114 | if (!backend) { 115 | throw new Error(`backend '${params.backend}' not found in settings`) 116 | } 117 | 118 | const api_client = new OpenAI({ 119 | baseURL: backend.base_url, 120 | apiKey: backend.api_key, 121 | dangerouslyAllowBrowser: true, 122 | defaultHeaders: 123 | backend.base_url === "https://openrouter.ai/api/v1" 124 | ? { 125 | "http-referer": "https://inferit.index.garden", 126 | "x-title": "inferit", 127 | } 128 | : {}, 129 | }) 130 | 131 | if (settings_snapshot.endpoint === "completions") { 132 | const stream = await api_client.completions.create( 133 | { 134 | stream: true, 135 | // stream_options: { 136 | // include_usage: true, 137 | // }, 138 | 139 | prompt: prompt_build.the_prompt, 140 | 141 | model: params.model, 142 | 143 | max_tokens: params.max_tokens, 144 | stop: 145 | params.stop === "\\n" 146 | ? ["\n"] 147 | : params.stop === "" 148 | ? [] 149 | : [params.stop], 150 | 151 | temperature: params.temperature, 152 | min_p: params.min_p, 153 | 154 | top_p: params.top_p, 155 | top_k: params.top_k, 156 | }, 157 | { 158 | signal: get(abort_controller).signal, 159 | } 160 | ) 161 | 162 | for await (const chunk of stream) { 163 | // console.info({ chunk }) 164 | 165 | update_bot_node({ 166 | id: out_id, 167 | status, 168 | text: chunk.choices[0].text, 169 | }) 170 | } 171 | } else if (settings_snapshot.endpoint === "chat") { 172 | delete (params as { prompt?: any }).prompt 173 | 174 | const stream = await api_client.chat.completions.create( 175 | { 176 | stream: true, 177 | 178 | // @ts-ignore 179 | messages: prompt_build.messages.map((msg) => { 180 | return { 181 | role: role_map[msg.role], 182 | content: msg.content, 183 | } 184 | }), 185 | 186 | model: params.model, 187 | 188 | max_tokens: params.max_tokens, 189 | stop: 190 | params.stop === "\\n" 191 | ? ["\n"] 192 | : params.stop === "" 193 | ? [] 194 | : [params.stop], 195 | 196 | temperature: params.temperature, 197 | min_p: params.min_p, 198 | 199 | top_p: params.top_p, 200 | top_k: params.top_k, 201 | }, 202 | { 203 | signal: get(abort_controller).signal, 204 | } 205 | ) 206 | 207 | for await (const chunk of stream) { 208 | // console.info({ chunk }) 209 | 210 | const text = chunk.choices[0].delta.content 211 | 212 | if (text === null || text === undefined) { 213 | continue 214 | } 215 | 216 | update_bot_node({ 217 | id: out_id, 218 | status, 219 | text, 220 | }) 221 | } 222 | } 223 | } 224 | } catch (e) { 225 | toast.error(e instanceof Error ? e.message : JSON.stringify(e)) 226 | 227 | console.error(e) 228 | } finally { 229 | status.set("idle") 230 | 231 | if (out_id) { 232 | update_bot_node({ 233 | id: out_id, 234 | status, 235 | }) 236 | } 237 | } 238 | } 239 | -------------------------------------------------------------------------------- /src/lib/main.svelte: -------------------------------------------------------------------------------- 1 | 31 | 32 |
33 | {#if show_settings} 34 | 35 | {/if} 36 | 37 | 38 | 39 | 48 | 54 | add_system_node()}> 55 |
56 |
57 | 58 |
59 |
60 |
61 | 62 | 63 |
64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /src/lib/next_btn.svelte: -------------------------------------------------------------------------------- 1 | 30 | 31 | 45 | -------------------------------------------------------------------------------- /src/lib/nodes.ts: -------------------------------------------------------------------------------- 1 | import { nodes, edges } from "./state.js" 2 | import { 3 | default_params, 4 | default_param_syncs, 5 | type Our_Node, 6 | type Params, 7 | type Param_Key, 8 | } from "./types.js" 9 | import { get } from "svelte/store" 10 | import { tick } from "svelte" 11 | import type { Writable } from "svelte/store" 12 | 13 | export function gen_id(prefix: string) { 14 | return `${prefix}_${window.crypto.randomUUID().replaceAll("-", "")}` 15 | } 16 | 17 | export function add_system_node(data?: { 18 | params: Params 19 | param_syncs: Param_Key[] 20 | }) { 21 | const new_id = gen_id("sys") 22 | 23 | if (data === undefined) { 24 | data = { 25 | params: { ...default_params }, 26 | param_syncs: [...default_param_syncs], 27 | } 28 | } 29 | 30 | // console.info({ clone_data: data }) 31 | 32 | nodes.update((the_nodes) => { 33 | the_nodes.push({ 34 | id: new_id, 35 | type: "custom-system-node", 36 | position: { x: 50 * Math.random(), y: 50 * Math.random() }, 37 | data: { 38 | id: new_id, 39 | ...data, 40 | }, 41 | }) 42 | 43 | return the_nodes 44 | }) 45 | 46 | return new_id 47 | } 48 | 49 | export async function add_user_node({ 50 | thread_id, 51 | src_id, 52 | id, 53 | e, 54 | cords_helper, 55 | }: { 56 | thread_id: string 57 | src_id: string 58 | id: string 59 | e: MouseEvent 60 | cords_helper: (a: { x: number; y: number }) => { x: number; y: number } 61 | }) { 62 | const out = cords_helper({ 63 | x: e.pageX, 64 | y: e.pageY, 65 | }) 66 | 67 | const src_node = get(nodes).find((node) => node.id === src_id) 68 | 69 | if (!src_node) { 70 | return 71 | } 72 | 73 | const next_user_node_id = gen_id("usr") 74 | 75 | nodes.update((the_nodes) => { 76 | the_nodes.push({ 77 | id: next_user_node_id, 78 | type: "custom-user-node", 79 | position: { 80 | x: src_node.position.x + 20, 81 | y: out.y + 20, 82 | }, 83 | data: { 84 | thread_id: thread_id, 85 | src_id: id, 86 | id: next_user_node_id, 87 | }, 88 | }) 89 | 90 | return the_nodes 91 | }) 92 | 93 | edges.update((the_edges) => { 94 | the_edges.push({ 95 | id: `${id}_${next_user_node_id}`, 96 | source: id, 97 | target: next_user_node_id, 98 | }) 99 | 100 | return the_edges 101 | }) 102 | 103 | await tick() 104 | 105 | const latest_input: HTMLTextAreaElement | null = document.querySelector( 106 | // `textarea` 107 | `div[data-id="${next_user_node_id}"] textarea` 108 | ) 109 | 110 | // console.info({ latest_input }) 111 | 112 | setTimeout(() => { 113 | if (!latest_input) { 114 | return 115 | } 116 | 117 | latest_input.focus() 118 | }) 119 | } 120 | 121 | export async function add_bot_node({ 122 | thread_id, 123 | src_id, 124 | status, 125 | }: { 126 | thread_id: string 127 | src_id: string 128 | status: Writable<"idle" | "busy"> 129 | }) { 130 | const next_bot_node_id = gen_id("bot") 131 | 132 | const src_node = get(nodes).find((node) => node.id === src_id) 133 | // console.info({ src_node }) 134 | 135 | if (!src_node) { 136 | return 137 | } 138 | 139 | nodes.update((the_nodes) => { 140 | const node: Our_Node = { 141 | id: next_bot_node_id, 142 | type: "custom-bot-node", 143 | data: { 144 | thread_id: thread_id, 145 | src_id, 146 | id: next_bot_node_id, 147 | content: "", 148 | content_chunks: [], 149 | status: get(status), 150 | }, 151 | position: { 152 | x: src_node.position.x + 50 * Math.random(), 153 | y: 154 | src_node.position.y + 155 | (src_node.measured?.height ?? 0.1) + 156 | 50 * Math.random(), 157 | }, 158 | } 159 | 160 | the_nodes.push(node) 161 | 162 | return the_nodes 163 | }) 164 | 165 | edges.update((the_edges) => { 166 | the_edges.push({ 167 | id: String(Math.random()), 168 | source: src_id, 169 | target: next_bot_node_id, 170 | }) 171 | 172 | return the_edges 173 | }) 174 | 175 | return next_bot_node_id 176 | } 177 | 178 | export function update_bot_node({ 179 | id, 180 | status, 181 | text, 182 | }: { 183 | id: string 184 | status: Writable 185 | text?: string 186 | }) { 187 | nodes.update((the_nodes) => { 188 | const node = the_nodes.find((node) => node.id === id) 189 | 190 | if (node) { 191 | node.data.status = get(status) 192 | 193 | if (text) { 194 | node.data.content += text 195 | 196 | if (!Array.isArray(node.data.content_chunks)) { 197 | node.data.content_chunks = [] 198 | } else { 199 | node.data.content_chunks = [...node.data.content_chunks, text] 200 | } 201 | } 202 | } 203 | 204 | return the_nodes 205 | }) 206 | } 207 | -------------------------------------------------------------------------------- /src/lib/online.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | {#if $is_online === false} 6 |
9 | offline 10 |
11 | {/if} 12 | -------------------------------------------------------------------------------- /src/lib/prompts.ts: -------------------------------------------------------------------------------- 1 | import { get } from "svelte/store" 2 | import { nodes, settings } from "./state.js" 3 | import type { Node } from "@xyflow/svelte" 4 | import { default_params, type Params } from "./types.js" 5 | 6 | /** 7 | * - system node data.params.prompt 8 | * - bot node data.content 9 | * - user node data.content 10 | * 11 | * go the tree up and combine a prompt based on each node's text portion 12 | */ 13 | export function build_prompt({ node_id }: { node_id: string }) { 14 | const nodes_snapshot = get(nodes) 15 | const thread_nodes: Node[] = [] 16 | 17 | const start_node = nodes_snapshot.find((node) => node.id === node_id) 18 | 19 | if (!start_node) { 20 | return 21 | } 22 | 23 | thread_nodes.push(start_node) 24 | 25 | let current_node = start_node 26 | 27 | while (current_node.data.src_id) { 28 | const next_node_id = current_node.data.src_id as string 29 | 30 | const next_node = nodes_snapshot.find((node) => node.id === next_node_id) 31 | 32 | if (!next_node) { 33 | break 34 | } 35 | 36 | thread_nodes.push(next_node) 37 | 38 | current_node = next_node 39 | } 40 | 41 | const messages: { role: "system" | "user" | "bot"; content: string }[] = [] 42 | 43 | let params: Params = Object.assign({}, default_params) 44 | 45 | for (const thread_node of thread_nodes) { 46 | switch (thread_node.type) { 47 | case "custom-system-node": { 48 | params = thread_node.data.params as Params 49 | 50 | messages.push({ 51 | role: "system", 52 | content: params.prompt, 53 | }) 54 | 55 | break 56 | } 57 | case "custom-user-node": { 58 | messages.push({ 59 | role: "user", 60 | content: thread_node.data.content as string, 61 | }) 62 | break 63 | } 64 | case "custom-bot-node": { 65 | messages.push({ 66 | role: "bot", 67 | content: thread_node.data.content as string, 68 | }) 69 | break 70 | } 71 | default: { 72 | break 73 | } 74 | } 75 | } 76 | 77 | const settings_snapshot = get(settings) 78 | 79 | const the_prompt = 80 | messages 81 | .reverse() 82 | .map((msg) => { 83 | switch (msg.role) { 84 | case "system": { 85 | return `${msg.content}` 86 | } 87 | case "user": { 88 | return `${settings_snapshot.user_prefix}${msg.content}` 89 | } 90 | case "bot": { 91 | return `${settings_snapshot.bot_prefix}${msg.content}` 92 | } 93 | } 94 | }) 95 | .join("\n") + 96 | (settings_snapshot.bot_prefix.length > 0 97 | ? `\n${settings_snapshot.bot_prefix}` 98 | : "") 99 | 100 | // console.info({ 101 | // thread_nodes, 102 | // the_prompt, 103 | // }) 104 | 105 | return { 106 | messages, 107 | the_prompt, 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/lib/settings.svelte: -------------------------------------------------------------------------------- 1 | 32 | 33 | 34 | 35 |
39 |
42 | 43 |
44 | 45 |
46 |
47 |

48 | This is saved on your device only. Inference-calls are made from your 49 | device only. 50 |

51 | 52 |

You can use any OpenAI-compatible API.

53 |
54 | 55 |
56 | {#each $settings.backends as _, index} 57 |
60 | 67 | 68 | 76 | 77 | 85 |
86 | {/each} 87 |
88 | 89 |
90 | 93 |
94 | 95 |
96 | 97 |
98 | 102 | 103 | 111 |
112 | 113 | {#if $settings.endpoint === "completions"} 114 | 118 | 119 | 123 | {/if} 124 | 125 |
126 | 127 | 134 | 135 |
136 |

137 | Chromium browsers only. You have to opt in to the preview and local 138 | models have to be properly downloaded by the browser. 139 | Setup guide 145 |

146 | 147 |

148 | You might want to disable this, if you want to use a local backend when 149 | you are offline. 150 |

151 |
152 |
153 |
154 | 155 | 188 | -------------------------------------------------------------------------------- /src/lib/state.ts: -------------------------------------------------------------------------------- 1 | import { get, type Writable, writable } from "svelte/store" 2 | import { type Edge } from "@xyflow/svelte" 3 | import toast from "svelte-french-toast" 4 | import { default_settings, type Our_Node, type Settings } from "./types.js" 5 | 6 | export const is_online = writable(navigator.onLine) 7 | 8 | function on_net_change() { 9 | is_online.set(navigator.onLine) 10 | } 11 | 12 | window.addEventListener("online", on_net_change) 13 | window.addEventListener("offline", on_net_change) 14 | 15 | export const settings = writable(Object.assign({}, default_settings)) 16 | 17 | export const nodes: Writable = writable([]) 18 | export const edges: Writable = writable([]) 19 | 20 | export const abort_controller = writable(new AbortController()) 21 | 22 | function init_from_local({ 23 | key, 24 | the_store, 25 | default_value, 26 | }: { 27 | key: string 28 | the_store: Writable 29 | default_value?: object 30 | }) { 31 | const locals = localStorage.getItem(key) 32 | 33 | if (!locals) { 34 | return 35 | } 36 | 37 | try { 38 | const read = JSON.parse(locals) 39 | 40 | if (default_value) { 41 | the_store.set({ 42 | ...(default_value ?? {}), 43 | ...read, 44 | }) 45 | } else { 46 | the_store.set(read) 47 | } 48 | } catch (e) { 49 | console.error(e) 50 | toast.error(e instanceof Error ? e.message : "Error during state recovery") 51 | } 52 | } 53 | 54 | init_from_local({ 55 | key: "settings", 56 | the_store: settings, 57 | default_value: default_settings, 58 | }) 59 | init_from_local({ key: "nodes", the_store: nodes }) 60 | init_from_local({ key: "edges", the_store: edges }) 61 | 62 | settings.subscribe((the_settings) => { 63 | localStorage.setItem("settings", JSON.stringify(the_settings)) 64 | }) 65 | 66 | nodes.subscribe((the_nodes) => { 67 | localStorage.setItem("nodes", JSON.stringify(the_nodes)) 68 | }) 69 | 70 | edges.subscribe((the_edges) => { 71 | // todo: drop edges when nodes are dropped and this logic will become obsolete 72 | const nodes_snapshot = get(nodes) 73 | const node_ids = nodes_snapshot.map((node) => node.id) 74 | 75 | const filtered = the_edges.filter((edge) => { 76 | return node_ids.includes(edge.source) && node_ids.includes(edge.target) 77 | }) 78 | 79 | localStorage.setItem("edges", JSON.stringify(filtered)) 80 | }) 81 | -------------------------------------------------------------------------------- /src/lib/sync_control.svelte: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | -------------------------------------------------------------------------------- /src/lib/system_node.svelte: -------------------------------------------------------------------------------- 1 | 244 | 245 |
249 | {#if import.meta.env.DEV} 250 | 251 | {data.id} 252 | 253 | {/if} 254 | 255 | 256 | 257 | 262 | 263 | 269 | 270 | 286 | 287 | 297 | 298 |
299 | {#if show_params} 300 |
301 | 311 | 312 | 324 | 325 |
326 | 339 | 340 | 351 | 352 | 361 | 362 | 367 | 368 | 377 | 378 | 391 |
392 |
393 | {/if} 394 | 395 |
396 | {#if show_params} 397 |
398 | 399 |
400 |
401 |
407 |
408 | {/if} 409 | 426 |
427 |
428 | 429 | 430 | 436 | 438 |
439 | 440 | 458 | -------------------------------------------------------------------------------- /src/lib/tokens.ts: -------------------------------------------------------------------------------- 1 | import { get_encoding } from "tiktoken" 2 | 3 | const enc = get_encoding("gpt2") 4 | 5 | export function get_token_count(text: string) { 6 | return enc.encode(text).length 7 | } 8 | -------------------------------------------------------------------------------- /src/lib/types.ts: -------------------------------------------------------------------------------- 1 | import type { Node } from "@xyflow/svelte" 2 | 3 | export type Our_Node = Node<{ 4 | id?: string 5 | thread_id?: string 6 | src_id?: string 7 | content?: string 8 | params?: Params 9 | param_syncs?: Param_Key[] 10 | }> 11 | 12 | export type Params = { 13 | backend: string 14 | 15 | model: string 16 | 17 | prompt: string 18 | 19 | temperature: number 20 | min_p: number 21 | 22 | top_p: number 23 | top_k: number 24 | 25 | stop: string 26 | max_tokens: number 27 | } 28 | 29 | export const browser_backend_name = "browser" 30 | 31 | export const default_params: Params = { 32 | backend: browser_backend_name, 33 | model: "", 34 | prompt: "You are a friendly being.", 35 | max_tokens: 100, 36 | temperature: 1, 37 | top_p: 1, 38 | top_k: 40, 39 | stop: "\\n", 40 | min_p: 0, 41 | } 42 | 43 | Object.freeze(default_params) 44 | 45 | export type Param_Key = keyof Params 46 | 47 | export const default_param_syncs: Param_Key[] = Object.keys( 48 | default_params 49 | ) as Param_Key[] 50 | 51 | Object.freeze(default_param_syncs) 52 | 53 | export type Settings = { 54 | backends: { 55 | base_url: string 56 | api_key: string 57 | }[] 58 | endpoint: "chat" | "completions" 59 | user_prefix: string 60 | bot_prefix: string 61 | browser_ai_offline_fallback: boolean 62 | } 63 | 64 | export const default_settings: Settings = { 65 | backends: [], 66 | browser_ai_offline_fallback: true, 67 | endpoint: "chat", 68 | user_prefix: "user: ", 69 | bot_prefix: "bot: ", 70 | } 71 | 72 | Object.freeze(default_settings) 73 | -------------------------------------------------------------------------------- /src/lib/user_node.svelte: -------------------------------------------------------------------------------- 1 | 84 | 85 |
89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 |
99 | {token_count} 100 |
101 | 102 | 112 |
113 | 114 | 119 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "svelte" 2 | import App from "./App.svelte" 3 | 4 | const app = mount(App, { 5 | target: document.getElementById("app")!, 6 | }) 7 | 8 | export default app 9 | -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: black; 3 | color: white; 4 | hyphens: auto; 5 | } 6 | 7 | input, 8 | select, 9 | textarea { 10 | --at-apply: "bg-transparent outline-none block"; 11 | } 12 | 13 | textarea { 14 | --at-apply: "resize-none"; 15 | } 16 | 17 | ::selection { 18 | --at-apply: "bg-cyan-6"; 19 | } 20 | 21 | .markdown-body, 22 | textarea { 23 | font-family: "Alegreya Variable" !important; 24 | } 25 | 26 | .markdown-body { 27 | background-color: unset !important; 28 | /* font-size: unset !important; */ 29 | /* font-family: unset !important; */ 30 | color: unset !important; 31 | } 32 | 33 | .markdown-body pre { 34 | --at-apply: "bg-black! text-stone-3! rounded-0! -mx2"; 35 | } 36 | .markdown-body pre code { 37 | --at-apply: "text-xs!"; 38 | } 39 | 40 | li { 41 | list-style-type: "- "; 42 | } 43 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' 2 | 3 | export default { 4 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess 5 | // for more information about preprocessors 6 | preprocess: vitePreprocess(), 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "resolveJsonModule": true, 8 | /** 9 | * Typecheck JS in `.svelte` and `.js` files by default. 10 | * Disable checkJs if you'd like to use dynamic types in JS. 11 | * Note that setting allowJs false does not prevent the use 12 | * of JS in `.svelte` files. 13 | */ 14 | "allowJs": true, 15 | "checkJs": true, 16 | "isolatedModules": true, 17 | "moduleDetection": "force" 18 | }, 19 | "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 5 | "skipLibCheck": true, 6 | "module": "ESNext", 7 | "moduleResolution": "Bundler", 8 | "strict": true, 9 | "noEmit": true, 10 | "noUncheckedSideEffectImports": true 11 | }, 12 | "include": ["vite.config.ts"] 13 | } 14 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { svelte } from "@sveltejs/vite-plugin-svelte" 2 | import { defineConfig } from "vite" 3 | import unocss from "unocss/vite" 4 | import transformerDirectives from "@unocss/transformer-directives" 5 | import preset_default from "unocss/preset-uno" 6 | import preset_icons from "unocss/preset-icons" 7 | import wasm_thing from "vite-plugin-wasm" 8 | import top_level_await from "vite-plugin-top-level-await" 9 | 10 | export default defineConfig({ 11 | base: "", 12 | plugins: [ 13 | svelte(), 14 | unocss({ 15 | presets: [preset_default(), preset_icons()], 16 | transformers: [transformerDirectives()], 17 | }), 18 | wasm_thing(), 19 | top_level_await(), 20 | ], 21 | build: { 22 | rollupOptions: { 23 | input: { 24 | main: "./index.html", 25 | bg: "./src/bg.ts", 26 | }, 27 | output: { 28 | entryFileNames: `[name].js`, 29 | chunkFileNames: `[name].js`, 30 | assetFileNames: `assets/[name].[ext]`, 31 | }, 32 | }, 33 | }, 34 | }) 35 | --------------------------------------------------------------------------------