accelr8 3.0.5 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/protocol.ts
4
- var VERSION = true ? "3.0.5" : "3.0.2";
4
+ var VERSION = true ? "3.1.1" : "3.0.2";
5
5
  var PROTO = 3;
6
6
  var PORT = 8787;
7
7
  var DEFAULT_SERVER = "wss://accelr8-canvas.patonchain.workers.dev";
@@ -7,7 +7,7 @@ import {
7
7
  VERSION,
8
8
  decode,
9
9
  encode
10
- } from "./chunk-CZENTCH6.js";
10
+ } from "./chunk-AY3UXM6A.js";
11
11
  import {
12
12
  DEFAULT_MODEL,
13
13
  addAccount,
@@ -1130,16 +1130,16 @@ function statusColor(engine, frame2, info) {
1130
1130
  }
1131
1131
  function microLine(w, engine, frame2, info) {
1132
1132
  const dot = { text: "\u25C9", color: statusColor(engine, frame2, info) };
1133
- const project = info.project ? { text: info.project, color: BALL } : null;
1133
+ const project2 = info.project ? { text: info.project, color: BALL } : null;
1134
1134
  const counts = info.t0 > 0 ? { text: `${info.t0} new`, color: BRIGHT, bold: true } : null;
1135
1135
  const ticker = info.lastEvent ? { text: info.lastEvent, color: info.lastEventColor } : null;
1136
1136
  const onlineFull = { text: `${info.online} online`, color: BALL };
1137
1137
  const onlineNum = { text: `${info.online}`, color: BALL };
1138
1138
  const ladder = [
1139
- { brand: true, fields: [project, onlineFull, counts], ticker: "full" },
1140
- { fields: [project, onlineFull, counts], ticker: "trunc" },
1141
- { fields: [project, onlineFull, counts] },
1142
- { fields: [project, onlineNum, counts] },
1139
+ { brand: true, fields: [project2, onlineFull, counts], ticker: "full" },
1140
+ { fields: [project2, onlineFull, counts], ticker: "trunc" },
1141
+ { fields: [project2, onlineFull, counts] },
1142
+ { fields: [project2, onlineNum, counts] },
1143
1143
  { fields: [onlineNum, counts] }
1144
1144
  ];
1145
1145
  for (const rung of ladder) {
@@ -1547,6 +1547,269 @@ function errMsg(e) {
1547
1547
  return e instanceof Error ? e.message : String(e);
1548
1548
  }
1549
1549
 
1550
+ // src/world-data.ts
1551
+ var PACKED = `-92.32,48.24 -88.13,48.92 -83.11,46.27 -81.66,44.76 -82.09,42.29 -77.1,44.0 -69.95,46.92 -65.92,45.32 -66.37,44.25 -61.22,45.43 -64.94,47.34 -64.12,48.52 -70.68,47.02 -67.24,49.33 -59.82,50.48 -56.14,52.46 -59.07,53.58 -58.26,54.21 -60.69,55.33 -61.97,57.41 -64.35,59.49 -67.29,58.15 -69.89,59.91 -71.31,61.45 -78.22,61.97 -77.28,59.53 -77.09,55.88 -79.06,51.68 -82.23,52.7 -86.75,55.72 -92.17,56.86 -95.61,58.82 -92.66,62.02 -90.65,63.24 -95.96,64.12 -89.88,63.98 -89.3,65.22 -86.86,66.12 -84.54,66.88 -82.3,67.76 -83.1,69.68 -86.05,67.98 -88.18,68.2 -91.0,68.82 -91.72,69.69 -93.15,71.09 -96.58,71.05 -93.35,69.52 -94.23,68.25 -95.96,66.73 -98.83,68.27 -102.45,67.69 -108.34,68.43 -105.83,68.05 -108.15,66.6 -111.15,67.63 -114.1,68.23 -120.92,69.44 -124.32,69.26 -128.76,70.5 -131.86,69.19 -131.15,69.79 -135.81,69.13 -140.19,69.37 -141.2,69.58 -141.21,69.56 -142.49,69.83 -148.09,70.26 -154.37,70.96 -159.53,70.38 -166.64,68.25 -161.56,66.55 -162.99,65.97 -168.23,65.49 -161.12,64.49 -165.29,62.57 -164.58,60.06 -162.06,58.36 -157.85,58.12 -162.34,55.06 -156.52,57.11 -153.53,59.32 -149.18,60.81 -149.9,59.5 -146.54,60.36 -139.98,59.73 -137.12,58.28 -136.01,59.12 -133.84,57.12 -131.46,55.98 -132.08,57.2 -140.37,60.25 -141.21,60.16 -133.38,58.93 -130.88,54.83 -128.86,53.9 -126.58,52.12 -127.08,50.8 -124.42,49.66 -122.56,48.91 -122.44,48.92 -124.42,47.18 -124.52,42.48 -123.09,38.45 -121.73,36.62 -117.6,33.34 -117.28,32.64 -117.29,32.48 -114.75,27.8 -112.53,24.8 -110.55,24.07 -114.23,29.59 -112.58,29.99 -109.57,25.94 -105.61,21.94 -102.09,17.87 -95.75,15.94 -92.21,14.97 -92.22,14.71 -86.74,12.06 -83.03,8.65 -79.93,8.74 -77.0,7.82 -81.99,8.97 -83.92,12.7 -86.33,15.8 -88.4,15.92 -88.45,17.42 -87.01,21.33 -91.65,18.72 -96.96,20.37 -97.65,25.67 -97.62,25.82 -95.62,28.84 -90.77,29.03 -87.33,30.22 -82.69,28.15 -80.16,26.66 -80.74,32.31 -76.89,35.43 -76.47,38.21 -75.66,37.67 -71.31,41.76 -69.44,44.17 -67.69,47.03 -73.18,45.14 -79.26,43.28 -82.84,42.59 -83.49,45.32 -86.36,43.65 -87.75,43.42 -86.01,45.96 -87.0,46.59 -91.39,46.79 -90.05,47.96;-152.62,58.41 -152.6,58.4;-153.3,57.8 -152.4,57.48 -153.32,57.79;-166.96,53.96 -167.01,53.95;-168.36,53.5 -168.19,53.36;-170.73,52.68 -170.6,52.55;-174.47,51.94 -174.47,51.92;-176.58,51.71 -176.64,51.73;-177.55,51.76 -177.41,51.63;-178.27,51.75;177.35,51.8 177.33,51.76;172.44,53.0 172.55,53.03;-123.4,48.33 -128.0,50.84 -123.5,48.34;-132.49,52.88 -132.44,52.91;-132.64,53.02 -131.97,53.71 -132.63,53.02;-55.36,51.56 -54.66,49.52 -53.65,47.48 -52.98,46.31 -56.12,46.84 -58.47,47.57 -57.61,50.38 -55.39,51.53;-61.37,49.01 -61.8,49.29 -61.38,49.03;-63.01,46.71 -64.42,46.61 -63.04,46.68;-60.14,46.48 -60.14,46.5;-71.97,41.11 -71.97,41.15;-80.79,27.03 -81.01,26.99;-113.01,42.09 -113.1,42.01;-155.74,20.02 -155.73,19.98;-156.51,20.78 -156.51,20.78;-157.12,21.21 -157.08,20.95;-157.87,21.42;-159.53,22.07;-117.44,66.46 -119.59,65.24 -123.95,65.03 -123.69,66.44 -119.21,66.22 -117.44,66.44;-120.71,64.03 -114.91,62.3 -109.07,62.72 -112.62,61.19 -118.68,61.19 -117.01,61.17 -115.97,62.56 -119.46,64.0 -120.59,63.94;-112.31,58.46 -108.9,59.44 -104.14,58.9 -102.56,56.72 -101.82,58.73 -104.65,58.91 -111.0,58.51 -112.35,58.62;-98.74,50.09 -99.75,52.24 -99.62,51.47 -98.82,50.39;-97.02,50.21 -97.5,54.02 -98.69,52.93 -97.19,51.09 -96.98,50.2;-95.34,49.04 -92.32,50.34 -94.14,49.47 -95.36,48.82;-80.39,56.16 -79.22,55.94 -80.34,56.08;-103.56,58.6 -103.6,58.58;-101.82,58.03 -102.33,58.1 -101.77,58.06;-101.88,55.79 -97.92,57.15 -101.22,55.85 -101.88,55.74;-77.61,6.8 -78.7,0.97 -80.75,-4.47 -76.19,-14.57 -70.44,-18.75 -70.68,-26.15 -71.44,-32.03 -73.38,-37.27 -73.06,-42.11 -73.17,-46.09 -73.52,-48.05 -73.67,-51.56 -71.06,-53.88 -69.14,-50.77 -67.51,-46.59 -63.49,-42.8 -62.14,-40.16 -57.12,-36.71 -53.17,-34.15 -51.26,-32.02 -48.16,-25.48 -40.73,-22.32 -38.88,-15.24 -34.6,-7.81 -41.95,-3.42 -48.02,-1.84 -48.44,-1.57 -50.81,0.0 -54.47,5.39 -60.59,8.32 -64.19,9.88 -70.78,10.64 -70.97,11.89 -76.26,8.76 -77.61,6.8;-69.14,-52.79 -66.16,-55.08 -70.01,-54.88 -70.55,-53.85 -69.31,-52.81;-59.29,-51.58 -59.35,-51.54;-58.65,-51.55 -58.55,-51.56;-84.39,21.44 -73.9,19.73 -79.27,21.18 -83.74,21.8 -84.32,21.42;-66.96,17.95 -67.05,17.89;-77.88,17.22 -78.06,16.98;-74.47,18.08 -69.88,18.99 -71.1,17.76 -74.45,17.86;-85.28,73.74 -85.79,70.96 -85.13,71.94 -84.74,72.96 -80.61,73.1 -78.45,72.2 -75.44,72.55 -73.89,71.98 -72.56,71.04 -71.49,70.57 -69.78,70.29 -68.12,69.71 -65.91,69.19 -66.92,68.39 -64.08,67.68 -62.5,66.68 -63.07,65.33 -66.11,66.08 -67.48,65.41 -64.05,63.15 -66.58,63.26 -69.04,62.33 -72.22,63.77 -76.88,64.17 -73.25,65.54 -70.09,66.64 -72.05,67.44 -76.32,68.36 -78.34,70.17 -82.12,69.71 -87.64,70.12 -89.68,71.43 -85.28,73.74;-80.9,76.1 -84.21,76.28 -88.94,76.38 -85.47,77.4 -85.43,77.93 -87.01,78.54 -83.17,78.94 -84.87,79.93 -81.33,79.82 -76.27,80.92 -82.88,80.62 -82.58,81.16 -86.51,81.05 -89.36,81.21 -90.45,81.38 -89.28,81.86 -87.21,82.3 -80.51,82.05 -80.16,82.55 -77.83,82.86 -75.51,83.05 -71.18,82.9 -65.1,82.78 -63.34,81.8 -68.26,81.26 -69.46,80.34 -71.05,79.82 -74.4,79.46 -75.42,79.03 -75.48,78.92 -76.01,78.2 -80.66,77.28 -78.07,76.98 -80.9,76.13;-92.86,74.13 -92.5,72.7 -94.89,73.16 -92.96,74.14;-94.8,76.95 -89.68,76.04 -88.52,75.4 -82.36,75.67 -79.39,74.65 -86.15,74.22 -91.7,74.94 -95.6,76.91 -94.87,76.96;-99.96,73.74 -97.89,72.9 -98.28,71.13 -102.04,72.92 -101.34,73.14 -99.69,73.59;-107.58,73.25 -104.59,71.02 -101.71,69.56 -104.07,68.62 -106.61,69.12 -114.09,69.05 -113.89,70.12 -115.88,70.32 -116.1,71.32 -117.45,72.48 -113.53,72.44 -109.84,72.24 -106.62,71.71 -107.43,73.04;-120.96,74.29 -118.37,72.53 -123.06,71.18 -123.4,73.77 -120.93,74.27;-108.83,76.74 -106.25,75.54 -107.08,74.78 -112.99,74.16 -112.28,74.99 -116.04,75.33 -115.27,76.2 -110.95,75.56 -109.77,76.31 -108.82,76.7;-115.7,77.46 -118.1,76.3 -121.13,76.37 -116.04,77.28;-110.01,77.86 -112.36,77.68 -109.96,77.86;-109.6,78.48 -112.2,78.01 -109.6,78.48;-97.87,76.61 -99.21,75.31 -100.86,75.6 -99.4,76.26 -97.79,76.6;-94.72,75.53 -94.66,75.52;-104.1,79.01 -99.19,77.54 -103.22,78.08 -104.3,78.95;-93.74,77.52 -93.74,77.52;-96.88,78.5 -96.91,77.77 -96.94,78.48;-84.69,65.84 -81.58,63.87 -85.0,62.96 -84.63,65.71;-81.84,62.75 -82.01,62.63;-79.88,62.12 -79.88,62.12;-43.53,59.89 -45.29,60.67 -47.91,60.83 -49.9,62.41 -50.71,64.42 -51.39,64.94 -52.96,66.09 -53.62,67.19 -53.51,67.51 -51.84,68.65 -52.19,70.0 -51.85,71.03 -55.41,71.41 -54.63,72.97 -56.98,74.7 -61.95,76.09 -66.38,75.83 -71.13,77.0 -66.81,77.6 -70.78,77.78 -64.96,79.7 -63.38,81.16 -56.89,82.17 -48.18,82.15 -42.08,82.74 -38.02,83.54 -23.96,82.94 -25.97,81.97 -25.99,80.64 -13.57,80.97 -16.6,80.16 -19.82,78.82 -18.8,77.54 -21.98,76.46 -20.69,75.12 -21.78,74.4 -24.1,73.69 -26.54,73.08 -24.63,72.69 -21.84,71.69 -24.62,71.24 -27.16,70.89 -27.21,70.0 -24.1,69.35 -28.35,68.43 -32.48,68.56 -35.26,66.26 -37.9,65.9 -40.04,65.0 -40.49,64.04 -42.01,63.14 -42.88,61.15 -43.09,60.07 -43.56,59.9;-16.26,66.41 -15.32,64.29 -20.14,63.47 -21.76,64.21 -21.33,64.97 -23.04,65.62 -21.76,66.26 -18.77,66.12 -16.23,66.35;0.56,51.47 -1.71,54.94 -3.41,57.52 -5.42,58.14 -5.77,55.59 -3.48,54.82 -4.68,52.88 -2.68,51.58 -3.8,50.08 1.26,51.14 0.65,51.41;-7.17,54.91 -9.97,53.47 -8.52,51.76 -5.69,54.79 -7.34,55.25;-1.33,60.66 -1.17,60.38;-6.18,58.44 -6.09,58.36;-6.47,57.58 -6.33,57.54;-7.3,57.54;-7.46,57.05;-6.54,56.94;-6.0,55.94;-5.09,55.55;-4.44,54.38 -4.3,54.19;-8.08,71.02 -8.21,70.86;16.92,79.52 22.26,78.46 16.86,76.41 16.0,77.39 16.03,77.92 16.81,79.5;14.71,79.4 16.05,79.12 14.02,77.8 13.56,78.46 12.63,79.26 14.68,79.4;22.01,78.24 21.86,78.23;21.54,77.75 23.88,77.26 21.53,77.67 22.79,77.79;23.5,79.97 28.24,79.54 20.85,78.94 19.0,79.34 21.05,79.88 23.41,79.96;46.98,80.23 43.13,79.97 47.18,80.22;50.43,80.19 50.55,79.88 47.77,79.86 50.45,80.14;61.79,80.18 61.79,80.18;65.08,80.69 64.27,80.59 65.13,80.68;-5.13,35.66 4.06,36.63 10.4,37.12 11.36,33.61 20.1,30.1 23.49,32.17 31.65,30.8 35.76,23.74 39.75,14.82 42.93,11.34 51.52,11.45 49.82,6.99 43.13,-0.62 39.15,-7.58 40.37,-13.2 37.74,-18.17 35.33,-22.71 32.84,-28.15 26.5,-34.39 19.55,-35.51 17.5,-30.88 12.24,-18.75 13.89,-12.81 12.05,-5.55 9.67,0.14 7.19,3.79 1.74,5.39 -4.77,4.59 -12.0,6.75 -15.54,10.98 -16.33,15.5 -16.1,22.29 -12.9,27.12 -9.52,31.09 -5.41,35.58;33.71,0.0 33.48,-3.42 33.34,-0.2 33.71,0.0;49.3,-12.5 49.28,-18.79 43.95,-25.5 44.37,-20.08 46.34,-16.31 47.91,-14.08 49.3,-12.5;178.88,69.1 181.2,68.42 183.52,67.78 188.87,66.38 186.54,64.74 182.87,65.63 180.13,65.14 179.48,64.88 178.2,64.29 177.46,62.62 170.42,60.17 164.48,59.89 162.92,57.34 161.82,54.88 156.42,51.09 156.4,57.76 163.79,61.73 159.9,60.73 156.81,61.68 153.83,59.1 148.57,59.46 140.77,58.39 137.1,54.07 140.72,52.43 138.77,47.3 129.92,42.04 128.33,38.46 126.15,35.18 125.12,39.08 121.62,40.15 117.58,38.21 121.77,36.9 120.73,32.65 121.28,30.25 118.83,24.93 112.69,21.81 108.53,21.73 107.55,16.34 107.32,10.45 104.39,10.37 100.01,13.52 100.26,8.3 103.22,1.56 98.21,9.17 97.66,15.36 94.21,17.79 90.05,21.74 90.06,21.03 82.06,15.95 80.05,11.72 76.41,8.6 72.79,17.43 72.02,20.0 68.98,21.99 64.62,24.41 57.83,24.77 53.11,26.2 49.67,29.41 50.96,25.15 54.33,23.44 59.03,22.57 57.87,18.86 52.95,15.74 47.26,12.96 42.75,14.68 39.93,19.61 36.92,25.78 33.3,28.46 32.6,30.63 32.18,30.58 36.08,35.03 32.53,36.17 27.77,36.94 26.51,39.18 31.54,40.82 38.53,40.48 40.35,43.17 39.88,46.45 35.18,44.99 33.5,44.96 30.24,45.14 28.7,41.48 26.55,39.84 23.62,39.67 23.8,37.34 21.9,36.92 18.79,42.02 14.52,44.31 14.58,42.25 18.32,39.57 16.05,39.35 11.52,42.36 6.87,43.08 2.8,41.09 -1.11,37.14 -6.24,36.7 -8.67,39.57 -6.51,43.13 -0.84,45.55 -3.93,48.4 0.48,49.09 4.2,51.29 6.44,52.92 8.42,55.94 11.72,55.49 11.73,53.66 16.78,54.14 21.4,56.32 24.67,57.2 28.94,59.18 24.16,59.52 22.07,62.66 23.76,65.35 18.7,62.54 19.11,59.67 18.4,58.54 15.34,55.73 11.74,58.08 8.37,57.68 5.8,59.2 7.38,60.86 7.51,61.86 9.62,62.99 13.37,65.46 15.46,67.12 18.54,68.62 22.32,69.64 24.77,70.17 25.93,69.79 28.56,70.46 29.75,69.76 33.83,69.11 41.9,66.85 35.14,66.25 33.3,66.07 35.46,64.15 37.68,64.03 41.71,64.09 44.8,65.58 44.87,68.16 45.92,66.83 51.79,67.85 53.7,67.89 59.68,68.09 65.07,69.08 68.56,69.19 68.38,70.97 73.03,71.62 73.8,68.29 69.42,66.45 73.43,66.36 77.51,68.36 80.74,66.74 75.27,68.67 75.11,71.8 78.62,70.56 78.43,71.9 82.72,71.23 84.25,70.03 81.4,72.76 86.5,74.01 87.68,74.78 90.25,75.23 89.68,75.57 95.12,75.95 99.69,76.09 104.1,77.52 106.34,76.4 112.99,75.6 107.88,73.72 110.43,73.71 113.34,73.37 123.1,73.28 128.94,73.02 126.1,72.24 130.53,70.86 135.49,71.51 139.6,72.23 146.04,72.39 146.92,72.21 150.77,71.28 159.92,70.14 167.68,69.63 170.2,69.99 178.88,69.1;68.33,76.71 66.03,75.62 59.1,74.11 54.92,73.03 56.67,74.1 58.56,75.09 63.86,75.87 68.19,76.7;53.04,72.57 58.29,70.39 55.03,70.78 53.44,72.26 53.63,72.61;52.22,46.5 51.73,44.73 52.56,41.8 53.43,40.4 54.22,37.86 49.04,38.45 48.17,42.76 49.33,45.64 52.22,46.5;62.32,46.32 60.32,43.06 59.57,45.58 61.94,46.33;79.55,46.12 74.3,44.44 78.62,45.79 79.66,46.07;76.81,41.96 76.73,41.86;35.15,35.15 34.61,34.84 35.18,35.17;23.84,35.33 24.3,34.91 24.09,35.39;15.54,37.89 13.47,37.89 15.54,37.89;9.56,40.95 8.46,39.99 9.12,40.69;9.72,42.6 9.54,42.35;80.6,8.95 79.73,5.96 80.1,8.3;11.04,57.44 10.67,57.25;-77.92,24.67 -77.98,24.22;-77.61,23.62 -77.18,23.64;-75.55,24.13 -75.41,24.31;-91.4,-0.17 -91.52,-0.26;-60.25,46.68 -60.71,46.33;-63.89,49.47 -63.45,49.43;142.53,-10.6 145.62,-16.34 149.79,-22.09 153.21,-26.82 150.52,-35.19 145.6,-38.53 140.13,-37.69 137.34,-34.77 135.76,-34.56 131.5,-31.34 121.72,-33.65 115.62,-33.25 114.09,-26.01 114.88,-21.27 122.34,-18.13 125.32,-14.53 128.39,-14.9 132.35,-11.42 136.16,-12.43 138.07,-16.45 142.25,-10.78;144.72,-40.68 148.32,-42.14 145.57,-42.77 146.47,-41.19;172.86,-34.23 176.1,-37.52 177.06,-39.49 174.77,-38.03 172.83,-34.27;172.36,-40.53 172.92,-43.81 168.41,-46.13 170.26,-43.21 173.69,-40.94;150.74,-10.18 143.04,-8.26 138.48,-6.97 131.95,-2.94 130.91,-1.35 134.38,-2.64 141.24,-2.62 148.19,-8.15 150.75,-10.27;117.24,7.01 117.9,0.76 113.89,-3.5 109.44,-0.82 113.13,3.38 117.24,7.01;95.31,5.75 102.32,1.4 106.03,-2.98 101.46,-2.81 95.2,5.73;140.91,41.53 140.79,35.75 136.82,34.56 133.56,34.72 132.49,35.41 136.73,37.2 139.82,40.0 140.68,41.43;133.71,34.3 131.41,31.58 129.38,33.1 133.9,34.37;141.89,45.5 144.12,42.92 140.3,41.64 141.53,45.3 141.89,45.53;142.57,54.36 143.64,49.19 141.99,45.88 141.92,50.85 142.6,54.34;121.92,25.48 120.53,24.7 121.7,25.51;110.81,20.07 109.2,19.66 110.81,20.07;106.51,-6.16 114.15,-7.72 108.71,-7.89 106.51,-6.16;164.27,-20.01 164.16,-20.27;178.61,-17.04 178.61,-17.04;179.45,-16.43 179.35,-16.43;-172.55,-13.39 -172.61,-13.78;122.26,18.67 123.05,13.86 120.73,13.8 120.43,16.43 121.72,18.4;125.34,9.79 125.56,6.28 122.38,7.0 125.1,9.38;119.64,11.35 118.81,10.16 119.59,10.86 119.64,11.35;-179.87,65.14 -177.13,65.63 -173.46,64.74 -171.13,66.38 -176.48,67.78 -178.8,68.42;101.96,79.08 101.31,77.86 101.22,79.04;94.29,79.29 95.31,78.68 100.02,79.43 97.26,79.62 95.44,79.65;95.46,80.62 92.39,79.66 95.07,80.54;138.54,76.05 144.93,75.45 140.3,74.99 137.27,75.44 138.29,75.98;146.08,75.29 147.75,74.73 145.85,75.06;141.44,73.88 141.48,73.84;0.01,-71.68 6.57,-70.57 15.04,-70.44 25.1,-70.75 33.37,-69.1 38.46,-69.77 42.85,-68.16 46.59,-67.23 49.35,-66.96 52.9,-65.97 58.46,-67.2 63.6,-67.58 70.63,-68.41 69.24,-70.36 76.2,-69.44 88.08,-66.64 94.98,-66.52 101.53,-66.09 111.31,-65.91 118.64,-66.87 126.24,-66.24 133.09,-66.18 139.85,-66.72 146.86,-67.96 153.65,-68.82 159.94,-69.57 164.1,-70.67 170.19,-71.94 165.68,-74.64 163.82,-77.6 162.1,-78.95 166.72,-82.84 175.58,-83.86;-178.56,-84.37 -147.96,-85.4 -152.96,-81.12 -153.95,-79.5 -151.24,-77.48 -146.74,-76.44 -137.68,-75.16 -131.63,-74.63 -123.05,-74.41 -114.76,-73.97 -111.91,-75.41 -105.05,-74.77 -100.9,-74.21 -101.04,-73.18 -100.28,-73.06 -93.06,-73.33 -85.4,-73.18 -79.82,-73.04 -78.21,-72.52 -71.9,-73.41 -67.51,-71.1 -67.57,-68.92 -66.65,-66.83 -64.3,-65.28 -59.14,-63.74 -59.58,-64.37 -62.5,-65.94 -62.48,-66.66 -65.64,-68.02 -63.85,-69.07 -61.69,-70.87 -60.89,-72.71 -61.07,-74.3 -63.33,-75.88 -76.05,-77.06 -83.04,-77.12 -74.3,-80.83 -56.4,-82.14 -42.46,-81.65 -31.6,-80.17 -34.01,-79.2 -32.48,-77.28 -26.28,-76.18 -17.18,-73.45 -11.2,-72.01 -8.67,-71.98 -5.45,-71.45 -0.82,-71.74 0.07,-71.68;164.65,-77.89 170.95,-77.37 179.67,-78.25;-178.74,-78.24 -165.76,-78.47 -158.42,-77.73;-58.98,-64.63 -60.99,-68.62 -61.02,-71.7;-62.01,-74.94 -52.0,-77.07 -42.23,-77.8 -36.22,-78.03;-35.03,-77.81 -26.13,-75.54 -19.35,-73.04 -12.16,-71.86 -6.15,-70.65 -0.57,-69.14 4.93,-70.25 10.91,-69.99 16.52,-69.87 25.41,-70.22 32.13,-69.29 33.62,-69.58;70.56,-68.53 73.91,-69.51;81.42,-67.87 84.67,-66.41 89.07,-66.73;-135.79,-74.67 -124.34,-73.22 -116.65,-74.08 -109.93,-74.64 -105.36,-74.56 -105.83,-74.77;-69.3,-70.06 -71.33,-72.68 -71.42,-71.85 -75.1,-71.46 -71.79,-70.55 -70.34,-69.26 -69.34,-70.13;-49.2,-77.83 -44.59,-78.79 -44.14,-80.13 -59.04,-79.95 -49.28,-77.84 -48.24,-77.81;-58.13,-80.12 -63.25,-80.2 -58.32,-80.12;-163.64,-78.74 -161.2,-79.93 -163.62,-78.74;66.82,66.82 66.82,66.82`;
1552
+ var POLYLINES = PACKED.split(";").map(
1553
+ (pl) => pl.split(" ").filter(Boolean).map((pt) => {
1554
+ const c = pt.split(",");
1555
+ return [parseFloat(c[0]), parseFloat(c[1])];
1556
+ }).filter((p) => Number.isFinite(p[0]) && Number.isFinite(p[1]))
1557
+ ).filter((pl) => pl.length > 0);
1558
+
1559
+ // src/map.ts
1560
+ var LAND = 240;
1561
+ var MIXED = 231;
1562
+ var DOT_CHAR = "\u25CF";
1563
+ function project(lat, lon, w, h) {
1564
+ const la = Math.max(-90, Math.min(90, Number.isFinite(lat) ? lat : 0));
1565
+ const lo = Math.max(-180, Math.min(180, Number.isFinite(lon) ? lon : 0));
1566
+ const x = w > 1 ? Math.round((lo + 180) / 360 * (w - 1)) : 0;
1567
+ const y = h > 1 ? Math.round((90 - la) / 180 * (h - 1)) : 0;
1568
+ return { x, y };
1569
+ }
1570
+ var BRAILLE = [[1, 8], [2, 16], [4, 32], [64, 128]];
1571
+ var brailleCache = null;
1572
+ function brailleWorld(W2, H2) {
1573
+ if (brailleCache && brailleCache.w === W2 && brailleCache.h === H2) return brailleCache.grid;
1574
+ const pw = W2 * 2, ph = H2 * 4;
1575
+ const grid2 = new Uint8Array(W2 * H2);
1576
+ const toX = (lon) => {
1577
+ let l = lon;
1578
+ if (l > 180) l -= 360;
1579
+ if (l < -180) l += 360;
1580
+ return Math.round((l + 180) / 360 * (pw - 1));
1581
+ };
1582
+ const toY = (lat) => Math.round((90 - Math.max(-90, Math.min(90, lat))) / 180 * (ph - 1));
1583
+ const set = (x, y) => {
1584
+ if (x < 0 || x >= pw || y < 0 || y >= ph) return;
1585
+ grid2[(y >> 2) * W2 + (x >> 1)] |= BRAILLE[y & 3][x & 1];
1586
+ };
1587
+ const line = (x0, y0, x1, y1) => {
1588
+ const dx = Math.abs(x1 - x0), dy = Math.abs(y1 - y0), sx = x0 < x1 ? 1 : -1, sy = y0 < y1 ? 1 : -1;
1589
+ let err = dx - dy, guard = 0;
1590
+ for (; ; ) {
1591
+ set(x0, y0);
1592
+ if (x0 === x1 && y0 === y1 || guard++ > pw + ph) break;
1593
+ const e2 = 2 * err;
1594
+ if (e2 > -dy) {
1595
+ err -= dy;
1596
+ x0 += sx;
1597
+ }
1598
+ if (e2 < dx) {
1599
+ err += dx;
1600
+ y0 += sy;
1601
+ }
1602
+ }
1603
+ };
1604
+ for (const pl of POLYLINES) {
1605
+ if (pl.length === 1) {
1606
+ set(toX(pl[0][0]), toY(pl[0][1]));
1607
+ continue;
1608
+ }
1609
+ for (let i = 1; i < pl.length; i++) {
1610
+ const ax = toX(pl[i - 1][0]), ay = toY(pl[i - 1][1]), bx = toX(pl[i][0]), by = toY(pl[i][1]);
1611
+ if (Math.abs(ax - bx) > pw * 0.6) {
1612
+ set(ax, ay);
1613
+ set(bx, by);
1614
+ continue;
1615
+ }
1616
+ line(ax, ay, bx, by);
1617
+ }
1618
+ }
1619
+ brailleCache = { w: W2, h: H2, grid: grid2 };
1620
+ return grid2;
1621
+ }
1622
+ function renderMap(w, h, dots) {
1623
+ const W2 = Math.max(0, Math.floor(w));
1624
+ const H2 = Math.max(0, Math.floor(h));
1625
+ const lines = [];
1626
+ const hits = [];
1627
+ if (W2 < 1) {
1628
+ while (lines.length < H2) lines.push({ text: "", spans: [] });
1629
+ return { lines, hits };
1630
+ }
1631
+ if (H2 >= 1) {
1632
+ const byCell = /* @__PURE__ */ new Map();
1633
+ for (const d of dots) {
1634
+ const { x, y } = project(d.lat, d.lon, W2, H2);
1635
+ const hit = byCell.get(y * W2 + x);
1636
+ if (!hit) {
1637
+ byCell.set(y * W2 + x, { x, y, names: [d.name], color: d.color });
1638
+ } else {
1639
+ hit.names.push(d.name);
1640
+ if (hit.color !== d.color) hit.color = MIXED;
1641
+ }
1642
+ }
1643
+ hits.push(...byCell.values());
1644
+ }
1645
+ const hitRows = /* @__PURE__ */ new Map();
1646
+ for (const hit of hits) {
1647
+ const row = hitRows.get(hit.y);
1648
+ if (row) row.push(hit);
1649
+ else hitRows.set(hit.y, [hit]);
1650
+ }
1651
+ const grid2 = brailleWorld(W2, H2);
1652
+ for (let y = 0; y < H2; y++) {
1653
+ const chars = new Array(W2).fill(" ");
1654
+ const colors = new Array(W2).fill(-1);
1655
+ const isDot = new Array(W2).fill(false);
1656
+ for (let x = 0; x < W2; x++) {
1657
+ const b = grid2[y * W2 + x];
1658
+ if (b) {
1659
+ chars[x] = String.fromCharCode(10240 + b);
1660
+ colors[x] = LAND;
1661
+ }
1662
+ }
1663
+ for (const hit of hitRows.get(y) ?? []) {
1664
+ chars[hit.x] = DOT_CHAR;
1665
+ colors[hit.x] = hit.color;
1666
+ isDot[hit.x] = true;
1667
+ }
1668
+ const spans = [];
1669
+ for (let x = 0; x < W2; ) {
1670
+ if (colors[x] < 0) {
1671
+ x++;
1672
+ continue;
1673
+ }
1674
+ let end = x + 1;
1675
+ while (end < W2 && colors[end] === colors[x] && isDot[end] === isDot[x]) end++;
1676
+ spans.push(isDot[x] ? { start: x, end, color: colors[x], bold: true } : { start: x, end, color: colors[x] });
1677
+ x = end;
1678
+ }
1679
+ lines.push({ text: chars.join("").replace(/ +$/, ""), spans });
1680
+ }
1681
+ return { lines, hits };
1682
+ }
1683
+ function hover(rendered, x, y) {
1684
+ let best = null;
1685
+ let bestDist = 2;
1686
+ for (const hit of rendered.hits) {
1687
+ const dist = Math.max(Math.abs(hit.x - x), Math.abs(hit.y - y));
1688
+ if (dist <= 1 && dist < bestDist) {
1689
+ best = hit;
1690
+ bestDist = dist;
1691
+ }
1692
+ }
1693
+ return best ? { names: best.names } : null;
1694
+ }
1695
+
1696
+ // src/geo.ts
1697
+ function localTz() {
1698
+ try {
1699
+ return Intl.DateTimeFormat().resolvedOptions().timeZone || "";
1700
+ } catch {
1701
+ return "";
1702
+ }
1703
+ }
1704
+ var TZ = {
1705
+ // north america
1706
+ "America/New_York": [40.7, -74],
1707
+ "America/Detroit": [42.3, -83],
1708
+ "America/Toronto": [43.7, -79.4],
1709
+ "America/Chicago": [41.9, -87.6],
1710
+ "America/Winnipeg": [49.9, -97.1],
1711
+ "America/Mexico_City": [19.4, -99.1],
1712
+ "America/Denver": [39.7, -104.99],
1713
+ "America/Edmonton": [53.5, -113.5],
1714
+ "America/Phoenix": [33.4, -112.1],
1715
+ "America/Los_Angeles": [34.05, -118.24],
1716
+ "America/Vancouver": [49.3, -123.1],
1717
+ "America/Anchorage": [61.2, -149.9],
1718
+ "Pacific/Honolulu": [21.3, -157.8],
1719
+ "America/Halifax": [44.6, -63.6],
1720
+ "America/St_Johns": [47.6, -52.7],
1721
+ // south + central america
1722
+ "America/Sao_Paulo": [-23.5, -46.6],
1723
+ "America/Argentina/Buenos_Aires": [-34.6, -58.4],
1724
+ "America/Santiago": [-33.5, -70.7],
1725
+ "America/Lima": [-12, -77],
1726
+ "America/Bogota": [4.7, -74.1],
1727
+ "America/Caracas": [10.5, -66.9],
1728
+ "America/Guatemala": [14.6, -90.5],
1729
+ // europe
1730
+ "Europe/London": [51.5, -0.13],
1731
+ "Europe/Dublin": [53.3, -6.3],
1732
+ "Europe/Lisbon": [38.7, -9.1],
1733
+ "Europe/Madrid": [40.4, -3.7],
1734
+ "Europe/Paris": [48.86, 2.35],
1735
+ "Europe/Amsterdam": [52.4, 4.9],
1736
+ "Europe/Brussels": [50.8, 4.4],
1737
+ "Europe/Zurich": [47.4, 8.5],
1738
+ "Europe/Berlin": [52.5, 13.4],
1739
+ "Europe/Rome": [41.9, 12.5],
1740
+ "Europe/Vienna": [48.2, 16.4],
1741
+ "Europe/Prague": [50.1, 14.4],
1742
+ "Europe/Copenhagen": [55.7, 12.6],
1743
+ "Europe/Stockholm": [59.3, 18.1],
1744
+ "Europe/Oslo": [59.9, 10.7],
1745
+ "Europe/Warsaw": [52.2, 21],
1746
+ "Europe/Athens": [38, 23.7],
1747
+ "Europe/Bucharest": [44.4, 26.1],
1748
+ "Europe/Kyiv": [50.5, 30.5],
1749
+ "Europe/Kiev": [50.5, 30.5],
1750
+ "Europe/Istanbul": [41, 28.98],
1751
+ "Europe/Moscow": [55.75, 37.6],
1752
+ "Europe/Helsinki": [60.2, 24.9],
1753
+ // africa + middle east
1754
+ "Africa/Casablanca": [33.6, -7.6],
1755
+ "Africa/Lagos": [6.5, 3.4],
1756
+ "Africa/Cairo": [30, 31.2],
1757
+ "Africa/Nairobi": [-1.3, 36.8],
1758
+ "Africa/Johannesburg": [-26.2, 28],
1759
+ "Asia/Jerusalem": [31.8, 35.2],
1760
+ "Asia/Dubai": [25.2, 55.3],
1761
+ "Asia/Tehran": [35.7, 51.4],
1762
+ "Asia/Riyadh": [24.7, 46.7],
1763
+ "Asia/Baghdad": [33.3, 44.4],
1764
+ // asia
1765
+ "Asia/Karachi": [24.9, 67],
1766
+ "Asia/Kolkata": [22.6, 88.4],
1767
+ "Asia/Calcutta": [22.6, 88.4],
1768
+ "Asia/Colombo": [6.9, 79.9],
1769
+ "Asia/Dhaka": [23.8, 90.4],
1770
+ "Asia/Bangkok": [13.8, 100.5],
1771
+ "Asia/Jakarta": [-6.2, 106.8],
1772
+ "Asia/Singapore": [1.35, 103.8],
1773
+ "Asia/Kuala_Lumpur": [3.1, 101.7],
1774
+ "Asia/Manila": [14.6, 121],
1775
+ "Asia/Hong_Kong": [22.3, 114.2],
1776
+ "Asia/Shanghai": [31.2, 121.5],
1777
+ "Asia/Taipei": [25, 121.5],
1778
+ "Asia/Seoul": [37.6, 127],
1779
+ "Asia/Tokyo": [35.7, 139.7],
1780
+ // oceania
1781
+ "Australia/Perth": [-31.95, 115.9],
1782
+ "Australia/Adelaide": [-34.9, 138.6],
1783
+ "Australia/Brisbane": [-27.5, 153],
1784
+ "Australia/Sydney": [-33.87, 151.2],
1785
+ "Australia/Melbourne": [-37.8, 145],
1786
+ "Pacific/Auckland": [-36.85, 174.76]
1787
+ };
1788
+ var REGION = {
1789
+ America: [15, -90],
1790
+ Europe: [50, 15],
1791
+ Africa: [3, 22],
1792
+ Asia: [35, 95],
1793
+ Australia: [-25, 135],
1794
+ Pacific: [-10, -160],
1795
+ Atlantic: [35, -35],
1796
+ Indian: [-15, 75],
1797
+ Antarctica: [-80, 0]
1798
+ };
1799
+ function tzToCoords(tz) {
1800
+ if (!tz) return null;
1801
+ const exact = TZ[tz];
1802
+ if (exact) return { lat: exact[0], lon: exact[1] };
1803
+ const region = REGION[tz.split("/")[0]];
1804
+ if (region) return { lat: region[0], lon: region[1] };
1805
+ return null;
1806
+ }
1807
+ function tzCity(tz) {
1808
+ if (!tz) return "";
1809
+ const parts = tz.split("/");
1810
+ return (parts[parts.length - 1] || tz).replace(/_/g, " ");
1811
+ }
1812
+
1550
1813
  // src/client.ts
1551
1814
  var term = tk.terminal;
1552
1815
  var ScreenBuffer = tk.ScreenBuffer;
@@ -1984,7 +2247,7 @@ function connect() {
1984
2247
  state.connected = true;
1985
2248
  state.status = "";
1986
2249
  lastPong = Date.now();
1987
- sendMsg({ t: "hello", v: PROTO, user: me, executes: myAccounts.map((a) => ({ handle: a.handle, provider: a.provider, model: a.model })) });
2250
+ sendMsg({ t: "hello", v: PROTO, user: me, tz: localTz(), executes: myAccounts.map((a) => ({ handle: a.handle, provider: a.provider, model: a.model })) });
1988
2251
  if (autoJoinCode && !state.project) sendMsg({ t: "joinProject", code: autoJoinCode });
1989
2252
  else if (state.project) {
1990
2253
  rejoining = true;
@@ -2982,10 +3245,46 @@ function renderSecrets(top) {
2982
3245
  puts(2, top + 3, "shared api keys and logins land here soon.", { color: C.dim, italic: true });
2983
3246
  puts(2, top + 4, "values will be masked, reveals audited, agents only ever see names.", { color: C.dim, italic: true });
2984
3247
  }
3248
+ function mapDotsFromSessions() {
3249
+ const seen = /* @__PURE__ */ new Set();
3250
+ const dots = [];
3251
+ for (const s of state.sessions) {
3252
+ if (seen.has(s.userId)) continue;
3253
+ const coords = tzToCoords(s.tz);
3254
+ if (!coords) continue;
3255
+ seen.add(s.userId);
3256
+ dots.push({ lat: coords.lat, lon: coords.lon, name: s.name, color: s.color });
3257
+ }
3258
+ return dots;
3259
+ }
3260
+ var teamMap = null;
3261
+ function blitMapLine(x0, y, line) {
3262
+ puts(x0, y, line.text, { color: readableFg(C.rule, C.bg, 3.05), bgColor: C.bg });
3263
+ for (const sp of line.spans) {
3264
+ if (!sp.bold) continue;
3265
+ const seg = [...line.text].slice(sp.start, sp.end).join("");
3266
+ if (seg) puts(x0 + sp.start, y, seg, { color: readableFg(sp.color, C.bg, 2.6), bold: true, bgColor: C.bg });
3267
+ }
3268
+ }
2985
3269
  function renderTeam(top) {
2986
3270
  if (!state.project) return;
3271
+ teamMap = null;
2987
3272
  let y = top + 1;
2988
3273
  const online = onlineUserIds();
3274
+ const availH = H() - top - 3;
3275
+ if (W() >= 48 && availH >= 22) {
3276
+ const dots = mapDotsFromSessions();
3277
+ const mapW = Math.min(W() - 4, 130);
3278
+ const mapH = Math.min(15, Math.max(8, Math.floor(availH * 0.45)));
3279
+ const title = `WHERE \xB7 ${dots.length}/${online.size} placed`;
3280
+ puts(2, y, title, { color: C.bright, bold: true });
3281
+ puts(2 + title.length + 2, y, dots.length ? "hover a dot" : "timezones load as people connect", { color: C.dim, italic: true });
3282
+ y += 1;
3283
+ const rendered = renderMap(mapW, mapH, dots);
3284
+ for (let i = 0; i < rendered.lines.length; i++) blitMapLine(2, y + i, rendered.lines[i]);
3285
+ teamMap = { rendered, x0: 2, y0: y };
3286
+ y += rendered.lines.length + 1;
3287
+ }
2989
3288
  puts(2, y, `HUMANS \xB7 ${online.size} online`, { color: C.bright, bold: true });
2990
3289
  y += 1;
2991
3290
  for (const m of state.members) {
@@ -2996,6 +3295,8 @@ function renderTeam(top) {
2996
3295
  puts(4, y, m.name + (m.id === me.id ? " \xB7 you" : ""), { color: readableFg(m.color), bold: true });
2997
3296
  const where = on ? sess.some((s) => s.tab !== "away") ? "viewing " + (sess.find((s) => s.tab !== "away")?.tab ?? "chat") : "parked" : "offline";
2998
3297
  puts(24, y, where, { color: on ? C.text : C.dim });
3298
+ const city = tzCity(sess.find((s) => s.tz)?.tz);
3299
+ if (city && W() >= 56) puts(42, y, city.slice(0, W() - 44), { color: C.dim });
2999
3300
  y++;
3000
3301
  }
3001
3302
  y += 1;
@@ -3545,6 +3846,13 @@ function onMouse(name, data) {
3545
3846
  if (name === "MOUSE_DRAG" ? data?.left : painting) paintAt(mx, my);
3546
3847
  if (name === "MOUSE_DRAG" && data?.right) eraseAt(mx, my);
3547
3848
  }
3849
+ if (state.tab === "team" && teamMap) {
3850
+ const hit = hover(teamMap.rendered, mx - teamMap.x0, my - teamMap.y0);
3851
+ if (hit) {
3852
+ const city = tzCity(state.sessions.find((s) => hit.names.includes(s.name))?.tz);
3853
+ state.status = hit.names.join(" \xB7 ") + (city ? " \xB7 " + city : "");
3854
+ }
3855
+ }
3548
3856
  return;
3549
3857
  }
3550
3858
  if (name === "MOUSE_WHEEL_UP" || name === "MOUSE_WHEEL_DOWN") {
@@ -6,7 +6,7 @@ import {
6
6
  LIMITS,
7
7
  PORT,
8
8
  PROTO
9
- } from "./chunk-CZENTCH6.js";
9
+ } from "./chunk-AY3UXM6A.js";
10
10
 
11
11
  // src/server.ts
12
12
  import { WebSocketServer, WebSocket } from "ws";
@@ -203,6 +203,7 @@ var RoomCore = class {
203
203
  color: Number(u.color) || 7,
204
204
  projectId: null,
205
205
  tab: "home",
206
+ tz: typeof msg.tz === "string" ? msg.tz.slice(0, 40) : void 0,
206
207
  executes: Array.isArray(msg.executes) ? msg.executes.map((e) => String(e?.handle || "").slice(0, 20)).filter(Boolean).slice(0, 8) : []
207
208
  };
208
209
  this.host.setSession(conn, s2);
@@ -791,7 +792,7 @@ var RoomCore = class {
791
792
  return this.roomConns(projectId).filter((c) => c !== except);
792
793
  }
793
794
  sessionsFor(projectId) {
794
- return this.roomConns(projectId).map((c) => this.host.getSession(c)).filter((s) => !!s).map((s) => ({ sid: s.sid, userId: s.userId, name: s.name, color: s.color, tab: s.tab }));
795
+ return this.roomConns(projectId).map((c) => this.host.getSession(c)).filter((s) => !!s).map((s) => ({ sid: s.sid, userId: s.userId, name: s.name, color: s.color, tab: s.tab, tz: s.tz }));
795
796
  }
796
797
  broadcastSessions(projectId) {
797
798
  const sessions = this.sessionsFor(projectId);
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  DEFAULT_SERVER,
4
4
  PORT,
5
5
  VERSION
6
- } from "./chunks/chunk-CZENTCH6.js";
6
+ } from "./chunks/chunk-AY3UXM6A.js";
7
7
 
8
8
  // src/cli.ts
9
9
  var HELP = `
@@ -52,7 +52,7 @@ async function main() {
52
52
  console.error(`invalid port: ${argVal(args, "--port")}`);
53
53
  process.exit(1);
54
54
  }
55
- const { runServer } = await import("./chunks/server-OGAKQFOU.js");
55
+ const { runServer } = await import("./chunks/server-EFKIKFUG.js");
56
56
  runServer(port);
57
57
  return;
58
58
  }
@@ -76,7 +76,7 @@ async function main() {
76
76
  const { cachedUpdate, refreshUpdateCache } = await import("./chunks/update-UEPNGB6Y.js");
77
77
  refreshUpdateCache();
78
78
  const update = cachedUpdate(VERSION);
79
- const { runClient } = await import("./chunks/client-DGDZ22XC.js");
79
+ const { runClient } = await import("./chunks/client-J62VQCBE.js");
80
80
  runClient({
81
81
  name: argVal(args, "--name"),
82
82
  server: argVal(args, "--server"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "accelr8",
3
- "version": "3.0.5",
3
+ "version": "3.1.1",
4
4
  "description": "Collaborative ascii canvas in your terminal. Real multiplayer, live cursors, mouse-driven TUI.",
5
5
  "type": "module",
6
6
  "license": "ISC",
@@ -42,7 +42,7 @@
42
42
  "chattest": "tsx src/chattest.ts",
43
43
  "inputtest": "tsx src/inputtest.ts",
44
44
  "torturetest": "tsx src/torturetest.ts",
45
- "test": "for t in core chat input ladder boot orb crypto accounts executor agentcontext map voice glyph materialize update install contrast; do tsx src/${t}test.ts || exit 1; done && tsx src/rendertest.ts > /dev/null && echo RENDER OK",
45
+ "test": "for t in core chat input ladder boot orb crypto accounts executor agentcontext map voice glyph materialize update install geo map contrast; do tsx src/${t}test.ts || exit 1; done && tsx src/rendertest.ts > /dev/null && echo RENDER OK",
46
46
  "laddertest": "tsx src/laddertest.ts",
47
47
  "boottest": "tsx src/boottest.ts",
48
48
  "reconnecttest": "tsx src/reconnecttest.ts",