fix: 收敛 trans 远端文本短路径

This commit is contained in:
Codex
2026-07-13 05:20:27 +02:00
parent 18937da9db
commit c04983455e
16 changed files with 498 additions and 70 deletions
+26 -5
View File
@@ -15,6 +15,7 @@ import {
sshTruncationCompletionSummary,
sshCaptureBackendPlan,
sshStderrStreamMaxBytes,
sshStreamDumpExplicitlyRequested,
sshStdoutStreamMaxBytes,
sshStdoutTruncationHint,
sshWindowsPlaneHint,
@@ -408,13 +409,13 @@ describe("ssh stdout bounded streaming", () => {
expect(payload.route).toBe("D601:win/c/test");
expect(payload.thresholdBytes).toBe(4096);
expect(payload.disclosurePolicy).toMatchObject({
name: "unified-cli-dump-preview",
name: "bounded-stream-explicit-dump",
configPath: "config/unidesk-cli.yaml",
});
expect(formatted).not.toContain("Get-Content");
});
test("forwarder bounds stdout and emits one truncation hint", () => {
test("forwarder bounds stdout without creating a default dump", () => {
const invocation = parseSshInvocation("D601:win/c/test", ["ps"]);
const forwarded: Buffer[] = [];
const stdout = {
@@ -438,8 +439,9 @@ describe("ssh stdout bounded streaming", () => {
expect(hint).toContain("UNIDESK_SSH_STDOUT_TRUNCATED");
expect(hint).toContain("\"transport\":\"frontend-websocket\"");
expect(hint).toContain("\"forwardedBytes\":5");
const payload = JSON.parse(hint!.slice("UNIDESK_SSH_STDOUT_TRUNCATED ".length)) as { dumpPath: string };
expect(readFileSync(payload.dumpPath, "utf8")).toBe("abcdefghijkl");
const payload = JSON.parse(hint!.slice("UNIDESK_SSH_STDOUT_TRUNCATED ".length)) as { dumpPath: string | null; action: string };
expect(payload.dumpPath).toBeNull();
expect(payload.action).toContain("cat/head/tail/rg");
const summary = sshTruncationCompletionSummary({
invocation,
transport: "frontend-websocket",
@@ -453,7 +455,26 @@ describe("ssh stdout bounded streaming", () => {
expect(formattedSummary).toContain("UNIDESK_SSH_TRUNCATION_SUMMARY");
expect(formattedSummary).toContain("\"exitCode\":0");
expect(formattedSummary).toContain("\"commandOmitted\":true");
expect(formattedSummary).toContain("\"dumpPath\"");
expect(formattedSummary).toContain("\"dumpPath\":null");
});
test("keeps complete stream capture behind an explicit audited switch", () => {
expect(sshStreamDumpExplicitlyRequested({} as NodeJS.ProcessEnv)).toBe(false);
expect(sshStreamDumpExplicitlyRequested({ UNIDESK_TRAN_STREAM_DUMP: "1" } as NodeJS.ProcessEnv)).toBe(true);
const invocation = parseSshInvocation("D601:win/c/test", ["ps"]);
const stdout = { write(): boolean { return true; } } as NodeJS.WritableStream;
const forwarder = createSshStdoutForwarder({
invocation,
transport: "frontend-websocket",
maxBytes: 5,
stdout,
persistDump: true,
});
expect(forwarder.write(Buffer.from("abc"))).toBeNull();
const hint = forwarder.write(Buffer.from("defgh"));
forwarder.write(Buffer.from("ijkl"));
const payload = JSON.parse(hint!.slice("UNIDESK_SSH_STDOUT_TRUNCATED ".length)) as { dumpPath: string };
expect(readFileSync(payload.dumpPath, "utf8")).toBe("abcdefghijkl");
rmSync(payload.dumpPath, { force: true });
});