revert(sandbox): revert SHA-1 slug restoration

This commit is contained in:
Sebastian
2026-02-16 22:03:41 -05:00
parent 6b8c0bc697
commit 7a00f056af
2 changed files with 2 additions and 32 deletions

View File

@@ -1,28 +0,0 @@
import { describe, expect, it } from "vitest";
import { slugifySessionKey } from "./shared.js";
describe("slugifySessionKey", () => {
it("produces stable SHA-1 based slugs for existing workspace directories", () => {
// Hash stability is critical: changing the hash algorithm orphans existing
// sandbox workspace directories on upgrade (see #18503).
const slug = slugifySessionKey("agent:clawfront-dev:direct:23057054725");
expect(slug).toBe("agent-clawfront-dev-direct-23057-906dfaef");
});
it("uses fallback for empty input", () => {
const slug = slugifySessionKey("");
expect(slug).toContain("session-");
});
it("uses fallback for whitespace-only input", () => {
const slug = slugifySessionKey(" ");
expect(slug).toContain("session-");
});
it("truncates base to 32 chars", () => {
const long = "a".repeat(100);
const slug = slugifySessionKey(long);
// 32 char base + "-" + 8 char hash = 41 chars
expect(slug.length).toBe(41);
});
});

View File

@@ -1,14 +1,12 @@
import crypto from "node:crypto";
import path from "node:path";
import { normalizeAgentId } from "../../routing/session-key.js";
import { resolveUserPath } from "../../utils.js";
import { resolveAgentIdFromSessionKey } from "../agent-scope.js";
import { hashTextSha256 } from "./hash.js";
export function slugifySessionKey(value: string) {
const trimmed = value.trim() || "session";
// SHA-1 is intentional: this is a non-security slug differentiator and changing
// the algorithm orphans existing workspace directories on upgrade (#18503).
const hash = crypto.createHash("sha1").update(trimmed).digest("hex").slice(0, 8);
const hash = hashTextSha256(trimmed).slice(0, 8);
const safe = trimmed
.toLowerCase()
.replace(/[^a-z0-9._-]+/g, "-")