feat(runtime): IM 主人私聊补历史转录(与 Web 主会话同源:抽共享 transcript 包 + OwnerEnvFor 单入口)
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

This commit is contained in:
AskaEth committed 2026-10-05 11:36:18 +08:00
1 parent df8fc660c0
commit 9b903a89bc
14 files changed
+676 -181

No files matched your search

@@ -13,6 +13,7 @@ import (
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/history"
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/loop"
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/model"
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/transcript"
)
// 本文件是 S3.5 两个契约缺口的回归测试(design/24 §6.1、§9.7):
@@ -80,7 +81,7 @@ func TestTranscriptRestoresAllDocumentParts(t *testing.T) {
if len(recent) != 1 {
t.Fatalf("recent = %+v, want 1 条", recent)
}
parts := chatDocumentsOf([]model.Message{transcriptMessage(recent[0])})
parts := chatDocumentsOf([]model.Message{transcript.Message(recent[0])})
if len(parts) != 3 {
t.Fatalf("还原出的文档部件 = %d 个, want 3(全部附件都要回到上下文)", len(parts))
}
@@ -100,7 +101,7 @@ func TestTranscriptRestoresLegacySingleObjectColumn(t *testing.T) {
t.Parallel()
const legacy = `{"name":"aaaabbbbccccdddd.txt","mime":"text/plain","size":1234,"status":"extracted"}`
parts := chatDocumentsOf([]model.Message{
transcriptMessage(history.Message{ID: "m1", Role: history.RoleUser, Content: "旧行", Document: legacy}),
transcript.Message(history.Message{ID: "m1", Role: history.RoleUser, Content: "旧行", Document: legacy}),
})
if len(parts) != 1 || parts[0].DocumentName != "aaaabbbbccccdddd.txt" {
t.Fatalf("旧单对象列还原出 = %+v, want 那一条引用", parts)