feat(chat): stop an in-flight answer — Send becomes Stop, the partial is kept and persisted, the model stream is torn down

This commit is contained in:
2026-08-29 17:27:04 -04:00
parent 6bf7f456d4
commit 1a60ecbd8b
186 changed files with 1738 additions and 7796 deletions
+10 -5
View File
@@ -53,15 +53,20 @@ def test_tool_branch_is_a_first_class_turn_branch() -> None:
def test_calling_tool_label_strings() -> None:
"""The 'calling tool' label strings the story keys off: the button
text and the status/typing-indicator labels. Phase 39 centralizes
the brand prefix: the name resolves from window.BOR_BRAND at call
time via brand() (the default name renders the same bytes)."""
"""The 'calling tool' label strings the story keys off: the
status/typing-indicator labels. Phase 48 (owner-locked 2026-08-29)
revised the phase-37 contract: the button no longer relabels to
"Calling tool…" — it stays the enabled "Stop" control for the whole
in-flight turn (no sendLabel write in the branch); the calling-tool
status lives in #send-status + the typing-indicator aria-label only.
Phase 39 centralizes the brand prefix: the name resolves from
window.BOR_BRAND at call time via brand() (the default name renders
the same bytes)."""
js = _js()
tool_idx = js.find('ev.type === "tool"')
delta_idx = js.find('ev.type === "delta"')
branch = js[tool_idx:delta_idx]
assert '"Calling tool…"' in branch, "the button carries the calling-tool text"
assert "sendLabel" not in branch, "phase 48: the button keeps its Stop label"
assert "`${brand()} is listing documents`" in branch
assert "`${brand()} is reading ${argument}`" in branch
assert "sendStatus.textContent = toolStatus" in branch, (