@solongate/proxy 0.81.92 → 0.81.94

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/dist/index.js CHANGED
@@ -8886,7 +8886,7 @@ function PoliciesPanel({ focused }) {
8886
8886
  };
8887
8887
  useInput2(
8888
8888
  (input, key) => {
8889
- if (input === "r" && !editing) {
8889
+ if (key.ctrl && input === "r" && !editing) {
8890
8890
  list6.reload();
8891
8891
  activeQ.reload();
8892
8892
  detail.reload();
@@ -8983,7 +8983,7 @@ function PoliciesPanel({ focused }) {
8983
8983
  /* @__PURE__ */ jsx3(Text3, { color: theme.dim, children: activeBy ? ` (${activeBy})` : "" })
8984
8984
  ] }) : /* @__PURE__ */ jsx3(Text3, { color: theme.bad, bold: true, children: "\u25CB NONE \u2014 nothing enforced, grants refused" })
8985
8985
  ] }),
8986
- /* @__PURE__ */ jsx3(Text3, { color: theme.dim, children: focused ? "\u2191\u2193 select \xB7 enter open \xB7 a activate \xB7 x deactivate \xB7 r refresh" : "press \u2192 to browse" }),
8986
+ /* @__PURE__ */ jsx3(Text3, { color: theme.dim, children: focused ? "\u2191\u2193 select \xB7 enter open \xB7 a activate \xB7 x deactivate \xB7 ^R refresh" : "press \u2192 to browse" }),
8987
8987
  /* @__PURE__ */ jsx3(Box3, { marginTop: 1, flexDirection: "column", children: policies.map((p, i) => /* @__PURE__ */ jsxs3(Text3, { color: i === pi ? theme.accentBright : void 0, bold: i === pi, children: [
8988
8988
  (i === pi ? "\u25B8 " : " ") + truncate2(p.name, 26).padEnd(27),
8989
8989
  /* @__PURE__ */ jsxs3(Text3, { color: theme.dim, children: [
@@ -9152,7 +9152,7 @@ function RateLimitPanel({ focused }) {
9152
9152
  else if (key.leftArrow) adjust(-1, step);
9153
9153
  else if (key.rightArrow) adjust(1, step);
9154
9154
  else if (input === "s") void save();
9155
- else if (input === "r") {
9155
+ else if (key.ctrl && input === "r") {
9156
9156
  layersQ.reload();
9157
9157
  historyQ.reload();
9158
9158
  insightsQ.reload();
@@ -9176,7 +9176,7 @@ function RateLimitPanel({ focused }) {
9176
9176
  const shown = anomalies2.slice(0, burstBudget);
9177
9177
  const bw = Math.max(10, cols - 30);
9178
9178
  return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", height: rows, overflow: "hidden", children: [
9179
- /* @__PURE__ */ jsx4(Text4, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 field \xB7 \u2190\u2192 \xB11 \xB7 shift+\u2190\u2192 \xB110 \xB7 s save \xB7 r refresh" : "press \u2192 to edit" }),
9179
+ /* @__PURE__ */ jsx4(Text4, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 field \xB7 \u2190\u2192 \xB11 \xB7 shift+\u2190\u2192 \xB110 \xB7 s save \xB7 ^R refresh" : "press \u2192 to edit" }),
9180
9180
  /* @__PURE__ */ jsxs4(FieldRow, { label: "Mode", active: focused && fi === 0, children: [
9181
9181
  /* @__PURE__ */ jsx4(Text4, { color: modeColor(draft.mode), bold: true, children: draft.mode }),
9182
9182
  /* @__PURE__ */ jsx4(Text4, { color: theme.dim, children: draft.mode === "off" ? " no limit" : draft.mode === "detect" ? " flag bursts, never block" : " DENY calls over the limit" })
@@ -9329,6 +9329,11 @@ function DlpPanel({ focused }) {
9329
9329
  useInput4(
9330
9330
  (input2, key) => {
9331
9331
  if (!dlp) return;
9332
+ if (key.ctrl && input2 === "r") {
9333
+ q.reload();
9334
+ setStatus("refreshed");
9335
+ return;
9336
+ }
9332
9337
  if (key.upArrow) setSel(() => Math.max(0, selC - 1));
9333
9338
  else if (key.downArrow) setSel(() => Math.min(entries.length - 1, selC + 1));
9334
9339
  else if (input2 === "m") mutate({ ...dlp, mode: MODES2[(MODES2.indexOf(dlp.mode) + 1) % MODES2.length] });
@@ -9434,7 +9439,7 @@ function DlpPanel({ focused }) {
9434
9439
  /* @__PURE__ */ jsx5(Text5, { color: theme.dim, children: dlp.mode === "off" ? " (scanning disabled)" : dlp.mode === "detect" ? " (flag dlp:yes, redact output)" : " (deny + redact secrets)" }),
9435
9440
  dirty ? /* @__PURE__ */ jsx5(Text5, { color: theme.warn, children: " \u25CF unsaved (s save \xB7 x discard)" }) : null
9436
9441
  ] }),
9437
- /* @__PURE__ */ jsx5(Text5, { color: theme.dim, wrap: "truncate", children: focused ? `\u2191\u2193 move \xB7 space on/off \xB7 m mode \xB7 a add pattern \xB7 r add route \xB7 d remove \xB7 g ghost \xB7 s save${moreAbove ? ` \xB7 \u25B2${moreAbove}` : ""}${moreBelow ? ` \xB7 \u25BC${moreBelow}` : ""}` : "press \u2192 to edit" }),
9442
+ /* @__PURE__ */ jsx5(Text5, { color: theme.dim, wrap: "truncate", children: focused ? `\u2191\u2193 move \xB7 space on/off \xB7 m mode \xB7 a add pattern \xB7 r add route \xB7 d remove \xB7 g ghost \xB7 s save \xB7 ^R refresh${moreAbove ? ` \xB7 \u25B2${moreAbove}` : ""}${moreBelow ? ` \xB7 \u25BC${moreBelow}` : ""}` : "press \u2192 to edit" }),
9438
9443
  adding ? /* @__PURE__ */ jsx5(Box5, { flexDirection: "column", children: /* @__PURE__ */ jsxs5(Box5, { children: [
9439
9444
  /* @__PURE__ */ jsx5(Text5, { color: theme.warn, children: adding === "name" ? "new pattern name: " : adding === "re" ? `pattern for "${newName}" (glob, * = any chars, e.g. sk-* AKIA*): ` : "ghost path to hide (glob, * = any chars, e.g. */.env *.pem): " }),
9440
9445
  /* @__PURE__ */ jsx5(
@@ -9656,6 +9661,15 @@ function AuditPanel({ active: active2, focused }) {
9656
9661
  return;
9657
9662
  }
9658
9663
  if (frozen) return;
9664
+ if (key.ctrl && input === "r") {
9665
+ if (source === "cloud") {
9666
+ cloudQ.reload();
9667
+ agentsQ.reload();
9668
+ statsQ.reloadQuiet();
9669
+ } else localQ.reload();
9670
+ setMsg({ text: "refreshed", level: "ok" });
9671
+ return;
9672
+ }
9659
9673
  if (showHelp) {
9660
9674
  setShowHelp(false);
9661
9675
  return;
@@ -9908,7 +9922,7 @@ function AuditPanel({ active: active2, focused }) {
9908
9922
  chip("status", SESS_STATUS[si] ?? "all", si !== 0),
9909
9923
  chip("search", sessSearch || "\xB7", !!sessSearch)
9910
9924
  ] }),
9911
- /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter \u2192 session logs \xB7 v logs \xB7 ? all keys" : "press \u2192 to browse" }),
9925
+ /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter \u2192 session logs \xB7 v logs \xB7 ^R refresh \xB7 ? all keys" : "press \u2192 to browse" }),
9912
9926
  editing === "sess-search" ? /* @__PURE__ */ jsxs6(Box6, { children: [
9913
9927
  /* @__PURE__ */ jsx6(Text6, { color: theme.warn, children: "search: " }),
9914
9928
  /* @__PURE__ */ jsx6(
@@ -9982,7 +9996,7 @@ function AuditPanel({ active: active2, focused }) {
9982
9996
  chip("search", search || "\xB7", !!search),
9983
9997
  sessFilter ? chip("sess", sessFilter.slice(0, 8), true) : null
9984
9998
  ] }),
9985
- /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter full entry \xB7 \u2190\u2192 page \xB7 v sessions \xB7 ? all keys" : "press \u2192 to browse" }),
9999
+ /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter full entry \xB7 \u2190\u2192 page \xB7 v sessions \xB7 ^R refresh \xB7 ? all keys" : "press \u2192 to browse" }),
9986
10000
  msg ? /* @__PURE__ */ jsx6(Text6, { color: msg.level === "bad" ? theme.bad : theme.ok, children: truncate2(msg.text, cols) }) : null,
9987
10001
  editing && editing !== "sess-search" ? /* @__PURE__ */ jsxs6(Box6, { children: [
9988
10002
  /* @__PURE__ */ jsxs6(Text6, { color: theme.warn, children: [
@@ -10928,7 +10942,16 @@ function SettingsPanel({
10928
10942
  );
10929
10943
  lineKey.push("");
10930
10944
  }
10931
- const budget = Math.max(4, rows - 3);
10945
+ lineEls.push(/* @__PURE__ */ jsx7(Text7, { children: " " }, "ver-sp"));
10946
+ lineKey.push("");
10947
+ lineEls.push(
10948
+ /* @__PURE__ */ jsxs7(Text7, { wrap: "truncate", color: theme.dim, children: [
10949
+ `solongate v${ver}`,
10950
+ latest ? newerThan(latest, ver) ? /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: ` \xB7 v${latest} on npm \u2014 auto-updating` }) : /* @__PURE__ */ jsx7(Text7, { color: theme.ok, children: " \xB7 latest" }) : null
10951
+ ] }, "ver")
10952
+ );
10953
+ lineKey.push("");
10954
+ const budget = Math.max(4, rows - 2);
10932
10955
  const selLine = Math.max(0, lineKey.indexOf(keyOf(cur)));
10933
10956
  const maxStart = Math.max(0, lineEls.length - budget);
10934
10957
  const startL = Math.min(Math.max(0, selLine - Math.floor(budget / 2)), maxStart);
@@ -10941,11 +10964,7 @@ function SettingsPanel({
10941
10964
  /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: editing === "path" ? "local log path: " : "webhook url: " }),
10942
10965
  /* @__PURE__ */ jsx7(TextInput5, { value: input, onChange: setInput, onSubmit: submitInput })
10943
10966
  ] }) : msg ? /* @__PURE__ */ jsx7(Text7, { wrap: "truncate", color: msg.level === "bad" ? theme.bad : theme.ok, children: truncate2(msg.text, cols) }) : login?.msg ? /* @__PURE__ */ jsx7(Text7, { wrap: "truncate", color: login.phase === "error" ? theme.bad : theme.ok, children: login.msg }) : /* @__PURE__ */ jsx7(Text7, { children: " " }),
10944
- /* @__PURE__ */ jsx7(Box7, { flexDirection: "column", height: budget, overflow: "hidden", children: win }),
10945
- /* @__PURE__ */ jsxs7(Text7, { wrap: "truncate", color: theme.dim, children: [
10946
- `solongate v${ver}`,
10947
- latest ? newerThan(latest, ver) ? /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: ` \xB7 v${latest} on npm \u2014 auto-updating` }) : /* @__PURE__ */ jsx7(Text7, { color: theme.ok, children: " \xB7 latest" }) : null
10948
- ] })
10967
+ /* @__PURE__ */ jsx7(Box7, { flexDirection: "column", height: budget, overflow: "hidden", children: win })
10949
10968
  ] }) });
10950
10969
  }
10951
10970
  var EVENTS, SPIN2, SIGNALS2, SIGNAL_LABEL, WINDOWS, winLabel, THRESH_MIN, THRESH_MAX, nearestWindowIdx, editorFieldCount, acctLabel, alertChannel;
package/dist/tui/index.js CHANGED
@@ -1999,7 +1999,7 @@ function PoliciesPanel({ focused }) {
1999
1999
  };
2000
2000
  useInput2(
2001
2001
  (input, key) => {
2002
- if (input === "r" && !editing) {
2002
+ if (key.ctrl && input === "r" && !editing) {
2003
2003
  list5.reload();
2004
2004
  activeQ.reload();
2005
2005
  detail.reload();
@@ -2096,7 +2096,7 @@ function PoliciesPanel({ focused }) {
2096
2096
  /* @__PURE__ */ jsx3(Text3, { color: theme.dim, children: activeBy ? ` (${activeBy})` : "" })
2097
2097
  ] }) : /* @__PURE__ */ jsx3(Text3, { color: theme.bad, bold: true, children: "\u25CB NONE \u2014 nothing enforced, grants refused" })
2098
2098
  ] }),
2099
- /* @__PURE__ */ jsx3(Text3, { color: theme.dim, children: focused ? "\u2191\u2193 select \xB7 enter open \xB7 a activate \xB7 x deactivate \xB7 r refresh" : "press \u2192 to browse" }),
2099
+ /* @__PURE__ */ jsx3(Text3, { color: theme.dim, children: focused ? "\u2191\u2193 select \xB7 enter open \xB7 a activate \xB7 x deactivate \xB7 ^R refresh" : "press \u2192 to browse" }),
2100
2100
  /* @__PURE__ */ jsx3(Box3, { marginTop: 1, flexDirection: "column", children: policies.map((p, i) => /* @__PURE__ */ jsxs3(Text3, { color: i === pi ? theme.accentBright : void 0, bold: i === pi, children: [
2101
2101
  (i === pi ? "\u25B8 " : " ") + truncate(p.name, 26).padEnd(27),
2102
2102
  /* @__PURE__ */ jsxs3(Text3, { color: theme.dim, children: [
@@ -2240,7 +2240,7 @@ function RateLimitPanel({ focused }) {
2240
2240
  else if (key.leftArrow) adjust(-1, step);
2241
2241
  else if (key.rightArrow) adjust(1, step);
2242
2242
  else if (input === "s") void save();
2243
- else if (input === "r") {
2243
+ else if (key.ctrl && input === "r") {
2244
2244
  layersQ.reload();
2245
2245
  historyQ.reload();
2246
2246
  insightsQ.reload();
@@ -2264,7 +2264,7 @@ function RateLimitPanel({ focused }) {
2264
2264
  const shown = anomalies2.slice(0, burstBudget);
2265
2265
  const bw = Math.max(10, cols - 30);
2266
2266
  return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", height: rows, overflow: "hidden", children: [
2267
- /* @__PURE__ */ jsx4(Text4, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 field \xB7 \u2190\u2192 \xB11 \xB7 shift+\u2190\u2192 \xB110 \xB7 s save \xB7 r refresh" : "press \u2192 to edit" }),
2267
+ /* @__PURE__ */ jsx4(Text4, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 field \xB7 \u2190\u2192 \xB11 \xB7 shift+\u2190\u2192 \xB110 \xB7 s save \xB7 ^R refresh" : "press \u2192 to edit" }),
2268
2268
  /* @__PURE__ */ jsxs4(FieldRow, { label: "Mode", active: focused && fi === 0, children: [
2269
2269
  /* @__PURE__ */ jsx4(Text4, { color: modeColor(draft.mode), bold: true, children: draft.mode }),
2270
2270
  /* @__PURE__ */ jsx4(Text4, { color: theme.dim, children: draft.mode === "off" ? " no limit" : draft.mode === "detect" ? " flag bursts, never block" : " DENY calls over the limit" })
@@ -2402,6 +2402,11 @@ function DlpPanel({ focused }) {
2402
2402
  useInput4(
2403
2403
  (input2, key) => {
2404
2404
  if (!dlp) return;
2405
+ if (key.ctrl && input2 === "r") {
2406
+ q.reload();
2407
+ setStatus("refreshed");
2408
+ return;
2409
+ }
2405
2410
  if (key.upArrow) setSel(() => Math.max(0, selC - 1));
2406
2411
  else if (key.downArrow) setSel(() => Math.min(entries.length - 1, selC + 1));
2407
2412
  else if (input2 === "m") mutate({ ...dlp, mode: MODES2[(MODES2.indexOf(dlp.mode) + 1) % MODES2.length] });
@@ -2507,7 +2512,7 @@ function DlpPanel({ focused }) {
2507
2512
  /* @__PURE__ */ jsx5(Text5, { color: theme.dim, children: dlp.mode === "off" ? " (scanning disabled)" : dlp.mode === "detect" ? " (flag dlp:yes, redact output)" : " (deny + redact secrets)" }),
2508
2513
  dirty ? /* @__PURE__ */ jsx5(Text5, { color: theme.warn, children: " \u25CF unsaved (s save \xB7 x discard)" }) : null
2509
2514
  ] }),
2510
- /* @__PURE__ */ jsx5(Text5, { color: theme.dim, wrap: "truncate", children: focused ? `\u2191\u2193 move \xB7 space on/off \xB7 m mode \xB7 a add pattern \xB7 r add route \xB7 d remove \xB7 g ghost \xB7 s save${moreAbove ? ` \xB7 \u25B2${moreAbove}` : ""}${moreBelow ? ` \xB7 \u25BC${moreBelow}` : ""}` : "press \u2192 to edit" }),
2515
+ /* @__PURE__ */ jsx5(Text5, { color: theme.dim, wrap: "truncate", children: focused ? `\u2191\u2193 move \xB7 space on/off \xB7 m mode \xB7 a add pattern \xB7 r add route \xB7 d remove \xB7 g ghost \xB7 s save \xB7 ^R refresh${moreAbove ? ` \xB7 \u25B2${moreAbove}` : ""}${moreBelow ? ` \xB7 \u25BC${moreBelow}` : ""}` : "press \u2192 to edit" }),
2511
2516
  adding ? /* @__PURE__ */ jsx5(Box5, { flexDirection: "column", children: /* @__PURE__ */ jsxs5(Box5, { children: [
2512
2517
  /* @__PURE__ */ jsx5(Text5, { color: theme.warn, children: adding === "name" ? "new pattern name: " : adding === "re" ? `pattern for "${newName}" (glob, * = any chars, e.g. sk-* AKIA*): ` : "ghost path to hide (glob, * = any chars, e.g. */.env *.pem): " }),
2513
2518
  /* @__PURE__ */ jsx5(
@@ -2801,6 +2806,15 @@ function AuditPanel({ active: active2, focused }) {
2801
2806
  return;
2802
2807
  }
2803
2808
  if (frozen) return;
2809
+ if (key.ctrl && input === "r") {
2810
+ if (source === "cloud") {
2811
+ cloudQ.reload();
2812
+ agentsQ.reload();
2813
+ statsQ.reloadQuiet();
2814
+ } else localQ.reload();
2815
+ setMsg({ text: "refreshed", level: "ok" });
2816
+ return;
2817
+ }
2804
2818
  if (showHelp) {
2805
2819
  setShowHelp(false);
2806
2820
  return;
@@ -3053,7 +3067,7 @@ function AuditPanel({ active: active2, focused }) {
3053
3067
  chip("status", SESS_STATUS[si] ?? "all", si !== 0),
3054
3068
  chip("search", sessSearch || "\xB7", !!sessSearch)
3055
3069
  ] }),
3056
- /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter \u2192 session logs \xB7 v logs \xB7 ? all keys" : "press \u2192 to browse" }),
3070
+ /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter \u2192 session logs \xB7 v logs \xB7 ^R refresh \xB7 ? all keys" : "press \u2192 to browse" }),
3057
3071
  editing === "sess-search" ? /* @__PURE__ */ jsxs6(Box6, { children: [
3058
3072
  /* @__PURE__ */ jsx6(Text6, { color: theme.warn, children: "search: " }),
3059
3073
  /* @__PURE__ */ jsx6(
@@ -3127,7 +3141,7 @@ function AuditPanel({ active: active2, focused }) {
3127
3141
  chip("search", search || "\xB7", !!search),
3128
3142
  sessFilter ? chip("sess", sessFilter.slice(0, 8), true) : null
3129
3143
  ] }),
3130
- /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter full entry \xB7 \u2190\u2192 page \xB7 v sessions \xB7 ? all keys" : "press \u2192 to browse" }),
3144
+ /* @__PURE__ */ jsx6(Text6, { color: theme.dim, wrap: "truncate", children: focused ? "\u2191\u2193 select \xB7 enter full entry \xB7 \u2190\u2192 page \xB7 v sessions \xB7 ^R refresh \xB7 ? all keys" : "press \u2192 to browse" }),
3131
3145
  msg ? /* @__PURE__ */ jsx6(Text6, { color: msg.level === "bad" ? theme.bad : theme.ok, children: truncate(msg.text, cols) }) : null,
3132
3146
  editing && editing !== "sess-search" ? /* @__PURE__ */ jsxs6(Box6, { children: [
3133
3147
  /* @__PURE__ */ jsxs6(Text6, { color: theme.warn, children: [
@@ -4172,7 +4186,16 @@ function SettingsPanel({
4172
4186
  );
4173
4187
  lineKey.push("");
4174
4188
  }
4175
- const budget = Math.max(4, rows - 3);
4189
+ lineEls.push(/* @__PURE__ */ jsx7(Text7, { children: " " }, "ver-sp"));
4190
+ lineKey.push("");
4191
+ lineEls.push(
4192
+ /* @__PURE__ */ jsxs7(Text7, { wrap: "truncate", color: theme.dim, children: [
4193
+ `solongate v${ver}`,
4194
+ latest ? newerThan(latest, ver) ? /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: ` \xB7 v${latest} on npm \u2014 auto-updating` }) : /* @__PURE__ */ jsx7(Text7, { color: theme.ok, children: " \xB7 latest" }) : null
4195
+ ] }, "ver")
4196
+ );
4197
+ lineKey.push("");
4198
+ const budget = Math.max(4, rows - 2);
4176
4199
  const selLine = Math.max(0, lineKey.indexOf(keyOf(cur)));
4177
4200
  const maxStart = Math.max(0, lineEls.length - budget);
4178
4201
  const startL = Math.min(Math.max(0, selLine - Math.floor(budget / 2)), maxStart);
@@ -4185,11 +4208,7 @@ function SettingsPanel({
4185
4208
  /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: editing === "path" ? "local log path: " : "webhook url: " }),
4186
4209
  /* @__PURE__ */ jsx7(TextInput5, { value: input, onChange: setInput, onSubmit: submitInput })
4187
4210
  ] }) : msg ? /* @__PURE__ */ jsx7(Text7, { wrap: "truncate", color: msg.level === "bad" ? theme.bad : theme.ok, children: truncate(msg.text, cols) }) : login?.msg ? /* @__PURE__ */ jsx7(Text7, { wrap: "truncate", color: login.phase === "error" ? theme.bad : theme.ok, children: login.msg }) : /* @__PURE__ */ jsx7(Text7, { children: " " }),
4188
- /* @__PURE__ */ jsx7(Box7, { flexDirection: "column", height: budget, overflow: "hidden", children: win }),
4189
- /* @__PURE__ */ jsxs7(Text7, { wrap: "truncate", color: theme.dim, children: [
4190
- `solongate v${ver}`,
4191
- latest ? newerThan(latest, ver) ? /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: ` \xB7 v${latest} on npm \u2014 auto-updating` }) : /* @__PURE__ */ jsx7(Text7, { color: theme.ok, children: " \xB7 latest" }) : null
4192
- ] })
4211
+ /* @__PURE__ */ jsx7(Box7, { flexDirection: "column", height: budget, overflow: "hidden", children: win })
4193
4212
  ] }) });
4194
4213
  }
4195
4214
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solongate/proxy",
3
- "version": "0.81.92",
3
+ "version": "0.81.94",
4
4
  "description": "AI tool security proxy: protect any AI tool server with customizable policies, path/command constraints, rate limiting, and audit logging. No code changes required.",
5
5
  "type": "module",
6
6
  "bin": {