Files
openclaw-zero-token/gateway/session-subagent-reactivation.test.ts
sjhu 571e14a236 feat: upgrade to upstream v2026.3.28
Major upgrade from e26988a38 to upstream v2026.3.28 (f9b107928).
Key changes:
- Upstream src/, ui/, extensions/ (89 bundled extensions)
- Zero-token web providers preserved in src/zero-token/
- AskOnce plugin restored and registered as CLI command
- Added missing packages: @anthropic-ai/vertex-sdk, @modelcontextprotocol/sdk
- Fixed tsconfig rootDir, skipLibCheck for plugin-sdk DTS build
- Added askonce to bundled plugin metadata and package.json exports
- Fixed AskOnce CLI command registration (missing commands metadata)
- Restored AskOnce adapter imports (correct 5-level relative paths)
- Removed stale migration artifacts from root directory
2026-03-30 17:58:12 +08:00

61 lines
2.0 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const getLatestSubagentRunByChildSessionKeyMock = vi.fn();
const replaceSubagentRunAfterSteerMock = vi.fn();
vi.mock("../agents/subagent-registry-read.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../agents/subagent-registry-read.js")>();
return {
...actual,
getLatestSubagentRunByChildSessionKey: (...args: unknown[]) =>
getLatestSubagentRunByChildSessionKeyMock(...args),
};
});
vi.mock("./session-subagent-reactivation.runtime.js", () => ({
replaceSubagentRunAfterSteer: (...args: unknown[]) => replaceSubagentRunAfterSteerMock(...args),
}));
import { reactivateCompletedSubagentSession } from "./session-subagent-reactivation.js";
describe("reactivateCompletedSubagentSession", () => {
beforeEach(() => {
getLatestSubagentRunByChildSessionKeyMock.mockReset();
replaceSubagentRunAfterSteerMock.mockReset();
});
it("reactivates the newest ended row even when stale active rows still exist for the same child session", async () => {
const childSessionKey = "agent:main:subagent:followup-race";
const latestEndedRun = {
runId: "run-current-ended",
childSessionKey,
requesterSessionKey: "agent:main:main",
requesterDisplayKey: "main",
task: "current ended task",
cleanup: "keep" as const,
createdAt: 20,
startedAt: 21,
endedAt: 22,
outcome: { status: "ok" as const },
};
getLatestSubagentRunByChildSessionKeyMock.mockReturnValue(latestEndedRun);
replaceSubagentRunAfterSteerMock.mockReturnValue(true);
await expect(
reactivateCompletedSubagentSession({
sessionKey: childSessionKey,
runId: "run-next",
}),
).resolves.toBe(true);
expect(getLatestSubagentRunByChildSessionKeyMock).toHaveBeenCalledWith(childSessionKey);
expect(replaceSubagentRunAfterSteerMock).toHaveBeenCalledWith({
previousRunId: "run-current-ended",
nextRunId: "run-next",
fallback: latestEndedRun,
runTimeoutSeconds: 0,
});
});
});