@solongate/proxy 0.81.34 → 0.81.36
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 +27 -24
- package/dist/tui/index.js +27 -24
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6781,8 +6781,8 @@ var init_theme = __esm({
|
|
|
6781
6781
|
init_config2();
|
|
6782
6782
|
accent = loadConfig().accent;
|
|
6783
6783
|
theme = {
|
|
6784
|
-
accent: accent || "
|
|
6785
|
-
accentBright: accent || "
|
|
6784
|
+
accent: accent || "white",
|
|
6785
|
+
accentBright: accent || "white",
|
|
6786
6786
|
ok: "green",
|
|
6787
6787
|
warn: "yellow",
|
|
6788
6788
|
bad: "red",
|
|
@@ -7401,7 +7401,7 @@ function StreamLine({ e, loc, selected }) {
|
|
|
7401
7401
|
hhmmss(e.at),
|
|
7402
7402
|
" "
|
|
7403
7403
|
] }),
|
|
7404
|
-
/* @__PURE__ */ jsx2(Text2, { color: loc ? theme.ok : "
|
|
7404
|
+
/* @__PURE__ */ jsx2(Text2, { color: loc ? theme.ok : "white", children: loc ? "LOC" : "CLD" }),
|
|
7405
7405
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: "] " }),
|
|
7406
7406
|
/* @__PURE__ */ jsx2(Text2, { color: decisionColor(e.decision), bold: e.decision !== "ALLOW", children: e.decision.padEnd(6) }),
|
|
7407
7407
|
/* @__PURE__ */ jsx2(Text2, { color: theme.accent, children: truncate2(e.tool, 12).padEnd(13) }),
|
|
@@ -7409,6 +7409,7 @@ function StreamLine({ e, loc, selected }) {
|
|
|
7409
7409
|
/* @__PURE__ */ jsx2(Text2, { color: e.evalMs != null && e.evalMs > 500 ? theme.warn : theme.dim, children: (e.evalMs != null ? `${e.evalMs}ms` : "\u2014").padEnd(7) }),
|
|
7410
7410
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: truncate2(e.agent ?? "-", 11).padEnd(12) }),
|
|
7411
7411
|
e.dlp ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: "DLP! " }) : null,
|
|
7412
|
+
e.burst ? /* @__PURE__ */ jsx2(Text2, { color: theme.warn, children: "RL! " }) : null,
|
|
7412
7413
|
e.rule && e.decision !== "ALLOW" ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: truncate2(e.rule, 14) + " " }) : null,
|
|
7413
7414
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: e.detail })
|
|
7414
7415
|
] });
|
|
@@ -7907,9 +7908,9 @@ function LivePanel({ active: active2 }) {
|
|
|
7907
7908
|
] });
|
|
7908
7909
|
}
|
|
7909
7910
|
const titleBar = /* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
7910
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#1432A0", color: "
|
|
7911
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
7912
|
-
frozen ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#123d1f", color: "#7bd88f", bold: true, children: " \u23F5 COPY MODE \u2014 screen frozen, select & copy freely \xB7 space resume " }) : backingOff ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d2a12", color: "#ffb454", bold: true, children: " RATE LIMITED \xB7 backing off " }) : lastDeny ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d1220", color: "#ff6b6b", bold: true, children: ` \u26A0 ${hhmmss(lastDeny.at)} ${lastDeny.tool} DENIED ` }) : /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
7911
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#1432A0", color: "white", bold: true, children: " SOLONGATE LIVE " }),
|
|
7912
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` ${spin} up ${fmtUp(nowMs - startRef.current)} \xB7 ${hhmmss(nowMs)} \xB7 api ${latNow}ms ` }),
|
|
7913
|
+
frozen ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#123d1f", color: "#7bd88f", bold: true, children: " \u23F5 COPY MODE \u2014 screen frozen, select & copy freely \xB7 space resume " }) : backingOff ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d2a12", color: "#ffb454", bold: true, children: " RATE LIMITED \xB7 backing off " }) : lastDeny ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d1220", color: "#ff6b6b", bold: true, children: ` \u26A0 ${hhmmss(lastDeny.at)} ${lastDeny.tool} DENIED ` }) : /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: " \u2713 clean " })
|
|
7913
7914
|
] });
|
|
7914
7915
|
if (showHelp) {
|
|
7915
7916
|
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
|
|
@@ -7936,10 +7937,10 @@ function LivePanel({ active: active2 }) {
|
|
|
7936
7937
|
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
|
|
7937
7938
|
titleBar,
|
|
7938
7939
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
7939
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
7940
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " ENTRY " }),
|
|
7940
7941
|
/* @__PURE__ */ jsx2(Text2, { color: decisionColor(e.decision), bold: true, children: " " + e.decision }),
|
|
7941
7942
|
/* @__PURE__ */ jsx2(Text2, { color: theme.accent, bold: true, children: " " + e.tool }),
|
|
7942
|
-
/* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "
|
|
7943
|
+
/* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "white", children: " " + (isLoc(e) ? "LOC" : "CLD") }),
|
|
7943
7944
|
e.dlp ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: " DLP!" }) : null,
|
|
7944
7945
|
e.burst ? /* @__PURE__ */ jsx2(Text2, { color: theme.warn, children: " BURST" }) : null,
|
|
7945
7946
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: " \u2190 back" })
|
|
@@ -7965,9 +7966,9 @@ function LivePanel({ active: active2 }) {
|
|
|
7965
7966
|
/* @__PURE__ */ jsx2(PaneTitle, { label: "FULL CONTENT", extra: `${lines.length} lines${maxScroll2 ? ` \xB7 \u25BC${maxScroll2 - off} more \xB7 \u2191\u2193 scroll` : ""} \xB7 space copy \xB7 \u2190 back`, width: innerW }),
|
|
7966
7967
|
/* @__PURE__ */ jsx2(Box2, { flexDirection: "column", height: bodyRows, overflow: "hidden", children: win.map((l, i) => /* @__PURE__ */ jsx2(Text2, { wrap: "truncate", children: l || " " }, off + i)) }),
|
|
7967
7968
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
7968
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
7969
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "
|
|
7970
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
7969
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " ENTRY " }),
|
|
7970
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` ${e.id} ` }),
|
|
7971
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: " \u2191\u2193 scroll \xB7 space copy \xB7 ? all keys \xB7 \u2190 back \xB7 esc menu " })
|
|
7971
7972
|
] })
|
|
7972
7973
|
] });
|
|
7973
7974
|
}
|
|
@@ -7997,12 +7998,12 @@ function LivePanel({ active: active2 }) {
|
|
|
7997
7998
|
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
|
|
7998
7999
|
titleBar,
|
|
7999
8000
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
8000
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
8001
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: ` SESSION ${detail.id.slice(0, 8)} ` }),
|
|
8001
8002
|
(() => {
|
|
8002
8003
|
const st = STATUS_STYLE[sessStatus(detail.lastAt, nowMs)];
|
|
8003
8004
|
return /* @__PURE__ */ jsx2(Text2, { color: st.color, bold: true, children: ` ${st.dot} ${st.label}` });
|
|
8004
8005
|
})(),
|
|
8005
|
-
/* @__PURE__ */ jsx2(Text2, { color: detail.source === "local" ? theme.ok : "
|
|
8006
|
+
/* @__PURE__ */ jsx2(Text2, { color: detail.source === "local" ? theme.ok : "white", children: " " + detail.source.toUpperCase() }),
|
|
8006
8007
|
/* @__PURE__ */ jsx2(Text2, { bold: true, children: " " + truncate2(detail.isMe ? detail.agent + " (this machine)" : detail.agent, 34) }),
|
|
8007
8008
|
detail.trust != null ? /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: ` trust ${detail.trust}/100` }) : null,
|
|
8008
8009
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: " \u2190 back" })
|
|
@@ -8038,9 +8039,9 @@ function LivePanel({ active: active2 }) {
|
|
|
8038
8039
|
tl.map((e, i) => /* @__PURE__ */ jsx2(StreamLine, { e, loc: isLoc(e), selected: start + i === dSel }, e.id))
|
|
8039
8040
|
] }),
|
|
8040
8041
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
8041
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
8042
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "
|
|
8043
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
8042
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " SESSION " }),
|
|
8043
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` ${detail.id} ` }),
|
|
8044
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: " \u2191\u2193 select \xB7 enter full entry \xB7 ? all keys \xB7 \u2190 back \xB7 esc menu " })
|
|
8044
8045
|
] })
|
|
8045
8046
|
] });
|
|
8046
8047
|
}
|
|
@@ -8086,7 +8087,7 @@ function LivePanel({ active: active2 }) {
|
|
|
8086
8087
|
] }),
|
|
8087
8088
|
/* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", width: rightW, children: [
|
|
8088
8089
|
/* @__PURE__ */ jsx2(PaneTitle, { label: "API LATENCY", extra: `now ${latNow}ms \xB7 med ${latMed}ms \xB7 amber >${Math.round(latHotAt)}ms`, width: rightW }),
|
|
8089
|
-
/* @__PURE__ */ jsx2(ColumnChart, { series: lat, hot: lat.map((v) => v > latHotAt), height: chartH, width: rightW, color: "
|
|
8090
|
+
/* @__PURE__ */ jsx2(ColumnChart, { series: lat, hot: lat.map((v) => v > latHotAt), height: chartH, width: rightW, color: "white", hotColor: "#ffb454" })
|
|
8090
8091
|
] })
|
|
8091
8092
|
] }),
|
|
8092
8093
|
/* @__PURE__ */ jsxs2(Box2, { height: colH, children: [
|
|
@@ -8170,9 +8171,9 @@ function LivePanel({ active: active2 }) {
|
|
|
8170
8171
|
windowed.map((e, i) => /* @__PURE__ */ jsx2(StreamLine, { e, loc: isLoc(e), selected: clampedScroll + i === selClamped }, e.id))
|
|
8171
8172
|
] }),
|
|
8172
8173
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
8173
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
8174
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "
|
|
8175
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
8174
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " LIVE " }),
|
|
8175
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` local ${localOn ? "on" : "off"} \xB7 ${localBuf.length} loc/${cloudBuf.length} cld \xB7 top ${topTools.map(([t, c2]) => `${t}\xD7${c2}`).join(" ") || "\u2014"} ` }),
|
|
8176
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` \u2191\u2193 select \xB7 enter full entry \xB7 / search \xB7 space copy \xB7 ? all keys \xB7 esc menu \xB7 q quit ` })
|
|
8176
8177
|
] })
|
|
8177
8178
|
] });
|
|
8178
8179
|
}
|
|
@@ -9258,6 +9259,7 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
9258
9259
|
/* @__PURE__ */ jsx6(Detail, { label: "agent", value: current.agent ?? "\u2014" }),
|
|
9259
9260
|
/* @__PURE__ */ jsx6(Detail, { label: "session", value: current.session ?? "\u2014" }),
|
|
9260
9261
|
/* @__PURE__ */ jsx6(Detail, { label: "dlp", value: current.dlp.length ? current.dlp.join(", ") : "none", color: current.dlp.length ? theme.bad : void 0 }),
|
|
9262
|
+
/* @__PURE__ */ jsx6(Detail, { label: "ratelimit", value: current.burst ? "BURST \u2014 over the limit for this agent" : "no", color: current.burst ? theme.bad : void 0 }),
|
|
9261
9263
|
/* @__PURE__ */ jsx6(Detail, { label: "when", value: new Date(current.at).toLocaleString() + (current.evalMs != null ? ` \xB7 eval ${current.evalMs}ms` : "") }),
|
|
9262
9264
|
/* @__PURE__ */ jsx6(Text6, { color: theme.dim, children: `arguments \u2014 full \xB7 ${argLines.length} lines${maxScroll ? ` \xB7 \u25BC${maxScroll - off} more \xB7 \u2191\u2193 scroll` : ""}` }),
|
|
9263
9265
|
/* @__PURE__ */ jsx6(Box6, { flexDirection: "column", height: argBudget, overflow: "hidden", children: argWin.map((l, i) => /* @__PURE__ */ jsx6(Text6, { wrap: "truncate", children: l || " " }, off + i)) }),
|
|
@@ -9372,7 +9374,7 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
9372
9374
|
const maxStart = Math.max(0, pageRows.length - listRows);
|
|
9373
9375
|
const start = Math.min(Math.max(0, selClamped - Math.floor((listRows - 1) / 2)), maxStart);
|
|
9374
9376
|
const windowed = pageRows.slice(start, start + listRows);
|
|
9375
|
-
const reasonW = Math.min(
|
|
9377
|
+
const reasonW = Math.min(58, Math.max(12, cols - 71));
|
|
9376
9378
|
return /* @__PURE__ */ jsx6(DataView, { loading: logsLoading && !frozen, error: source === "cloud" ? cloudQ.error : localQ.error, children: /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
|
|
9377
9379
|
strip,
|
|
9378
9380
|
copyBanner,
|
|
@@ -9417,7 +9419,7 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
9417
9419
|
{ header: "TOOL", width: 18 },
|
|
9418
9420
|
{ header: "AGENT", width: 14 },
|
|
9419
9421
|
{ header: "REASON", width: reasonW },
|
|
9420
|
-
{ header: "
|
|
9422
|
+
{ header: "SIGNAL", width: 8 },
|
|
9421
9423
|
{ header: "WHEN", width: 6 }
|
|
9422
9424
|
],
|
|
9423
9425
|
rows: windowed.map((e, i) => rowFor(e, start + i === selClamped && focused, reasonW))
|
|
@@ -9431,13 +9433,14 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
9431
9433
|
] }) });
|
|
9432
9434
|
}
|
|
9433
9435
|
function rowFor(e, active2, reasonW) {
|
|
9436
|
+
const sig = [e.dlp.length ? `DLP${e.dlp.length > 1 ? e.dlp.length : ""}` : "", e.burst ? "RL" : ""].filter(Boolean).join(" ");
|
|
9434
9437
|
return [
|
|
9435
9438
|
{ value: active2 ? "\u25B8" : "", color: theme.accentBright },
|
|
9436
9439
|
{ value: e.decision, color: decisionColor(e.decision) },
|
|
9437
9440
|
{ value: truncate2(e.tool, 18), color: theme.accent },
|
|
9438
9441
|
{ value: truncate2(e.agent ?? "\u2014", 14), dim: true },
|
|
9439
9442
|
{ value: truncate2(e.reason ?? e.args ?? "\u2014", reasonW) },
|
|
9440
|
-
{ value:
|
|
9443
|
+
{ value: sig || "\xB7", color: sig ? theme.bad : void 0, dim: !sig },
|
|
9441
9444
|
{ value: ago(e.at), dim: true }
|
|
9442
9445
|
];
|
|
9443
9446
|
}
|
|
@@ -9848,7 +9851,7 @@ var init_App = __esm({
|
|
|
9848
9851
|
{ label: "Audit", Panel: AuditPanel },
|
|
9849
9852
|
{ label: "Settings", Panel: SettingsPanel }
|
|
9850
9853
|
];
|
|
9851
|
-
BANNER_HEX = ["
|
|
9854
|
+
BANNER_HEX = ["white", "white", "white", "white", "white", "white"];
|
|
9852
9855
|
HELP = [
|
|
9853
9856
|
["Global", [["\u2191\u2193", "move between sections"], ["\u2192 / enter", "open a section"], ["\u2190 / esc", "back to the menu"], ["?", "this help"], ["q", "quit"]]],
|
|
9854
9857
|
["Live", [["\u2191\u2193", "select a stream row"], ["enter", "full entry content"], ["w", "whitelist the selected DENY"], ["b", "block the selected ALLOW"], ["d / x / r", "filter denies / dlp / rate-limit"], ["f", "local / cloud filter"], ["/", "search"], ["s", "sessions (\u2191\u2193 pick, enter open)"], ["space", "copy mode (freeze)"]]],
|
package/dist/tui/index.js
CHANGED
|
@@ -69,8 +69,8 @@ function loadConfig() {
|
|
|
69
69
|
// src/tui/theme.ts
|
|
70
70
|
var accent = loadConfig().accent;
|
|
71
71
|
var theme = {
|
|
72
|
-
accent: accent || "
|
|
73
|
-
accentBright: accent || "
|
|
72
|
+
accent: accent || "white",
|
|
73
|
+
accentBright: accent || "white",
|
|
74
74
|
ok: "green",
|
|
75
75
|
warn: "yellow",
|
|
76
76
|
bad: "red",
|
|
@@ -794,7 +794,7 @@ function StreamLine({ e, loc, selected }) {
|
|
|
794
794
|
hhmmss(e.at),
|
|
795
795
|
" "
|
|
796
796
|
] }),
|
|
797
|
-
/* @__PURE__ */ jsx2(Text2, { color: loc ? theme.ok : "
|
|
797
|
+
/* @__PURE__ */ jsx2(Text2, { color: loc ? theme.ok : "white", children: loc ? "LOC" : "CLD" }),
|
|
798
798
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: "] " }),
|
|
799
799
|
/* @__PURE__ */ jsx2(Text2, { color: decisionColor(e.decision), bold: e.decision !== "ALLOW", children: e.decision.padEnd(6) }),
|
|
800
800
|
/* @__PURE__ */ jsx2(Text2, { color: theme.accent, children: truncate(e.tool, 12).padEnd(13) }),
|
|
@@ -802,6 +802,7 @@ function StreamLine({ e, loc, selected }) {
|
|
|
802
802
|
/* @__PURE__ */ jsx2(Text2, { color: e.evalMs != null && e.evalMs > 500 ? theme.warn : theme.dim, children: (e.evalMs != null ? `${e.evalMs}ms` : "\u2014").padEnd(7) }),
|
|
803
803
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: truncate(e.agent ?? "-", 11).padEnd(12) }),
|
|
804
804
|
e.dlp ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: "DLP! " }) : null,
|
|
805
|
+
e.burst ? /* @__PURE__ */ jsx2(Text2, { color: theme.warn, children: "RL! " }) : null,
|
|
805
806
|
e.rule && e.decision !== "ALLOW" ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: truncate(e.rule, 14) + " " }) : null,
|
|
806
807
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: e.detail })
|
|
807
808
|
] });
|
|
@@ -1346,9 +1347,9 @@ function LivePanel({ active: active2 }) {
|
|
|
1346
1347
|
] });
|
|
1347
1348
|
}
|
|
1348
1349
|
const titleBar = /* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
1349
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#1432A0", color: "
|
|
1350
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1351
|
-
frozen ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#123d1f", color: "#7bd88f", bold: true, children: " \u23F5 COPY MODE \u2014 screen frozen, select & copy freely \xB7 space resume " }) : backingOff ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d2a12", color: "#ffb454", bold: true, children: " RATE LIMITED \xB7 backing off " }) : lastDeny ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d1220", color: "#ff6b6b", bold: true, children: ` \u26A0 ${hhmmss(lastDeny.at)} ${lastDeny.tool} DENIED ` }) : /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1350
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#1432A0", color: "white", bold: true, children: " SOLONGATE LIVE " }),
|
|
1351
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` ${spin} up ${fmtUp(nowMs - startRef.current)} \xB7 ${hhmmss(nowMs)} \xB7 api ${latNow}ms ` }),
|
|
1352
|
+
frozen ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#123d1f", color: "#7bd88f", bold: true, children: " \u23F5 COPY MODE \u2014 screen frozen, select & copy freely \xB7 space resume " }) : backingOff ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d2a12", color: "#ffb454", bold: true, children: " RATE LIMITED \xB7 backing off " }) : lastDeny ? /* @__PURE__ */ jsx2(Text2, { backgroundColor: "#3d1220", color: "#ff6b6b", bold: true, children: ` \u26A0 ${hhmmss(lastDeny.at)} ${lastDeny.tool} DENIED ` }) : /* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: " \u2713 clean " })
|
|
1352
1353
|
] });
|
|
1353
1354
|
if (showHelp) {
|
|
1354
1355
|
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
|
|
@@ -1375,10 +1376,10 @@ function LivePanel({ active: active2 }) {
|
|
|
1375
1376
|
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
|
|
1376
1377
|
titleBar,
|
|
1377
1378
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
1378
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1379
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " ENTRY " }),
|
|
1379
1380
|
/* @__PURE__ */ jsx2(Text2, { color: decisionColor(e.decision), bold: true, children: " " + e.decision }),
|
|
1380
1381
|
/* @__PURE__ */ jsx2(Text2, { color: theme.accent, bold: true, children: " " + e.tool }),
|
|
1381
|
-
/* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "
|
|
1382
|
+
/* @__PURE__ */ jsx2(Text2, { color: isLoc(e) ? theme.ok : "white", children: " " + (isLoc(e) ? "LOC" : "CLD") }),
|
|
1382
1383
|
e.dlp ? /* @__PURE__ */ jsx2(Text2, { color: theme.bad, children: " DLP!" }) : null,
|
|
1383
1384
|
e.burst ? /* @__PURE__ */ jsx2(Text2, { color: theme.warn, children: " BURST" }) : null,
|
|
1384
1385
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: " \u2190 back" })
|
|
@@ -1404,9 +1405,9 @@ function LivePanel({ active: active2 }) {
|
|
|
1404
1405
|
/* @__PURE__ */ jsx2(PaneTitle, { label: "FULL CONTENT", extra: `${lines.length} lines${maxScroll2 ? ` \xB7 \u25BC${maxScroll2 - off} more \xB7 \u2191\u2193 scroll` : ""} \xB7 space copy \xB7 \u2190 back`, width: innerW }),
|
|
1405
1406
|
/* @__PURE__ */ jsx2(Box2, { flexDirection: "column", height: bodyRows, overflow: "hidden", children: win.map((l, i) => /* @__PURE__ */ jsx2(Text2, { wrap: "truncate", children: l || " " }, off + i)) }),
|
|
1406
1407
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
1407
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1408
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "
|
|
1409
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1408
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " ENTRY " }),
|
|
1409
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` ${e.id} ` }),
|
|
1410
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: " \u2191\u2193 scroll \xB7 space copy \xB7 ? all keys \xB7 \u2190 back \xB7 esc menu " })
|
|
1410
1411
|
] })
|
|
1411
1412
|
] });
|
|
1412
1413
|
}
|
|
@@ -1436,12 +1437,12 @@ function LivePanel({ active: active2 }) {
|
|
|
1436
1437
|
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
|
|
1437
1438
|
titleBar,
|
|
1438
1439
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
1439
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1440
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: ` SESSION ${detail.id.slice(0, 8)} ` }),
|
|
1440
1441
|
(() => {
|
|
1441
1442
|
const st = STATUS_STYLE[sessStatus(detail.lastAt, nowMs)];
|
|
1442
1443
|
return /* @__PURE__ */ jsx2(Text2, { color: st.color, bold: true, children: ` ${st.dot} ${st.label}` });
|
|
1443
1444
|
})(),
|
|
1444
|
-
/* @__PURE__ */ jsx2(Text2, { color: detail.source === "local" ? theme.ok : "
|
|
1445
|
+
/* @__PURE__ */ jsx2(Text2, { color: detail.source === "local" ? theme.ok : "white", children: " " + detail.source.toUpperCase() }),
|
|
1445
1446
|
/* @__PURE__ */ jsx2(Text2, { bold: true, children: " " + truncate(detail.isMe ? detail.agent + " (this machine)" : detail.agent, 34) }),
|
|
1446
1447
|
detail.trust != null ? /* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: ` trust ${detail.trust}/100` }) : null,
|
|
1447
1448
|
/* @__PURE__ */ jsx2(Text2, { color: theme.dim, children: " \u2190 back" })
|
|
@@ -1477,9 +1478,9 @@ function LivePanel({ active: active2 }) {
|
|
|
1477
1478
|
tl.map((e, i) => /* @__PURE__ */ jsx2(StreamLine, { e, loc: isLoc(e), selected: start + i === dSel }, e.id))
|
|
1478
1479
|
] }),
|
|
1479
1480
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
1480
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1481
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "
|
|
1482
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1481
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " SESSION " }),
|
|
1482
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` ${detail.id} ` }),
|
|
1483
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: " \u2191\u2193 select \xB7 enter full entry \xB7 ? all keys \xB7 \u2190 back \xB7 esc menu " })
|
|
1483
1484
|
] })
|
|
1484
1485
|
] });
|
|
1485
1486
|
}
|
|
@@ -1525,7 +1526,7 @@ function LivePanel({ active: active2 }) {
|
|
|
1525
1526
|
] }),
|
|
1526
1527
|
/* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", width: rightW, children: [
|
|
1527
1528
|
/* @__PURE__ */ jsx2(PaneTitle, { label: "API LATENCY", extra: `now ${latNow}ms \xB7 med ${latMed}ms \xB7 amber >${Math.round(latHotAt)}ms`, width: rightW }),
|
|
1528
|
-
/* @__PURE__ */ jsx2(ColumnChart, { series: lat, hot: lat.map((v) => v > latHotAt), height: chartH, width: rightW, color: "
|
|
1529
|
+
/* @__PURE__ */ jsx2(ColumnChart, { series: lat, hot: lat.map((v) => v > latHotAt), height: chartH, width: rightW, color: "white", hotColor: "#ffb454" })
|
|
1529
1530
|
] })
|
|
1530
1531
|
] }),
|
|
1531
1532
|
/* @__PURE__ */ jsxs2(Box2, { height: colH, children: [
|
|
@@ -1609,9 +1610,9 @@ function LivePanel({ active: active2 }) {
|
|
|
1609
1610
|
windowed.map((e, i) => /* @__PURE__ */ jsx2(StreamLine, { e, loc: isLoc(e), selected: clampedScroll + i === selClamped }, e.id))
|
|
1610
1611
|
] }),
|
|
1611
1612
|
/* @__PURE__ */ jsxs2(Text2, { wrap: "truncate", children: [
|
|
1612
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1613
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "
|
|
1614
|
-
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "
|
|
1613
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", bold: true, children: " LIVE " }),
|
|
1614
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: "#0b1530", color: "white", children: ` local ${localOn ? "on" : "off"} \xB7 ${localBuf.length} loc/${cloudBuf.length} cld \xB7 top ${topTools.map(([t, c2]) => `${t}\xD7${c2}`).join(" ") || "\u2014"} ` }),
|
|
1615
|
+
/* @__PURE__ */ jsx2(Text2, { backgroundColor: BG, color: "white", children: ` \u2191\u2193 select \xB7 enter full entry \xB7 / search \xB7 space copy \xB7 ? all keys \xB7 esc menu \xB7 q quit ` })
|
|
1615
1616
|
] })
|
|
1616
1617
|
] });
|
|
1617
1618
|
}
|
|
@@ -2665,6 +2666,7 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
2665
2666
|
/* @__PURE__ */ jsx6(Detail, { label: "agent", value: current.agent ?? "\u2014" }),
|
|
2666
2667
|
/* @__PURE__ */ jsx6(Detail, { label: "session", value: current.session ?? "\u2014" }),
|
|
2667
2668
|
/* @__PURE__ */ jsx6(Detail, { label: "dlp", value: current.dlp.length ? current.dlp.join(", ") : "none", color: current.dlp.length ? theme.bad : void 0 }),
|
|
2669
|
+
/* @__PURE__ */ jsx6(Detail, { label: "ratelimit", value: current.burst ? "BURST \u2014 over the limit for this agent" : "no", color: current.burst ? theme.bad : void 0 }),
|
|
2668
2670
|
/* @__PURE__ */ jsx6(Detail, { label: "when", value: new Date(current.at).toLocaleString() + (current.evalMs != null ? ` \xB7 eval ${current.evalMs}ms` : "") }),
|
|
2669
2671
|
/* @__PURE__ */ jsx6(Text6, { color: theme.dim, children: `arguments \u2014 full \xB7 ${argLines.length} lines${maxScroll ? ` \xB7 \u25BC${maxScroll - off} more \xB7 \u2191\u2193 scroll` : ""}` }),
|
|
2670
2672
|
/* @__PURE__ */ jsx6(Box6, { flexDirection: "column", height: argBudget, overflow: "hidden", children: argWin.map((l, i) => /* @__PURE__ */ jsx6(Text6, { wrap: "truncate", children: l || " " }, off + i)) }),
|
|
@@ -2779,7 +2781,7 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
2779
2781
|
const maxStart = Math.max(0, pageRows.length - listRows);
|
|
2780
2782
|
const start = Math.min(Math.max(0, selClamped - Math.floor((listRows - 1) / 2)), maxStart);
|
|
2781
2783
|
const windowed = pageRows.slice(start, start + listRows);
|
|
2782
|
-
const reasonW = Math.min(
|
|
2784
|
+
const reasonW = Math.min(58, Math.max(12, cols - 71));
|
|
2783
2785
|
return /* @__PURE__ */ jsx6(DataView, { loading: logsLoading && !frozen, error: source === "cloud" ? cloudQ.error : localQ.error, children: /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
|
|
2784
2786
|
strip,
|
|
2785
2787
|
copyBanner,
|
|
@@ -2824,7 +2826,7 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
2824
2826
|
{ header: "TOOL", width: 18 },
|
|
2825
2827
|
{ header: "AGENT", width: 14 },
|
|
2826
2828
|
{ header: "REASON", width: reasonW },
|
|
2827
|
-
{ header: "
|
|
2829
|
+
{ header: "SIGNAL", width: 8 },
|
|
2828
2830
|
{ header: "WHEN", width: 6 }
|
|
2829
2831
|
],
|
|
2830
2832
|
rows: windowed.map((e, i) => rowFor(e, start + i === selClamped && focused, reasonW))
|
|
@@ -2838,13 +2840,14 @@ function AuditPanel({ active: active2, focused }) {
|
|
|
2838
2840
|
] }) });
|
|
2839
2841
|
}
|
|
2840
2842
|
function rowFor(e, active2, reasonW) {
|
|
2843
|
+
const sig = [e.dlp.length ? `DLP${e.dlp.length > 1 ? e.dlp.length : ""}` : "", e.burst ? "RL" : ""].filter(Boolean).join(" ");
|
|
2841
2844
|
return [
|
|
2842
2845
|
{ value: active2 ? "\u25B8" : "", color: theme.accentBright },
|
|
2843
2846
|
{ value: e.decision, color: decisionColor(e.decision) },
|
|
2844
2847
|
{ value: truncate(e.tool, 18), color: theme.accent },
|
|
2845
2848
|
{ value: truncate(e.agent ?? "\u2014", 14), dim: true },
|
|
2846
2849
|
{ value: truncate(e.reason ?? e.args ?? "\u2014", reasonW) },
|
|
2847
|
-
{ value:
|
|
2850
|
+
{ value: sig || "\xB7", color: sig ? theme.bad : void 0, dim: !sig },
|
|
2848
2851
|
{ value: ago(e.at), dim: true }
|
|
2849
2852
|
];
|
|
2850
2853
|
}
|
|
@@ -3082,7 +3085,7 @@ var SECTIONS = [
|
|
|
3082
3085
|
{ label: "Audit", Panel: AuditPanel },
|
|
3083
3086
|
{ label: "Settings", Panel: SettingsPanel }
|
|
3084
3087
|
];
|
|
3085
|
-
var BANNER_HEX = ["
|
|
3088
|
+
var BANNER_HEX = ["white", "white", "white", "white", "white", "white"];
|
|
3086
3089
|
function Banner({ cols }) {
|
|
3087
3090
|
const wide = cols >= 82;
|
|
3088
3091
|
if (!wide) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solongate/proxy",
|
|
3
|
-
"version": "0.81.
|
|
3
|
+
"version": "0.81.36",
|
|
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": {
|