brosh 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brosh",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Terminal MCP bridge for AI-powered development",
5
5
  "author": "Ellery Familia",
6
6
  "repository": {
@@ -52,10 +52,20 @@ function formatMB(bytes) {
52
52
  return (bytes / 1024 / 1024).toFixed(1) + "MB";
53
53
  }
54
54
 
55
- function stripOnnxruntimeNode(resourcesDir, platform, arch) {
55
+ // With asar: false, modules are at app/node_modules/ instead of app.asar.unpacked/node_modules/
56
+ function getNodeModulesDir(resourcesDir) {
57
+ // Try asar-unpacked path first (asar: true), then loose app dir (asar: false)
58
+ const asarUnpacked = path.join(resourcesDir, "app.asar.unpacked/node_modules");
59
+ if (fs.existsSync(asarUnpacked)) return asarUnpacked;
60
+ const loose = path.join(resourcesDir, "app/node_modules");
61
+ if (fs.existsSync(loose)) return loose;
62
+ return null;
63
+ }
64
+
65
+ function stripOnnxruntimeNode(nodeModulesDir, platform, arch) {
56
66
  const onnxBinDir = path.join(
57
- resourcesDir,
58
- "app.asar.unpacked/node_modules/onnxruntime-node/bin/napi-v3"
67
+ nodeModulesDir,
68
+ "onnxruntime-node/bin/napi-v3"
59
69
  );
60
70
  if (!fs.existsSync(onnxBinDir)) return 0;
61
71
 
@@ -85,13 +95,10 @@ function stripOnnxruntimeNode(resourcesDir, platform, arch) {
85
95
  return removed;
86
96
  }
87
97
 
88
- function stripOnnxruntimeWeb(resourcesDir) {
98
+ function stripOnnxruntimeWeb(nodeModulesDir) {
89
99
  // onnxruntime-web is only needed for browser/WASM contexts.
90
100
  // We use onnxruntime-node for main process ML inference, so this is dead weight.
91
- const loc = path.join(
92
- resourcesDir,
93
- "app.asar.unpacked/node_modules/onnxruntime-web"
94
- );
101
+ const loc = path.join(nodeModulesDir, "onnxruntime-web");
95
102
  const size = dirSize(loc);
96
103
  if (rmSyncSafe(loc)) {
97
104
  console.log(` removed onnxruntime-web (${formatMB(size)})`);
@@ -100,19 +107,15 @@ function stripOnnxruntimeWeb(resourcesDir) {
100
107
  return 0;
101
108
  }
102
109
 
103
- function stripSharpPlatformModules(resourcesDir, platform, arch) {
104
- const unpackedModules = path.join(
105
- resourcesDir,
106
- "app.asar.unpacked/node_modules"
107
- );
108
- if (!fs.existsSync(unpackedModules)) return 0;
110
+ function stripSharpPlatformModules(nodeModulesDir, platform, arch) {
111
+ if (!fs.existsSync(nodeModulesDir)) return 0;
109
112
 
110
113
  const targetSuffix = `${platform}-${arch}`;
111
114
  let removed = 0;
112
115
 
113
- for (const dir of fs.readdirSync(unpackedModules)) {
116
+ for (const dir of fs.readdirSync(nodeModulesDir)) {
114
117
  if (!dir.startsWith("@img")) continue;
115
- const imgDir = path.join(unpackedModules, dir);
118
+ const imgDir = path.join(nodeModulesDir, dir);
116
119
  if (!fs.statSync(imgDir).isDirectory()) continue;
117
120
  for (const sub of fs.readdirSync(imgDir)) {
118
121
  const subPath = path.join(imgDir, sub);
@@ -137,11 +140,18 @@ exports.default = async function afterPack(context) {
137
140
  console.log(`\n afterPack: stripping binaries for ${platform}/${arch}`);
138
141
  console.log(` afterPack: resources at ${resourcesDir}`);
139
142
 
143
+ const nodeModulesDir = getNodeModulesDir(resourcesDir);
144
+ if (!nodeModulesDir) {
145
+ console.log(` afterPack: no node_modules found, skipping`);
146
+ return;
147
+ }
148
+ console.log(` afterPack: node_modules at ${nodeModulesDir}`);
149
+
140
150
  let totalSaved = 0;
141
151
 
142
- totalSaved += stripOnnxruntimeNode(resourcesDir, platform, arch);
143
- totalSaved += stripOnnxruntimeWeb(resourcesDir);
144
- totalSaved += stripSharpPlatformModules(resourcesDir, platform, arch);
152
+ totalSaved += stripOnnxruntimeNode(nodeModulesDir, platform, arch);
153
+ totalSaved += stripOnnxruntimeWeb(nodeModulesDir);
154
+ totalSaved += stripSharpPlatformModules(nodeModulesDir, platform, arch);
145
155
 
146
156
  console.log(` afterPack: total saved ${formatMB(totalSaved)}\n`);
147
157
  };
@@ -33,6 +33,7 @@
33
33
  "@xterm/addon-webgl": "^0.18.0",
34
34
  "@xterm/xterm": "^5.5.0",
35
35
  "brosh": "file:../..",
36
+ "bytenode": "^1.5.7",
36
37
  "chokidar": "^5.0.0",
37
38
  "cli-highlight": "^2.1.11",
38
39
  "electron-store": "^10.0.0",
@@ -55,6 +56,7 @@
55
56
  "concurrently": "^8.2.0",
56
57
  "electron": "^33.4.11",
57
58
  "electron-builder": "^25.0.0",
59
+ "esbuild": "^0.25.12",
58
60
  "react": "^18.2.0",
59
61
  "react-dom": "^18.2.0",
60
62
  "typescript": "^5.0.0",
@@ -63,7 +65,7 @@
63
65
  }
64
66
  },
65
67
  "../..": {
66
- "version": "0.1.2",
68
+ "version": "0.1.3",
67
69
  "license": "MIT",
68
70
  "dependencies": {
69
71
  "@anthropic-ai/sandbox-runtime": "^0.0.32",
@@ -772,9 +774,9 @@
772
774
  }
773
775
  },
774
776
  "node_modules/@esbuild/aix-ppc64": {
775
- "version": "0.21.5",
776
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
777
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
777
+ "version": "0.25.12",
778
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
779
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
778
780
  "cpu": [
779
781
  "ppc64"
780
782
  ],
@@ -785,13 +787,13 @@
785
787
  "aix"
786
788
  ],
787
789
  "engines": {
788
- "node": ">=12"
790
+ "node": ">=18"
789
791
  }
790
792
  },
791
793
  "node_modules/@esbuild/android-arm": {
792
- "version": "0.21.5",
793
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
794
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
794
+ "version": "0.25.12",
795
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
796
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
795
797
  "cpu": [
796
798
  "arm"
797
799
  ],
@@ -802,13 +804,13 @@
802
804
  "android"
803
805
  ],
804
806
  "engines": {
805
- "node": ">=12"
807
+ "node": ">=18"
806
808
  }
807
809
  },
808
810
  "node_modules/@esbuild/android-arm64": {
809
- "version": "0.21.5",
810
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
811
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
811
+ "version": "0.25.12",
812
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
813
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
812
814
  "cpu": [
813
815
  "arm64"
814
816
  ],
@@ -819,13 +821,13 @@
819
821
  "android"
820
822
  ],
821
823
  "engines": {
822
- "node": ">=12"
824
+ "node": ">=18"
823
825
  }
824
826
  },
825
827
  "node_modules/@esbuild/android-x64": {
826
- "version": "0.21.5",
827
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
828
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
828
+ "version": "0.25.12",
829
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
830
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
829
831
  "cpu": [
830
832
  "x64"
831
833
  ],
@@ -836,13 +838,13 @@
836
838
  "android"
837
839
  ],
838
840
  "engines": {
839
- "node": ">=12"
841
+ "node": ">=18"
840
842
  }
841
843
  },
842
844
  "node_modules/@esbuild/darwin-arm64": {
843
- "version": "0.21.5",
844
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
845
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
845
+ "version": "0.25.12",
846
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
847
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
846
848
  "cpu": [
847
849
  "arm64"
848
850
  ],
@@ -853,13 +855,13 @@
853
855
  "darwin"
854
856
  ],
855
857
  "engines": {
856
- "node": ">=12"
858
+ "node": ">=18"
857
859
  }
858
860
  },
859
861
  "node_modules/@esbuild/darwin-x64": {
860
- "version": "0.21.5",
861
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
862
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
862
+ "version": "0.25.12",
863
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
864
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
863
865
  "cpu": [
864
866
  "x64"
865
867
  ],
@@ -870,13 +872,13 @@
870
872
  "darwin"
871
873
  ],
872
874
  "engines": {
873
- "node": ">=12"
875
+ "node": ">=18"
874
876
  }
875
877
  },
876
878
  "node_modules/@esbuild/freebsd-arm64": {
877
- "version": "0.21.5",
878
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
879
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
879
+ "version": "0.25.12",
880
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
881
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
880
882
  "cpu": [
881
883
  "arm64"
882
884
  ],
@@ -887,13 +889,13 @@
887
889
  "freebsd"
888
890
  ],
889
891
  "engines": {
890
- "node": ">=12"
892
+ "node": ">=18"
891
893
  }
892
894
  },
893
895
  "node_modules/@esbuild/freebsd-x64": {
894
- "version": "0.21.5",
895
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
896
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
896
+ "version": "0.25.12",
897
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
898
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
897
899
  "cpu": [
898
900
  "x64"
899
901
  ],
@@ -904,13 +906,13 @@
904
906
  "freebsd"
905
907
  ],
906
908
  "engines": {
907
- "node": ">=12"
909
+ "node": ">=18"
908
910
  }
909
911
  },
910
912
  "node_modules/@esbuild/linux-arm": {
911
- "version": "0.21.5",
912
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
913
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
913
+ "version": "0.25.12",
914
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
915
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
914
916
  "cpu": [
915
917
  "arm"
916
918
  ],
@@ -921,13 +923,13 @@
921
923
  "linux"
922
924
  ],
923
925
  "engines": {
924
- "node": ">=12"
926
+ "node": ">=18"
925
927
  }
926
928
  },
927
929
  "node_modules/@esbuild/linux-arm64": {
928
- "version": "0.21.5",
929
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
930
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
930
+ "version": "0.25.12",
931
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
932
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
931
933
  "cpu": [
932
934
  "arm64"
933
935
  ],
@@ -938,13 +940,13 @@
938
940
  "linux"
939
941
  ],
940
942
  "engines": {
941
- "node": ">=12"
943
+ "node": ">=18"
942
944
  }
943
945
  },
944
946
  "node_modules/@esbuild/linux-ia32": {
945
- "version": "0.21.5",
946
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
947
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
947
+ "version": "0.25.12",
948
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
949
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
948
950
  "cpu": [
949
951
  "ia32"
950
952
  ],
@@ -955,13 +957,13 @@
955
957
  "linux"
956
958
  ],
957
959
  "engines": {
958
- "node": ">=12"
960
+ "node": ">=18"
959
961
  }
960
962
  },
961
963
  "node_modules/@esbuild/linux-loong64": {
962
- "version": "0.21.5",
963
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
964
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
964
+ "version": "0.25.12",
965
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
966
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
965
967
  "cpu": [
966
968
  "loong64"
967
969
  ],
@@ -972,13 +974,13 @@
972
974
  "linux"
973
975
  ],
974
976
  "engines": {
975
- "node": ">=12"
977
+ "node": ">=18"
976
978
  }
977
979
  },
978
980
  "node_modules/@esbuild/linux-mips64el": {
979
- "version": "0.21.5",
980
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
981
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
981
+ "version": "0.25.12",
982
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
983
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
982
984
  "cpu": [
983
985
  "mips64el"
984
986
  ],
@@ -989,13 +991,13 @@
989
991
  "linux"
990
992
  ],
991
993
  "engines": {
992
- "node": ">=12"
994
+ "node": ">=18"
993
995
  }
994
996
  },
995
997
  "node_modules/@esbuild/linux-ppc64": {
996
- "version": "0.21.5",
997
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
998
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
998
+ "version": "0.25.12",
999
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
1000
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
999
1001
  "cpu": [
1000
1002
  "ppc64"
1001
1003
  ],
@@ -1006,13 +1008,13 @@
1006
1008
  "linux"
1007
1009
  ],
1008
1010
  "engines": {
1009
- "node": ">=12"
1011
+ "node": ">=18"
1010
1012
  }
1011
1013
  },
1012
1014
  "node_modules/@esbuild/linux-riscv64": {
1013
- "version": "0.21.5",
1014
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
1015
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
1015
+ "version": "0.25.12",
1016
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
1017
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
1016
1018
  "cpu": [
1017
1019
  "riscv64"
1018
1020
  ],
@@ -1023,13 +1025,13 @@
1023
1025
  "linux"
1024
1026
  ],
1025
1027
  "engines": {
1026
- "node": ">=12"
1028
+ "node": ">=18"
1027
1029
  }
1028
1030
  },
1029
1031
  "node_modules/@esbuild/linux-s390x": {
1030
- "version": "0.21.5",
1031
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
1032
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
1032
+ "version": "0.25.12",
1033
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
1034
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
1033
1035
  "cpu": [
1034
1036
  "s390x"
1035
1037
  ],
@@ -1040,13 +1042,13 @@
1040
1042
  "linux"
1041
1043
  ],
1042
1044
  "engines": {
1043
- "node": ">=12"
1045
+ "node": ">=18"
1044
1046
  }
1045
1047
  },
1046
1048
  "node_modules/@esbuild/linux-x64": {
1047
- "version": "0.21.5",
1048
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
1049
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
1049
+ "version": "0.25.12",
1050
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
1051
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
1050
1052
  "cpu": [
1051
1053
  "x64"
1052
1054
  ],
@@ -1057,13 +1059,30 @@
1057
1059
  "linux"
1058
1060
  ],
1059
1061
  "engines": {
1060
- "node": ">=12"
1062
+ "node": ">=18"
1063
+ }
1064
+ },
1065
+ "node_modules/@esbuild/netbsd-arm64": {
1066
+ "version": "0.25.12",
1067
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
1068
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
1069
+ "cpu": [
1070
+ "arm64"
1071
+ ],
1072
+ "dev": true,
1073
+ "license": "MIT",
1074
+ "optional": true,
1075
+ "os": [
1076
+ "netbsd"
1077
+ ],
1078
+ "engines": {
1079
+ "node": ">=18"
1061
1080
  }
1062
1081
  },
1063
1082
  "node_modules/@esbuild/netbsd-x64": {
1064
- "version": "0.21.5",
1065
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
1066
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
1083
+ "version": "0.25.12",
1084
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
1085
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
1067
1086
  "cpu": [
1068
1087
  "x64"
1069
1088
  ],
@@ -1074,13 +1093,30 @@
1074
1093
  "netbsd"
1075
1094
  ],
1076
1095
  "engines": {
1077
- "node": ">=12"
1096
+ "node": ">=18"
1097
+ }
1098
+ },
1099
+ "node_modules/@esbuild/openbsd-arm64": {
1100
+ "version": "0.25.12",
1101
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
1102
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
1103
+ "cpu": [
1104
+ "arm64"
1105
+ ],
1106
+ "dev": true,
1107
+ "license": "MIT",
1108
+ "optional": true,
1109
+ "os": [
1110
+ "openbsd"
1111
+ ],
1112
+ "engines": {
1113
+ "node": ">=18"
1078
1114
  }
1079
1115
  },
1080
1116
  "node_modules/@esbuild/openbsd-x64": {
1081
- "version": "0.21.5",
1082
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
1083
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
1117
+ "version": "0.25.12",
1118
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
1119
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
1084
1120
  "cpu": [
1085
1121
  "x64"
1086
1122
  ],
@@ -1091,13 +1127,30 @@
1091
1127
  "openbsd"
1092
1128
  ],
1093
1129
  "engines": {
1094
- "node": ">=12"
1130
+ "node": ">=18"
1131
+ }
1132
+ },
1133
+ "node_modules/@esbuild/openharmony-arm64": {
1134
+ "version": "0.25.12",
1135
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
1136
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
1137
+ "cpu": [
1138
+ "arm64"
1139
+ ],
1140
+ "dev": true,
1141
+ "license": "MIT",
1142
+ "optional": true,
1143
+ "os": [
1144
+ "openharmony"
1145
+ ],
1146
+ "engines": {
1147
+ "node": ">=18"
1095
1148
  }
1096
1149
  },
1097
1150
  "node_modules/@esbuild/sunos-x64": {
1098
- "version": "0.21.5",
1099
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
1100
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
1151
+ "version": "0.25.12",
1152
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
1153
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
1101
1154
  "cpu": [
1102
1155
  "x64"
1103
1156
  ],
@@ -1108,13 +1161,13 @@
1108
1161
  "sunos"
1109
1162
  ],
1110
1163
  "engines": {
1111
- "node": ">=12"
1164
+ "node": ">=18"
1112
1165
  }
1113
1166
  },
1114
1167
  "node_modules/@esbuild/win32-arm64": {
1115
- "version": "0.21.5",
1116
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
1117
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
1168
+ "version": "0.25.12",
1169
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
1170
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
1118
1171
  "cpu": [
1119
1172
  "arm64"
1120
1173
  ],
@@ -1125,13 +1178,13 @@
1125
1178
  "win32"
1126
1179
  ],
1127
1180
  "engines": {
1128
- "node": ">=12"
1181
+ "node": ">=18"
1129
1182
  }
1130
1183
  },
1131
1184
  "node_modules/@esbuild/win32-ia32": {
1132
- "version": "0.21.5",
1133
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
1134
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
1185
+ "version": "0.25.12",
1186
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
1187
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
1135
1188
  "cpu": [
1136
1189
  "ia32"
1137
1190
  ],
@@ -1142,13 +1195,13 @@
1142
1195
  "win32"
1143
1196
  ],
1144
1197
  "engines": {
1145
- "node": ">=12"
1198
+ "node": ">=18"
1146
1199
  }
1147
1200
  },
1148
1201
  "node_modules/@esbuild/win32-x64": {
1149
- "version": "0.21.5",
1150
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
1151
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
1202
+ "version": "0.25.12",
1203
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
1204
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
1152
1205
  "cpu": [
1153
1206
  "x64"
1154
1207
  ],
@@ -1159,7 +1212,7 @@
1159
1212
  "win32"
1160
1213
  ],
1161
1214
  "engines": {
1162
- "node": ">=12"
1215
+ "node": ">=18"
1163
1216
  }
1164
1217
  },
1165
1218
  "node_modules/@floating-ui/core": {
@@ -4179,6 +4232,15 @@
4179
4232
  "node": ">= 10.0.0"
4180
4233
  }
4181
4234
  },
4235
+ "node_modules/bytenode": {
4236
+ "version": "1.5.7",
4237
+ "resolved": "https://registry.npmjs.org/bytenode/-/bytenode-1.5.7.tgz",
4238
+ "integrity": "sha512-FWo+xOlZ+BOzk8ZjyVvHB41wD4CoS/iHpCWPrKzghQiAE/Z/npCvz4DJ1hbzFhEbEkrv4TAikqHrvz5dTt9/jQ==",
4239
+ "license": "MIT",
4240
+ "bin": {
4241
+ "bytenode": "lib/cli.js"
4242
+ }
4243
+ },
4182
4244
  "node_modules/cac": {
4183
4245
  "version": "6.7.14",
4184
4246
  "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -5711,9 +5773,9 @@
5711
5773
  "license": "MIT"
5712
5774
  },
5713
5775
  "node_modules/esbuild": {
5714
- "version": "0.21.5",
5715
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
5716
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
5776
+ "version": "0.25.12",
5777
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
5778
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
5717
5779
  "dev": true,
5718
5780
  "hasInstallScript": true,
5719
5781
  "license": "MIT",
@@ -5721,32 +5783,35 @@
5721
5783
  "esbuild": "bin/esbuild"
5722
5784
  },
5723
5785
  "engines": {
5724
- "node": ">=12"
5786
+ "node": ">=18"
5725
5787
  },
5726
5788
  "optionalDependencies": {
5727
- "@esbuild/aix-ppc64": "0.21.5",
5728
- "@esbuild/android-arm": "0.21.5",
5729
- "@esbuild/android-arm64": "0.21.5",
5730
- "@esbuild/android-x64": "0.21.5",
5731
- "@esbuild/darwin-arm64": "0.21.5",
5732
- "@esbuild/darwin-x64": "0.21.5",
5733
- "@esbuild/freebsd-arm64": "0.21.5",
5734
- "@esbuild/freebsd-x64": "0.21.5",
5735
- "@esbuild/linux-arm": "0.21.5",
5736
- "@esbuild/linux-arm64": "0.21.5",
5737
- "@esbuild/linux-ia32": "0.21.5",
5738
- "@esbuild/linux-loong64": "0.21.5",
5739
- "@esbuild/linux-mips64el": "0.21.5",
5740
- "@esbuild/linux-ppc64": "0.21.5",
5741
- "@esbuild/linux-riscv64": "0.21.5",
5742
- "@esbuild/linux-s390x": "0.21.5",
5743
- "@esbuild/linux-x64": "0.21.5",
5744
- "@esbuild/netbsd-x64": "0.21.5",
5745
- "@esbuild/openbsd-x64": "0.21.5",
5746
- "@esbuild/sunos-x64": "0.21.5",
5747
- "@esbuild/win32-arm64": "0.21.5",
5748
- "@esbuild/win32-ia32": "0.21.5",
5749
- "@esbuild/win32-x64": "0.21.5"
5789
+ "@esbuild/aix-ppc64": "0.25.12",
5790
+ "@esbuild/android-arm": "0.25.12",
5791
+ "@esbuild/android-arm64": "0.25.12",
5792
+ "@esbuild/android-x64": "0.25.12",
5793
+ "@esbuild/darwin-arm64": "0.25.12",
5794
+ "@esbuild/darwin-x64": "0.25.12",
5795
+ "@esbuild/freebsd-arm64": "0.25.12",
5796
+ "@esbuild/freebsd-x64": "0.25.12",
5797
+ "@esbuild/linux-arm": "0.25.12",
5798
+ "@esbuild/linux-arm64": "0.25.12",
5799
+ "@esbuild/linux-ia32": "0.25.12",
5800
+ "@esbuild/linux-loong64": "0.25.12",
5801
+ "@esbuild/linux-mips64el": "0.25.12",
5802
+ "@esbuild/linux-ppc64": "0.25.12",
5803
+ "@esbuild/linux-riscv64": "0.25.12",
5804
+ "@esbuild/linux-s390x": "0.25.12",
5805
+ "@esbuild/linux-x64": "0.25.12",
5806
+ "@esbuild/netbsd-arm64": "0.25.12",
5807
+ "@esbuild/netbsd-x64": "0.25.12",
5808
+ "@esbuild/openbsd-arm64": "0.25.12",
5809
+ "@esbuild/openbsd-x64": "0.25.12",
5810
+ "@esbuild/openharmony-arm64": "0.25.12",
5811
+ "@esbuild/sunos-x64": "0.25.12",
5812
+ "@esbuild/win32-arm64": "0.25.12",
5813
+ "@esbuild/win32-ia32": "0.25.12",
5814
+ "@esbuild/win32-x64": "0.25.12"
5750
5815
  }
5751
5816
  },
5752
5817
  "node_modules/escalade": {
@@ -9761,6 +9826,436 @@
9761
9826
  "url": "https://opencollective.com/vitest"
9762
9827
  }
9763
9828
  },
9829
+ "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
9830
+ "version": "0.21.5",
9831
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
9832
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
9833
+ "cpu": [
9834
+ "ppc64"
9835
+ ],
9836
+ "dev": true,
9837
+ "license": "MIT",
9838
+ "optional": true,
9839
+ "os": [
9840
+ "aix"
9841
+ ],
9842
+ "engines": {
9843
+ "node": ">=12"
9844
+ }
9845
+ },
9846
+ "node_modules/vite/node_modules/@esbuild/android-arm": {
9847
+ "version": "0.21.5",
9848
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
9849
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
9850
+ "cpu": [
9851
+ "arm"
9852
+ ],
9853
+ "dev": true,
9854
+ "license": "MIT",
9855
+ "optional": true,
9856
+ "os": [
9857
+ "android"
9858
+ ],
9859
+ "engines": {
9860
+ "node": ">=12"
9861
+ }
9862
+ },
9863
+ "node_modules/vite/node_modules/@esbuild/android-arm64": {
9864
+ "version": "0.21.5",
9865
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
9866
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
9867
+ "cpu": [
9868
+ "arm64"
9869
+ ],
9870
+ "dev": true,
9871
+ "license": "MIT",
9872
+ "optional": true,
9873
+ "os": [
9874
+ "android"
9875
+ ],
9876
+ "engines": {
9877
+ "node": ">=12"
9878
+ }
9879
+ },
9880
+ "node_modules/vite/node_modules/@esbuild/android-x64": {
9881
+ "version": "0.21.5",
9882
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
9883
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
9884
+ "cpu": [
9885
+ "x64"
9886
+ ],
9887
+ "dev": true,
9888
+ "license": "MIT",
9889
+ "optional": true,
9890
+ "os": [
9891
+ "android"
9892
+ ],
9893
+ "engines": {
9894
+ "node": ">=12"
9895
+ }
9896
+ },
9897
+ "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
9898
+ "version": "0.21.5",
9899
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
9900
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
9901
+ "cpu": [
9902
+ "arm64"
9903
+ ],
9904
+ "dev": true,
9905
+ "license": "MIT",
9906
+ "optional": true,
9907
+ "os": [
9908
+ "darwin"
9909
+ ],
9910
+ "engines": {
9911
+ "node": ">=12"
9912
+ }
9913
+ },
9914
+ "node_modules/vite/node_modules/@esbuild/darwin-x64": {
9915
+ "version": "0.21.5",
9916
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
9917
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
9918
+ "cpu": [
9919
+ "x64"
9920
+ ],
9921
+ "dev": true,
9922
+ "license": "MIT",
9923
+ "optional": true,
9924
+ "os": [
9925
+ "darwin"
9926
+ ],
9927
+ "engines": {
9928
+ "node": ">=12"
9929
+ }
9930
+ },
9931
+ "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
9932
+ "version": "0.21.5",
9933
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
9934
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
9935
+ "cpu": [
9936
+ "arm64"
9937
+ ],
9938
+ "dev": true,
9939
+ "license": "MIT",
9940
+ "optional": true,
9941
+ "os": [
9942
+ "freebsd"
9943
+ ],
9944
+ "engines": {
9945
+ "node": ">=12"
9946
+ }
9947
+ },
9948
+ "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
9949
+ "version": "0.21.5",
9950
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
9951
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
9952
+ "cpu": [
9953
+ "x64"
9954
+ ],
9955
+ "dev": true,
9956
+ "license": "MIT",
9957
+ "optional": true,
9958
+ "os": [
9959
+ "freebsd"
9960
+ ],
9961
+ "engines": {
9962
+ "node": ">=12"
9963
+ }
9964
+ },
9965
+ "node_modules/vite/node_modules/@esbuild/linux-arm": {
9966
+ "version": "0.21.5",
9967
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
9968
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
9969
+ "cpu": [
9970
+ "arm"
9971
+ ],
9972
+ "dev": true,
9973
+ "license": "MIT",
9974
+ "optional": true,
9975
+ "os": [
9976
+ "linux"
9977
+ ],
9978
+ "engines": {
9979
+ "node": ">=12"
9980
+ }
9981
+ },
9982
+ "node_modules/vite/node_modules/@esbuild/linux-arm64": {
9983
+ "version": "0.21.5",
9984
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
9985
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
9986
+ "cpu": [
9987
+ "arm64"
9988
+ ],
9989
+ "dev": true,
9990
+ "license": "MIT",
9991
+ "optional": true,
9992
+ "os": [
9993
+ "linux"
9994
+ ],
9995
+ "engines": {
9996
+ "node": ">=12"
9997
+ }
9998
+ },
9999
+ "node_modules/vite/node_modules/@esbuild/linux-ia32": {
10000
+ "version": "0.21.5",
10001
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
10002
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
10003
+ "cpu": [
10004
+ "ia32"
10005
+ ],
10006
+ "dev": true,
10007
+ "license": "MIT",
10008
+ "optional": true,
10009
+ "os": [
10010
+ "linux"
10011
+ ],
10012
+ "engines": {
10013
+ "node": ">=12"
10014
+ }
10015
+ },
10016
+ "node_modules/vite/node_modules/@esbuild/linux-loong64": {
10017
+ "version": "0.21.5",
10018
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
10019
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
10020
+ "cpu": [
10021
+ "loong64"
10022
+ ],
10023
+ "dev": true,
10024
+ "license": "MIT",
10025
+ "optional": true,
10026
+ "os": [
10027
+ "linux"
10028
+ ],
10029
+ "engines": {
10030
+ "node": ">=12"
10031
+ }
10032
+ },
10033
+ "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
10034
+ "version": "0.21.5",
10035
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
10036
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
10037
+ "cpu": [
10038
+ "mips64el"
10039
+ ],
10040
+ "dev": true,
10041
+ "license": "MIT",
10042
+ "optional": true,
10043
+ "os": [
10044
+ "linux"
10045
+ ],
10046
+ "engines": {
10047
+ "node": ">=12"
10048
+ }
10049
+ },
10050
+ "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
10051
+ "version": "0.21.5",
10052
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
10053
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
10054
+ "cpu": [
10055
+ "ppc64"
10056
+ ],
10057
+ "dev": true,
10058
+ "license": "MIT",
10059
+ "optional": true,
10060
+ "os": [
10061
+ "linux"
10062
+ ],
10063
+ "engines": {
10064
+ "node": ">=12"
10065
+ }
10066
+ },
10067
+ "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
10068
+ "version": "0.21.5",
10069
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
10070
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
10071
+ "cpu": [
10072
+ "riscv64"
10073
+ ],
10074
+ "dev": true,
10075
+ "license": "MIT",
10076
+ "optional": true,
10077
+ "os": [
10078
+ "linux"
10079
+ ],
10080
+ "engines": {
10081
+ "node": ">=12"
10082
+ }
10083
+ },
10084
+ "node_modules/vite/node_modules/@esbuild/linux-s390x": {
10085
+ "version": "0.21.5",
10086
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
10087
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
10088
+ "cpu": [
10089
+ "s390x"
10090
+ ],
10091
+ "dev": true,
10092
+ "license": "MIT",
10093
+ "optional": true,
10094
+ "os": [
10095
+ "linux"
10096
+ ],
10097
+ "engines": {
10098
+ "node": ">=12"
10099
+ }
10100
+ },
10101
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
10102
+ "version": "0.21.5",
10103
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
10104
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
10105
+ "cpu": [
10106
+ "x64"
10107
+ ],
10108
+ "dev": true,
10109
+ "license": "MIT",
10110
+ "optional": true,
10111
+ "os": [
10112
+ "linux"
10113
+ ],
10114
+ "engines": {
10115
+ "node": ">=12"
10116
+ }
10117
+ },
10118
+ "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
10119
+ "version": "0.21.5",
10120
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
10121
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
10122
+ "cpu": [
10123
+ "x64"
10124
+ ],
10125
+ "dev": true,
10126
+ "license": "MIT",
10127
+ "optional": true,
10128
+ "os": [
10129
+ "netbsd"
10130
+ ],
10131
+ "engines": {
10132
+ "node": ">=12"
10133
+ }
10134
+ },
10135
+ "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
10136
+ "version": "0.21.5",
10137
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
10138
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
10139
+ "cpu": [
10140
+ "x64"
10141
+ ],
10142
+ "dev": true,
10143
+ "license": "MIT",
10144
+ "optional": true,
10145
+ "os": [
10146
+ "openbsd"
10147
+ ],
10148
+ "engines": {
10149
+ "node": ">=12"
10150
+ }
10151
+ },
10152
+ "node_modules/vite/node_modules/@esbuild/sunos-x64": {
10153
+ "version": "0.21.5",
10154
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
10155
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
10156
+ "cpu": [
10157
+ "x64"
10158
+ ],
10159
+ "dev": true,
10160
+ "license": "MIT",
10161
+ "optional": true,
10162
+ "os": [
10163
+ "sunos"
10164
+ ],
10165
+ "engines": {
10166
+ "node": ">=12"
10167
+ }
10168
+ },
10169
+ "node_modules/vite/node_modules/@esbuild/win32-arm64": {
10170
+ "version": "0.21.5",
10171
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
10172
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
10173
+ "cpu": [
10174
+ "arm64"
10175
+ ],
10176
+ "dev": true,
10177
+ "license": "MIT",
10178
+ "optional": true,
10179
+ "os": [
10180
+ "win32"
10181
+ ],
10182
+ "engines": {
10183
+ "node": ">=12"
10184
+ }
10185
+ },
10186
+ "node_modules/vite/node_modules/@esbuild/win32-ia32": {
10187
+ "version": "0.21.5",
10188
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
10189
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
10190
+ "cpu": [
10191
+ "ia32"
10192
+ ],
10193
+ "dev": true,
10194
+ "license": "MIT",
10195
+ "optional": true,
10196
+ "os": [
10197
+ "win32"
10198
+ ],
10199
+ "engines": {
10200
+ "node": ">=12"
10201
+ }
10202
+ },
10203
+ "node_modules/vite/node_modules/@esbuild/win32-x64": {
10204
+ "version": "0.21.5",
10205
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
10206
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
10207
+ "cpu": [
10208
+ "x64"
10209
+ ],
10210
+ "dev": true,
10211
+ "license": "MIT",
10212
+ "optional": true,
10213
+ "os": [
10214
+ "win32"
10215
+ ],
10216
+ "engines": {
10217
+ "node": ">=12"
10218
+ }
10219
+ },
10220
+ "node_modules/vite/node_modules/esbuild": {
10221
+ "version": "0.21.5",
10222
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
10223
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
10224
+ "dev": true,
10225
+ "hasInstallScript": true,
10226
+ "license": "MIT",
10227
+ "bin": {
10228
+ "esbuild": "bin/esbuild"
10229
+ },
10230
+ "engines": {
10231
+ "node": ">=12"
10232
+ },
10233
+ "optionalDependencies": {
10234
+ "@esbuild/aix-ppc64": "0.21.5",
10235
+ "@esbuild/android-arm": "0.21.5",
10236
+ "@esbuild/android-arm64": "0.21.5",
10237
+ "@esbuild/android-x64": "0.21.5",
10238
+ "@esbuild/darwin-arm64": "0.21.5",
10239
+ "@esbuild/darwin-x64": "0.21.5",
10240
+ "@esbuild/freebsd-arm64": "0.21.5",
10241
+ "@esbuild/freebsd-x64": "0.21.5",
10242
+ "@esbuild/linux-arm": "0.21.5",
10243
+ "@esbuild/linux-arm64": "0.21.5",
10244
+ "@esbuild/linux-ia32": "0.21.5",
10245
+ "@esbuild/linux-loong64": "0.21.5",
10246
+ "@esbuild/linux-mips64el": "0.21.5",
10247
+ "@esbuild/linux-ppc64": "0.21.5",
10248
+ "@esbuild/linux-riscv64": "0.21.5",
10249
+ "@esbuild/linux-s390x": "0.21.5",
10250
+ "@esbuild/linux-x64": "0.21.5",
10251
+ "@esbuild/netbsd-x64": "0.21.5",
10252
+ "@esbuild/openbsd-x64": "0.21.5",
10253
+ "@esbuild/sunos-x64": "0.21.5",
10254
+ "@esbuild/win32-arm64": "0.21.5",
10255
+ "@esbuild/win32-ia32": "0.21.5",
10256
+ "@esbuild/win32-x64": "0.21.5"
10257
+ }
10258
+ },
9764
10259
  "node_modules/vitest": {
9765
10260
  "version": "2.1.9",
9766
10261
  "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz",
@@ -12,19 +12,22 @@
12
12
  "main": "dist/main/index.js",
13
13
  "type": "module",
14
14
  "scripts": {
15
- "dev": "ELECTRON_DEV=true npm run build:main && concurrently \"npm run watch:main\" \"npm run watch:renderer\" \"ELECTRON_DEV=true npm run electron\"",
15
+ "dev": "ELECTRON_DEV=true npm run build:main:dev && concurrently \"npm run watch:main\" \"npm run watch:renderer\" \"ELECTRON_DEV=true npm run electron\"",
16
16
  "build": "npm run build:main && npm run build:renderer",
17
- "build:main": "tsc -p tsconfig.main.json && cp src/main/preload.cjs dist/main/",
17
+ "build:main": "tsc -p tsconfig.main.json --noEmit && node scripts/bundle-main.mjs",
18
+ "build:main:bytecode": "tsc -p tsconfig.main.json --noEmit && node scripts/bundle-main.mjs --bytecode",
19
+ "build:bytecode": "npm run build:main:bytecode && npm run build:renderer",
20
+ "build:main:dev": "tsc -p tsconfig.main.json && cp src/main/preload.cjs dist/main/",
18
21
  "build:renderer": "vite build",
19
22
  "watch:main": "tsc -p tsconfig.main.json --watch",
20
23
  "watch:renderer": "vite build --watch",
21
24
  "electron": "electron .",
22
25
  "start": "npm run build && electron .",
23
26
  "prepackage": "node scripts/prepare-sandbox-bins.js && rm -rf node_modules/brosh && mkdir -p node_modules/brosh && cp -r ../../dist ../../package.json node_modules/brosh/",
24
- "package": "npm run prepackage && npm run build && electron-builder",
25
- "package:mac": "npm run prepackage && npm run build && electron-builder --mac -c.extraMetadata.localBuild=true",
26
- "package:win": "npm run prepackage && npm run build && electron-builder --win -c.extraMetadata.localBuild=true",
27
- "package:linux": "npm run prepackage && npm run build && electron-builder --linux -c.extraMetadata.localBuild=true",
27
+ "package": "npm run prepackage && npm run build:bytecode && electron-builder",
28
+ "package:mac": "npm run prepackage && npm run build:bytecode && electron-builder --mac -c.extraMetadata.localBuild=true",
29
+ "package:win": "npm run prepackage && npm run build:bytecode && electron-builder --win -c.extraMetadata.localBuild=true",
30
+ "package:linux": "npm run prepackage && npm run build:bytecode && electron-builder --linux -c.extraMetadata.localBuild=true",
28
31
  "postpackage": "rm -rf node_modules/brosh && npm install",
29
32
  "download-models": "node scripts/download-models.js",
30
33
  "prepare-sandbox-bins": "node scripts/prepare-sandbox-bins.js",
@@ -57,6 +60,7 @@
57
60
  "@xterm/addon-webgl": "^0.18.0",
58
61
  "@xterm/xterm": "^5.5.0",
59
62
  "brosh": "file:../..",
63
+ "bytenode": "^1.5.7",
60
64
  "chokidar": "^5.0.0",
61
65
  "cli-highlight": "^2.1.11",
62
66
  "electron-store": "^10.0.0",
@@ -79,6 +83,7 @@
79
83
  "concurrently": "^8.2.0",
80
84
  "electron": "^33.4.11",
81
85
  "electron-builder": "^25.0.0",
86
+ "esbuild": "^0.25.12",
82
87
  "react": "^18.2.0",
83
88
  "react-dom": "^18.2.0",
84
89
  "typescript": "^5.0.0",
@@ -88,6 +93,7 @@
88
93
  "build": {
89
94
  "appId": "com.ellery.brosh",
90
95
  "productName": "brosh",
96
+ "asar": false,
91
97
  "afterPack": "./build/afterPack.cjs",
92
98
  "directories": {
93
99
  "output": "release"
@@ -0,0 +1,97 @@
1
+ import { build } from "esbuild";
2
+ import { cpSync, existsSync, writeFileSync, unlinkSync } from "fs";
3
+ import { execFileSync } from "child_process";
4
+ import { createRequire } from "module";
5
+
6
+ const bytecode = process.argv.includes("--bytecode");
7
+
8
+ if (bytecode) {
9
+ // Bytecode path: bundle as CJS → compile with Electron's V8 → ESM loader stub
10
+ await build({
11
+ entryPoints: ["src/main/index.ts"],
12
+ bundle: true,
13
+ outfile: "dist/main/bundle.cjs",
14
+ platform: "node",
15
+ format: "cjs",
16
+ target: "node20",
17
+ sourcemap: false,
18
+ // Bytecode externals differ from ESM: CJS can't require() ESM-only packages,
19
+ // so we inline them (electron-store, chokidar, brosh) and let esbuild convert
20
+ // to CJS. node-pty stays external (native addon).
21
+ external: [
22
+ "electron",
23
+ "electron-updater",
24
+ "node-pty",
25
+ "ws",
26
+ "posthog-node",
27
+ "@huggingface/transformers",
28
+ "cli-highlight",
29
+ "bytenode",
30
+ ],
31
+ // Convert import() → require() so no dynamic imports in bytecode (vm.Script
32
+ // doesn't support import() without --experimental-vm-modules).
33
+ supported: { "dynamic-import": false },
34
+ });
35
+
36
+ // Compile CJS bundle to V8 bytecode using Electron's V8
37
+ const require = createRequire(import.meta.url);
38
+ const electronPath = require("electron");
39
+ execFileSync(electronPath, ["scripts/bytecode-compiler.cjs", "dist/main/bundle.cjs"], {
40
+ env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" },
41
+ stdio: "inherit",
42
+ });
43
+
44
+ // Write ESM loader stub
45
+ writeFileSync(
46
+ "dist/main/index.js",
47
+ [
48
+ `import { createRequire } from 'module';`,
49
+ `import v8 from 'v8';`,
50
+ `v8.setFlagsFromString('--no-lazy');`,
51
+ `v8.setFlagsFromString('--no-flush-bytecode');`,
52
+ `const require = createRequire(import.meta.url);`,
53
+ `require('bytenode');`,
54
+ `require('./bundle.jsc');`,
55
+ ``,
56
+ ].join("\n"),
57
+ );
58
+
59
+ // Clean up intermediate CJS bundle and stale sourcemap from previous ESM builds
60
+ unlinkSync("dist/main/bundle.cjs");
61
+ if (existsSync("dist/main/index.js.map")) {
62
+ unlinkSync("dist/main/index.js.map");
63
+ }
64
+ } else {
65
+ // Standard ESM bundle path
66
+ await build({
67
+ entryPoints: ["src/main/index.ts"],
68
+ bundle: true,
69
+ outfile: "dist/main/index.js",
70
+ platform: "node",
71
+ format: "esm",
72
+ target: "node20",
73
+ sourcemap: true,
74
+ external: [
75
+ "electron",
76
+ "electron-store",
77
+ "electron-updater",
78
+ "brosh",
79
+ "ws",
80
+ "posthog-node",
81
+ "@huggingface/transformers",
82
+ "chokidar",
83
+ "cli-highlight",
84
+ ],
85
+ banner: {
86
+ js: [
87
+ `import { fileURLToPath as _bundled_fileURLToPath } from 'url';`,
88
+ `import { dirname as _bundled_dirname } from 'path';`,
89
+ `const __filename = _bundled_fileURLToPath(import.meta.url);`,
90
+ `const __dirname = _bundled_dirname(__filename);`,
91
+ ].join("\n"),
92
+ },
93
+ });
94
+ }
95
+
96
+ // Preload script is CJS, loaded separately by Electron — just copy it
97
+ cpSync("src/main/preload.cjs", "dist/main/preload.cjs");
@@ -0,0 +1,3 @@
1
+ require("bytenode");
2
+ const bytenode = require("bytenode");
3
+ bytenode.compileFile(process.argv[2]);
@@ -1,16 +1,16 @@
1
1
  -----BEGIN PGP SIGNATURE-----
2
2
 
3
- iQIzBAABCgAdFiEEX8WeGtXPO7P8xoFftW8bjWv2UfkFAmmYo/kACgkQtW8bjWv2
4
- UflyJw//b8gZAkm4fVmQKaj1upBWosJUOYyyB3dM7dexZrdh8pj/B1cUObhq3akr
5
- pbovrrT74jAEkBeRC/izeMuF+44DME2ZxeOCwUmpNJgdtca7FO4iaX8O5wp3d/mw
6
- hMDlLC9LH2X1hwbtDceeiQA+dTtteLBrbolACKtZDzJQmkg1lNxEX83O7P/TZPhS
7
- Q3UQc/S62mNsyRqvI+pOsc1rQxTp8lAY+4YQXqyGSyvSaNdi6sGNUAp3JccxxxCP
8
- vPdU2fhiTZ3YG3qqP9UTFGLBLDMiiEutEUCINSCb56MyRrdNr2wHu8ItAUZkc5kV
9
- 0Z+vHdAuysdQX04IddmiOqS/csoQ6fyIyXvM9TNF/hV7KR4uKToIrjtgY5X0ZDhj
10
- n2OsokEF5FLlySmwgjcUcGM5/Zi4K4RAsd2GIl8gc403bUbuuJAp2+dx1zsmu6To
11
- CXeIxJt+NIZsoHSo/wvJRgMan4riGgcQ0doMwg2q3enKfRiRTePmjP2MRl2HcPWA
12
- HRI5lYJEBkDb1VKVmWhPnkLchFUxGwj7wrvvgSR+ufeisb/cYb8f4F3kcsAeF3zK
13
- Yao0jtWApjdtlJnQIGEVrMkTsWKDItTYJ8kNXftvisaag6gedNUWqoKmm5NHZdeS
14
- 2ZMdcyg1PTfMe3GP+u0w9MjJ2OhYtJj3ykNsXzbzdzhrG81CgpA=
15
- =l24U
3
+ iQIzBAABCgAdFiEEX8WeGtXPO7P8xoFftW8bjWv2UfkFAmmbF5gACgkQtW8bjWv2
4
+ Ufml/RAAhZk/8zQvaYuq/kNFYWgtH1F7+zyilD1qXWEadeQVTVLcL8BfZNuy3JVl
5
+ TuwVtOD1nMjm2AfyxaKeDWrL+SMSQ66y6+HlrYLmkTmlVSvPcwUaHs1KRdZZ62/W
6
+ 1iDCYrBa5Pj+4TVAZusPu8m9IlvVSU2tpUpjdbXfBZYAsxGYww2VDcB8nZIt490H
7
+ r0GNH66/0k6HXd8bU586yAKfmY74e6Q1IXcSUQc2e0YTrh/BuSTEHWwkBW9Zdorv
8
+ r/SWDJOqTHtl1Zz1ZY7M41fRisshWdagZBwpdd9fAxBx4DnO2mJaqfd9JVmG4MEt
9
+ HK33rnaeXHGLwpy3s/06WMFk8Dd4BzLoE/VQkiI2pxGzDU/J3URaSgGuK9LPTgjF
10
+ BMy2vI4eImmUP375S9NZgAwsKy9VROI4EaP+M3G9RwNG7NjO3ox6ipUKknXa9RP6
11
+ yO/gYoAeRL1bjDXBlrJ/JyvXVmnChHLPigC4OmCLxcjisF4bS2BGrJK6j0LfOVnP
12
+ QHSvvtTevF2/olWJVydV5JV+U/SckzAL8gW1ThoAtER39bPgoyniyCkVNpMx+vmG
13
+ h3qLIaw/ZulQ/Lk6uRFdUxO7h1yAVuIQnC54i9Mr/UFA5kK/BpcqGRym0XRYgFjN
14
+ 5A2LoTXBApJWGQ9Nq/vPyaz+Psc2juJsRIci4raJn66lyCgjpOw=
15
+ =9y68
16
16
  -----END PGP SIGNATURE-----