feat(conversations): pre-SDK rows read from canonical messages, implied titles, markdown adopts them by first prompt

This commit is contained in:
hh
2026-08-29 01:44:05 +02:00
parent d3a3e7b1f1
commit fd69eae05d
5 changed files with 145 additions and 6 deletions
+30 -1
View File
@@ -1,13 +1,14 @@
import asyncio
import tempfile
from pathlib import Path
from typing import cast
import frontmatter
import httpx
import pytest
from beaver_gateway.core.auth import TokenStore
from beaver_gateway.core.conversation_store import load_messages
from beaver_gateway.core.conversation_store import load_messages, rewrite_messages
from beaver_gateway.core.gateway_tools import _tools
from beaver_gateway.core.registry import McpRegistry
from beaver_gateway.frontends.anthropic import AnthropicMessagesFrontend
@@ -255,3 +256,31 @@ async def test_markdown_edited_reply_reseeds_the_session(stack: Stack) -> None:
async with stack.world.db.session() as session:
stored = await load_messages(session, conversation_id=1)
assert stored[1]["content"] == [{"type": "text", "text": "penguin"}]
async def test_markdown_adopts_a_pre_sdk_conversation(stack: Stack) -> None:
world = stack.world
old = await world.conversations.create(kind="deep", agent="d", origin="markdown")
async with world.db.session() as session:
await rewrite_messages(
session,
conversation_id=cast("int", old.id),
messages=[
{"role": "user", "content": "hello"},
{"role": "assistant", "content": "ok:hello"},
],
)
content = "### User:\n\nhello\n\n---\n\n### Assistant:\n\nok:hello\n\n---\n\n### User:\n\nnext\n"
async with stack.client(stack.markdown) as c:
r = await c.post(
"/chat",
json={"filename": "old.md", "agent": "d", "content": content},
headers=AUTH,
)
assert r.status_code == 200, r.text
assert f"conversation_id: {old.external_id}" in r.json()["new_content"]
assert len(await world.conversations.find(kind="deep")) == 1
bindings = await world.conversations.bindings(old)
assert [(b.frontend, b.external_id) for b in bindings] == [("markdown", "old.md")]
assert ScriptedClient.instances[-1].prompts == ["next"]
assert "ok:hello" in repr(vars(world.store))