























1-/** Tests configured ACP binding lifecycle and in-place reset behavior. */
1+/** Tests configured ACP binding lifecycle behavior. */
22import { beforeEach, describe, expect, it, vi } from "vitest";
33import type { OpenClawConfig } from "../config/config.js";
44import {
@@ -13,14 +13,6 @@ const managerMocks = vi.hoisted(() => ({
1313updateSessionRuntimeOptions: vi.fn(),
1414}));
151516-const sessionMetaMocks = vi.hoisted(() => ({
17-readAcpSessionEntry: vi.fn(),
18-}));
19-20-const resolveMocks = vi.hoisted(() => ({
21-resolveConfiguredAcpBindingSpecBySessionKey: vi.fn(),
22-}));
23-2416vi.mock("./control-plane/manager.js", () => ({
2517getAcpSessionManager: () => ({
2618resolveSession: managerMocks.resolveSession,
@@ -30,14 +22,6 @@ vi.mock("./control-plane/manager.js", () => ({
3022}),
3123}));
322433-vi.mock("./runtime/session-meta.js", () => ({
34-readAcpSessionEntry: sessionMetaMocks.readAcpSessionEntry,
35-}));
36-37-vi.mock("./persistent-bindings.resolve.js", () => ({
38-resolveConfiguredAcpBindingSpecBySessionKey:
39-resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey,
40-}));
4125const baseCfg = {
4226session: { mainKey: "main", scope: "per-sender" },
4327agents: {
@@ -46,7 +30,6 @@ const baseCfg = {
4630} satisfies OpenClawConfig;
47314832let ensureConfiguredAcpBindingSession: typeof import("./persistent-bindings.lifecycle.js").ensureConfiguredAcpBindingSession;
49-let resetAcpSessionInPlace: typeof import("./persistent-bindings.lifecycle.js").resetAcpSessionInPlace;
50335134beforeEach(async () => {
5235vi.resetModules();
@@ -57,10 +40,7 @@ beforeEach(async () => {
5740});
5841managerMocks.initializeSession.mockReset().mockResolvedValue(undefined);
5942managerMocks.updateSessionRuntimeOptions.mockReset().mockResolvedValue(undefined);
60-sessionMetaMocks.readAcpSessionEntry.mockReset().mockReturnValue(undefined);
61-resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey.mockReset().mockReturnValue(null);
62-({ ensureConfiguredAcpBindingSession, resetAcpSessionInPlace } =
63-await import("./persistent-bindings.lifecycle.js"));
43+({ ensureConfiguredAcpBindingSession } = await import("./persistent-bindings.lifecycle.js"));
6444});
65456646function createPersistentSpec(
@@ -192,114 +172,3 @@ describe("ensureConfiguredAcpBindingSession", () => {
192172expect(initializeArgs.agent).toBe("codex");
193173});
194174});
195-196-describe("resetAcpSessionInPlace", () => {
197-it("clears configured bindings and lets the next turn recreate them", async () => {
198-const spec = {
199-channel: "demo-binding",
200-accountId: "default",
201-conversationId: "9373ab192b2317f4",
202-agentId: "claude",
203-mode: "persistent",
204-backend: "acpx",
205-cwd: "/home/bob/clawd",
206-} as const;
207-const sessionKey = buildConfiguredAcpSessionKey(spec);
208-resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey.mockReturnValue(spec);
209-sessionMetaMocks.readAcpSessionEntry.mockReturnValue({
210-acp: {
211-agent: "claude",
212-mode: "persistent",
213-backend: "acpx",
214-runtimeOptions: { cwd: "/home/bob/clawd" },
215-},
216-});
217-218-const result = await resetAcpSessionInPlace({
219-cfg: baseCfg,
220- sessionKey,
221-reason: "reset",
222-});
223-224-expect(result).toEqual({ ok: true });
225-expect(resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey).toHaveBeenCalledTimes(1);
226-const closeArgs = expectCloseArgs();
227-expect(closeArgs.sessionKey).toBe(sessionKey);
228-expect(closeArgs.discardPersistentState).toBe(true);
229-expect(closeArgs.clearMeta).toBe(true);
230-expect(managerMocks.initializeSession).not.toHaveBeenCalled();
231-expect(managerMocks.updateSessionRuntimeOptions).not.toHaveBeenCalled();
232-});
233-234-it("falls back to close-only resets when no configured binding exists", async () => {
235-const sessionKey = "agent:claude:acp:binding:demo-binding:default:9373ab192b2317f4";
236-sessionMetaMocks.readAcpSessionEntry.mockReturnValue({
237-acp: {
238-agent: "claude",
239-mode: "persistent",
240-backend: "acpx",
241-},
242-});
243-244-const result = await resetAcpSessionInPlace({
245-cfg: baseCfg,
246- sessionKey,
247-reason: "reset",
248-});
249-250-expect(result).toEqual({ ok: true });
251-expect(resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey).toHaveBeenCalledTimes(1);
252-const closeArgs = expectCloseArgs();
253-expect(closeArgs.sessionKey).toBe(sessionKey);
254-expect(closeArgs.clearMeta).toBe(false);
255-expect(managerMocks.initializeSession).not.toHaveBeenCalled();
256-});
257-258-it("can force metadata clearing for bound ACP targets outside the configured registry", async () => {
259-const sessionKey = "agent:claude:acp:binding:demo-binding:default:9373ab192b2317f4";
260-sessionMetaMocks.readAcpSessionEntry.mockReturnValue({
261-acp: {
262-agent: "claude",
263-mode: "persistent",
264-backend: "acpx",
265-},
266-});
267-268-const result = await resetAcpSessionInPlace({
269-cfg: baseCfg,
270- sessionKey,
271-reason: "new",
272-clearMeta: true,
273-});
274-275-expect(result).toEqual({ ok: true });
276-expect(resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey).toHaveBeenCalledTimes(1);
277-const closeArgs = expectCloseArgs();
278-expect(closeArgs.sessionKey).toBe(sessionKey);
279-expect(closeArgs.clearMeta).toBe(true);
280-});
281-282-it("treats configured bindings with no ACP metadata as already reset", async () => {
283-const spec = {
284-channel: "demo-binding",
285-accountId: "default",
286-conversationId: "9373ab192b2317f4",
287-agentId: "claude",
288-mode: "persistent",
289-backend: "acpx",
290-cwd: "/home/bob/clawd",
291-} as const;
292-const sessionKey = buildConfiguredAcpSessionKey(spec);
293-resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey.mockReturnValue(spec);
294-295-const result = await resetAcpSessionInPlace({
296-cfg: baseCfg,
297- sessionKey,
298-reason: "new",
299-});
300-301-expect(result).toEqual({ ok: true });
302-expect(managerMocks.closeSession).not.toHaveBeenCalled();
303-expect(managerMocks.initializeSession).not.toHaveBeenCalled();
304-});
305-});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。