@snowyroad/braid 0.92.1 → 0.92.2

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.
@@ -389,7 +389,7 @@ var InviteExpiredError = class extends Error {
389
389
  }
390
390
  };
391
391
  async function redeemInvite(relayHttpUrl, code) {
392
- const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-HGIWSVON.js");
392
+ const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-C5YTXRNH.js");
393
393
  const r = await boundedJsonFetch2(`${relayHttpUrl.replace(/\/$/, "")}/invites/redeem`, {
394
394
  method: "POST",
395
395
  headers: { "content-type": "application/json" },
@@ -478,7 +478,7 @@ function validateReplacementToken(newToken, currentToken, nowMs = Date.now()) {
478
478
  return { ok: true };
479
479
  }
480
480
  async function mintAccessToken(relayHttpUrl, agentKey, fetchFn = fetch, dpopProof) {
481
- const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-HGIWSVON.js");
481
+ const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-C5YTXRNH.js");
482
482
  const r = await boundedJsonFetch2(`${relayHttpUrl.replace(/\/$/, "")}/agents/token`, {
483
483
  method: "POST",
484
484
  headers: {
@@ -528,6 +528,35 @@ function classifyFatal(codeOrError) {
528
528
  return EXIT_CRASH;
529
529
  }
530
530
 
531
+ // src/tty.ts
532
+ var ANSI_RE = /\u001b(?:\[[0-?]*[ -\/]*[@-~]|\][^\u0007\u001b]*(?:\u0007|\u001b\\)?|[@-Z\\-_])/g;
533
+ var CTRL_RE = /[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/g;
534
+ function sanitizeForTty(s) {
535
+ return s.replace(ANSI_RE, "").replace(CTRL_RE, "");
536
+ }
537
+ function pipeSanitizedToTty(src, dst = process.stderr) {
538
+ if (!src) return;
539
+ src.setEncoding("utf8");
540
+ src.on("data", (chunk) => {
541
+ const clean = sanitizeForTty(chunk);
542
+ if (clean) dst.write(clean);
543
+ });
544
+ }
545
+ var ESC = String.fromCharCode(27);
546
+ function restoreTerminal(out = process.stdout, stdin = process.stdin) {
547
+ if (!out.isTTY) return;
548
+ out.write(
549
+ `${ESC}[?1l${ESC}>${ESC}[?25h${ESC}[?2004l${ESC}[>4;0m${ESC}[?1000l${ESC}[?1002l${ESC}[?1003l${ESC}[?1006l${ESC}7${ESC}[r${ESC}8`
550
+ );
551
+ try {
552
+ if (stdin.isTTY) stdin.setRawMode?.(false);
553
+ } catch {
554
+ }
555
+ }
556
+ function isShellSafeName(s) {
557
+ return /^[A-Za-z0-9_.-]+$/.test(s);
558
+ }
559
+
531
560
  // src/keystore.ts
532
561
  function productionWin32Deps() {
533
562
  return {
@@ -855,6 +884,19 @@ function scanAgentsDir(dir, seen) {
855
884
  }
856
885
  return out;
857
886
  }
887
+ function isPlatformRelayHost(relayUrl) {
888
+ let host;
889
+ try {
890
+ host = new URL(relayUrl).hostname.toLowerCase();
891
+ } catch {
892
+ return false;
893
+ }
894
+ return host === "up.railway.app" || host.endsWith(".up.railway.app");
895
+ }
896
+ function pickCanonicalRelay(matches) {
897
+ const canonical = matches.filter((m) => !isPlatformRelayHost(m.agent.relayUrl));
898
+ return canonical.length === 1 ? canonical[0] : null;
899
+ }
858
900
  function loadAgent(dir, agentName, multiAgentRemedy = "Run: npx @snowyroad/braid start <name>") {
859
901
  const all = listAgents(dir);
860
902
  if (agentName && agentName.trim() !== "") {
@@ -876,6 +918,13 @@ function loadAgent(dir, agentName, multiAgentRemedy = "Run: npx @snowyroad/braid
876
918
  );
877
919
  }
878
920
  if (matches.length > 1) {
921
+ const canonical = pickCanonicalRelay(matches);
922
+ if (canonical) {
923
+ console.error(
924
+ `[braid] "${sanitizeForTty(agentName.trim())}" had credentials for multiple relays; using ${sanitizeForTty(canonical.agent.relayUrl)} and ignoring platform-host leftover(s).`
925
+ );
926
+ return canonical;
927
+ }
879
928
  const relays = matches.map((m) => m.agent.relayUrl).join(", ");
880
929
  throw new Error(
881
930
  `Agent "${agentName}" has credentials for multiple relays (${relays}). Set BRAID_CONFIG_DIR or remove the stale file.`
@@ -978,37 +1027,6 @@ function pinEndpoint(dir, agentName, pin) {
978
1027
 
979
1028
  // src/relayPrompt.ts
980
1029
  import { createInterface } from "readline";
981
-
982
- // src/tty.ts
983
- var ANSI_RE = /\u001b(?:\[[0-?]*[ -\/]*[@-~]|\][^\u0007\u001b]*(?:\u0007|\u001b\\)?|[@-Z\\-_])/g;
984
- var CTRL_RE = /[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/g;
985
- function sanitizeForTty(s) {
986
- return s.replace(ANSI_RE, "").replace(CTRL_RE, "");
987
- }
988
- function pipeSanitizedToTty(src, dst = process.stderr) {
989
- if (!src) return;
990
- src.setEncoding("utf8");
991
- src.on("data", (chunk) => {
992
- const clean = sanitizeForTty(chunk);
993
- if (clean) dst.write(clean);
994
- });
995
- }
996
- var ESC = String.fromCharCode(27);
997
- function restoreTerminal(out = process.stdout, stdin = process.stdin) {
998
- if (!out.isTTY) return;
999
- out.write(
1000
- `${ESC}[?1l${ESC}>${ESC}[?25h${ESC}[?2004l${ESC}[>4;0m${ESC}[?1000l${ESC}[?1002l${ESC}[?1003l${ESC}[?1006l${ESC}7${ESC}[r${ESC}8`
1001
- );
1002
- try {
1003
- if (stdin.isTTY) stdin.setRawMode?.(false);
1004
- } catch {
1005
- }
1006
- }
1007
- function isShellSafeName(s) {
1008
- return /^[A-Za-z0-9_.-]+$/.test(s);
1009
- }
1010
-
1011
- // src/relayPrompt.ts
1012
1030
  function buildRelayPrompt(agentName, matches) {
1013
1031
  const name = sanitizeForTty(agentName);
1014
1032
  const rows = matches.map((m, i) => {
@@ -6734,6 +6752,13 @@ async function resolveStoredAgent(dir, agentName, io) {
6734
6752
  if (name) {
6735
6753
  const matches = listAgents(dir).filter((e) => e.agent.agentName === name);
6736
6754
  if (matches.length > 1) {
6755
+ const canonical = pickCanonicalRelay(matches);
6756
+ if (canonical) {
6757
+ console.error(
6758
+ `[braid] "${sanitizeForTty(name)}" had credentials for multiple relays; using ${sanitizeForTty(canonical.agent.relayUrl)} and ignoring platform-host leftover(s).`
6759
+ );
6760
+ return canonical;
6761
+ }
6737
6762
  const chosen = await chooseRelayWhenAmbiguous(name, matches, io);
6738
6763
  return chosen ?? loadAgent(dir, agentName);
6739
6764
  }
@@ -7041,6 +7066,9 @@ export {
7041
7066
  EXIT_CRASH,
7042
7067
  KeystorePermsError,
7043
7068
  classifyFatal,
7069
+ sanitizeForTty,
7070
+ restoreTerminal,
7071
+ isShellSafeName,
7044
7072
  assertKeystorePerms,
7045
7073
  configDir,
7046
7074
  readPathWithFallback,
@@ -7051,9 +7079,6 @@ export {
7051
7079
  loadAgent,
7052
7080
  acquireAgentLock,
7053
7081
  pinEndpoint,
7054
- sanitizeForTty,
7055
- restoreTerminal,
7056
- isShellSafeName,
7057
7082
  narrowestMode,
7058
7083
  narrowestOverride,
7059
7084
  toolModeLabel,
package/dist/cli.js CHANGED
@@ -71,7 +71,7 @@ import {
71
71
  toolStatusLine,
72
72
  validateRelayWsUrl,
73
73
  wsToHttp
74
- } from "./chunk-2B5FDTWM.js";
74
+ } from "./chunk-4ABAU7OP.js";
75
75
  import {
76
76
  externalSourceLabel,
77
77
  externalUntrustedPreamble,
@@ -4,7 +4,7 @@ import {
4
4
  boundedJsonFetch,
5
5
  resetHttpMetricsForTest,
6
6
  snapshotHttpMetrics
7
- } from "./chunk-2B5FDTWM.js";
7
+ } from "./chunk-4ABAU7OP.js";
8
8
  import "./chunk-BDOF72CL.js";
9
9
  export {
10
10
  assertHttpEndpoint,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowyroad/braid",
3
- "version": "0.92.1",
3
+ "version": "0.92.2",
4
4
  "description": "Braid: connect your own coding agent (Claude Code, Codex, Gemini, Grok) to a Braid channel and collaborate with other agents and humans.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "SnowyRoad",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@snowyroad/braid",
3
- "version": "0.92.1",
3
+ "version": "0.92.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@snowyroad/braid",
9
- "version": "0.92.1",
9
+ "version": "0.92.2",
10
10
  "license": "SEE LICENSE IN LICENSE.md",
11
11
  "dependencies": {
12
12
  "@agentclientprotocol/sdk": "0.25.1",
@@ -1455,9 +1455,9 @@
1455
1455
  }
1456
1456
  },
1457
1457
  "node_modules/ansi-regex": {
1458
- "version": "6.2.2",
1459
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
1460
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
1458
+ "version": "6.3.0",
1459
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz",
1460
+ "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==",
1461
1461
  "license": "MIT",
1462
1462
  "engines": {
1463
1463
  "node": ">=12"
@@ -2081,9 +2081,9 @@
2081
2081
  }
2082
2082
  },
2083
2083
  "node_modules/eventsource-parser": {
2084
- "version": "3.1.0",
2085
- "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz",
2086
- "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==",
2084
+ "version": "3.1.1",
2085
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz",
2086
+ "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==",
2087
2087
  "license": "MIT",
2088
2088
  "engines": {
2089
2089
  "node": ">=18.0.0"
@@ -2479,9 +2479,9 @@
2479
2479
  }
2480
2480
  },
2481
2481
  "node_modules/ip-address": {
2482
- "version": "10.4.0",
2483
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.4.0.tgz",
2484
- "integrity": "sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==",
2482
+ "version": "10.5.0",
2483
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz",
2484
+ "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==",
2485
2485
  "license": "MIT",
2486
2486
  "engines": {
2487
2487
  "node": ">= 12"
@@ -3713,9 +3713,9 @@
3713
3713
  }
3714
3714
  },
3715
3715
  "node_modules/tsx": {
3716
- "version": "4.23.11",
3717
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.11.tgz",
3718
- "integrity": "sha512-Ry2oTEUnhBdeEdWIztY8kf3/nBGnPnjMLVGL0YfdRXMORuPER5NlKmayqxtxRxwB1xBN+RivRaJfe7PM1rtiyw==",
3716
+ "version": "4.23.12",
3717
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.12.tgz",
3718
+ "integrity": "sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==",
3719
3719
  "dev": true,
3720
3720
  "license": "MIT",
3721
3721
  "dependencies": {
@@ -3732,9 +3732,9 @@
3732
3732
  }
3733
3733
  },
3734
3734
  "node_modules/tsx/node_modules/@esbuild/aix-ppc64": {
3735
- "version": "0.28.1",
3736
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
3737
- "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
3735
+ "version": "0.28.2",
3736
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
3737
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
3738
3738
  "cpu": [
3739
3739
  "ppc64"
3740
3740
  ],
@@ -3749,9 +3749,9 @@
3749
3749
  }
3750
3750
  },
3751
3751
  "node_modules/tsx/node_modules/@esbuild/android-arm": {
3752
- "version": "0.28.1",
3753
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
3754
- "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
3752
+ "version": "0.28.2",
3753
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
3754
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
3755
3755
  "cpu": [
3756
3756
  "arm"
3757
3757
  ],
@@ -3766,9 +3766,9 @@
3766
3766
  }
3767
3767
  },
3768
3768
  "node_modules/tsx/node_modules/@esbuild/android-arm64": {
3769
- "version": "0.28.1",
3770
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
3771
- "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
3769
+ "version": "0.28.2",
3770
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
3771
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
3772
3772
  "cpu": [
3773
3773
  "arm64"
3774
3774
  ],
@@ -3783,9 +3783,9 @@
3783
3783
  }
3784
3784
  },
3785
3785
  "node_modules/tsx/node_modules/@esbuild/android-x64": {
3786
- "version": "0.28.1",
3787
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
3788
- "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
3786
+ "version": "0.28.2",
3787
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
3788
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
3789
3789
  "cpu": [
3790
3790
  "x64"
3791
3791
  ],
@@ -3800,9 +3800,9 @@
3800
3800
  }
3801
3801
  },
3802
3802
  "node_modules/tsx/node_modules/@esbuild/darwin-arm64": {
3803
- "version": "0.28.1",
3804
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
3805
- "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
3803
+ "version": "0.28.2",
3804
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
3805
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
3806
3806
  "cpu": [
3807
3807
  "arm64"
3808
3808
  ],
@@ -3817,9 +3817,9 @@
3817
3817
  }
3818
3818
  },
3819
3819
  "node_modules/tsx/node_modules/@esbuild/darwin-x64": {
3820
- "version": "0.28.1",
3821
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
3822
- "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
3820
+ "version": "0.28.2",
3821
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
3822
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
3823
3823
  "cpu": [
3824
3824
  "x64"
3825
3825
  ],
@@ -3834,9 +3834,9 @@
3834
3834
  }
3835
3835
  },
3836
3836
  "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": {
3837
- "version": "0.28.1",
3838
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
3839
- "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
3837
+ "version": "0.28.2",
3838
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
3839
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
3840
3840
  "cpu": [
3841
3841
  "arm64"
3842
3842
  ],
@@ -3851,9 +3851,9 @@
3851
3851
  }
3852
3852
  },
3853
3853
  "node_modules/tsx/node_modules/@esbuild/freebsd-x64": {
3854
- "version": "0.28.1",
3855
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
3856
- "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
3854
+ "version": "0.28.2",
3855
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
3856
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
3857
3857
  "cpu": [
3858
3858
  "x64"
3859
3859
  ],
@@ -3868,9 +3868,9 @@
3868
3868
  }
3869
3869
  },
3870
3870
  "node_modules/tsx/node_modules/@esbuild/linux-arm": {
3871
- "version": "0.28.1",
3872
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
3873
- "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
3871
+ "version": "0.28.2",
3872
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
3873
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
3874
3874
  "cpu": [
3875
3875
  "arm"
3876
3876
  ],
@@ -3885,9 +3885,9 @@
3885
3885
  }
3886
3886
  },
3887
3887
  "node_modules/tsx/node_modules/@esbuild/linux-arm64": {
3888
- "version": "0.28.1",
3889
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
3890
- "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
3888
+ "version": "0.28.2",
3889
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
3890
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
3891
3891
  "cpu": [
3892
3892
  "arm64"
3893
3893
  ],
@@ -3902,9 +3902,9 @@
3902
3902
  }
3903
3903
  },
3904
3904
  "node_modules/tsx/node_modules/@esbuild/linux-ia32": {
3905
- "version": "0.28.1",
3906
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
3907
- "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
3905
+ "version": "0.28.2",
3906
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
3907
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
3908
3908
  "cpu": [
3909
3909
  "ia32"
3910
3910
  ],
@@ -3919,9 +3919,9 @@
3919
3919
  }
3920
3920
  },
3921
3921
  "node_modules/tsx/node_modules/@esbuild/linux-loong64": {
3922
- "version": "0.28.1",
3923
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
3924
- "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
3922
+ "version": "0.28.2",
3923
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
3924
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
3925
3925
  "cpu": [
3926
3926
  "loong64"
3927
3927
  ],
@@ -3936,9 +3936,9 @@
3936
3936
  }
3937
3937
  },
3938
3938
  "node_modules/tsx/node_modules/@esbuild/linux-mips64el": {
3939
- "version": "0.28.1",
3940
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
3941
- "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
3939
+ "version": "0.28.2",
3940
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
3941
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
3942
3942
  "cpu": [
3943
3943
  "mips64el"
3944
3944
  ],
@@ -3953,9 +3953,9 @@
3953
3953
  }
3954
3954
  },
3955
3955
  "node_modules/tsx/node_modules/@esbuild/linux-ppc64": {
3956
- "version": "0.28.1",
3957
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
3958
- "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
3956
+ "version": "0.28.2",
3957
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
3958
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
3959
3959
  "cpu": [
3960
3960
  "ppc64"
3961
3961
  ],
@@ -3970,9 +3970,9 @@
3970
3970
  }
3971
3971
  },
3972
3972
  "node_modules/tsx/node_modules/@esbuild/linux-riscv64": {
3973
- "version": "0.28.1",
3974
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
3975
- "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
3973
+ "version": "0.28.2",
3974
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
3975
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
3976
3976
  "cpu": [
3977
3977
  "riscv64"
3978
3978
  ],
@@ -3987,9 +3987,9 @@
3987
3987
  }
3988
3988
  },
3989
3989
  "node_modules/tsx/node_modules/@esbuild/linux-s390x": {
3990
- "version": "0.28.1",
3991
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
3992
- "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
3990
+ "version": "0.28.2",
3991
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
3992
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
3993
3993
  "cpu": [
3994
3994
  "s390x"
3995
3995
  ],
@@ -4004,9 +4004,9 @@
4004
4004
  }
4005
4005
  },
4006
4006
  "node_modules/tsx/node_modules/@esbuild/linux-x64": {
4007
- "version": "0.28.1",
4008
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
4009
- "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
4007
+ "version": "0.28.2",
4008
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
4009
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
4010
4010
  "cpu": [
4011
4011
  "x64"
4012
4012
  ],
@@ -4021,9 +4021,9 @@
4021
4021
  }
4022
4022
  },
4023
4023
  "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": {
4024
- "version": "0.28.1",
4025
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
4026
- "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
4024
+ "version": "0.28.2",
4025
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
4026
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
4027
4027
  "cpu": [
4028
4028
  "arm64"
4029
4029
  ],
@@ -4038,9 +4038,9 @@
4038
4038
  }
4039
4039
  },
4040
4040
  "node_modules/tsx/node_modules/@esbuild/netbsd-x64": {
4041
- "version": "0.28.1",
4042
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
4043
- "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
4041
+ "version": "0.28.2",
4042
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
4043
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
4044
4044
  "cpu": [
4045
4045
  "x64"
4046
4046
  ],
@@ -4055,9 +4055,9 @@
4055
4055
  }
4056
4056
  },
4057
4057
  "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": {
4058
- "version": "0.28.1",
4059
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
4060
- "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
4058
+ "version": "0.28.2",
4059
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
4060
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
4061
4061
  "cpu": [
4062
4062
  "arm64"
4063
4063
  ],
@@ -4072,9 +4072,9 @@
4072
4072
  }
4073
4073
  },
4074
4074
  "node_modules/tsx/node_modules/@esbuild/openbsd-x64": {
4075
- "version": "0.28.1",
4076
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
4077
- "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
4075
+ "version": "0.28.2",
4076
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
4077
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
4078
4078
  "cpu": [
4079
4079
  "x64"
4080
4080
  ],
@@ -4089,9 +4089,9 @@
4089
4089
  }
4090
4090
  },
4091
4091
  "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": {
4092
- "version": "0.28.1",
4093
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
4094
- "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
4092
+ "version": "0.28.2",
4093
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
4094
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
4095
4095
  "cpu": [
4096
4096
  "arm64"
4097
4097
  ],
@@ -4106,9 +4106,9 @@
4106
4106
  }
4107
4107
  },
4108
4108
  "node_modules/tsx/node_modules/@esbuild/sunos-x64": {
4109
- "version": "0.28.1",
4110
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
4111
- "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
4109
+ "version": "0.28.2",
4110
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
4111
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
4112
4112
  "cpu": [
4113
4113
  "x64"
4114
4114
  ],
@@ -4123,9 +4123,9 @@
4123
4123
  }
4124
4124
  },
4125
4125
  "node_modules/tsx/node_modules/@esbuild/win32-arm64": {
4126
- "version": "0.28.1",
4127
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
4128
- "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
4126
+ "version": "0.28.2",
4127
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
4128
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
4129
4129
  "cpu": [
4130
4130
  "arm64"
4131
4131
  ],
@@ -4140,9 +4140,9 @@
4140
4140
  }
4141
4141
  },
4142
4142
  "node_modules/tsx/node_modules/@esbuild/win32-ia32": {
4143
- "version": "0.28.1",
4144
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
4145
- "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
4143
+ "version": "0.28.2",
4144
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
4145
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
4146
4146
  "cpu": [
4147
4147
  "ia32"
4148
4148
  ],
@@ -4157,9 +4157,9 @@
4157
4157
  }
4158
4158
  },
4159
4159
  "node_modules/tsx/node_modules/@esbuild/win32-x64": {
4160
- "version": "0.28.1",
4161
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
4162
- "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
4160
+ "version": "0.28.2",
4161
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
4162
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
4163
4163
  "cpu": [
4164
4164
  "x64"
4165
4165
  ],
@@ -4174,9 +4174,9 @@
4174
4174
  }
4175
4175
  },
4176
4176
  "node_modules/tsx/node_modules/esbuild": {
4177
- "version": "0.28.1",
4178
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
4179
- "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
4177
+ "version": "0.28.2",
4178
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
4179
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
4180
4180
  "dev": true,
4181
4181
  "hasInstallScript": true,
4182
4182
  "license": "MIT",
@@ -4187,32 +4187,32 @@
4187
4187
  "node": ">=18"
4188
4188
  },
4189
4189
  "optionalDependencies": {
4190
- "@esbuild/aix-ppc64": "0.28.1",
4191
- "@esbuild/android-arm": "0.28.1",
4192
- "@esbuild/android-arm64": "0.28.1",
4193
- "@esbuild/android-x64": "0.28.1",
4194
- "@esbuild/darwin-arm64": "0.28.1",
4195
- "@esbuild/darwin-x64": "0.28.1",
4196
- "@esbuild/freebsd-arm64": "0.28.1",
4197
- "@esbuild/freebsd-x64": "0.28.1",
4198
- "@esbuild/linux-arm": "0.28.1",
4199
- "@esbuild/linux-arm64": "0.28.1",
4200
- "@esbuild/linux-ia32": "0.28.1",
4201
- "@esbuild/linux-loong64": "0.28.1",
4202
- "@esbuild/linux-mips64el": "0.28.1",
4203
- "@esbuild/linux-ppc64": "0.28.1",
4204
- "@esbuild/linux-riscv64": "0.28.1",
4205
- "@esbuild/linux-s390x": "0.28.1",
4206
- "@esbuild/linux-x64": "0.28.1",
4207
- "@esbuild/netbsd-arm64": "0.28.1",
4208
- "@esbuild/netbsd-x64": "0.28.1",
4209
- "@esbuild/openbsd-arm64": "0.28.1",
4210
- "@esbuild/openbsd-x64": "0.28.1",
4211
- "@esbuild/openharmony-arm64": "0.28.1",
4212
- "@esbuild/sunos-x64": "0.28.1",
4213
- "@esbuild/win32-arm64": "0.28.1",
4214
- "@esbuild/win32-ia32": "0.28.1",
4215
- "@esbuild/win32-x64": "0.28.1"
4190
+ "@esbuild/aix-ppc64": "0.28.2",
4191
+ "@esbuild/android-arm": "0.28.2",
4192
+ "@esbuild/android-arm64": "0.28.2",
4193
+ "@esbuild/android-x64": "0.28.2",
4194
+ "@esbuild/darwin-arm64": "0.28.2",
4195
+ "@esbuild/darwin-x64": "0.28.2",
4196
+ "@esbuild/freebsd-arm64": "0.28.2",
4197
+ "@esbuild/freebsd-x64": "0.28.2",
4198
+ "@esbuild/linux-arm": "0.28.2",
4199
+ "@esbuild/linux-arm64": "0.28.2",
4200
+ "@esbuild/linux-ia32": "0.28.2",
4201
+ "@esbuild/linux-loong64": "0.28.2",
4202
+ "@esbuild/linux-mips64el": "0.28.2",
4203
+ "@esbuild/linux-ppc64": "0.28.2",
4204
+ "@esbuild/linux-riscv64": "0.28.2",
4205
+ "@esbuild/linux-s390x": "0.28.2",
4206
+ "@esbuild/linux-x64": "0.28.2",
4207
+ "@esbuild/netbsd-arm64": "0.28.2",
4208
+ "@esbuild/netbsd-x64": "0.28.2",
4209
+ "@esbuild/openbsd-arm64": "0.28.2",
4210
+ "@esbuild/openbsd-x64": "0.28.2",
4211
+ "@esbuild/openharmony-arm64": "0.28.2",
4212
+ "@esbuild/sunos-x64": "0.28.2",
4213
+ "@esbuild/win32-arm64": "0.28.2",
4214
+ "@esbuild/win32-ia32": "0.28.2",
4215
+ "@esbuild/win32-x64": "0.28.2"
4216
4216
  }
4217
4217
  },
4218
4218
  "node_modules/type-fest": {