Something went wrong. Try again.
small gleam coding and persistent agent daemon with a detachable cli and a canvas ui forked from okami.mom/albedo
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091// These tests check production message, tool, initialization, load, and error// payloads against the pinned schema. One E2E conversation does not emit every// variant.package acp
import ( "encoding/json" "os" "testing"
"github.com/google/jsonschema-go/jsonschema"
"albedo/cli/internal/app" "albedo/cli/internal/daemon")
func TestPinnedSchema(t *testing.T) { data, err := os.ReadFile("testdata/acp-schema-v1.27.0.json") if err != nil { t.Fatal(err) } var root map[string]json.RawMessage if err := json.Unmarshal(data, &root); err != nil { t.Fatal(err) }
s, backend := testSession(t) s.models = app.ACPModels{Current: "fixture/model", Available: []string{"fixture/model", "other/model"}} s.adapter.respond(json.RawMessage("1"), initialize("test"), nil) for _, event := range []daemon.StreamEvent{ {Type: daemon.EventUser, Source: "chat", EntryID: "user", Text: "question"}, {Type: daemon.EventMessage, EntryID: "message", Text: "answer"}, {Type: daemon.EventThinking, EntryID: "thought", Text: "thinking"}, {Type: daemon.EventTool, ProgressCallID: "call", ToolName: "run", ToolStatus: "completed", ToolResult: "done"}, {Type: daemon.EventTool, ProgressCallID: "failed", ToolName: "run", ToolStatus: "failed", ToolResult: "failed"}, } { if err := s.replay(event); err != nil { t.Fatal(err) } } s.buffering = true if err := s.load(request{ID: json.RawMessage("2")}); err != nil { t.Fatal(err) } s.adapter.respond(json.RawMessage("3"), nil, problem(-32603, "observation_uncertain", "lost")) <-s.adapter.writer.flush() responseSchemas := map[float64]string{1: "InitializeResponse", 2: "LoadSessionResponse", 3: "Error"} for len(backend.written) > 0 { var wire map[string]any if err := json.Unmarshal(<-backend.written, &wire); err != nil { t.Fatal(err) } name := "" var value any switch wire["method"] { case "session/update": name = "SessionUpdate" value = wire["params"].(map[string]any)["update"] default: id, ok := wire["id"].(float64) if !ok { t.Fatalf("response has no numeric test ID: %v", wire) } name = responseSchemas[id] if name == "" { t.Fatalf("no expected response schema for ID %v", id) } if name == "Error" { value = wire["error"] } else { value = wire["result"] } } t.Run(name, func(t *testing.T) { wrapper := map[string]any{"$defs": root["$defs"], "$ref": "#/$defs/" + name} encoded, _ := json.Marshal(wrapper) var schema jsonschema.Schema if err := json.Unmarshal(encoded, &schema); err != nil { t.Fatal(err) } resolved, err := schema.Resolve(nil) if err != nil { t.Fatal(err) } if err := resolved.Validate(value); err != nil { t.Fatal(err) } }) }}