diff --git a/.npm-cache-2/_cacache/content-v2/sha512/04/b2/374e5d535b73ef97bd25df2ab763ae22f9ac29c17aac181616924a8cb676d782b303fb28fbae15b492e103c7325a6171a3116e6881aa4a34c10a34c8e26c b/.npm-cache-2/_cacache/content-v2/sha512/04/b2/374e5d535b73ef97bd25df2ab763ae22f9ac29c17aac181616924a8cb676d782b303fb28fbae15b492e103c7325a6171a3116e6881aa4a34c10a34c8e26c new file mode 100644 index 000000000..865d6b669 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/04/b2/374e5d535b73ef97bd25df2ab763ae22f9ac29c17aac181616924a8cb676d782b303fb28fbae15b492e103c7325a6171a3116e6881aa4a34c10a34c8e26c differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/04/d1/9b58b7ddd1e50f69b8645d4566d23f2ebaf444c93879a2f45afddca8c3f06a01b649c82fb97d4f88cd03b39802b362a6110084a8461750af778867f3d7aa b/.npm-cache-2/_cacache/content-v2/sha512/04/d1/9b58b7ddd1e50f69b8645d4566d23f2ebaf444c93879a2f45afddca8c3f06a01b649c82fb97d4f88cd03b39802b362a6110084a8461750af778867f3d7aa new file mode 100644 index 000000000..c69174f6f Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/04/d1/9b58b7ddd1e50f69b8645d4566d23f2ebaf444c93879a2f45afddca8c3f06a01b649c82fb97d4f88cd03b39802b362a6110084a8461750af778867f3d7aa differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/0e/f1/32e795770c1eee927468fb888e193e5f3f5b2547cc10a2155d9278a064f32932cb5a289416870898040089137525da94e70138a18416274616501c606247 b/.npm-cache-2/_cacache/content-v2/sha512/0e/f1/32e795770c1eee927468fb888e193e5f3f5b2547cc10a2155d9278a064f32932cb5a289416870898040089137525da94e70138a18416274616501c606247 new file mode 100644 index 000000000..67f26b8e4 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/0e/f1/32e795770c1eee927468fb888e193e5f3f5b2547cc10a2155d9278a064f32932cb5a289416870898040089137525da94e70138a18416274616501c606247 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/13/92/c35fb5aba7ce4a8a5e5b859bf8ea3f2339e6e82aae4932660cde05467461fcc45a4f59750cb0dae53830ab928c4c11e362fd7648c2e46f6385cdc18309a7 b/.npm-cache-2/_cacache/content-v2/sha512/13/92/c35fb5aba7ce4a8a5e5b859bf8ea3f2339e6e82aae4932660cde05467461fcc45a4f59750cb0dae53830ab928c4c11e362fd7648c2e46f6385cdc18309a7 new file mode 100644 index 000000000..008cece57 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/13/92/c35fb5aba7ce4a8a5e5b859bf8ea3f2339e6e82aae4932660cde05467461fcc45a4f59750cb0dae53830ab928c4c11e362fd7648c2e46f6385cdc18309a7 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/14/22/c7b510ff827a428821c48892cec1d9853fec330a60c491cf72ecdb18c5e178bbb06db27d59bb0830246c4898898789c240acb3f8474c97e1cd8a0ab32b4c b/.npm-cache-2/_cacache/content-v2/sha512/14/22/c7b510ff827a428821c48892cec1d9853fec330a60c491cf72ecdb18c5e178bbb06db27d59bb0830246c4898898789c240acb3f8474c97e1cd8a0ab32b4c new file mode 100644 index 000000000..8ec6fe05c Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/14/22/c7b510ff827a428821c48892cec1d9853fec330a60c491cf72ecdb18c5e178bbb06db27d59bb0830246c4898898789c240acb3f8474c97e1cd8a0ab32b4c differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/28/8c/b99f296f0b995ed4e75a6a8089d3b2fef22433247187ea9583bb34be774ec2bbb9f5319db1dba3fc64a2167db2b4dbe5c82fc329e119167aa7540ab0cc7e b/.npm-cache-2/_cacache/content-v2/sha512/28/8c/b99f296f0b995ed4e75a6a8089d3b2fef22433247187ea9583bb34be774ec2bbb9f5319db1dba3fc64a2167db2b4dbe5c82fc329e119167aa7540ab0cc7e new file mode 100644 index 000000000..83b9ea342 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/28/8c/b99f296f0b995ed4e75a6a8089d3b2fef22433247187ea9583bb34be774ec2bbb9f5319db1dba3fc64a2167db2b4dbe5c82fc329e119167aa7540ab0cc7e differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/39/9b/3a82c8c5e2f329df6aab09b8954a4ac5997b46fc0661637b7488032b30188067257da002ed5cef21b2b1db31717dc7a2f782b945bb05b6a00cfb71abfe1b b/.npm-cache-2/_cacache/content-v2/sha512/39/9b/3a82c8c5e2f329df6aab09b8954a4ac5997b46fc0661637b7488032b30188067257da002ed5cef21b2b1db31717dc7a2f782b945bb05b6a00cfb71abfe1b new file mode 100644 index 000000000..92f7cf579 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/39/9b/3a82c8c5e2f329df6aab09b8954a4ac5997b46fc0661637b7488032b30188067257da002ed5cef21b2b1db31717dc7a2f782b945bb05b6a00cfb71abfe1b differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/3d/29/1b2d4a313854732588e3c4726df71ae8ec3fa28a580c5ff0bd95ac3356e62221d722861f435e65626c17bc966705ad18bf57394f8c1c5b37bac7db8abcfd b/.npm-cache-2/_cacache/content-v2/sha512/3d/29/1b2d4a313854732588e3c4726df71ae8ec3fa28a580c5ff0bd95ac3356e62221d722861f435e65626c17bc966705ad18bf57394f8c1c5b37bac7db8abcfd new file mode 100644 index 000000000..855504935 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/3d/29/1b2d4a313854732588e3c4726df71ae8ec3fa28a580c5ff0bd95ac3356e62221d722861f435e65626c17bc966705ad18bf57394f8c1c5b37bac7db8abcfd differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/51/c8/dc24e5a49eb36417a3cb5fcdea70733a28781528d915eb663c6b9b980d5bfdc9d19057000730aa877498ded554d6a658c6d1662908386b09d00e607e135a b/.npm-cache-2/_cacache/content-v2/sha512/51/c8/dc24e5a49eb36417a3cb5fcdea70733a28781528d915eb663c6b9b980d5bfdc9d19057000730aa877498ded554d6a658c6d1662908386b09d00e607e135a new file mode 100644 index 000000000..09e1f826a Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/51/c8/dc24e5a49eb36417a3cb5fcdea70733a28781528d915eb663c6b9b980d5bfdc9d19057000730aa877498ded554d6a658c6d1662908386b09d00e607e135a differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/52/9c/dc2c25e895459c36ee47b5530761d5c98c0ae3b05f42d1a367aae658638b96fd5bb49a2cb96285af6d5df8e476ae56f700527a51ba130c72a4dc18e636fb b/.npm-cache-2/_cacache/content-v2/sha512/52/9c/dc2c25e895459c36ee47b5530761d5c98c0ae3b05f42d1a367aae658638b96fd5bb49a2cb96285af6d5df8e476ae56f700527a51ba130c72a4dc18e636fb new file mode 100644 index 000000000..82657fc63 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/52/9c/dc2c25e895459c36ee47b5530761d5c98c0ae3b05f42d1a367aae658638b96fd5bb49a2cb96285af6d5df8e476ae56f700527a51ba130c72a4dc18e636fb differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/54/28/c235f80cb1bcb7b53768d369db8ed33f7b0adaea33c79a94e17a7913621f291bdb9c67fd4ff12a38bb814605e93f063a4e56c0c23282c0fe2b8128815744 b/.npm-cache-2/_cacache/content-v2/sha512/54/28/c235f80cb1bcb7b53768d369db8ed33f7b0adaea33c79a94e17a7913621f291bdb9c67fd4ff12a38bb814605e93f063a4e56c0c23282c0fe2b8128815744 new file mode 100644 index 000000000..e6eb4548f Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/54/28/c235f80cb1bcb7b53768d369db8ed33f7b0adaea33c79a94e17a7913621f291bdb9c67fd4ff12a38bb814605e93f063a4e56c0c23282c0fe2b8128815744 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/58/f4/bf1ef1d04d89c78ac2e8f4c72a0473899361641cefed969be5772ae77a6e1a790a7885a8b7832b61b3083aa74d684a84e5e7cadca621408c5d9baf6024d8 b/.npm-cache-2/_cacache/content-v2/sha512/58/f4/bf1ef1d04d89c78ac2e8f4c72a0473899361641cefed969be5772ae77a6e1a790a7885a8b7832b61b3083aa74d684a84e5e7cadca621408c5d9baf6024d8 new file mode 100644 index 000000000..a66a86b91 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/58/f4/bf1ef1d04d89c78ac2e8f4c72a0473899361641cefed969be5772ae77a6e1a790a7885a8b7832b61b3083aa74d684a84e5e7cadca621408c5d9baf6024d8 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/5b/f2/9893e3458649ac629b87ab92729278223829f17952fcbfc7459eac520fca8411d45f5e4d520cce89ccda9c1116dc1988fdb4cac3401615f5c8e09ee9c522 b/.npm-cache-2/_cacache/content-v2/sha512/5b/f2/9893e3458649ac629b87ab92729278223829f17952fcbfc7459eac520fca8411d45f5e4d520cce89ccda9c1116dc1988fdb4cac3401615f5c8e09ee9c522 new file mode 100644 index 000000000..a5933a617 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/5b/f2/9893e3458649ac629b87ab92729278223829f17952fcbfc7459eac520fca8411d45f5e4d520cce89ccda9c1116dc1988fdb4cac3401615f5c8e09ee9c522 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/5e/59/16bdf226e919ac5ad349c7ebaab4a2d2f1ea856f1520d19ccb5ea63471a132f65ee1aee5fc2298839e3b0b6afa0182a08247bd53a963bc31a5d885e27745 b/.npm-cache-2/_cacache/content-v2/sha512/5e/59/16bdf226e919ac5ad349c7ebaab4a2d2f1ea856f1520d19ccb5ea63471a132f65ee1aee5fc2298839e3b0b6afa0182a08247bd53a963bc31a5d885e27745 new file mode 100644 index 000000000..c0f86efd6 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/5e/59/16bdf226e919ac5ad349c7ebaab4a2d2f1ea856f1520d19ccb5ea63471a132f65ee1aee5fc2298839e3b0b6afa0182a08247bd53a963bc31a5d885e27745 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/61/9a/372bcd920fb462ca2d04d4440fa232f3ee4a5ea6749023d2323db1c78355d75debdbe5d248eeda72376003c467106c71bbbdcc911e4d1c6f0a9c42b894b6 b/.npm-cache-2/_cacache/content-v2/sha512/61/9a/372bcd920fb462ca2d04d4440fa232f3ee4a5ea6749023d2323db1c78355d75debdbe5d248eeda72376003c467106c71bbbdcc911e4d1c6f0a9c42b894b6 new file mode 100644 index 000000000..ca15817bb Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/61/9a/372bcd920fb462ca2d04d4440fa232f3ee4a5ea6749023d2323db1c78355d75debdbe5d248eeda72376003c467106c71bbbdcc911e4d1c6f0a9c42b894b6 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/6f/7a/e9a532a6f53f8fb1508110e511e3a19623b7dd3acd3454a675fbd7351160da0ccbe341cead530b85c88a6b806813716a151d22ab53c1f7d591c0d9ed111c b/.npm-cache-2/_cacache/content-v2/sha512/6f/7a/e9a532a6f53f8fb1508110e511e3a19623b7dd3acd3454a675fbd7351160da0ccbe341cead530b85c88a6b806813716a151d22ab53c1f7d591c0d9ed111c new file mode 100644 index 000000000..88ec0c587 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/6f/7a/e9a532a6f53f8fb1508110e511e3a19623b7dd3acd3454a675fbd7351160da0ccbe341cead530b85c88a6b806813716a151d22ab53c1f7d591c0d9ed111c differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/73/d6/d9a7b6f962d463db039ee9d963df630af81c7f33f77ef550764873353adb141d1d1a574b5d3fa0d687f88cb749168b5b7983522e76eea141135dd40e0f54 b/.npm-cache-2/_cacache/content-v2/sha512/73/d6/d9a7b6f962d463db039ee9d963df630af81c7f33f77ef550764873353adb141d1d1a574b5d3fa0d687f88cb749168b5b7983522e76eea141135dd40e0f54 new file mode 100644 index 000000000..fb8ba46dc Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/73/d6/d9a7b6f962d463db039ee9d963df630af81c7f33f77ef550764873353adb141d1d1a574b5d3fa0d687f88cb749168b5b7983522e76eea141135dd40e0f54 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/75/15/dc872f82d0880af163c2eb1bc21c544859851baaa74420a3da2a8fc071350dcf02d32ba007ed18dd2d6b0465c00dfd305db5f530dcf60480faf954fafac3 b/.npm-cache-2/_cacache/content-v2/sha512/75/15/dc872f82d0880af163c2eb1bc21c544859851baaa74420a3da2a8fc071350dcf02d32ba007ed18dd2d6b0465c00dfd305db5f530dcf60480faf954fafac3 new file mode 100644 index 000000000..dd76fdca4 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/75/15/dc872f82d0880af163c2eb1bc21c544859851baaa74420a3da2a8fc071350dcf02d32ba007ed18dd2d6b0465c00dfd305db5f530dcf60480faf954fafac3 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/80/42/105389a4825d8e3dea0dad67e5709149dc07b604f778782b071c0fd78a4b25908566b3f9c786f9efcc8655ed52e606fb459433b32edf6bad94fe9fa0faec b/.npm-cache-2/_cacache/content-v2/sha512/80/42/105389a4825d8e3dea0dad67e5709149dc07b604f778782b071c0fd78a4b25908566b3f9c786f9efcc8655ed52e606fb459433b32edf6bad94fe9fa0faec new file mode 100644 index 000000000..c661713b9 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/80/42/105389a4825d8e3dea0dad67e5709149dc07b604f778782b071c0fd78a4b25908566b3f9c786f9efcc8655ed52e606fb459433b32edf6bad94fe9fa0faec differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/85/4a/e669605d543731bd8aa7ca1d3dcee9cacd13968db65388dcbc741123912ede8440d089b5c9ed7be59ad6f0b9372552223237e0b25d00f8566928f1f366f3 b/.npm-cache-2/_cacache/content-v2/sha512/85/4a/e669605d543731bd8aa7ca1d3dcee9cacd13968db65388dcbc741123912ede8440d089b5c9ed7be59ad6f0b9372552223237e0b25d00f8566928f1f366f3 new file mode 100644 index 000000000..98a6b8dc5 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/85/4a/e669605d543731bd8aa7ca1d3dcee9cacd13968db65388dcbc741123912ede8440d089b5c9ed7be59ad6f0b9372552223237e0b25d00f8566928f1f366f3 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/88/e0/56160517edc688662baeb480b15605f549dc700151452b0b7512f31861e73f3563b999e389e8ae6e43186b6017502677b82b18aa65cf8aa6d14e585488f7 b/.npm-cache-2/_cacache/content-v2/sha512/88/e0/56160517edc688662baeb480b15605f549dc700151452b0b7512f31861e73f3563b999e389e8ae6e43186b6017502677b82b18aa65cf8aa6d14e585488f7 new file mode 100644 index 000000000..7e3f508d0 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/88/e0/56160517edc688662baeb480b15605f549dc700151452b0b7512f31861e73f3563b999e389e8ae6e43186b6017502677b82b18aa65cf8aa6d14e585488f7 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/8f/66/6ae0dc90606e573124f871bb34d8093c88951dc513345c8e50cb15ee64ecca3883665aeae9dec997bb7cb9c03709ae9b70a528e05c7cc8431474a265e58d b/.npm-cache-2/_cacache/content-v2/sha512/8f/66/6ae0dc90606e573124f871bb34d8093c88951dc513345c8e50cb15ee64ecca3883665aeae9dec997bb7cb9c03709ae9b70a528e05c7cc8431474a265e58d new file mode 100644 index 000000000..35b4cc059 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/8f/66/6ae0dc90606e573124f871bb34d8093c88951dc513345c8e50cb15ee64ecca3883665aeae9dec997bb7cb9c03709ae9b70a528e05c7cc8431474a265e58d differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/90/7c/6bdb366962d766acdd6a0e3aeb5ff675ad1d641bc0f1fa09292b51b87979af5ecc26704d614d6056614ce5ada630d7fc99a7a62e0d8efb62dbdb3747660c b/.npm-cache-2/_cacache/content-v2/sha512/90/7c/6bdb366962d766acdd6a0e3aeb5ff675ad1d641bc0f1fa09292b51b87979af5ecc26704d614d6056614ce5ada630d7fc99a7a62e0d8efb62dbdb3747660c new file mode 100644 index 000000000..2081b8000 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/90/7c/6bdb366962d766acdd6a0e3aeb5ff675ad1d641bc0f1fa09292b51b87979af5ecc26704d614d6056614ce5ada630d7fc99a7a62e0d8efb62dbdb3747660c differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/97/84/a9fc346c7a8afdc0be84bd5dbe4ee427eb774c90f8d9feca7d5e48214c46d5f4a94f4b5c54b19deeeff2103b8c31b5c141e1b82940f45c477402bdeccf71 b/.npm-cache-2/_cacache/content-v2/sha512/97/84/a9fc346c7a8afdc0be84bd5dbe4ee427eb774c90f8d9feca7d5e48214c46d5f4a94f4b5c54b19deeeff2103b8c31b5c141e1b82940f45c477402bdeccf71 new file mode 100644 index 000000000..d0fb26b99 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/97/84/a9fc346c7a8afdc0be84bd5dbe4ee427eb774c90f8d9feca7d5e48214c46d5f4a94f4b5c54b19deeeff2103b8c31b5c141e1b82940f45c477402bdeccf71 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/9c/b4/eb50a9b653288beeb9616a9bbf665e3917036091919a0a965b2076a30d883094908eccb4a4f9c20f027b04a95f79e468c82c99ca6dd402d6754fcfe80061 b/.npm-cache-2/_cacache/content-v2/sha512/9c/b4/eb50a9b653288beeb9616a9bbf665e3917036091919a0a965b2076a30d883094908eccb4a4f9c20f027b04a95f79e468c82c99ca6dd402d6754fcfe80061 new file mode 100644 index 000000000..c49b7c910 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/9c/b4/eb50a9b653288beeb9616a9bbf665e3917036091919a0a965b2076a30d883094908eccb4a4f9c20f027b04a95f79e468c82c99ca6dd402d6754fcfe80061 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/a2/dd/169d74bd7e076480871e3dee911cd935580f3e9ae3dae9c4a3791dd5f0adbbabd041d6b4c4dd1d69ec7bf4cf567201cf2ce95beff0323259febcd4c02dd3 b/.npm-cache-2/_cacache/content-v2/sha512/a2/dd/169d74bd7e076480871e3dee911cd935580f3e9ae3dae9c4a3791dd5f0adbbabd041d6b4c4dd1d69ec7bf4cf567201cf2ce95beff0323259febcd4c02dd3 new file mode 100644 index 000000000..00fca76de Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/a2/dd/169d74bd7e076480871e3dee911cd935580f3e9ae3dae9c4a3791dd5f0adbbabd041d6b4c4dd1d69ec7bf4cf567201cf2ce95beff0323259febcd4c02dd3 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/a3/9b/123ca12483f0c840d987e37574fee7ab2eba7355e764521f2d18dbda797a5fa6ec2329e9e54a8c7fd8efc14e5654b447be246eece58844cfad3c3e500744 b/.npm-cache-2/_cacache/content-v2/sha512/a3/9b/123ca12483f0c840d987e37574fee7ab2eba7355e764521f2d18dbda797a5fa6ec2329e9e54a8c7fd8efc14e5654b447be246eece58844cfad3c3e500744 new file mode 100644 index 000000000..691da9ef0 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/a3/9b/123ca12483f0c840d987e37574fee7ab2eba7355e764521f2d18dbda797a5fa6ec2329e9e54a8c7fd8efc14e5654b447be246eece58844cfad3c3e500744 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/a6/3c/b66d8852b2e7f05a52b03dcfa5ddc37bfb0b8994aeaecf461d2443a54036e5ea3a3f6253e2e266fc6a0524542f0117b57c36ecdec8f36a464b00de1ced29 b/.npm-cache-2/_cacache/content-v2/sha512/a6/3c/b66d8852b2e7f05a52b03dcfa5ddc37bfb0b8994aeaecf461d2443a54036e5ea3a3f6253e2e266fc6a0524542f0117b57c36ecdec8f36a464b00de1ced29 new file mode 100644 index 000000000..ac6014049 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/a6/3c/b66d8852b2e7f05a52b03dcfa5ddc37bfb0b8994aeaecf461d2443a54036e5ea3a3f6253e2e266fc6a0524542f0117b57c36ecdec8f36a464b00de1ced29 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/ae/f2/920620b9cea08288367d9003accd9703bdd007c3020a246df76248f8dce29c5ac9e670144bd3d6135389ce78767c6366bb9753204ddd3c4817bd03c423e8 b/.npm-cache-2/_cacache/content-v2/sha512/ae/f2/920620b9cea08288367d9003accd9703bdd007c3020a246df76248f8dce29c5ac9e670144bd3d6135389ce78767c6366bb9753204ddd3c4817bd03c423e8 new file mode 100644 index 000000000..35ce43bc2 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/ae/f2/920620b9cea08288367d9003accd9703bdd007c3020a246df76248f8dce29c5ac9e670144bd3d6135389ce78767c6366bb9753204ddd3c4817bd03c423e8 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/b6/c6/93224296f5be0df80123f92540f96849cd5effccc85c4aeefc98b2964a4edc5cc3921ec04a15652cd1f5b0abc4322b73202414115fa19b8b89186ddbc691 b/.npm-cache-2/_cacache/content-v2/sha512/b6/c6/93224296f5be0df80123f92540f96849cd5effccc85c4aeefc98b2964a4edc5cc3921ec04a15652cd1f5b0abc4322b73202414115fa19b8b89186ddbc691 new file mode 100644 index 000000000..007eabfc0 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/b6/c6/93224296f5be0df80123f92540f96849cd5effccc85c4aeefc98b2964a4edc5cc3921ec04a15652cd1f5b0abc4322b73202414115fa19b8b89186ddbc691 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/c2/70/f6644fa5f923c2feea12d2f5de13d2f5fb4c2e68ca8a95fcfd00c528dfc26cc8b48159215c1d1d51ae2eb62d9735daf2ebd606f78e5ee2c10860c2901b19 b/.npm-cache-2/_cacache/content-v2/sha512/c2/70/f6644fa5f923c2feea12d2f5de13d2f5fb4c2e68ca8a95fcfd00c528dfc26cc8b48159215c1d1d51ae2eb62d9735daf2ebd606f78e5ee2c10860c2901b19 new file mode 100644 index 000000000..1a2266ed7 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/c2/70/f6644fa5f923c2feea12d2f5de13d2f5fb4c2e68ca8a95fcfd00c528dfc26cc8b48159215c1d1d51ae2eb62d9735daf2ebd606f78e5ee2c10860c2901b19 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/c3/a0/31b6e6d76b6c135c052c64c316111aec21101dacad1273e154cad5af60084124bcae238965acc202d43b65352748f7d108f3a299ba6d8c32adc4019945f5 b/.npm-cache-2/_cacache/content-v2/sha512/c3/a0/31b6e6d76b6c135c052c64c316111aec21101dacad1273e154cad5af60084124bcae238965acc202d43b65352748f7d108f3a299ba6d8c32adc4019945f5 new file mode 100644 index 000000000..59979f8f9 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/c3/a0/31b6e6d76b6c135c052c64c316111aec21101dacad1273e154cad5af60084124bcae238965acc202d43b65352748f7d108f3a299ba6d8c32adc4019945f5 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/c5/15/c19f4a4fa904d54220bcc3242b2acd8c3a55f6e334343ce19a8f492e96dbe8382b2d050339caf3a1015494c0e32342d4efb0f5a83421df3c6c1a6902614f b/.npm-cache-2/_cacache/content-v2/sha512/c5/15/c19f4a4fa904d54220bcc3242b2acd8c3a55f6e334343ce19a8f492e96dbe8382b2d050339caf3a1015494c0e32342d4efb0f5a83421df3c6c1a6902614f new file mode 100644 index 000000000..0ab1fc972 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/c5/15/c19f4a4fa904d54220bcc3242b2acd8c3a55f6e334343ce19a8f492e96dbe8382b2d050339caf3a1015494c0e32342d4efb0f5a83421df3c6c1a6902614f differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/c8/33/cc363a785b27d80641e78c844b7dc6b58ba28cc860adb1582829eff3d7eeafba481a10d76018166df9998a3dce206afbc46793a01df1ddadace180dc86ef b/.npm-cache-2/_cacache/content-v2/sha512/c8/33/cc363a785b27d80641e78c844b7dc6b58ba28cc860adb1582829eff3d7eeafba481a10d76018166df9998a3dce206afbc46793a01df1ddadace180dc86ef new file mode 100644 index 000000000..4a1b724c9 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/c8/33/cc363a785b27d80641e78c844b7dc6b58ba28cc860adb1582829eff3d7eeafba481a10d76018166df9998a3dce206afbc46793a01df1ddadace180dc86ef differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/c9/bc/7458ed7ff1b4812c459766f11dee0316dd29f7245956dd3bd7d674446c32d135035a78d37c58ad26781c0f74068e23b4ed4514499ff12cd7386bac21eeee b/.npm-cache-2/_cacache/content-v2/sha512/c9/bc/7458ed7ff1b4812c459766f11dee0316dd29f7245956dd3bd7d674446c32d135035a78d37c58ad26781c0f74068e23b4ed4514499ff12cd7386bac21eeee new file mode 100644 index 000000000..725f45796 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/c9/bc/7458ed7ff1b4812c459766f11dee0316dd29f7245956dd3bd7d674446c32d135035a78d37c58ad26781c0f74068e23b4ed4514499ff12cd7386bac21eeee differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/d5/73/091397d0a358c61fa63fede6e7c0f3811242049d3e10177d9de51d7e557757bde334201309b7ccdf6b15f53f7421570ad87bee7bebe8e400db524b69816f b/.npm-cache-2/_cacache/content-v2/sha512/d5/73/091397d0a358c61fa63fede6e7c0f3811242049d3e10177d9de51d7e557757bde334201309b7ccdf6b15f53f7421570ad87bee7bebe8e400db524b69816f new file mode 100644 index 000000000..f6ae0013c Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/d5/73/091397d0a358c61fa63fede6e7c0f3811242049d3e10177d9de51d7e557757bde334201309b7ccdf6b15f53f7421570ad87bee7bebe8e400db524b69816f differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/e3/60/2d9a0aa357e5f556974e7f24c6398462d3fceca0baad5d07244e6a937b26d3f810c86ccfc6bb1a3bc77a44dafb69af5a24eb146a33d3a905ef89ca8ab2c3 b/.npm-cache-2/_cacache/content-v2/sha512/e3/60/2d9a0aa357e5f556974e7f24c6398462d3fceca0baad5d07244e6a937b26d3f810c86ccfc6bb1a3bc77a44dafb69af5a24eb146a33d3a905ef89ca8ab2c3 new file mode 100644 index 000000000..cd5268024 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/e3/60/2d9a0aa357e5f556974e7f24c6398462d3fceca0baad5d07244e6a937b26d3f810c86ccfc6bb1a3bc77a44dafb69af5a24eb146a33d3a905ef89ca8ab2c3 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/e5/71/d8692ca2a800dbe119d9d4175a77a70fa7c4e88ac7b84f312370e6031d991309b2a089497b593502a4d587bb1983b7dd709ec64173dc629cdce8a6fdc931 b/.npm-cache-2/_cacache/content-v2/sha512/e5/71/d8692ca2a800dbe119d9d4175a77a70fa7c4e88ac7b84f312370e6031d991309b2a089497b593502a4d587bb1983b7dd709ec64173dc629cdce8a6fdc931 new file mode 100644 index 000000000..94b5f32d9 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/e5/71/d8692ca2a800dbe119d9d4175a77a70fa7c4e88ac7b84f312370e6031d991309b2a089497b593502a4d587bb1983b7dd709ec64173dc629cdce8a6fdc931 differ diff --git a/.npm-cache-2/_cacache/content-v2/sha512/ef/ef/9d161b5cc77df9dee05aabc0c347836ec417ad0730bb6503a19934089c711de9b4ab5dd884cb30af1b4ed9e3851874b4a1594c97b7933fca1cfc7a471bd4 b/.npm-cache-2/_cacache/content-v2/sha512/ef/ef/9d161b5cc77df9dee05aabc0c347836ec417ad0730bb6503a19934089c711de9b4ab5dd884cb30af1b4ed9e3851874b4a1594c97b7933fca1cfc7a471bd4 new file mode 100644 index 000000000..fb3aa3992 Binary files /dev/null and b/.npm-cache-2/_cacache/content-v2/sha512/ef/ef/9d161b5cc77df9dee05aabc0c347836ec417ad0730bb6503a19934089c711de9b4ab5dd884cb30af1b4ed9e3851874b4a1594c97b7933fca1cfc7a471bd4 differ diff --git a/.npm-cache-2/_cacache/index-v5/03/af/b652af7d985d655c33bbc6261689ea2f5a550b485dde76ad3aefbe2591eb b/.npm-cache-2/_cacache/index-v5/03/af/b652af7d985d655c33bbc6261689ea2f5a550b485dde76ad3aefbe2591eb new file mode 100644 index 000000000..6e2cb8560 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/03/af/b652af7d985d655c33bbc6261689ea2f5a550b485dde76ad3aefbe2591eb @@ -0,0 +1,2 @@ + +8420215a8fa373782ee9a1dc4d6ffdc8b381d2ae {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz","integrity":"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==","time":1774894895553,"size":1503,"metadata":{"time":1774894895466,"url":"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"800d00b53670160a44fa6116b1cbb6e5\"","last-modified":"Sat, 27 Apr 2019 10:46:23 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/07/9d/a67eab3c0811184c1425aac4bfa6267585f4f1375183f776f1e7d9c6cf33 b/.npm-cache-2/_cacache/index-v5/07/9d/a67eab3c0811184c1425aac4bfa6267585f4f1375183f776f1e7d9c6cf33 new file mode 100644 index 000000000..e69de29bb diff --git a/.npm-cache-2/_cacache/index-v5/0b/bf/4226971e16d707d9180cd9fe4d4c5d07b40fa7d4311fe932f69a7fce4e53 b/.npm-cache-2/_cacache/index-v5/0b/bf/4226971e16d707d9180cd9fe4d4c5d07b40fa7d4311fe932f69a7fce4e53 new file mode 100644 index 000000000..4e11ead53 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/0b/bf/4226971e16d707d9180cd9fe4d4c5d07b40fa7d4311fe932f69a7fce4e53 @@ -0,0 +1,2 @@ + +ed2be86eaaecee101a382ce10890054fec311dc5 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz","integrity":"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==","time":1774894895557,"size":2096,"metadata":{"time":1774894895340,"url":"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"7782d75736a48d364b415c41df0855a4\"","last-modified":"Sun, 27 May 2018 20:30:40 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/1a/fd/532a4c7bf52c908d567ded2bb11b0f3282f0733d0d079a5291c2f72e0077 b/.npm-cache-2/_cacache/index-v5/1a/fd/532a4c7bf52c908d567ded2bb11b0f3282f0733d0d079a5291c2f72e0077 new file mode 100644 index 000000000..cd6f2dc5a --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/1a/fd/532a4c7bf52c908d567ded2bb11b0f3282f0733d0d079a5291c2f72e0077 @@ -0,0 +1,2 @@ + +9094f471192166f7ab7ef604c6fb955f1e169929 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz","integrity":"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==","time":1774894895542,"size":1676,"metadata":{"time":1774894895378,"url":"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"567b1699cfae49cb20f598571a6c90c7\"","last-modified":"Sun, 27 May 2018 22:18:40 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/20/e0/40122c5cee651bb244e17448855ba7beb1ffc43ef9d58d74671626ebedb0 b/.npm-cache-2/_cacache/index-v5/20/e0/40122c5cee651bb244e17448855ba7beb1ffc43ef9d58d74671626ebedb0 new file mode 100644 index 000000000..8f8492204 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/20/e0/40122c5cee651bb244e17448855ba7beb1ffc43ef9d58d74671626ebedb0 @@ -0,0 +1,2 @@ + +da91d069da753192c8c74f6a2c256172ac43a167 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz","integrity":"sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==","time":1774894895557,"size":3810,"metadata":{"time":1774894895430,"url":"https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"2ecf7c03c814ab155c5278d61f65583f\"","last-modified":"Mon, 03 Jan 2022 07:22:59 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/27/2a/8bffe4362381c865b10d98bb4e2143070ad5937e954ef39326f93f83cea3 b/.npm-cache-2/_cacache/index-v5/27/2a/8bffe4362381c865b10d98bb4e2143070ad5937e954ef39326f93f83cea3 new file mode 100644 index 000000000..e69de29bb diff --git a/.npm-cache-2/_cacache/index-v5/27/32/5087cdeb4717b4437a3ae2d89e04fe915372d24b9db7cd8905429e697085 b/.npm-cache-2/_cacache/index-v5/27/32/5087cdeb4717b4437a3ae2d89e04fe915372d24b9db7cd8905429e697085 new file mode 100644 index 000000000..2e6121899 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/27/32/5087cdeb4717b4437a3ae2d89e04fe915372d24b9db7cd8905429e697085 @@ -0,0 +1,2 @@ + +25a56e1753463be6e0c47eb94e1d3e94f0557f21 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz","integrity":"sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==","time":1774894895558,"size":15013,"metadata":{"time":1774894895426,"url":"https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"390a9298be5edeaeb460af0e064795cf\"","last-modified":"Fri, 25 Jul 2025 22:51:39 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/36/e7/0b6493f625a039ca4cb935e7526c5a564658f0781f039bc1e79ea8aa7a81 b/.npm-cache-2/_cacache/index-v5/36/e7/0b6493f625a039ca4cb935e7526c5a564658f0781f039bc1e79ea8aa7a81 new file mode 100644 index 000000000..d60f00522 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/36/e7/0b6493f625a039ca4cb935e7526c5a564658f0781f039bc1e79ea8aa7a81 @@ -0,0 +1,2 @@ + +4a0709ee405603c799a8f5403727a13901b8e17d {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz","integrity":"sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==","time":1774894895554,"size":5659,"metadata":{"time":1774894895457,"url":"https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"97e3b20b089ff8f4bbb96a826808bf78\"","last-modified":"Tue, 10 Dec 2024 20:20:27 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/39/16/fbcf96f811751ef1b79cd455e2cbde992c8887d2ce743c39c586e022519e b/.npm-cache-2/_cacache/index-v5/39/16/fbcf96f811751ef1b79cd455e2cbde992c8887d2ce743c39c586e022519e new file mode 100644 index 000000000..b5b6cd606 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/39/16/fbcf96f811751ef1b79cd455e2cbde992c8887d2ce743c39c586e022519e @@ -0,0 +1,2 @@ + +db3d75d5612b282dc08c187498b0cf70a468cb0d {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz","integrity":"sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==","time":1774894895557,"size":2869,"metadata":{"time":1774894895419,"url":"https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"c30cbbdbaa09caf060a1da37e03ac9a1\"","last-modified":"Mon, 08 Sep 2025 14:42:38 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/3e/f6/d44f3aa5248762b245da9032ba568286aa8cb9a2124ec7625bdd1edbf231 b/.npm-cache-2/_cacache/index-v5/3e/f6/d44f3aa5248762b245da9032ba568286aa8cb9a2124ec7625bdd1edbf231 new file mode 100644 index 000000000..535ffdb81 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/3e/f6/d44f3aa5248762b245da9032ba568286aa8cb9a2124ec7625bdd1edbf231 @@ -0,0 +1,2 @@ + +b19d4cba999a56a3e9423c3b83863d2b7139f086 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz","integrity":"sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==","time":1774894895553,"size":4137,"metadata":{"time":1774894895377,"url":"https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"8a205174206528363af08484637ff1d9\"","last-modified":"Thu, 29 Jan 2026 08:51:25 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/47/51/8cb5f456bd9dc0f65e785dbc8d31bb2f694741f4e29d52b74029622e8c32 b/.npm-cache-2/_cacache/index-v5/47/51/8cb5f456bd9dc0f65e785dbc8d31bb2f694741f4e29d52b74029622e8c32 new file mode 100644 index 000000000..fa3b50b36 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/47/51/8cb5f456bd9dc0f65e785dbc8d31bb2f694741f4e29d52b74029622e8c32 @@ -0,0 +1,2 @@ + +2ce3b3465e2d12f3592262bd78c56500745ca53a {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz","integrity":"sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==","time":1774894895553,"size":6702,"metadata":{"time":1774894895370,"url":"https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"e4e0d7a3b35bd7bf32b93f500fbb16fc\"","last-modified":"Thu, 27 Mar 2025 01:20:03 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/59/8f/04e6f64d657039df04ffd17af0bb8c7b3f5db2f8937c8a322ae2455af62e b/.npm-cache-2/_cacache/index-v5/59/8f/04e6f64d657039df04ffd17af0bb8c7b3f5db2f8937c8a322ae2455af62e new file mode 100644 index 000000000..9e8f83fa3 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/59/8f/04e6f64d657039df04ffd17af0bb8c7b3f5db2f8937c8a322ae2455af62e @@ -0,0 +1,2 @@ + +dbf0c503455358aa7b5e95578ad3d6c83a3f76d9 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz","integrity":"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==","time":1774894895548,"size":2347,"metadata":{"time":1774894895408,"url":"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"7770534f4c5d8220c88f87f74293a7e1\"","last-modified":"Sun, 14 Nov 2021 22:19:10 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/6c/0b/c74a5eaa2413b99f506d2259afd0e40a20bcd5325bcf008422955af7a017 b/.npm-cache-2/_cacache/index-v5/6c/0b/c74a5eaa2413b99f506d2259afd0e40a20bcd5325bcf008422955af7a017 new file mode 100644 index 000000000..4a89c784e --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/6c/0b/c74a5eaa2413b99f506d2259afd0e40a20bcd5325bcf008422955af7a017 @@ -0,0 +1,2 @@ + +b2b39684dd4beb7aae77572b8be206a36ab0c62f {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz","integrity":"sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==","time":1774894895561,"size":3064,"metadata":{"time":1774894895455,"url":"https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"e9e6595f55044fd94dd34051ad3d8be3\"","last-modified":"Tue, 16 Jun 2020 20:30:29 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/6c/d1/eacf1bc6656c90469010990afa8d3eea7e8c2154b0ee8b7217123eb2ac45 b/.npm-cache-2/_cacache/index-v5/6c/d1/eacf1bc6656c90469010990afa8d3eea7e8c2154b0ee8b7217123eb2ac45 new file mode 100644 index 000000000..0a72ed43d --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/6c/d1/eacf1bc6656c90469010990afa8d3eea7e8c2154b0ee8b7217123eb2ac45 @@ -0,0 +1,2 @@ + +357faf669c3bb2c057e1840dd2c56679af9acc9e {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz","integrity":"sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==","time":1774894895548,"size":3205,"metadata":{"time":1774894895398,"url":"https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"966c194bda253ce0a4f6a8301b6828ee\"","last-modified":"Mon, 08 Jul 2024 12:57:25 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/78/71/87cc5fbab4c0eb38404abf8f3cb3b5452228e9c03f201633d47419279059 b/.npm-cache-2/_cacache/index-v5/78/71/87cc5fbab4c0eb38404abf8f3cb3b5452228e9c03f201633d47419279059 new file mode 100644 index 000000000..d1d57e3bf --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/78/71/87cc5fbab4c0eb38404abf8f3cb3b5452228e9c03f201633d47419279059 @@ -0,0 +1,2 @@ + +e051778ebc6c906c4efa0af3762e99cf476da3d5 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz","integrity":"sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==","time":1774894895554,"size":6397,"metadata":{"time":1774894895397,"url":"https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"afe24438ef41aff9dc580f4532c4978a\"","last-modified":"Fri, 22 Aug 2025 06:17:27 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/82/1f/bc6ddfe7826874158ab240154ebbd8569ff129493af149bcc64cca3537c1 b/.npm-cache-2/_cacache/index-v5/82/1f/bc6ddfe7826874158ab240154ebbd8569ff129493af149bcc64cca3537c1 new file mode 100644 index 000000000..87da5c334 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/82/1f/bc6ddfe7826874158ab240154ebbd8569ff129493af149bcc64cca3537c1 @@ -0,0 +1,2 @@ + +5f0e8936eebda05e9a560260b49fe90614eb705e {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/vary/-/vary-1.1.2.tgz","integrity":"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==","time":1774894895548,"size":3772,"metadata":{"time":1774894895305,"url":"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"b571ab240474977c792dd29d4f812ca3\"","last-modified":"Sun, 27 May 2018 20:45:37 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/86/2a/8b147cb63e6dd3e2faa5fb1ad14793eed67eea68889f613db641eb12210b b/.npm-cache-2/_cacache/index-v5/86/2a/8b147cb63e6dd3e2faa5fb1ad14793eed67eea68889f613db641eb12210b new file mode 100644 index 000000000..431aa2647 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/86/2a/8b147cb63e6dd3e2faa5fb1ad14793eed67eea68889f613db641eb12210b @@ -0,0 +1,2 @@ + +1f59e7c6d31773eebbbd7bd04280df1c689195e0 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz","integrity":"sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==","time":1774894895542,"size":1770,"metadata":{"time":1774894895379,"url":"https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"f33d5b33b012add701d710db8bab797e\"","last-modified":"Sat, 28 Oct 2023 17:19:54 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/86/bb/7e2f7ad9dbe684c39fe2dcdc0b17715b6cacde8589f358591df2d12e911c b/.npm-cache-2/_cacache/index-v5/86/bb/7e2f7ad9dbe684c39fe2dcdc0b17715b6cacde8589f358591df2d12e911c new file mode 100644 index 000000000..68dca5962 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/86/bb/7e2f7ad9dbe684c39fe2dcdc0b17715b6cacde8589f358591df2d12e911c @@ -0,0 +1,2 @@ + +577c0c2eff27f3f1164e681d85a2f7d67680049c {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz","integrity":"sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==","time":1774894895541,"size":3165,"metadata":{"time":1774894895437,"url":"https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"09caa36de0c285895b247fc86962f837\"","last-modified":"Sun, 27 May 2018 18:09:12 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/a9/c7/dd5667485e64fd49c7ecc3baed7e67eed4659ceb2331b4fc282ff0f771f4 b/.npm-cache-2/_cacache/index-v5/a9/c7/dd5667485e64fd49c7ecc3baed7e67eed4659ceb2331b4fc282ff0f771f4 new file mode 100644 index 000000000..878d6f5cf --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/a9/c7/dd5667485e64fd49c7ecc3baed7e67eed4659ceb2331b4fc282ff0f771f4 @@ -0,0 +1,2 @@ + +f5f5a873899313662bb423caa7a773ce0328bfb5 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz","integrity":"sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==","time":1774894895543,"size":1704,"metadata":{"time":1774894895438,"url":"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"38fd9c0078194e7220743d4b5dc20169\"","last-modified":"Wed, 17 Apr 2019 07:49:13 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/ae/0b/e8166faad33ceb76841ce09c5e5e619d46225021c61320e9f0882993d698 b/.npm-cache-2/_cacache/index-v5/ae/0b/e8166faad33ceb76841ce09c5e5e619d46225021c61320e9f0882993d698 new file mode 100644 index 000000000..947ecb54e --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/ae/0b/e8166faad33ceb76841ce09c5e5e619d46225021c61320e9f0882993d698 @@ -0,0 +1,2 @@ + +320f4e526101ac3e70b6f7560dba51530e454b30 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz","integrity":"sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==","time":1774894895542,"size":2989,"metadata":{"time":1774894895433,"url":"https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"9dd1143de80f22977243071d6cb88dc0\"","last-modified":"Sun, 30 Jun 2024 14:48:18 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/b3/0a/d7cd7487e60fb3aff6f4679e99cc0f8445ae36507f287aff8dc9d5dea1eb b/.npm-cache-2/_cacache/index-v5/b3/0a/d7cd7487e60fb3aff6f4679e99cc0f8445ae36507f287aff8dc9d5dea1eb new file mode 100644 index 000000000..5fda8ce87 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/b3/0a/d7cd7487e60fb3aff6f4679e99cc0f8445ae36507f287aff8dc9d5dea1eb @@ -0,0 +1,2 @@ + +bfcb6c404cecfc40d00028b84f5ca2555758ad0a {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz","integrity":"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==","time":1774894895561,"size":4797,"metadata":{"time":1774894895442,"url":"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"3d8272b0688c72ed84241cd294c61525\"","last-modified":"Fri, 06 Jun 2025 19:56:03 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/b4/9d/5a271b1898a503a6f8a6b2361235fd7539e9ae1aa5622d3e78124d1a0c34 b/.npm-cache-2/_cacache/index-v5/b4/9d/5a271b1898a503a6f8a6b2361235fd7539e9ae1aa5622d3e78124d1a0c34 new file mode 100644 index 000000000..25412c060 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/b4/9d/5a271b1898a503a6f8a6b2361235fd7539e9ae1aa5622d3e78124d1a0c34 @@ -0,0 +1,2 @@ + +7f2edc1a38be38e6ce79ba2ace9557d8767d1e63 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/which/-/which-2.0.2.tgz","integrity":"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==","time":1774894895557,"size":4496,"metadata":{"time":1774894895393,"url":"https://registry.npmjs.org/which/-/which-2.0.2.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"9556a736013ff5223cc9731d9f32b55f\"","last-modified":"Mon, 18 Nov 2019 22:26:18 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/ba/31/0ff11cd5c49f9abb3792227a2806421aeb4003688278322146dd805a2cea b/.npm-cache-2/_cacache/index-v5/ba/31/0ff11cd5c49f9abb3792227a2806421aeb4003688278322146dd805a2cea new file mode 100644 index 000000000..db234a842 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/ba/31/0ff11cd5c49f9abb3792227a2806421aeb4003688278322146dd805a2cea @@ -0,0 +1,2 @@ + +488a976a7c37736dcf64fc5119b9c9120db2f47d {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz","integrity":"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==","time":1774894895564,"size":1506,"metadata":{"time":1774894895487,"url":"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"aa7675df57afd8404d9aaa55e659f7a8\"","last-modified":"Fri, 06 Sep 2019 14:53:29 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/c4/b3/b70b72339abf422623eb04a0c2f91ec333d429d7bea5c11c64d2011e4f4d b/.npm-cache-2/_cacache/index-v5/c4/b3/b70b72339abf422623eb04a0c2f91ec333d429d7bea5c11c64d2011e4f4d new file mode 100644 index 000000000..984550530 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/c4/b3/b70b72339abf422623eb04a0c2f91ec333d429d7bea5c11c64d2011e4f4d @@ -0,0 +1,2 @@ + +f7f1c18ea15c5231f7f1be947f07e294cdd7cbdd {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz","integrity":"sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==","time":1774894895547,"size":5473,"metadata":{"time":1774894895443,"url":"https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"fadd8ac785698755f0e6aa78138866d2\"","last-modified":"Tue, 08 Nov 2022 15:39:55 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/c7/00/75bf8643b1d803f427bd1e39480195432a26cf1b842251ec3a8629bd85b9 b/.npm-cache-2/_cacache/index-v5/c7/00/75bf8643b1d803f427bd1e39480195432a26cf1b842251ec3a8629bd85b9 new file mode 100644 index 000000000..ab42c8263 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/c7/00/75bf8643b1d803f427bd1e39480195432a26cf1b842251ec3a8629bd85b9 @@ -0,0 +1,2 @@ + +bcab70dbc3bc1448f615841459da1ab0d7073c29 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz","integrity":"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==","time":1774894895561,"size":1969,"metadata":{"time":1774894895493,"url":"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"0c73b74773798d807dccd7d50638dfaf\"","last-modified":"Thu, 18 Jul 2019 04:50:00 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/e7/d9/7a96344f2b139adbb2d367863738188c938fdf38d5ef69f08dbbd9f85e18 b/.npm-cache-2/_cacache/index-v5/e7/d9/7a96344f2b139adbb2d367863738188c938fdf38d5ef69f08dbbd9f85e18 new file mode 100644 index 000000000..a39583f71 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/e7/d9/7a96344f2b139adbb2d367863738188c938fdf38d5ef69f08dbbd9f85e18 @@ -0,0 +1,2 @@ + +a39349a59dc78b9d6efeeaaa3681f440236e71f2 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz","integrity":"sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==","time":1774894895547,"size":2156,"metadata":{"time":1774894895425,"url":"https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"7a61412e90096bf73749e7408221ff6d\"","last-modified":"Thu, 26 Feb 2026 13:51:12 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/ed/d5/bb80f2dd494bf2fc92b4cb821249007f5f1d61cd84fe99dd60ca56f528c4 b/.npm-cache-2/_cacache/index-v5/ed/d5/bb80f2dd494bf2fc92b4cb821249007f5f1d61cd84fe99dd60ca56f528c4 new file mode 100644 index 000000000..7e44c3feb --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/ed/d5/bb80f2dd494bf2fc92b4cb821249007f5f1d61cd84fe99dd60ca56f528c4 @@ -0,0 +1,2 @@ + +5862930803130948e18ac18ce99fe0dde63f4ca5 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz","integrity":"sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==","time":1774894895585,"size":5463,"metadata":{"time":1774894895473,"url":"https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"859edb117b12e26369adb4c319462684\"","last-modified":"Mon, 15 Dec 2025 19:17:33 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/f0/3b/58c14b3461e0a75ddd4a0be80707cae7f82bf1ef1ae03a0dfc8054aa2570 b/.npm-cache-2/_cacache/index-v5/f0/3b/58c14b3461e0a75ddd4a0be80707cae7f82bf1ef1ae03a0dfc8054aa2570 new file mode 100644 index 000000000..d8fb4c7c1 --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/f0/3b/58c14b3461e0a75ddd4a0be80707cae7f82bf1ef1ae03a0dfc8054aa2570 @@ -0,0 +1,2 @@ + +b12d0bae76c9d28a74afe26a6841751e7e35e503 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz","integrity":"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==","time":1774894895554,"size":5280,"metadata":{"time":1774894895456,"url":"https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"6c7853a15a37d1e53daf11ded87c940d\"","last-modified":"Wed, 11 Dec 2024 04:53:20 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_cacache/index-v5/f8/4a/52b1c2943a9a945ffff983101f4282cf512899f2ea417b7a8d877f4c22b7 b/.npm-cache-2/_cacache/index-v5/f8/4a/52b1c2943a9a945ffff983101f4282cf512899f2ea417b7a8d877f4c22b7 new file mode 100644 index 000000000..c253fb0fb --- /dev/null +++ b/.npm-cache-2/_cacache/index-v5/f8/4a/52b1c2943a9a945ffff983101f4282cf512899f2ea417b7a8d877f4c22b7 @@ -0,0 +1,2 @@ + +058a1fa667219999c3f233df16101f1ba9172a8f {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz","integrity":"sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==","time":1774894895553,"size":4316,"metadata":{"time":1774894895396,"url":"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz","reqHeaders":{},"resHeaders":{"cache-control":"public, immutable, max-age=31557600","content-type":"application/octet-stream","date":"Mon, 30 Mar 2026 18:21:36 GMT","etag":"\"fff9fbb2bbbde2eef7e12af24dcc4def\"","last-modified":"Mon, 08 Sep 2025 19:09:14 GMT","vary":"Accept-Encoding"},"options":{"compress":true}}} \ No newline at end of file diff --git a/.npm-cache-2/_update-notifier-last-checked b/.npm-cache-2/_update-notifier-last-checked new file mode 100644 index 000000000..e69de29bb diff --git a/infra/session-tracker.mjs b/infra/session-tracker.mjs index be5913398..5f61c2128 100644 --- a/infra/session-tracker.mjs +++ b/infra/session-tracker.mjs @@ -690,6 +690,15 @@ export class SessionTracker { emitSessionEvent(session, msg); } + /** + * Backward-compatible alias for older callers/tests. + * @param {string} taskId + * @param {Object|string} event + */ + appendEvent(taskId, event) { + return this.recordEvent(taskId, event); + } + /** * Mark a session as completed. * @param {string} taskId @@ -1012,6 +1021,9 @@ export class SessionTracker { recommendation: progress?.recommendation || "none", preview: this.#lastMessagePreview(s), lastMessage: this.#lastMessagePreview(s), + totalTokens: Number(tokenUsage?.totalTokens || 0), + inputTokens: Number(tokenUsage?.inputTokens || 0), + outputTokens: Number(tokenUsage?.outputTokens || 0), insights: s.insights || null, }); }; @@ -2234,6 +2246,15 @@ export async function createSession(opts) { return getSessionTracker().createSession(opts); } +/** + * Append an event/message to an existing session. + * @param {string} sessionId + * @param {Object|string} event + */ +export function appendEvent(sessionId, event) { + return getSessionTracker().appendEvent(sessionId, event); +} + /** * Update session status. * @param {string} sessionId @@ -2302,5 +2323,3 @@ export function _resetSingleton(nextOptions) { _instance = new SessionTracker(nextOptions); } } - - diff --git a/infra/tui-bridge.mjs b/infra/tui-bridge.mjs index 7149528b0..78518bf58 100644 --- a/infra/tui-bridge.mjs +++ b/infra/tui-bridge.mjs @@ -271,17 +271,35 @@ export function buildMonitorStatsPayload({ agentPool, runtimeStats = {}, uptimeM } export function buildSessionsUpdatePayload(sessions = []) { - return Array.isArray(sessions) ? sessions.map((session) => ({ ...session })) : []; + return Array.isArray(sessions) + ? sessions.map((session) => { + const normalized = session && typeof session === "object" ? { ...session } : {}; + const tokenUsage = normalized?.insights?.tokenUsage || null; + const inputTokens = Number(normalized.inputTokens ?? tokenUsage?.inputTokens ?? 0); + const outputTokens = Number(normalized.outputTokens ?? tokenUsage?.outputTokens ?? 0); + const totalTokens = Number( + normalized.totalTokens ?? normalized.tokenCount ?? tokenUsage?.totalTokens ?? (inputTokens + outputTokens), + ); + normalized.inputTokens = Number.isFinite(inputTokens) ? Math.max(0, Math.round(inputTokens)) : 0; + normalized.outputTokens = Number.isFinite(outputTokens) ? Math.max(0, Math.round(outputTokens)) : 0; + normalized.totalTokens = Number.isFinite(totalTokens) ? Math.max(0, Math.round(totalTokens)) : (normalized.inputTokens + normalized.outputTokens); + normalized.tokenCount = normalized.totalTokens; + return normalized; + }) + : []; } export function buildSessionEventPayload(payload = {}) { const event = payload?.event && typeof payload.event === "object" ? { ...payload.event } : { kind: "message", ...(payload?.message ? { message: payload.message } : {}) }; + const session = payload?.session && typeof payload.session === "object" + ? buildSessionsUpdatePayload([payload.session])[0] + : {}; return { - sessionId: String(payload?.sessionId || payload?.session?.id || "").trim(), - taskId: String(payload?.taskId || payload?.session?.taskId || "").trim(), - session: payload?.session && typeof payload.session === "object" ? { ...payload.session } : {}, + sessionId: String(payload?.sessionId || session?.id || payload?.session?.id || "").trim(), + taskId: String(payload?.taskId || session?.taskId || payload?.session?.taskId || "").trim(), + session, event, }; } diff --git a/lib/session-insights.mjs b/lib/session-insights.mjs index 422e325f0..dac11cb59 100644 --- a/lib/session-insights.mjs +++ b/lib/session-insights.mjs @@ -233,6 +233,16 @@ function normalizeUsage(value) { return { input, output, total }; } +function normalizeTokenUsageMeta(meta) { + if (!meta || typeof meta !== "object") return null; + return normalizeUsage( + meta.tokenUsage + || meta.usage + || meta.tokens + || (meta.inputTokens != null || meta.outputTokens != null || meta.totalTokens != null ? meta : null), + ); +} + function toTimestampMs(value) { if (value === null || value === undefined || value === "") return null; const ms = new Date(value).getTime(); @@ -269,7 +279,7 @@ function buildTurnTimeline(messages = []) { if (type === "tool_call" && String(msg?.meta?.lifecycle || "").toLowerCase() !== "started") { entry.toolCalls += 1; } - const usage = normalizeUsage(msg?.meta?.usage) || normalizeUsage(msg?.usage) || null; + const usage = normalizeTokenUsageMeta(msg?.meta) || normalizeUsage(msg?.usage) || null; if (usage) { entry.inputTokens += usage.input; entry.outputTokens += usage.output; @@ -346,7 +356,7 @@ export function buildSessionInsights(fullSession = null) { }); } - const usage = normalizeUsage(msg?.meta?.usage) || normalizeUsage(msg?.usage) || null; + const usage = normalizeTokenUsageMeta(msg?.meta) || normalizeUsage(msg?.usage) || null; if (usage) { tokenUsage.inputTokens += usage.input; tokenUsage.outputTokens += usage.output; @@ -483,5 +493,3 @@ export function buildSessionInsights(fullSession = null) { - - diff --git a/server/ui-server.mjs b/server/ui-server.mjs index 18930941a..c5aa00656 100644 --- a/server/ui-server.mjs +++ b/server/ui-server.mjs @@ -13111,6 +13111,12 @@ async function buildUsageAnalytics(days) { const dailySkills = {}; /** dailyMcp[date][tool] = count */ const dailyMcp = {}; + /** dailyInputTokens[date] = total input tokens */ + const dailyInputTokens = {}; + /** dailyOutputTokens[date] = total output tokens */ + const dailyOutputTokens = {}; + /** dailyTotalTokens[date] = total tokens */ + const dailyTotalTokens = {}; const allDates = new Set(); @@ -13127,6 +13133,11 @@ async function buildUsageAnalytics(days) { if (ts > newestTs) newestTs = ts; const day = getEntryDayKey(session, ts); if (day) allDates.add(day); + if (day) { + dailyInputTokens[day] = (dailyInputTokens[day] || 0) + numberOrZero(session.inputTokens); + dailyOutputTokens[day] = (dailyOutputTokens[day] || 0) + numberOrZero(session.outputTokens); + dailyTotalTokens[day] = (dailyTotalTokens[day] || 0) + numberOrZero(session.tokenCount); + } agentRuns += 1; const exec = String(session.executor || session.model || "unknown").trim() || "unknown"; @@ -13201,7 +13212,15 @@ async function buildUsageAnalytics(days) { const topSkillNames = topSkills.slice(0, 6).map((s) => s.name); const topMcpNames = topMcpTools.slice(0, 6).map((t) => t.name); - const trend = { dates: sortedDates, agents: {}, skills: {}, mcpTools: {} }; + const trend = { + dates: sortedDates, + agents: {}, + skills: {}, + mcpTools: {}, + tokens: sortedDates.map((d) => dailyTotalTokens[d] || 0), + inputTokens: sortedDates.map((d) => dailyInputTokens[d] || 0), + outputTokens: sortedDates.map((d) => dailyOutputTokens[d] || 0), + }; for (const name of topAgentNames) { trend.agents[name] = sortedDates.map((d) => dailyAgents[d]?.[name] || 0); } @@ -13212,10 +13231,17 @@ async function buildUsageAnalytics(days) { trend.mcpTools[name] = sortedDates.map((d) => dailyMcp[d]?.[name] || 0); } + const totalTokens = sessionWindow.reduce((sum, session) => sum + numberOrZero(session.tokenCount), 0); + const totalInputTokens = sessionWindow.reduce((sum, session) => sum + numberOrZero(session.inputTokens), 0); + const totalOutputTokens = sessionWindow.reduce((sum, session) => sum + numberOrZero(session.outputTokens), 0); + return { agentRuns, skillInvocations, mcpToolCalls, + totalTokens, + totalInputTokens, + totalOutputTokens, avgPerDay, lastActiveAt: newestTs < Infinity && newestTs > 0 ? new Date(newestTs).toISOString() : null, sinceAt: oldestTs < Infinity ? new Date(oldestTs).toISOString() : null, diff --git a/site/lib/session-insights.mjs b/site/lib/session-insights.mjs index 2673fa076..aa61676ec 100644 --- a/site/lib/session-insights.mjs +++ b/site/lib/session-insights.mjs @@ -225,14 +225,83 @@ function parseContextBreakdown(text) { function normalizeUsage(value) { if (!value || typeof value !== "object") return null; const input = - Number(value.input_tokens ?? value.prompt_tokens ?? value.input ?? value.prompt ?? 0) || 0; + Number(value.input_tokens ?? value.prompt_tokens ?? value.inputTokens ?? value.promptTokens ?? value.input ?? value.prompt ?? 0) || 0; const output = - Number(value.output_tokens ?? value.completion_tokens ?? value.output ?? value.completion ?? 0) || 0; - const total = Number(value.total_tokens ?? value.total ?? input + output) || 0; + Number(value.output_tokens ?? value.completion_tokens ?? value.outputTokens ?? value.completionTokens ?? value.output ?? value.completion ?? 0) || 0; + const total = Number(value.total_tokens ?? value.totalTokens ?? value.total ?? input + output) || 0; if (input <= 0 && output <= 0 && total <= 0) return null; return { input, output, total }; } +function normalizeTokenUsageMeta(meta) { + if (!meta || typeof meta !== "object") return null; + return normalizeUsage( + meta.tokenUsage + || meta.usage + || meta.tokens + || (meta.inputTokens != null || meta.outputTokens != null || meta.totalTokens != null ? meta : null), + ); +} + +function toTimestampMs(value) { + if (value === null || value === undefined || value === "") return null; + const ms = new Date(value).getTime(); + return Number.isFinite(ms) ? ms : null; +} + +function buildTurnTimeline(messages = []) { + const turns = new Map(); + for (const msg of Array.isArray(messages) ? messages : []) { + if (!msg || !Number.isFinite(Number(msg.turnIndex))) continue; + const turnIndex = Number(msg.turnIndex); + const timestamp = String(msg.timestamp || ""); + const tsMs = toTimestampMs(timestamp); + const entry = turns.get(turnIndex) || { + turn: turnIndex + 1, + turnIndex, + startedAt: null, + endedAt: null, + durationMs: null, + inputTokens: 0, + outputTokens: 0, + totalTokens: 0, + toolCalls: 0, + assistantPreview: "", + }; + if (tsMs !== null) { + const startedMs = toTimestampMs(entry.startedAt); + const endedMs = toTimestampMs(entry.endedAt); + if (startedMs === null || tsMs < startedMs) entry.startedAt = timestamp; + if (endedMs === null || tsMs > endedMs) entry.endedAt = timestamp; + } + const type = String(msg.type || "").toLowerCase(); + const role = String(msg.role || "").toLowerCase(); + if (type === "tool_call" && String(msg?.meta?.lifecycle || "").toLowerCase() !== "started") { + entry.toolCalls += 1; + } + const usage = normalizeTokenUsageMeta(msg?.meta) || normalizeUsage(msg?.usage) || null; + if (usage) { + entry.inputTokens += usage.input; + entry.outputTokens += usage.output; + entry.totalTokens += usage.total; + } + if ((role === "assistant" || type === "agent_message" || type === "assistant_message") && !entry.assistantPreview) { + entry.assistantPreview = toText(msg.content).replace(/\s+/g, " ").trim().slice(0, 180); + } + turns.set(turnIndex, entry); + } + return Array.from(turns.values()) + .sort((a, b) => a.turnIndex - b.turnIndex) + .map((entry) => { + const startedMs = toTimestampMs(entry.startedAt); + const endedMs = toTimestampMs(entry.endedAt); + return { + ...entry, + durationMs: startedMs !== null && endedMs !== null ? Math.max(0, endedMs - startedMs) : null, + }; + }); +} + export function formatCompactCount(value) { const n = Number(value || 0); if (!Number.isFinite(n)) return "0"; @@ -288,7 +357,7 @@ export function buildSessionInsights(fullSession = null) { }); } - const usage = normalizeUsage(msg?.meta?.usage) || normalizeUsage(msg?.usage) || null; + const usage = normalizeTokenUsageMeta(msg?.meta) || normalizeUsage(msg?.usage) || null; if (usage) { tokenUsage.inputTokens += usage.input; tokenUsage.outputTokens += usage.output; @@ -389,6 +458,7 @@ export function buildSessionInsights(fullSession = null) { contextWindow, contextBreakdown, tokenUsage, + turnTimeline: buildTurnTimeline(messages), activityDiff: { files: edited.map((entry) => ({ path: entry.path, @@ -417,6 +487,7 @@ export function buildSessionInsights(fullSession = null) { ? persisted.contextBreakdown : derived.contextBreakdown, tokenUsage: persisted.tokenUsage || derived.tokenUsage, + turnTimeline: Array.isArray(persisted.turnTimeline) ? persisted.turnTimeline : derived.turnTimeline, activityDiff: persisted.activityDiff || derived.activityDiff, generatedAt: persisted.generatedAt || derived.generatedAt, }; diff --git a/site/ui/styles/components.css b/site/ui/styles/components.css index cd322c994..d48a0e446 100644 --- a/site/ui/styles/components.css +++ b/site/ui/styles/components.css @@ -6185,3 +6185,30 @@ select.input { border-top: 1px solid var(--border); } } + +.fleet-slot-token-split { + display: inline-flex; + align-items: center; + gap: 4px; + max-width: 100%; + padding: 2px 6px; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface-1); + color: var(--text-secondary); + font-size: 10px; + line-height: 1.2; + white-space: nowrap; +} + +.fleet-slot-token-segment strong { + margin-right: 3px; + font-size: 9px; + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--text-hint); +} + +.fleet-slot-token-divider { + color: var(--text-hint); +} diff --git a/site/ui/tabs/agents.js b/site/ui/tabs/agents.js index 92d1105a8..1c3c87168 100644 --- a/site/ui/tabs/agents.js +++ b/site/ui/tabs/agents.js @@ -36,6 +36,7 @@ import { workspaces as managedWorkspaces, } from "../components/workspace-switcher.js"; import { ICONS } from "../modules/icons.js"; +import { formatCompactCount } from "../modules/session-insights.js"; import { formatRelative, truncate } from "../modules/utils.js"; import { resolveSessionWorkspaceHint } from "../modules/session-api.js"; import { @@ -336,6 +337,44 @@ function getFleetEntrySearchBlob(entry) { .join(" "); } +function getFleetEntryTokenUsage(entry) { + const session = entry?.session || null; + const tokenUsage = session?.insights?.tokenUsage || null; + const totalTokens = Number(session?.totalTokens ?? tokenUsage?.totalTokens ?? 0); + const inputTokens = Number(session?.inputTokens ?? tokenUsage?.inputTokens ?? 0); + const outputTokens = Number(session?.outputTokens ?? tokenUsage?.outputTokens ?? 0); + return { + totalTokens: Number.isFinite(totalTokens) ? totalTokens : 0, + inputTokens: Number.isFinite(inputTokens) ? inputTokens : 0, + outputTokens: Number.isFinite(outputTokens) ? outputTokens : 0, + }; +} + +function buildFleetEntryTokenTooltip(entry) { + const usage = getFleetEntryTokenUsage(entry); + const total = usage.totalTokens || (usage.inputTokens + usage.outputTokens); + if (total <= 0) return "No token usage yet"; + const ratio = usage.outputTokens > 0 + ? `${(usage.inputTokens / Math.max(usage.outputTokens, 1)).toFixed(2)}:1 in/out` + : "output pending"; + return `Input ${usage.inputTokens.toLocaleString()} · Output ${usage.outputTokens.toLocaleString()} · Total ${total.toLocaleString()} · ${ratio}`; +} + +function renderFleetEntryTokenSplit(entry) { + const usage = getFleetEntryTokenUsage(entry); + const total = usage.totalTokens || (usage.inputTokens + usage.outputTokens); + if (total <= 0) return null; + return html` + <${Tooltip} title=${buildFleetEntryTokenTooltip(entry)} arrow> + + In ${formatCompactCount(usage.inputTokens)} + / + Out ${formatCompactCount(usage.outputTokens)} + + /> + `; +} + function getFleetEntryRelativeTime(entry) { const raw = entry?.slot?.startedAt @@ -1919,6 +1958,11 @@ export function AgentsTab() { ${s.taskId ? ` · ${s.taskId}` : ""} ${s.branch ? ` · ${s.branch}` : ""} +
+ ${renderFleetEntryTokenSplit({ session: s })} <${Badge} status=${s.status || "idle"} text=${s.status || "idle"} /> @@ -2786,5 +2830,3 @@ export function FleetSessionsTab() { `} `; } - - diff --git a/site/ui/tabs/telemetry.js b/site/ui/tabs/telemetry.js index 872d67c72..8a17c2faf 100644 --- a/site/ui/tabs/telemetry.js +++ b/site/ui/tabs/telemetry.js @@ -722,6 +722,11 @@ export function TelemetryTab() { const hasTrend = trend?.dates?.length > 0 && Object.keys(trendSeriesMap || {}).length > 0; + const tokenTrendSeriesMap = useMemo(() => ({ + Input: trend?.inputTokens || [], + Output: trend?.outputTokens || [], + }), [trend]); + const hasTokenTrend = trend?.dates?.length > 0 && ((trend?.inputTokens || []).length > 0 || (trend?.outputTokens || []).length > 0); const sinceLabel = formatSinceDate(data?.sinceAt); @@ -786,6 +791,10 @@ export function TelemetryTab() { value=${formatCount(lifetimeTotals?.attemptsCount || 0)} /> <${AnalyticsStat} icon="#" label="Total tokens across all attempts" value=${formatCount(lifetimeTotals?.tokenCount || 0)} /> + <${AnalyticsStat} icon="↘" label="Input tokens across all attempts" + value=${formatCount(lifetimeTotals?.inputTokens || 0)} /> + <${AnalyticsStat} icon="↗" label="Output tokens across all attempts" + value=${formatCount(lifetimeTotals?.outputTokens || 0)} /> <${AnalyticsStat} icon="⏱" label="Total runtime across all attempts" value=${formatDurationMs(lifetimeTotals?.durationMs || 0)} /> /> @@ -831,6 +840,23 @@ export function TelemetryTab() { `} /> + <${Paper} elevation=${1} sx=${{ p: 2, mb: 2 }}> + <${Typography} variant="h6" gutterBottom>Token Split Trend/> + ${hasTokenTrend ? html` + <${ChartLegend} + label=${"TOKENS"} + seriesMap=${tokenTrendSeriesMap} + palette=${["#42a5f5", "#ab47bc"]} + /> + <${Paper} variant="outlined" sx=${{ p: 1 }}> + <${TrendLines} dates=${trend.dates} seriesMap=${tokenTrendSeriesMap} palette=${["#42a5f5", "#ab47bc"]} /> + /> + ` : html` + <${EmptyState} title="No token split data" + description="Input and output token trends appear once sessions record usage." /> + `} + /> + <${Stack} direction=${{ xs: "column", md: "row" }} spacing=${2} sx=${{ mb: 2 }}> <${Paper} elevation=${1} sx=${{ p: 2, flex: 1 }}> diff --git a/tests/ui-server.test.mjs b/tests/ui-server.test.mjs index a912b8874..b847e0924 100644 --- a/tests/ui-server.test.mjs +++ b/tests/ui-server.test.mjs @@ -4709,6 +4709,47 @@ describe("ui-server mini app", () => { } }, process.platform === "win32" ? 30000 : 15000); + it("includes split token counts in session list payloads", async () => { + process.env.TELEGRAM_UI_TUNNEL = "disabled"; + const mod = await import("../server/ui-server.mjs"); + const { _resetSingleton, getSessionTracker } = await import("../infra/session-tracker.mjs"); + _resetSingleton({ persistDir: null }); + const server = await mod.startTelegramUiServer({ + port: await getFreePort(), + host: "127.0.0.1", + skipInstanceLock: true, + skipAutoOpen: true, + }); + const port = server.address().port; + const tracker = getSessionTracker(); + tracker.createSession({ + id: "tokens-visible-session", + type: "primary", + metadata: { title: "Tokens Visible Session" }, + }); + tracker.appendEvent("tokens-visible-session", { + role: "assistant", + content: "Done", + meta: { + tokenUsage: { + totalTokens: 2000, + inputTokens: 1200, + outputTokens: 800, + }, + }, + }); + + const listRes = await fetch(`http://127.0.0.1:${port}/api/sessions?includeHidden=1`); + const listJson = await listRes.json(); + expect(listRes.status).toBe(200); + expect(listJson.ok).toBe(true); + const session = listJson.sessions.find((entry) => entry.id === "tokens-visible-session"); + expect(session).toBeTruthy(); + expect(session.totalTokens).toBe(2000); + expect(session.inputTokens).toBe(1200); + expect(session.outputTokens).toBe(800); + }); + it("sources agent-run analytics from completed session history when session-start events are stale", async () => { const isolatedRepoRoot = mkdtempSync(join(tmpdir(), "bosun-ui-usage-")); const previousRepoRoot = process.env.REPO_ROOT; @@ -4805,6 +4846,10 @@ describe("ui-server mini app", () => { expect(payload.data?.diagnostics?.agentRunSource).toBe("completed_sessions"); expect(payload.data?.diagnostics?.completedSessions).toBe(2); expect(payload.data?.diagnostics?.sessionStarts).toBe(0); + expect(payload.data?.totalInputTokens).toBe(1700); + expect(payload.data?.totalOutputTokens).toBe(1000); + expect(payload.data?.trend?.inputTokens).toEqual([1700]); + expect(payload.data?.trend?.outputTokens).toEqual([1000]); expect(payload.data?.topAgents).toEqual( expect.arrayContaining([ expect.objectContaining({ name: "codex", count: 1 }), diff --git a/ui/styles/components.css b/ui/styles/components.css index 6cf07479f..3f7199fd6 100644 --- a/ui/styles/components.css +++ b/ui/styles/components.css @@ -6436,3 +6436,30 @@ select.input { border-top: 1px solid var(--border, #30363d); } } + +.fleet-slot-token-split { + display: inline-flex; + align-items: center; + gap: 4px; + max-width: 100%; + padding: 2px 6px; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface-1); + color: var(--text-secondary); + font-size: 10px; + line-height: 1.2; + white-space: nowrap; +} + +.fleet-slot-token-segment strong { + margin-right: 3px; + font-size: 9px; + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--text-hint); +} + +.fleet-slot-token-divider { + color: var(--text-hint); +} diff --git a/ui/tabs/agents.js b/ui/tabs/agents.js index 533849e37..b56797ac6 100644 --- a/ui/tabs/agents.js +++ b/ui/tabs/agents.js @@ -36,6 +36,7 @@ import { workspaces as managedWorkspaces, } from "../components/workspace-switcher.js"; import { ICONS } from "../modules/icons.js"; +import { formatCompactCount } from "../modules/session-insights.js"; import { formatRelative, truncate } from "../modules/utils.js"; import { resolveSessionWorkspaceHint } from "../modules/session-api.js"; import { @@ -336,6 +337,44 @@ function getFleetEntrySearchBlob(entry) { .join(" "); } +function getFleetEntryTokenUsage(entry) { + const session = entry?.session || null; + const tokenUsage = session?.insights?.tokenUsage || null; + const totalTokens = Number(session?.totalTokens ?? tokenUsage?.totalTokens ?? 0); + const inputTokens = Number(session?.inputTokens ?? tokenUsage?.inputTokens ?? 0); + const outputTokens = Number(session?.outputTokens ?? tokenUsage?.outputTokens ?? 0); + return { + totalTokens: Number.isFinite(totalTokens) ? totalTokens : 0, + inputTokens: Number.isFinite(inputTokens) ? inputTokens : 0, + outputTokens: Number.isFinite(outputTokens) ? outputTokens : 0, + }; +} + +function buildFleetEntryTokenTooltip(entry) { + const usage = getFleetEntryTokenUsage(entry); + const total = usage.totalTokens || (usage.inputTokens + usage.outputTokens); + if (total <= 0) return "No token usage yet"; + const ratio = usage.outputTokens > 0 + ? `${(usage.inputTokens / Math.max(usage.outputTokens, 1)).toFixed(2)}:1 in/out` + : "output pending"; + return `Input ${usage.inputTokens.toLocaleString()} · Output ${usage.outputTokens.toLocaleString()} · Total ${total.toLocaleString()} · ${ratio}`; +} + +function renderFleetEntryTokenSplit(entry) { + const usage = getFleetEntryTokenUsage(entry); + const total = usage.totalTokens || (usage.inputTokens + usage.outputTokens); + if (total <= 0) return null; + return html` + <${Tooltip} title=${buildFleetEntryTokenTooltip(entry)} arrow> + + In ${formatCompactCount(usage.inputTokens)} + / + Out ${formatCompactCount(usage.outputTokens)} + + /> + `; +} + function getFleetEntryRelativeTime(entry) { const raw = entry?.slot?.startedAt @@ -1924,6 +1963,7 @@ export function AgentsTab() { ${`Turns ${Number(s.turnCount || 0)}`} ${Number(s.elapsedMs || 0) > 0 ? ` · ${formatMsDuration(s.elapsedMs || 0)}` : ""} + ${renderFleetEntryTokenSplit({ session: s })} <${Badge} status=${s.status || "idle"} text=${s.status || "idle"} /> @@ -2791,6 +2831,3 @@ export function FleetSessionsTab() { `} `; } - - - diff --git a/ui/tabs/telemetry.js b/ui/tabs/telemetry.js index ee09b2d9c..066495b31 100644 --- a/ui/tabs/telemetry.js +++ b/ui/tabs/telemetry.js @@ -789,6 +789,11 @@ export function TelemetryTab() { const hasTrend = trend?.dates?.length > 0 && Object.keys(trendSeriesMap || {}).length > 0; + const tokenTrendSeriesMap = useMemo(() => ({ + Input: trend?.inputTokens || [], + Output: trend?.outputTokens || [], + }), [trend]); + const hasTokenTrend = trend?.dates?.length > 0 && ((trend?.inputTokens || []).length > 0 || (trend?.outputTokens || []).length > 0); const sinceLabel = formatSinceDate(data?.sinceAt); @@ -853,6 +858,10 @@ export function TelemetryTab() { value=${formatCount(lifetimeTotals?.attemptsCount || 0)} /> <${AnalyticsStat} icon="#" label="Total tokens across all attempts" value=${formatCount(lifetimeTotals?.tokenCount || 0)} /> + <${AnalyticsStat} icon="↘" label="Input tokens across all attempts" + value=${formatCount(lifetimeTotals?.inputTokens || 0)} /> + <${AnalyticsStat} icon="↗" label="Output tokens across all attempts" + value=${formatCount(lifetimeTotals?.outputTokens || 0)} /> <${AnalyticsStat} icon="⏱" label="Total runtime across all attempts" value=${formatDurationMs(lifetimeTotals?.durationMs || 0)} /> /> @@ -898,6 +907,23 @@ export function TelemetryTab() { `} /> + <${Paper} elevation=${1} sx=${{ p: 2, mb: 2 }}> + <${Typography} variant="h6" gutterBottom>Token Split Trend/> + ${hasTokenTrend ? html` + <${ChartLegend} + label=${"TOKENS"} + seriesMap=${tokenTrendSeriesMap} + palette=${["#42a5f5", "#ab47bc"]} + /> + <${Paper} variant="outlined" sx=${{ p: 1 }}> + <${TrendLines} dates=${trend.dates} seriesMap=${tokenTrendSeriesMap} palette=${["#42a5f5", "#ab47bc"]} /> + /> + ` : html` + <${EmptyState} title="No token split data" + description="Input and output token trends appear once sessions record usage." /> + `} + /> + <${Stack} direction=${{ xs: "column", md: "row" }} spacing=${2} sx=${{ mb: 2 }}> <${Paper} elevation=${1} sx=${{ p: 2, flex: 1 }}>