






















@@ -509,6 +509,108 @@ describe("shouldSkipLocalCliCredentialEpoch", () => {
509509}
510510});
511511512+it("selects the configured Gemini CLI OAuth profile when no explicit profile is passed", async () => {
513+const { dir, sessionFile } = createSessionFile();
514+const agentDir = path.join(dir, "agents", "main", "agent");
515+const authProfileId = "google-gemini-cli:user@example.test";
516+const prepareExecution = vi.fn(async () => ({
517+env: { GEMINI_CLI_HOME: path.join(agentDir, "gemini-home") },
518+}));
519+const resolveApiKeyForProfile = vi.fn(async () => ({
520+apiKey: JSON.stringify({ token: "provider-formatted-access", projectId: "project-1" }),
521+profileId: authProfileId,
522+profileType: "oauth" as const,
523+provider: "google-gemini-cli",
524+email: "user@example.test",
525+}));
526+fs.mkdirSync(agentDir, { recursive: true });
527+saveAuthProfileStore(
528+{
529+version: 1,
530+profiles: {
531+[authProfileId]: {
532+type: "oauth",
533+provider: "google-gemini-cli",
534+access: "raw-access-token",
535+refresh: "raw-refresh-token",
536+expires: 1_800_000_000_000,
537+projectId: "project-1",
538+email: "user@example.test",
539+},
540+},
541+},
542+agentDir,
543+);
544+cliBackendsTesting.setDepsForTest({
545+resolvePluginSetupCliBackend: () => undefined,
546+resolveRuntimeCliBackends: () => [
547+{
548+id: "google-gemini-cli",
549+pluginId: "google",
550+bundleMcp: false,
551+authEpochMode: "profile-only",
552+ prepareExecution,
553+config: {
554+command: "gemini",
555+args: ["--prompt", "{prompt}"],
556+output: "json",
557+input: "arg",
558+sessionMode: "existing",
559+},
560+},
561+],
562+});
563+setCliRunnerPrepareTestDeps({
564+ resolveApiKeyForProfile,
565+});
566+567+try {
568+await prepareCliRunContext({
569+sessionId: "session-test",
570+sessionKey: "agent:main:main",
571+ sessionFile,
572+workspaceDir: dir,
573+prompt: "latest ask",
574+provider: "google-gemini-cli",
575+model: "gemini-3.1-pro-preview",
576+timeoutMs: 1_000,
577+runId: "run-test-gemini-oauth-default-profile",
578+config: {
579+auth: {
580+profiles: {
581+[authProfileId]: {
582+provider: "google-gemini-cli",
583+mode: "oauth",
584+email: "user@example.test",
585+},
586+},
587+},
588+} as OpenClawConfig,
589+});
590+591+expect(resolveApiKeyForProfile).toHaveBeenCalledWith(
592+expect.objectContaining({
593+profileId: authProfileId,
594+ agentDir,
595+}),
596+);
597+expect(prepareExecution).toHaveBeenCalledWith(
598+expect.objectContaining({
599+ authProfileId,
600+authCredential: expect.objectContaining({
601+type: "oauth",
602+provider: "google-gemini-cli",
603+access: "raw-access-token",
604+refresh: "raw-refresh-token",
605+expires: 1_800_000_000_000,
606+}),
607+}),
608+);
609+} finally {
610+fs.rmSync(dir, { recursive: true, force: true });
611+}
612+});
613+512614it("stages adopted OAuth credentials for Gemini CLI preparation", async () => {
513615const { dir, sessionFile } = createSessionFile();
514616const agentDir = path.join(dir, "agents", "main", "agent");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。