From 3625a592f2bd0f85695a53408e2a507366242b75 Mon Sep 17 00:00:00 2001 From: BukeLy Date: Tue, 26 May 2026 14:46:43 +0800 Subject: [PATCH] fix(filesystem): stream pifs chat by default --- pageindex/filesystem/cli.py | 24 ++++++++++++++++++++---- tests/test_pifs_cli.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/pageindex/filesystem/cli.py b/pageindex/filesystem/cli.py index 9791e6a..4d6d8eb 100644 --- a/pageindex/filesystem/cli.py +++ b/pageindex/filesystem/cli.py @@ -61,13 +61,14 @@ def _add_agent_arguments( parser: argparse.ArgumentParser, *, workspace_default: str | None, + default_stream_mode: str, ) -> None: parser.add_argument("--workspace", default=workspace_default) parser.add_argument("--env-file", default=None) parser.add_argument("--model", default=_agent_model_default()) parser.add_argument( "--stream-mode", - default="off", + default=default_stream_mode, choices=AGENT_STREAM_MODE_CHOICES, ) parser.add_argument("--max-turns", type=int, default=20) @@ -89,12 +90,17 @@ def _parse_agent_command( argv: list[str], *, workspace_default: str | None, + default_stream_mode: str, ) -> argparse.Namespace: parser = argparse.ArgumentParser( prog=f"pifs {command_name}", description=f"PageIndex FileSystem {command_name}", ) - _add_agent_arguments(parser, workspace_default=workspace_default) + _add_agent_arguments( + parser, + workspace_default=workspace_default, + default_stream_mode=default_stream_mode, + ) if command_name == "ask": parser.add_argument("question", nargs=argparse.REMAINDER) args = parser.parse_args(argv) @@ -122,7 +128,12 @@ def _agent_kwargs(args: argparse.Namespace) -> dict[str, object]: def _run_ask(argv: list[str], *, workspace_default: str | None) -> int: - args = _parse_agent_command("ask", argv, workspace_default=workspace_default) + args = _parse_agent_command( + "ask", + argv, + workspace_default=workspace_default, + default_stream_mode="off", + ) question_tokens = [token for token in args.question if token != "--"] question = " ".join(question_tokens).strip() if not question: @@ -134,7 +145,12 @@ def _run_ask(argv: list[str], *, workspace_default: str | None) -> int: def _run_chat(argv: list[str], *, workspace_default: str | None) -> int: - args = _parse_agent_command("chat", argv, workspace_default=workspace_default) + args = _parse_agent_command( + "chat", + argv, + workspace_default=workspace_default, + default_stream_mode="all", + ) filesystem = _filesystem_from_workspace(args.workspace) while True: try: diff --git a/tests/test_pifs_cli.py b/tests/test_pifs_cli.py index 554ad43..70f510e 100644 --- a/tests/test_pifs_cli.py +++ b/tests/test_pifs_cli.py @@ -146,3 +146,33 @@ def test_cli_chat_runs_one_question_and_exits(monkeypatch, capsys, tmp_path): assert filesystem.workspace == workspace assert question == "Summarize the workspace" assert kwargs["model"] == "test-model" + assert kwargs["stream_mode"] == "all" + + +def test_cli_chat_stream_mode_can_be_overridden(monkeypatch, tmp_path): + from pageindex.filesystem import cli + + workspace = tmp_path / "workspace" + inputs = iter(["Summarize the workspace", "exit"]) + agent_calls = [] + + def fake_run_pifs_agent(filesystem, question, **kwargs): + agent_calls.append((filesystem, question, kwargs)) + return f"answer:{question}" + + monkeypatch.setattr(cli, "PageIndexFileSystem", FakeFileSystem) + monkeypatch.setattr(cli, "run_pifs_agent", fake_run_pifs_agent) + monkeypatch.setattr("builtins.input", lambda prompt="": next(inputs)) + + status = cli.main( + [ + "chat", + "--workspace", + str(workspace), + "--stream-mode", + "tools", + ] + ) + + assert status == 0 + assert agent_calls[0][2]["stream_mode"] == "tools"