@solongate/proxy 0.83.16 → 0.83.18

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
@@ -7638,7 +7638,7 @@ function StreamLine({ e, loc, selected, date }) {
7638
7638
  hhmmss(e.at),
7639
7639
  " "
7640
7640
  ] }),
7641
- /* @__PURE__ */ jsx(Text, { color: loc ? theme.ok : "white", children: loc ? "HERE" : "AWAY" }),
7641
+ /* @__PURE__ */ jsx(Text, { color: loc ? theme.ok : "white", children: loc ? "LOC" : "CLD" }),
7642
7642
  /* @__PURE__ */ jsx(Text, { color: theme.dim, children: "] " }),
7643
7643
  /* @__PURE__ */ jsx(Text, { color: decisionColor(e.decision), bold: e.decision !== "ALLOW", children: e.decision.padEnd(6) }),
7644
7644
  /* @__PURE__ */ jsx(Text, { color: theme.accent, children: truncate2(e.tool, 12).padEnd(13) }),
@@ -8726,6 +8726,7 @@ function LivePanel({ active: active2 }) {
8726
8726
  const setting = localLogsSetting();
8727
8727
  setLocalOn(setting.enabled);
8728
8728
  setLocalPath(setting);
8729
+ if (!setting.enabled) return;
8729
8730
  const lines = tailLines(setting.file);
8730
8731
  if (!lines.length) return;
8731
8732
  const fresh = [];
@@ -8988,9 +8989,7 @@ function LivePanel({ active: active2 }) {
8988
8989
  }))
8989
8990
  ];
8990
8991
  sessRef.current = combinedSess;
8991
- const localSessIds = new Set(localSess.keys());
8992
- if (ring?.session) localSessIds.add(ring.session);
8993
- const isLoc = (e) => e.source === "local" || !!e.session && localSessIds.has(e.session);
8992
+ const isLoc = (e) => e.source === "local";
8994
8993
  const q = search.trim().toLowerCase();
8995
8994
  const matches = (e) => !q || `${e.tool} ${e.agent ?? ""} ${e.decision} ${e.permission} ${e.rule ?? ""} ${e.detail}`.toLowerCase().includes(q);
8996
8995
  const signalOk = (e) => signal === "none" ? true : signal === "deny" ? e.decision !== "ALLOW" : signal === "dlp" ? e.dlp : e.burst;
@@ -9232,7 +9231,7 @@ function LivePanel({ active: active2 }) {
9232
9231
  /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " ENTRY " }),
9233
9232
  /* @__PURE__ */ jsx2(Text2, { color: decisionColor(e.decision), bold: true, children: " " + e.decision }),
9234
9233
  /* @__PURE__ */ jsx2(Text2, { color: theme.accent, bold: true, children: " " + e.tool }),
9235
- /* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "white", children: " " + (isLoc(e) ? "HERE" : "AWAY") }),
9234
+ /* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "white", children: " " + (isLoc(e) ? "LOC" : "CLD") }),
9236
9235
  e.dlp ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: " DLP!" }) : null,
9237
9236
  e.burst ? /* @__PURE__ */ jsx2(Text2, { color: theme.warn, children: " BURST" }) : null,
9238
9237
  /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: " \u2190 back" })
@@ -9557,14 +9556,14 @@ function LivePanel({ active: active2 }) {
9557
9556
  filter === "all" ? /* @__PURE__ */ jsxs2(Text2, { color: theme.dim, children: [
9558
9557
  spin,
9559
9558
  " awaiting traffic\u2026"
9560
- ] }) : /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: `${spin} no ${filter === "local" ? "HERE (this machine)" : "AWAY (other devices)"} calls in the buffer \xB7 f switches origin` })
9559
+ ] }) : /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: `${spin} no ${filter === "local" ? "LOC (local log)" : "CLD (cloud)"} calls in the buffer \xB7 f switches source` })
9561
9560
  ) : null,
9562
9561
  windowed.map((e, i) => /* @__PURE__ */ jsx2(StreamLine, { e, loc: isLoc(e), selected: clampedScroll + i === selClamped }, e.id))
9563
9562
  ] }),
9564
9563
  /* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
9565
9564
  /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " LIVE " }),
9566
- /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` local-log ${localOn ? "on" : "off"} \xB7 ${localBuf.length} here/${cloudBuf.length} away \xB7 origin ${filter === "all" ? "all" : filter === "local" ? "HERE only" : "AWAY only"} \xB7 top ${topTools.map(([t, c2]) => `${t}\xD7${c2}`).join(" ") || "\u2014"} ` }),
9567
- /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` \u2191\u2193 select \xB7 enter full entry \xB7 f origin \xB7 / search \xB7 space copy \xB7 ? all keys \xB7 esc menu \xB7 q quit ` })
9565
+ /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` local-log ${localOn ? "on" : "off"} \xB7 ${localBuf.length} loc/${cloudBuf.length} cld \xB7 source ${filter === "all" ? "all" : filter === "local" ? "LOC only" : "CLD only"} \xB7 top ${topTools.map(([t, c2]) => `${t}\xD7${c2}`).join(" ") || "\u2014"} ` }),
9566
+ /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` \u2191\u2193 select \xB7 enter full entry \xB7 f source \xB7 / search \xB7 space copy \xB7 ? all keys \xB7 esc menu \xB7 q quit ` })
9568
9567
  ] })
9569
9568
  ] });
9570
9569
  }
@@ -9613,7 +9612,7 @@ var init_Live = __esm({
9613
9612
  ["w", "whitelist the selected DENY (adds ALLOW rule)"],
9614
9613
  ["b", "block the selected ALLOW (adds DENY rule)"],
9615
9614
  ["d / x / r", "filter: denies / dlp hits / rate-limit bursts"],
9616
- ["f", "origin: all \u2192 HERE (this machine) \u2192 AWAY (other devices)"],
9615
+ ["f", "source: all \u2192 LOC (this machine's local log) \u2192 CLD (cloud)"],
9617
9616
  ["/", "live search (tool, agent, command\u2026) \xB7 enter done"],
9618
9617
  ["s", "session picker"],
9619
9618
  ["l", "layers detail (rate limit \xB7 dlp \xB7 ghost \xB7 guard)"],
@@ -11252,7 +11251,7 @@ function AuditPanel({ active: active2, focused }) {
11252
11251
  /* @__PURE__ */ jsx7(Text7, { backgroundColor: BG2, color: "white", bold: true, children: " ENTRY " }),
11253
11252
  /* @__PURE__ */ jsx7(Text7, { color: decisionColor(e.decision), bold: true, children: " " + e.decision }),
11254
11253
  /* @__PURE__ */ jsx7(Text7, { color: theme.accent, bold: true, children: " " + e.tool }),
11255
- /* @__PURE__ */ jsx7(Text7, { color: loc ? theme.ok : "white", children: " " + (loc ? "HERE" : "AWAY") }),
11254
+ /* @__PURE__ */ jsx7(Text7, { color: loc ? theme.ok : "white", children: " " + (loc ? "LOC" : "CLD") }),
11256
11255
  e.dlp.length ? /* @__PURE__ */ jsx7(Text7, { color: theme.bad, children: " DLP!" }) : null,
11257
11256
  e.burst ? /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: " BURST" }) : null,
11258
11257
  /* @__PURE__ */ jsx7(Text7, { color: theme.dim, children: " \u2190 back" })
@@ -11,11 +11,10 @@ export declare function PaneTitle({ label, extra, width }: {
11
11
  }): JSX.Element;
12
12
  /**
13
13
  * One tool-stream row, shared verbatim by Live (rolling buffer) and Audit (full
14
- * history). `loc` tags where the call HAPPENED HERE (this machine) vs AWAY
15
- * (another paired device). Deliberately not LOC/CLD: `local` already names the
16
- * local-log STORAGE setting shown in the same panel, and one word meaning two
17
- * things two lines apart had people reading a cloud-stored call as on-disk.
18
- * `selected` highlights + shows the ▸ cursor.
14
+ * history). `loc` tags where the record IS: LOC (a line in this machine's
15
+ * local log) vs CLD (the cloud audit log). With local storage off nothing is
16
+ * LOC, which is the whole point of the setting. `selected` highlights + shows
17
+ * the cursor.
19
18
  * Columns are fixed-width and NEVER conditional so scrolling can't reshuffle the
20
19
  * line and glitch the frame.
21
20
  */
package/dist/tui/index.js CHANGED
@@ -801,7 +801,7 @@ function StreamLine({ e, loc, selected, date }) {
801
801
  hhmmss(e.at),
802
802
  " "
803
803
  ] }),
804
- /* @__PURE__ */ jsx(Text, { color: loc ? theme.ok : "white", children: loc ? "HERE" : "AWAY" }),
804
+ /* @__PURE__ */ jsx(Text, { color: loc ? theme.ok : "white", children: loc ? "LOC" : "CLD" }),
805
805
  /* @__PURE__ */ jsx(Text, { color: theme.dim, children: "] " }),
806
806
  /* @__PURE__ */ jsx(Text, { color: decisionColor(e.decision), bold: e.decision !== "ALLOW", children: e.decision.padEnd(6) }),
807
807
  /* @__PURE__ */ jsx(Text, { color: theme.accent, children: truncate(e.tool, 12).padEnd(13) }),
@@ -1746,7 +1746,7 @@ var LIVE_HELP = [
1746
1746
  ["w", "whitelist the selected DENY (adds ALLOW rule)"],
1747
1747
  ["b", "block the selected ALLOW (adds DENY rule)"],
1748
1748
  ["d / x / r", "filter: denies / dlp hits / rate-limit bursts"],
1749
- ["f", "origin: all \u2192 HERE (this machine) \u2192 AWAY (other devices)"],
1749
+ ["f", "source: all \u2192 LOC (this machine's local log) \u2192 CLD (cloud)"],
1750
1750
  ["/", "live search (tool, agent, command\u2026) \xB7 enter done"],
1751
1751
  ["s", "session picker"],
1752
1752
  ["l", "layers detail (rate limit \xB7 dlp \xB7 ghost \xB7 guard)"],
@@ -1841,6 +1841,7 @@ function LivePanel({ active: active2 }) {
1841
1841
  const setting = localLogsSetting();
1842
1842
  setLocalOn(setting.enabled);
1843
1843
  setLocalPath(setting);
1844
+ if (!setting.enabled) return;
1844
1845
  const lines = tailLines(setting.file);
1845
1846
  if (!lines.length) return;
1846
1847
  const fresh = [];
@@ -2103,9 +2104,7 @@ function LivePanel({ active: active2 }) {
2103
2104
  }))
2104
2105
  ];
2105
2106
  sessRef.current = combinedSess;
2106
- const localSessIds = new Set(localSess.keys());
2107
- if (ring?.session) localSessIds.add(ring.session);
2108
- const isLoc = (e) => e.source === "local" || !!e.session && localSessIds.has(e.session);
2107
+ const isLoc = (e) => e.source === "local";
2109
2108
  const q = search.trim().toLowerCase();
2110
2109
  const matches = (e) => !q || `${e.tool} ${e.agent ?? ""} ${e.decision} ${e.permission} ${e.rule ?? ""} ${e.detail}`.toLowerCase().includes(q);
2111
2110
  const signalOk = (e) => signal === "none" ? true : signal === "deny" ? e.decision !== "ALLOW" : signal === "dlp" ? e.dlp : e.burst;
@@ -2347,7 +2346,7 @@ function LivePanel({ active: active2 }) {
2347
2346
  /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " ENTRY " }),
2348
2347
  /* @__PURE__ */ jsx2(Text2, { color: decisionColor(e.decision), bold: true, children: " " + e.decision }),
2349
2348
  /* @__PURE__ */ jsx2(Text2, { color: theme.accent, bold: true, children: " " + e.tool }),
2350
- /* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "white", children: " " + (isLoc(e) ? "HERE" : "AWAY") }),
2349
+ /* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "white", children: " " + (isLoc(e) ? "LOC" : "CLD") }),
2351
2350
  e.dlp ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: " DLP!" }) : null,
2352
2351
  e.burst ? /* @__PURE__ */ jsx2(Text2, { color: theme.warn, children: " BURST" }) : null,
2353
2352
  /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: " \u2190 back" })
@@ -2672,14 +2671,14 @@ function LivePanel({ active: active2 }) {
2672
2671
  filter === "all" ? /* @__PURE__ */ jsxs2(Text2, { color: theme.dim, children: [
2673
2672
  spin,
2674
2673
  " awaiting traffic\u2026"
2675
- ] }) : /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: `${spin} no ${filter === "local" ? "HERE (this machine)" : "AWAY (other devices)"} calls in the buffer \xB7 f switches origin` })
2674
+ ] }) : /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: `${spin} no ${filter === "local" ? "LOC (local log)" : "CLD (cloud)"} calls in the buffer \xB7 f switches source` })
2676
2675
  ) : null,
2677
2676
  windowed.map((e, i) => /* @__PURE__ */ jsx2(StreamLine, { e, loc: isLoc(e), selected: clampedScroll + i === selClamped }, e.id))
2678
2677
  ] }),
2679
2678
  /* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
2680
2679
  /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " LIVE " }),
2681
- /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` local-log ${localOn ? "on" : "off"} \xB7 ${localBuf.length} here/${cloudBuf.length} away \xB7 origin ${filter === "all" ? "all" : filter === "local" ? "HERE only" : "AWAY only"} \xB7 top ${topTools.map(([t, c2]) => `${t}\xD7${c2}`).join(" ") || "\u2014"} ` }),
2682
- /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` \u2191\u2193 select \xB7 enter full entry \xB7 f origin \xB7 / search \xB7 space copy \xB7 ? all keys \xB7 esc menu \xB7 q quit ` })
2680
+ /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` local-log ${localOn ? "on" : "off"} \xB7 ${localBuf.length} loc/${cloudBuf.length} cld \xB7 source ${filter === "all" ? "all" : filter === "local" ? "LOC only" : "CLD only"} \xB7 top ${topTools.map(([t, c2]) => `${t}\xD7${c2}`).join(" ") || "\u2014"} ` }),
2681
+ /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` \u2191\u2193 select \xB7 enter full entry \xB7 f source \xB7 / search \xB7 space copy \xB7 ? all keys \xB7 esc menu \xB7 q quit ` })
2683
2682
  ] })
2684
2683
  ] });
2685
2684
  }
@@ -4326,7 +4325,7 @@ function AuditPanel({ active: active2, focused }) {
4326
4325
  /* @__PURE__ */ jsx7(Text7, { backgroundColor: BG2, color: "white", bold: true, children: " ENTRY " }),
4327
4326
  /* @__PURE__ */ jsx7(Text7, { color: decisionColor(e.decision), bold: true, children: " " + e.decision }),
4328
4327
  /* @__PURE__ */ jsx7(Text7, { color: theme.accent, bold: true, children: " " + e.tool }),
4329
- /* @__PURE__ */ jsx7(Text7, { color: loc ? theme.ok : "white", children: " " + (loc ? "HERE" : "AWAY") }),
4328
+ /* @__PURE__ */ jsx7(Text7, { color: loc ? theme.ok : "white", children: " " + (loc ? "LOC" : "CLD") }),
4330
4329
  e.dlp.length ? /* @__PURE__ */ jsx7(Text7, { color: theme.bad, children: " DLP!" }) : null,
4331
4330
  e.burst ? /* @__PURE__ */ jsx7(Text7, { color: theme.warn, children: " BURST" }) : null,
4332
4331
  /* @__PURE__ */ jsx7(Text7, { color: theme.dim, children: " \u2190 back" })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solongate/proxy",
3
- "version": "0.83.16",
3
+ "version": "0.83.18",
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": {