|
|
@@ -483,3 +483,43 @@ def test_create_agent_from_pack_auto_provisions_dirs(http_client, tmp_path):
|
|
|
g = client.get(f"/api/v1/agents/{body['agent_id']}", headers=_auth(key)).json()
|
|
|
assert g["work_dir"] == body["work_dir"]
|
|
|
assert g["run_dir"] == body["run_dir"]
|
|
|
+
|
|
|
+
|
|
|
+def test_run_with_context_work_dir_override(tmp_path, http_client, monkeypatch):
|
|
|
+ """工作区对话模式回归:run 带 context.work_dir 应覆盖工作目录、不报 500。
|
|
|
+
|
|
|
+ 曾因 run handler 用裸 `os`(本文件无模块级 import os,仅 `import os as _os`)
|
|
|
+ 在 work_dir override 分支 NameError 崩 500——且该分支只在 context.work_dir
|
|
|
+ 有值时触发,普通 run 测试覆盖不到。本例正好走这条分支。
|
|
|
+ """
|
|
|
+ client, key, packs_dir, pack = http_client
|
|
|
+ create_r = client.post(
|
|
|
+ f"/api/v1/agentpacks/{REVIEWER_ID}/create-agent",
|
|
|
+ json={"name": "工作区回归"},
|
|
|
+ headers=_auth(key),
|
|
|
+ )
|
|
|
+ agent_id = create_r.json()["agent_id"]
|
|
|
+
|
|
|
+ captured = {}
|
|
|
+
|
|
|
+ def _stub_exec(config, input_text, **kw):
|
|
|
+ captured["work_dir"] = kw.get("work_dir")
|
|
|
+ captured["source_dir"] = kw.get("source_dir")
|
|
|
+ return ("摘要:ok", {"workspace_path": "", "input_tokens": 1,
|
|
|
+ "output_tokens": 1, "steps": 1, "cost_usd": 0.0,
|
|
|
+ "cache_read_tokens": 0, "cache_creation_tokens": 0})
|
|
|
+
|
|
|
+ import agentpaas.api.v1.agents as _agents_mod
|
|
|
+ monkeypatch.setattr(_agents_mod, "_execute_agent", _stub_exec)
|
|
|
+
|
|
|
+ folder = str(tmp_path)
|
|
|
+ r = client.post(
|
|
|
+ f"/api/v1/agents/{agent_id}/run",
|
|
|
+ json={"input": "总结一下", "context": {"work_dir": folder}},
|
|
|
+ headers=_auth(key),
|
|
|
+ )
|
|
|
+ assert r.status_code != 500, f"work_dir override 崩了: {r.text[:300]}"
|
|
|
+ assert r.status_code == 200, r.text[:300]
|
|
|
+ # override 生效:_execute_agent 收到的 work_dir/source_dir 都是所选文件夹
|
|
|
+ assert captured.get("work_dir") == folder
|
|
|
+ assert captured.get("source_dir") == folder
|