
























@@ -465,6 +465,52 @@ describe("runCodexAppServerAttempt", () => {
465465expect(dynamicToolNames).toContain("message");
466466});
467467468+it("passes the live run session key to Codex dynamic tools when sandbox policy uses another key", async () => {
469+const workspaceDir = path.join(tempDir, "workspace");
470+const sessionsPath = path.join(tempDir, "sessions.json");
471+const params = createParams(path.join(tempDir, "session.jsonl"), workspaceDir);
472+params.disableTools = false;
473+params.sessionKey = "agent:main:main";
474+params.config = {
475+session: { store: sessionsPath, mainKey: "main", scope: "per-sender" },
476+tools: { profile: "coding" },
477+};
478+await fs.writeFile(
479+sessionsPath,
480+JSON.stringify({
481+"agent:main:main": {
482+sessionId: "s-main",
483+updatedAt: 10,
484+status: "running",
485+},
486+"agent:main:telegram:default:direct:1234": {
487+sessionId: "s-telegram-policy",
488+updatedAt: 5,
489+status: "done",
490+},
491+}),
492+);
493+494+const dynamicTools = await __testing.buildDynamicTools({
495+ params,
496+resolvedWorkspace: workspaceDir,
497+effectiveWorkspace: workspaceDir,
498+sandboxSessionKey: "agent:main:telegram:default:direct:1234",
499+sandbox: null,
500+runAbortController: new AbortController(),
501+sessionAgentId: "main",
502+pluginConfig: {},
503+onYieldDetected: () => undefined,
504+});
505+const sessionStatus = dynamicTools.find((tool) => tool.name === "session_status");
506+507+expect(sessionStatus).toBeDefined();
508+const result = await sessionStatus?.execute("call-current", { sessionKey: "current" });
509+expect((result?.details as { sessionKey?: string } | undefined)?.sessionKey).toBe(
510+"agent:main:main",
511+);
512+});
513+468514it("returns a failed dynamic tool response when an app-server tool call exceeds the deadline", async () => {
469515vi.useFakeTimers();
470516let capturedSignal: AbortSignal | undefined;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。