feat(chat): add workspace chat, attachments and agent delegation

This commit is contained in:
2026-09-06 23:17:35 +08:00
parent 68a1bb2b10
commit 12b732d936
37 changed files with 723 additions and 37 deletions
+9 -1
View File
@@ -38,6 +38,8 @@ def _message(row) -> ChatMessage:
content=row["content"],
thinking=row["thinking"],
activity=json.loads(row['activity_json']),
attachments=json.loads(row['attachments_json']),
workspace_context=json.loads(row['workspace_context_json']) if row['workspace_context_json'] else None,
citations=citations,
tool_calls=json.loads(row["tool_calls_json"]),
usage=json.loads(row["usage_json"]) if row["usage_json"] else None,
@@ -126,6 +128,8 @@ def append_message(
usage: dict[str, Any] | None = None,
activity: list[dict[str, Any]] | None = None,
parent_message_id: str | None = None,
workspace_context: dict | None = None,
attachments: list[str] | None = None,
) -> None:
now = _now().isoformat()
clean_title = (title or "").strip() or content[:30].strip() or "New conversation"
@@ -135,7 +139,7 @@ def append_message(
_append_message_in_transaction(
conn, conversation_id, message_id=message_id, role=role, content=content,
title=clean_title, thinking=thinking, citations=citations, tool_calls=tool_calls,
usage=usage, now=now, activity=activity, parent_message_id=parent_message_id,
usage=usage, now=now, activity=activity, parent_message_id=parent_message_id, workspace_context=workspace_context, attachments=attachments,
)
conn.execute("COMMIT")
except BaseException:
@@ -159,6 +163,8 @@ def _append_message_in_transaction(
now: str,
activity: list[dict[str, Any]] | None = None,
parent_message_id: str | None = None,
workspace_context: dict | None = None,
attachments: list[str] | None = None,
) -> None:
conversation = conn.execute(
"SELECT 1 FROM chat_conversations WHERE conversation_id=?", (conversation_id,)
@@ -207,6 +213,8 @@ def _append_message_in_transaction(
(now, conversation_id),
)
conn.execute('UPDATE chat_messages SET parent_message_id=?, activity_json=? WHERE message_id=?', (parent, json.dumps(activity or [], ensure_ascii=False), message_id))
conn.execute('UPDATE chat_messages SET workspace_context_json=? WHERE message_id=?', (json.dumps(workspace_context, ensure_ascii=False) if workspace_context is not None else None, message_id))
conn.execute('UPDATE chat_messages SET attachments_json=? WHERE message_id=?', (json.dumps(attachments or []),message_id))
# A late stream may be persisted, but must not steal the selected branch.
response_id = conn.execute('SELECT active_response_id FROM chat_conversations WHERE conversation_id=?', (conversation_id,)).fetchone()[0]
if active_leaf == parent and (role != 'assistant' or response_id is None or response_id == message_id):