Nexum / Nexum-Expanded /runtime /tests /test_drafting_tools.py
Wl6adams's picture
Organize private Nexum release into Lite, Universal, and Expanded profiles
9a70a84
Raw
History Blame Contribute Delete
3.95 kB
from __future__ import annotations
import json
from pathlib import Path
from nexum_runtime.executor import (
TOOL_CALL_END,
TOOL_CALL_START,
execute_tool_text,
tool_names,
tool_schemas,
)
from nexum_runtime.tooling.drafting import DraftStore
def _call(body: str) -> str:
return f"{TOOL_CALL_START}{body}{TOOL_CALL_END}"
def test_drafting_tools_are_release_visible() -> None:
names = tool_names()
assert {"DraftCreate", "DraftCompare", "DraftSelect", "DraftStatus"} <= names
schema_names = {
str(row["function"]["name"])
for row in tool_schemas()
if isinstance(row.get("function"), dict)
}
assert {"DraftCreate", "DraftCompare", "DraftSelect", "DraftStatus"} <= schema_names
def test_draft_compare_select_round_trip(tmp_path: Path) -> None:
session_id = "draft-session"
create = execute_tool_text(
_call(
"DraftCreate("
"objective='repair current failure', "
"candidates=[{'name':'read-first','content':'Read the failing file'}, {'name':'run-first','content':'Run the failing command'}], "
"criteria=['uses observed evidence','avoids repeating failed action']"
")"
),
cwd=str(tmp_path),
session_id=session_id,
)
assert len(create) == 1
assert create[0].ok is True
created = json.loads(create[0].output)
draft_id = str(created["draft_id"])
assert draft_id.startswith("draft_")
assert [row["index"] for row in created["candidates"]] == [0, 1]
compare = execute_tool_text(
_call(
"DraftCompare("
f"draft_id='{draft_id}', "
"evidence_refs=['rep_0123456789abcdef0123456789abcdef'], "
"observations=['read-first preserves current evidence']"
")"
),
cwd=str(tmp_path),
session_id=session_id,
)
assert compare[0].ok is True
compared = json.loads(compare[0].output)
assert len(compared["comparisons"]) == 1
select = execute_tool_text(
_call(
"DraftSelect("
f"draft_id='{draft_id}', "
"selected_index=0, "
"decision='best supported by current evidence', "
"evidence_refs=['rep_0123456789abcdef0123456789abcdef']"
")"
),
cwd=str(tmp_path),
session_id=session_id,
)
assert select[0].ok is True
selected = json.loads(select[0].output)
assert selected["selection"]["selected_index"] == 0
status = execute_tool_text(
_call(f"DraftStatus(draft_id='{draft_id}')"),
cwd=str(tmp_path),
session_id=session_id,
)
assert status[0].ok is True
assert json.loads(status[0].output)["selection"]["decision"] == (
"best supported by current evidence"
)
def test_draft_receipts_are_session_scoped(tmp_path: Path) -> None:
record = DraftStore(tmp_path).create(
objective="choose action",
candidates=[{"name": "a", "content": "do a"}],
criteria=("evidence",),
session_id="session-a",
)
assert DraftStore(tmp_path).get(record.draft_id, session_id="session-a").draft_id
result = execute_tool_text(
_call(f"DraftStatus(draft_id='{record.draft_id}')"),
cwd=str(tmp_path),
session_id="session-b",
)
assert result[0].ok is False
assert "does not belong to this session" in result[0].error
def test_draft_sanitizes_workspace_path(tmp_path: Path) -> None:
workspace_file = tmp_path / "private.txt"
record = DraftStore(tmp_path).create(
objective=f"inspect {workspace_file}",
candidates=[{"name": "safe", "content": f"path {workspace_file}"}],
criteria=("evidence",),
session_id="safe-session",
)
payload = json.dumps(record.to_dict(), sort_keys=True)
assert str(tmp_path) not in payload
assert record.objective == "inspect [WORKSPACE]/private.txt"