






















@@ -194,13 +194,19 @@ function setupCli(params: {
194194config?: Parameters<typeof resolveGoogleMeetConfig>[0];
195195runtime?: Partial<GoogleMeetRuntime>;
196196ensureRuntime?: () => Promise<GoogleMeetRuntime>;
197+callGatewayFromCli?: Parameters<typeof registerGoogleMeetCli>[0]["callGatewayFromCli"];
197198}) {
198199const program = new Command();
199200registerGoogleMeetCli({
200201 program,
201202config: resolveGoogleMeetConfig(params.config ?? {}),
202203ensureRuntime:
203204params.ensureRuntime ?? (async () => (params.runtime ?? {}) as unknown as GoogleMeetRuntime),
205+callGatewayFromCli:
206+params.callGatewayFromCli ??
207+(vi.fn(async () => {
208+throw new Error("connect ECONNREFUSED 127.0.0.1:18789");
209+}) as NonNullable<Parameters<typeof registerGoogleMeetCli>[0]["callGatewayFromCli"]>),
204210});
205211return program;
206212}
@@ -689,6 +695,110 @@ describe("google-meet CLI", () => {
689695}
690696});
691697698+it("delegates session status to the gateway-owned runtime when available", async () => {
699+const callGatewayFromCli = vi.fn(async () => ({
700+found: true,
701+sessions: [
702+{
703+id: "meet_gateway",
704+url: "https://meet.google.com/abc-defg-hij",
705+state: "active",
706+transport: "chrome-node",
707+mode: "realtime",
708+participantIdentity: "signed-in Google Chrome profile on a paired node",
709+createdAt: "2026-04-25T00:00:00.000Z",
710+updatedAt: "2026-04-25T00:00:01.000Z",
711+realtime: { enabled: true, provider: "openai", toolPolicy: "safe-read-only" },
712+notes: [],
713+},
714+],
715+}));
716+const ensureRuntime = vi.fn(async () => {
717+throw new Error("local runtime should not be loaded");
718+});
719+const stdout = captureStdout();
720+try {
721+await setupCli({
722+ callGatewayFromCli,
723+ensureRuntime: ensureRuntime as unknown as () => Promise<GoogleMeetRuntime>,
724+}).parseAsync(["googlemeet", "status", "--json"], { from: "user" });
725+expect(callGatewayFromCli).toHaveBeenCalledWith(
726+"googlemeet.status",
727+{ json: true, timeout: "5000" },
728+{ sessionId: undefined },
729+{ progress: false },
730+);
731+expect(ensureRuntime).not.toHaveBeenCalled();
732+expect(JSON.parse(stdout.output())).toMatchObject({
733+found: true,
734+sessions: [{ id: "meet_gateway", transport: "chrome-node" }],
735+});
736+} finally {
737+stdout.restore();
738+}
739+});
740+741+it("delegates join to the gateway-owned runtime when available", async () => {
742+const callGatewayFromCli = vi.fn(async () => ({
743+session: {
744+id: "meet_gateway",
745+url: "https://meet.google.com/abc-defg-hij",
746+state: "active",
747+transport: "chrome-node",
748+mode: "realtime",
749+participantIdentity: "signed-in Google Chrome profile on a paired node",
750+createdAt: "2026-04-25T00:00:00.000Z",
751+updatedAt: "2026-04-25T00:00:01.000Z",
752+realtime: { enabled: true, provider: "openai", toolPolicy: "safe-read-only" },
753+notes: [],
754+},
755+}));
756+const ensureRuntime = vi.fn(async () => {
757+throw new Error("local runtime should not be loaded");
758+});
759+const stdout = captureStdout();
760+try {
761+await setupCli({
762+ callGatewayFromCli,
763+ensureRuntime: ensureRuntime as unknown as () => Promise<GoogleMeetRuntime>,
764+}).parseAsync(
765+[
766+"googlemeet",
767+"join",
768+"https://meet.google.com/abc-defg-hij",
769+"--transport",
770+"chrome-node",
771+"--mode",
772+"realtime",
773+"--message",
774+"Hello meeting",
775+],
776+{ from: "user" },
777+);
778+expect(callGatewayFromCli).toHaveBeenCalledWith(
779+"googlemeet.join",
780+{ json: true, timeout: expect.any(String) },
781+{
782+url: "https://meet.google.com/abc-defg-hij",
783+transport: "chrome-node",
784+mode: "realtime",
785+message: "Hello meeting",
786+dialInNumber: undefined,
787+pin: undefined,
788+dtmfSequence: undefined,
789+},
790+{ progress: false },
791+);
792+expect(ensureRuntime).not.toHaveBeenCalled();
793+expect(JSON.parse(stdout.output())).toMatchObject({
794+id: "meet_gateway",
795+transport: "chrome-node",
796+});
797+} finally {
798+stdout.restore();
799+}
800+});
801+692802it("runs a listen-first health probe", async () => {
693803const testListen = vi.fn(async () => ({
694804createdSession: true,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。