mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-23 16:01:17 +00:00
Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check - pnpm test Co-authored-by: shadril238 <63901551+shadril238@users.noreply.github.com> Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
82 lines
3.0 KiB
TypeScript
82 lines
3.0 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
import { makeTempWorkspace, writeWorkspaceFile } from "../test-helpers/workspace.js";
|
|
import {
|
|
DEFAULT_AGENTS_FILENAME,
|
|
DEFAULT_BOOTSTRAP_FILENAME,
|
|
DEFAULT_HEARTBEAT_FILENAME,
|
|
DEFAULT_MEMORY_ALT_FILENAME,
|
|
DEFAULT_MEMORY_FILENAME,
|
|
ensureAgentWorkspace,
|
|
loadWorkspaceBootstrapFiles,
|
|
resolveDefaultAgentWorkspaceDir,
|
|
} from "./workspace.js";
|
|
|
|
describe("resolveDefaultAgentWorkspaceDir", () => {
|
|
it("uses OPENCLAW_HOME for default workspace resolution", () => {
|
|
const dir = resolveDefaultAgentWorkspaceDir({
|
|
OPENCLAW_HOME: "/srv/openclaw-home",
|
|
HOME: "/home/other",
|
|
} as NodeJS.ProcessEnv);
|
|
|
|
expect(dir).toBe(path.join(path.resolve("/srv/openclaw-home"), ".openclaw", "workspace"));
|
|
});
|
|
});
|
|
|
|
describe("ensureAgentWorkspace", () => {
|
|
it("does not create HEARTBEAT.md during bootstrap file initialization", async () => {
|
|
const tempDir = await makeTempWorkspace("openclaw-workspace-init-");
|
|
|
|
const result = await ensureAgentWorkspace({ dir: tempDir, ensureBootstrapFiles: true });
|
|
|
|
await expect(fs.access(path.join(tempDir, DEFAULT_AGENTS_FILENAME))).resolves.toBeUndefined();
|
|
await expect(
|
|
fs.access(path.join(tempDir, DEFAULT_BOOTSTRAP_FILENAME)),
|
|
).resolves.toBeUndefined();
|
|
await expect(fs.access(path.join(tempDir, DEFAULT_HEARTBEAT_FILENAME))).rejects.toThrow();
|
|
expect("heartbeatPath" in result).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("loadWorkspaceBootstrapFiles", () => {
|
|
it("includes MEMORY.md when present", async () => {
|
|
const tempDir = await makeTempWorkspace("openclaw-workspace-");
|
|
await writeWorkspaceFile({ dir: tempDir, name: "MEMORY.md", content: "memory" });
|
|
|
|
const files = await loadWorkspaceBootstrapFiles(tempDir);
|
|
const memoryEntries = files.filter((file) =>
|
|
[DEFAULT_MEMORY_FILENAME, DEFAULT_MEMORY_ALT_FILENAME].includes(file.name),
|
|
);
|
|
|
|
expect(memoryEntries).toHaveLength(1);
|
|
expect(memoryEntries[0]?.missing).toBe(false);
|
|
expect(memoryEntries[0]?.content).toBe("memory");
|
|
});
|
|
|
|
it("includes memory.md when MEMORY.md is absent", async () => {
|
|
const tempDir = await makeTempWorkspace("openclaw-workspace-");
|
|
await writeWorkspaceFile({ dir: tempDir, name: "memory.md", content: "alt" });
|
|
|
|
const files = await loadWorkspaceBootstrapFiles(tempDir);
|
|
const memoryEntries = files.filter((file) =>
|
|
[DEFAULT_MEMORY_FILENAME, DEFAULT_MEMORY_ALT_FILENAME].includes(file.name),
|
|
);
|
|
|
|
expect(memoryEntries).toHaveLength(1);
|
|
expect(memoryEntries[0]?.missing).toBe(false);
|
|
expect(memoryEntries[0]?.content).toBe("alt");
|
|
});
|
|
|
|
it("omits memory entries when no memory files exist", async () => {
|
|
const tempDir = await makeTempWorkspace("openclaw-workspace-");
|
|
|
|
const files = await loadWorkspaceBootstrapFiles(tempDir);
|
|
const memoryEntries = files.filter((file) =>
|
|
[DEFAULT_MEMORY_FILENAME, DEFAULT_MEMORY_ALT_FILENAME].includes(file.name),
|
|
);
|
|
|
|
expect(memoryEntries).toHaveLength(0);
|
|
});
|
|
});
|