feat: add official Codex skill and harden task execution
Install and update artemis-use with task diagnostics and plugin guidance. Preserve cross-device file receipts, review canonical reports, guard stage transitions and reduce small history summaries. Improve exploration lifecycle, request recovery and browser live connections.
This commit is contained in:
1 parent
2328a4df0c
commit
e1ea099592
128 files changed
+4944
-700
No files matched your search
@@ -82,6 +82,50 @@ async def test_generation_is_idempotent_and_preserves_rerun_independence(synthes
|
||||
model.with_structured_output.return_value.ainvoke.assert_awaited_once()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_synthesis_repairs_unbound_parameters_once_with_original_evidence(synthesis):
|
||||
repository, session, run, model = synthesis
|
||||
invoke = model.with_structured_output.return_value.ainvoke
|
||||
invoke.side_effect = [
|
||||
CaseDraft(name="错误草稿", goal="访问 ${首页URL}", preconditions="已指定 ${报告位置}"),
|
||||
CaseDraft(name="修订", goal="核对设置,报告保存在本次任务 trace。", evidence=["步骤3"]),
|
||||
]
|
||||
result = await generate_case(
|
||||
repository, session["id"], "generate", run["id"], 0, ctx=SimpleNamespace(task_control=None)
|
||||
)
|
||||
assert result["version"] == 1 and "${" not in result["goal"]
|
||||
assert invoke.await_count == 2
|
||||
messages = invoke.await_args.args[0]
|
||||
assert "不生成 ${名称}" in messages[0].content
|
||||
assert "用户明确指定的位置必须保留" in messages[0].content
|
||||
assert "不要让一次复跑递归地产生下一份复跑用例" in messages[0].content
|
||||
assert "保留该业务验收" in messages[0].content
|
||||
assert "设置开启" in messages[1].content
|
||||
assert "不得猜测未知业务输入或降低验收标准" in messages[-1].content
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_failed_parameter_repair_never_saves_unexecutable_generated_case(synthesis):
|
||||
repository, session, run, model = synthesis
|
||||
repository.save_case(session["id"], CaseDraft(name="原用例", goal="核对设置"), 0, "save")
|
||||
invoke = model.with_structured_output.return_value.ainvoke
|
||||
invoke.return_value = CaseDraft(name="错误", goal="保存到 ${报告位置}")
|
||||
with pytest.raises(ValueError, match="未填写参数"):
|
||||
await generate_case(
|
||||
repository,
|
||||
session["id"],
|
||||
"generate",
|
||||
run["id"],
|
||||
1,
|
||||
ctx=SimpleNamespace(task_control=None),
|
||||
)
|
||||
assert invoke.await_count == 2
|
||||
assert repository.case(session["id"])["version"] == 1
|
||||
assert repository.case(session["id"])["name"] == "原用例"
|
||||
assert repository.database.records("exploration_generation")[0]["status"] == "failed"
|
||||
assert repository.run(run["id"])["outcome"]["test_result"]["status"] == "passed"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_model_generation_cannot_overwrite_a_concurrent_manual_revision(synthesis):
|
||||
repository, session, run, model = synthesis
|
||||
|
||||
Reference in new issue
Block a user