Why: the squad core has to compile without agent-native or agent-intent. Ports stay in the core; adapters and the CLI own the concrete clients. Evidence: GOWORK=off go test -count=1 ./squad/ ./store/ ./textextract/ ./schema/ passed, and the intent, sqlite, native, and cmd modules passed their own go test. Impact: core go.mod keeps error-code-system only. Nested gitlinks stay. Callers register the native backend through agent-squad/adapters/native. Refs: D1 Co-authored-by: Cursor <cursoragent@cursor.com>
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package schema
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
|
|
"agent-squad/squad"
|
|
)
|
|
|
|
func TestSamplesRoundTrip(t *testing.T) {
|
|
var role squad.RoleSpec
|
|
mustRoundTrip(t, "role.sample.json", &role)
|
|
if role.Role != "writer" || role.Name != "写作者" {
|
|
t.Fatalf("%+v", role)
|
|
}
|
|
var bp squad.Blueprint
|
|
mustRoundTrip(t, "blueprint.sample.json", &bp)
|
|
if bp.Key != "demo" || len(bp.Steps) != 1 {
|
|
t.Fatalf("%+v", bp)
|
|
}
|
|
var plan squad.WorkflowPlan
|
|
mustRoundTrip(t, "workflow-plan.sample.json", &plan)
|
|
if plan.WorkflowID != "wf-1" || plan.Status != "pending" {
|
|
t.Fatalf("%+v", plan)
|
|
}
|
|
}
|
|
|
|
func mustRoundTrip(t *testing.T, name string, dest any) {
|
|
t.Helper()
|
|
raw, err := os.ReadFile(name)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := json.Unmarshal(raw, dest); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
back, err := json.Marshal(dest)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
again := reflectNew(dest)
|
|
if err := json.Unmarshal(back, again); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func reflectNew(v any) any {
|
|
switch v.(type) {
|
|
case *squad.RoleSpec:
|
|
return &squad.RoleSpec{}
|
|
case *squad.Blueprint:
|
|
return &squad.Blueprint{}
|
|
case *squad.WorkflowPlan:
|
|
return &squad.WorkflowPlan{}
|
|
default:
|
|
panic("unknown sample")
|
|
}
|
|
}
|