mirror of
https://github.com/moltbot/moltbot.git
synced 2026-05-10 12:32:27 +00:00
refactor: remove plugin session file resolver
This commit is contained in:
@@ -203,6 +203,9 @@ The remaining cleanup is mostly consolidation and deletion:
|
||||
`agents/<agentId>/sessions/*.jsonl` paths. The old path builders remain for
|
||||
doctor imports, explicit debug/export artifacts, and path-compatibility
|
||||
tests.
|
||||
- Plugin runtime no longer exposes `api.runtime.agent.session.resolveSessionFilePath`;
|
||||
plugin code either uses the SQLite row helpers or creates a
|
||||
`sqlite-transcript://...` locator through `session-store-runtime`.
|
||||
- Active-memory blocking subagent runs now pass virtual SQLite transcript
|
||||
locators to embedded agents instead of creating temporary or persisted
|
||||
`session.jsonl` files under plugin state. The old `transcriptDir` option is
|
||||
|
||||
@@ -159,7 +159,6 @@ function createSessionRuntimeMock(sessionStore: Record<string, unknown>) {
|
||||
upsertSessionEntry: vi.fn(({ sessionKey, entry }: { sessionKey: string; entry: unknown }) => {
|
||||
sessionStore[sessionKey] = entry;
|
||||
}),
|
||||
resolveSessionFilePath: vi.fn(() => "/tmp/session.json"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -716,10 +716,6 @@ describe("skill-workshop", () => {
|
||||
agent: {
|
||||
defaults: { provider: "openai", model: "gpt-5.4" },
|
||||
resolveAgentDir: () => path.join(workspaceDir, ".agent"),
|
||||
session: {
|
||||
resolveSessionFilePath: (sessionId: string) =>
|
||||
path.join(stateDir, "agents", "main", "sessions", `${sessionId}.jsonl`),
|
||||
},
|
||||
runEmbeddedPiAgent,
|
||||
},
|
||||
state: {
|
||||
@@ -754,7 +750,7 @@ describe("skill-workshop", () => {
|
||||
expect.objectContaining({
|
||||
disableTools: true,
|
||||
toolsAllow: [],
|
||||
sessionFile: expect.stringContaining(path.join("agents", "main", "sessions")),
|
||||
sessionFile: expect.stringMatching(/^sqlite-transcript:\/\/main\/skill-workshop-review-/u),
|
||||
provider: "openai",
|
||||
model: "gpt-5.4",
|
||||
}),
|
||||
@@ -780,10 +776,6 @@ describe("skill-workshop", () => {
|
||||
agent: {
|
||||
defaults: { provider: "openai", model: "gpt-5.4" },
|
||||
resolveAgentDir: () => path.join(workspaceDir, ".agent"),
|
||||
session: {
|
||||
resolveSessionFilePath: (sessionId: string) =>
|
||||
path.join(stateDir, "agents", "main", "sessions", `${sessionId}.jsonl`),
|
||||
},
|
||||
runEmbeddedPiAgent,
|
||||
},
|
||||
state: {
|
||||
@@ -854,10 +846,6 @@ describe("skill-workshop", () => {
|
||||
agent: {
|
||||
defaults: { provider: "openai", model: "gpt-5.4" },
|
||||
resolveAgentDir: () => path.join(workspaceDir, ".agent"),
|
||||
session: {
|
||||
resolveSessionFilePath: (sessionId: string) =>
|
||||
path.join(stateDir, "agents", "main", "sessions", `${sessionId}.jsonl`),
|
||||
},
|
||||
runEmbeddedPiAgent,
|
||||
},
|
||||
state: {
|
||||
@@ -917,10 +905,6 @@ describe("skill-workshop", () => {
|
||||
defaults: { provider: "openai", model: "gpt-5.4" },
|
||||
resolveAgentWorkspaceDir: () => workspaceDir,
|
||||
resolveAgentDir: () => path.join(workspaceDir, ".agent"),
|
||||
session: {
|
||||
resolveSessionFilePath: (sessionId: string) =>
|
||||
path.join(stateDir, "agents", "main", "sessions", `${sessionId}.jsonl`),
|
||||
},
|
||||
runEmbeddedPiAgent,
|
||||
},
|
||||
state: {
|
||||
|
||||
@@ -32,12 +32,6 @@ function createAgentRuntime(payloads: Array<Record<string, unknown>>) {
|
||||
const resolveAgentIdentity = vi.fn((_cfg: CoreConfig, agentId: string) => ({
|
||||
name: `${agentId} tester`,
|
||||
}));
|
||||
const resolveSessionFilePath = vi.fn(
|
||||
(_sessionId: string, _entry: unknown, params: { agentId?: string }) => {
|
||||
return `/tmp/openclaw/${params.agentId ?? "main"}/sessions/session.jsonl`;
|
||||
},
|
||||
);
|
||||
|
||||
const runtime = {
|
||||
defaults: {
|
||||
provider: "together",
|
||||
@@ -56,7 +50,6 @@ function createAgentRuntime(payloads: Array<Record<string, unknown>>) {
|
||||
Object.entries(sessionStore).map(([sessionKey, entry]) => ({ sessionKey, entry })),
|
||||
upsertSessionEntry,
|
||||
patchSessionEntry: async () => null,
|
||||
resolveSessionFilePath,
|
||||
},
|
||||
} as unknown as CoreAgentDeps;
|
||||
|
||||
@@ -69,7 +62,6 @@ function createAgentRuntime(payloads: Array<Record<string, unknown>>) {
|
||||
resolveAgentDir,
|
||||
resolveAgentWorkspaceDir,
|
||||
resolveAgentIdentity,
|
||||
resolveSessionFilePath,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -170,7 +170,6 @@ function createSessionRuntimeMock(sessionStore: Record<string, unknown>) {
|
||||
upsertSessionEntry: vi.fn(({ sessionKey, entry }: { sessionKey: string; entry: unknown }) => {
|
||||
sessionStore[sessionKey] = entry;
|
||||
}),
|
||||
resolveSessionFilePath: vi.fn(() => "/tmp/session.json"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ vi.mock("../../agents/skills/refresh.js", () => ({
|
||||
|
||||
vi.mock("../../config/sessions.js", () => ({
|
||||
upsertSessionEntry: vi.fn(),
|
||||
resolveSessionFilePath: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock("../../infra/skills-remote.js", () => ({
|
||||
|
||||
@@ -45,14 +45,10 @@ describe("session path safety", () => {
|
||||
expect(resolved).toBe(path.resolve(sessionsDir, "sess-1-topic-topic%2Fa%2Bb.jsonl"));
|
||||
});
|
||||
|
||||
it("ignores legacy sessionFile paths even when a sessions dir is provided", () => {
|
||||
const sessionsDir = "/tmp/openclaw/agents/main/sessions";
|
||||
|
||||
const resolved = resolveSessionFilePath(
|
||||
"sess-1",
|
||||
{ sessionFile: "/tmp/openclaw/agents/work/not-sessions/abc-123.jsonl" },
|
||||
{ sessionsDir },
|
||||
);
|
||||
it("ignores legacy sessionFile paths", () => {
|
||||
const resolved = resolveSessionFilePath("sess-1", {
|
||||
sessionFile: "/tmp/openclaw/agents/work/not-sessions/abc-123.jsonl",
|
||||
});
|
||||
expect(resolved).toBe(createSqliteSessionTranscriptLocator({ sessionId: "sess-1" }));
|
||||
});
|
||||
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
// Narrow SQLite session row helpers for channel hot paths.
|
||||
|
||||
export { resolveSessionRowEntry } from "../config/sessions/store-entry.js";
|
||||
export {
|
||||
createSqliteSessionTranscriptLocator,
|
||||
resolveSessionTranscriptPath,
|
||||
resolveSessionTranscriptPathInDir,
|
||||
} from "../config/sessions/paths.js";
|
||||
export { createSqliteSessionTranscriptLocator } from "../config/sessions/paths.js";
|
||||
export { resolveAndPersistSessionFile } from "../config/sessions/session-file.js";
|
||||
export { resolveSessionKey } from "../config/sessions/session-key.js";
|
||||
export { resolveGroupSessionKey } from "../config/sessions/group.js";
|
||||
|
||||
@@ -356,9 +356,6 @@ export function createPluginRuntimeMock(overrides: DeepPartial<PluginRuntime> =
|
||||
upsertSessionEntry: vi.fn(
|
||||
() => undefined,
|
||||
) as unknown as PluginRuntime["agent"]["session"]["upsertSessionEntry"],
|
||||
resolveSessionFilePath: vi.fn(
|
||||
(sessionId: string) => `/tmp/${sessionId}.json`,
|
||||
) as unknown as PluginRuntime["agent"]["session"]["resolveSessionFilePath"],
|
||||
},
|
||||
},
|
||||
system: {
|
||||
|
||||
@@ -312,7 +312,6 @@ describe("plugin runtime command execution", () => {
|
||||
"listSessionEntries",
|
||||
"patchSessionEntry",
|
||||
"upsertSessionEntry",
|
||||
"resolveSessionFilePath",
|
||||
]);
|
||||
},
|
||||
},
|
||||
|
||||
@@ -9,7 +9,6 @@ import { resolveAgentTimeoutMs } from "../../agents/timeout.js";
|
||||
import { ensureAgentWorkspace } from "../../agents/workspace.js";
|
||||
import { normalizeThinkLevel, resolveThinkingProfile } from "../../auto-reply/thinking.js";
|
||||
import { getRuntimeConfig } from "../../config/config.js";
|
||||
import { resolveSessionFilePath } from "../../config/sessions/paths.js";
|
||||
import {
|
||||
getSessionEntry,
|
||||
listSessionEntries,
|
||||
@@ -74,7 +73,6 @@ export function createRuntimeAgent(): PluginRuntime["agent"] {
|
||||
listSessionEntries,
|
||||
patchSessionEntry,
|
||||
upsertSessionEntry,
|
||||
resolveSessionFilePath,
|
||||
}));
|
||||
|
||||
return agentRuntime as PluginRuntime["agent"];
|
||||
|
||||
@@ -206,7 +206,6 @@ export type PluginRuntimeCore = {
|
||||
listSessionEntries: typeof import("../../config/sessions/store.js").listSessionEntries;
|
||||
patchSessionEntry: typeof import("../../config/sessions/store.js").patchSessionEntry;
|
||||
upsertSessionEntry: typeof import("../../config/sessions/store.js").upsertSessionEntry;
|
||||
resolveSessionFilePath: typeof import("../../config/sessions/paths.js").resolveSessionFilePath;
|
||||
};
|
||||
};
|
||||
system: {
|
||||
|
||||
@@ -79,10 +79,6 @@ function createAgentRuntime(payloads: unknown[] = [{ text: "Speak this." }]) {
|
||||
listSessionEntries,
|
||||
patchSessionEntry,
|
||||
upsertSessionEntry,
|
||||
resolveSessionFilePath: vi.fn(
|
||||
(_sessionId: string, entry?: { sessionFile?: string }) =>
|
||||
entry?.sessionFile ?? "/tmp/session.json",
|
||||
),
|
||||
},
|
||||
runEmbeddedPiAgent,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user