fix(filesystem): stream pifs chat by default

This commit is contained in:
BukeLy 2026-05-26 14:46:43 +08:00
parent e074bf1765
commit 3625a592f2
2 changed files with 50 additions and 4 deletions

View file

@ -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:

View file

@ -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"