package ctxasm // U3/R6:已保存页面的语义投影并入上下文——下一轮模型能看到结构、来源与修订 // 入口(present + baseRevision),可据此解释并修改已有 table/compare/tabs。 import ( "strings" "testing" agentllm "git-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/llm" core "git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git" ) func surfaceSnap() core.SurfaceSnapshot { return core.SurfaceSnapshot{ Identity: core.SurfaceIdentity{SurfaceID: "surf_x", Owner: "alice", PluginID: "generative-ui", ConversationID: "c1"}, Revision: 2, Spec: core.SurfaceSpec{Title: "选型对比", Nodes: []core.UINode{ {Type: core.UISection, ID: "n1", Title: "概览", Children: []core.UINode{ {Type: core.UIMarkdown, ID: "n1a", Source: []string{"doc:a"}, Markdown: "结论"}, }}, {Type: core.UITable, ID: "n2", Source: []string{"doc:a", "doc:b"}}, }}, SemanticText: "三工具对比页", } } func TestSurfaceProjectionInContext(t *testing.T) { msgs, rep := AssembleInput(core.AgentProfile{}, nil, nil, core.Message{Role: core.RoleUser, Parts: []core.Part{{Type: core.PartText, Text: "改一下"}}}, nil, nil, nil, nil, nil, nil, AssembleOptions{Surfaces: []core.SurfaceSnapshot{surfaceSnap()}}) joined := make([]string, len(msgs)) for i, m := range msgs { joined[i] = m.Content } all := strings.Join(joined, "\n---\n") for _, need := range []string{"surf_x", "修订 2", "选型对比", "section(\"概览\")#n1", "markdown#n1a[doc:a]", "table#n2", "baseRevision=2"} { if !strings.Contains(all, need) { t.Fatalf("projection missing %q in assembled context:\n%s", need, all) } } found := false for _, it := range rep.Items { if strings.HasPrefix(it, "surface(") { found = true } } if !found { t.Fatalf("report should count surface injection: %v", rep.Items) } _ = agentllm.RoleSystem }