
























@@ -7,28 +7,26 @@ const callGatewayMock = vi.fn();
77vi.mock("../../gateway/call.js", () => ({
88callGateway: (opts: unknown) => callGatewayMock(opts),
99}));
10-let isResolvedSessionVisibleToRequester: typeof import("./sessions-resolution.js").isResolvedSessionVisibleToRequester;
1110let looksLikeSessionId: typeof import("./sessions-resolution.js").looksLikeSessionId;
1211let looksLikeSessionKey: typeof import("./sessions-resolution.js").looksLikeSessionKey;
1312let resolveCurrentSessionClientAlias: typeof import("./sessions-resolution.js").resolveCurrentSessionClientAlias;
1413let resolveDisplaySessionKey: typeof import("./sessions-resolution.js").resolveDisplaySessionKey;
1514let resolveInternalSessionKey: typeof import("./sessions-resolution.js").resolveInternalSessionKey;
1615let resolveMainSessionAlias: typeof import("./sessions-resolution.js").resolveMainSessionAlias;
1716let resolveSessionReference: typeof import("./sessions-resolution.js").resolveSessionReference;
18-let shouldVerifyRequesterSpawnedSessionVisibility: typeof import("./sessions-resolution.js").shouldVerifyRequesterSpawnedSessionVisibility;
17+let resolveVisibleSessionReference: typeof import("./sessions-resolution.js").resolveVisibleSessionReference;
1918let shouldResolveSessionIdInput: typeof import("./sessions-resolution.js").shouldResolveSessionIdInput;
20192120beforeAll(async () => {
2221({
23- isResolvedSessionVisibleToRequester,
2422 looksLikeSessionId,
2523 looksLikeSessionKey,
2624 resolveCurrentSessionClientAlias,
2725 resolveDisplaySessionKey,
2826 resolveInternalSessionKey,
2927 resolveMainSessionAlias,
3028 resolveSessionReference,
31-shouldVerifyRequesterSpawnedSessionVisibility,
29+resolveVisibleSessionReference,
3230 shouldResolveSessionIdInput,
3331} = await import("./sessions-resolution.js"));
3432});
@@ -166,58 +164,60 @@ describe("session reference shape detection", () => {
166164});
167165168166describe("resolved session visibility checks", () => {
169-it("requires spawned-session verification only for sandboxed key-based cross-session access", () => {
170-expect(
171-shouldVerifyRequesterSpawnedSessionVisibility({
167+it("requires spawned-session verification only for sandboxed key-based cross-session access", async () => {
168+const cases = [
169+{
172170requesterSessionKey: "agent:main:main",
173171targetSessionKey: "agent:main:worker",
174172restrictToSpawned: true,
175173resolvedViaSessionId: false,
176-}),
177-).toBe(true);
178-expect(
179-shouldVerifyRequesterSpawnedSessionVisibility({
174+expectsGateway: true,
175+},
176+{
180177requesterSessionKey: "agent:main:main",
181178targetSessionKey: "agent:main:worker",
182179restrictToSpawned: false,
183180resolvedViaSessionId: false,
184-}),
185-).toBe(false);
186-expect(
187-shouldVerifyRequesterSpawnedSessionVisibility({
181+expectsGateway: false,
182+},
183+{
188184requesterSessionKey: "agent:main:main",
189185targetSessionKey: "agent:main:worker",
190186restrictToSpawned: true,
191187resolvedViaSessionId: true,
192-}),
193-).toBe(false);
194-expect(
195-shouldVerifyRequesterSpawnedSessionVisibility({
188+expectsGateway: false,
189+},
190+{
196191requesterSessionKey: "agent:main:main",
197192targetSessionKey: "agent:main:main",
198193restrictToSpawned: true,
199194resolvedViaSessionId: false,
200-}),
201-).toBe(false);
202-});
195+ expectsGateway: false,
196+ },
197+ ];
203198204-it("returns true immediately when spawned-session verification is not required", async () => {
205-await expect(
206-isResolvedSessionVisibleToRequester({
207-requesterSessionKey: "agent:main:main",
208-targetSessionKey: "agent:main:main",
209-restrictToSpawned: true,
210-resolvedViaSessionId: false,
211-}),
212-).resolves.toBe(true);
213-await expect(
214-isResolvedSessionVisibleToRequester({
215-requesterSessionKey: "agent:main:main",
216-targetSessionKey: "agent:main:other",
217-restrictToSpawned: false,
218-resolvedViaSessionId: false,
219-}),
220-).resolves.toBe(true);
199+for (const testCase of cases) {
200+callGatewayMock.mockResolvedValueOnce({ key: testCase.targetSessionKey });
201+const result = resolveVisibleSessionReference({
202+resolvedSession: {
203+ok: true,
204+key: testCase.targetSessionKey,
205+displayKey: testCase.targetSessionKey,
206+resolvedViaSessionId: testCase.resolvedViaSessionId,
207+},
208+requesterSessionKey: testCase.requesterSessionKey,
209+restrictToSpawned: testCase.restrictToSpawned,
210+visibilitySessionKey: testCase.targetSessionKey,
211+});
212+213+await expect(result).resolves.toEqual({
214+ok: true,
215+key: testCase.targetSessionKey,
216+displayKey: testCase.targetSessionKey,
217+});
218+expect(callGatewayMock).toHaveBeenCalledTimes(testCase.expectsGateway ? 1 : 0);
219+callGatewayMock.mockReset();
220+}
221221});
222222223223it("does not hide an exact spawned target behind the sessions.list visibility cap", async () => {
@@ -240,13 +240,22 @@ describe("resolved session visibility checks", () => {
240240);
241241242242await expect(
243-isResolvedSessionVisibleToRequester({
243+resolveVisibleSessionReference({
244+resolvedSession: {
245+ok: true,
246+key: "agent:main:subagent:worker-999",
247+displayKey: "agent:main:subagent:worker-999",
248+resolvedViaSessionId: false,
249+},
244250requesterSessionKey: "agent:main:main",
245-targetSessionKey: "agent:main:subagent:worker-999",
246251restrictToSpawned: true,
247-resolvedViaSessionId: false,
252+visibilitySessionKey: "agent:main:subagent:worker-999",
248253}),
249-).resolves.toBe(true);
254+).resolves.toEqual({
255+ok: true,
256+key: "agent:main:subagent:worker-999",
257+displayKey: "agent:main:subagent:worker-999",
258+});
250259});
251260});
252261此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。